2012-04-23

PythonとJulia

Julia, Python and Cython - julia-dev | Google Groups

Cythonの開発者が、JuliaのMLに登場して議論している。

Cythonとは、PythonコードからCやC++への変換をするソフトウェアである。このため、独自の拡張により、PythonからCやC++のコードを簡単に呼び出せるようにもなっている。

なぜCythonを使うのかというと、速度である。Pythonのリファレンス実装、CPythonはバイトコンパイルによるインタプリターであり、JITはない。そのため、科学技術計算のためには、非常に遅い。Cythonは、科学技術計算をする研究者に人気がある。

The Julia Languageは、高速に動作することを目的とした動的プログラミング言語である。LLVMによるJITコンパイルにより、高速に動作する。また、数値演算ライブラリとして、BLASの代わりに、Intelのプロプライエタリなライブラリを用いることもできる。これにより、GCCと比べても、最低で数倍程度しか遅くならない、非常に高速な動的プログラミング言語を実現している。

さて、Cythonの開発者は、まず、Juliaが非常に高速で、科学技術計算の用途に耐えることを褒めたたえている。その上で、Juliaの現在の問題点を上げている。ユーザーとライブラリの欠如である。

Pythonで科学技術計算をすると言っても、すべてをPythonで行うわけではない。特にクリティカルな処理は、CやC++を使って書き、Pythonから呼び出す形を取る。また、Pythonにはすでに、豊富なライブラリがある。また、Python上級者のユーザーも多数いる。現時点でのJuliaには欠けている点である。

これを解決するために、JuliaとPythonを相互に呼び出せるようにしてはどうかと提案している。

なかなか興味深い話だ。動的な言語は、プロトタイプ的な実装が非常に簡単だという利点がある。科学技術計算というのは門外漢で全く分からないが、結局、すべてがクリティカルな処理ではなく、言語による分業があってもいいのだろう。

思うに、ハードウェアだけではなく、プログラミング言語も、どんどんHeterogeneousになっていくに違いない。すべての要求を満たす言語の設計は不可能だ。現在でも、並列演算に特化したGPUなどのハードウェア用には専用言語があるものだ。

2 comments:

Anonymous said...

吐き出すコンパイル済みバイナリがLLVMに吸収されて、JIT化されていくんでしょうかね。
LLVMの元締めがアップルというのが気に入らないですが。

江添亮 said...

金がどこから出ているかということは問題ではないのです。
オープンソースの理念に合致するライセンスで公開されてる以上、たとえ将来Appleの気が変わったとしても、すでに公開されているソフトウェアを止めることはできません。

自由なライセンスであることが望ましいのは当然ですが、LLVMの許諾的なライセンスは、十分にオープンだとは思います。