2020年10月9日金曜日

プログラミング言語Juliaの現在位置

このエントリーをはてなブックマークに追加
Pocket

開発者の説明やその構造からすると数値解析に特化している気がするプログラミング言語のJuliaだが、Twitter界のJulia伝道師の話だと万能な高速汎用プログラミング言語と言うことになっている。全てのアプリケーションがJuliaで書き直される未来が来るような勢いで語っているのだが、現時点でどれぐらい普及しているのか確認してみると、Julia伝道師の希望にはまだまだ遠い。

1. 数値解析で極めて高い実用性がある

Juliaは数値解析をしている分には強力なプログラミング言語で*1、スクリプト言語の記述の容易さを備えつつ、実行時コンパイル(JIT型インタープリッタ)などによって高速性を持たせたと言う謳い文句は嘘ではない。ベンチマークを取ればかなりの速度をだすし、ガベージコレクションは当然のこと、パッケージ管理の方法が普及しているスクリプト言語に近くて便利だ。数値解析をしている人々が、アルゴリズムやパラメーターを精査した実用的なパッケージを充実させている。物理学だけではなく、経済学研究にもJuliaが最適と言いだす人々も出てきたし*2、Juliaによる経済学の数値解析のレクチャー・サイトもある*3。しかし、全体で見ても、数値解析に絞ってみても、統計的にはまだ勢いが無い。

2. 今のところ人気プログラミング言語ではない

Juliaは開発者の話*4でも、文法などを見ても、数値解析用途のMatlabやFortranと直接の競合になる。Matlabは桁違いに遅いし、Fortranはプロットやファイル入出力が窮屈だし、パッケージ管理システムもない。しかし、Google Trendを見てみると、Fortranと競い合っている状態で、Matlabとは差がある*5

数値解析用途であればJuliaはかなり魅力的に思えるのだが、最初のリリースから8年を経過した2020年10月5日現在、まだシェア一番になりきれていない。数値解析にも使われていると言う理由で、よく比較に持ち出されるPythonとは、ここ5年間で大きく差を広げられている。Pythonはデータサイエンス・ブームには上手く乗って、その地位を固めた。2020年10月のTIOBE Indexでも32位と、Fortranの37位よりは上ではあるが、Matlabの15位、Pythonの3位には及ばない。2020年10月のPYPL Indexで見ても同様で、世界24位(全米20位)になっている。日本でもアメリカでも、この傾向は変わらない。同様に、数値解析にも使いやすい統計解析ソフトウェアのR*6とも比較されるが、Google Trendで一定の差をつけられているし、RはTIOBE Indexで9位、PYPL Indexで7位だ。Haskellよりはずっとマシなのだが。

3. 先行者を追い落とす困難にどう打ち勝つか

プログラミング言語の普及は、実行速度、開発効率、学習難度、汎用性といった技術的な優劣以外の影響を大きく受ける。欠陥商品のように罵られているプログラミング言語でも、普及の契機となった利用目的が存在する限りは、何だかんだと使い続けられる傾向がある。若手から前期高齢者まで広く嫌われているCOBOLだが、今でも使われている言語だ。古い言語が使われ続ける理由は、膨大なソフトウェア資産があるのでロックインされている場合もあるし、蓄積された利用者ノウハウ(惰性)が重要な場合もある。他に利用者が多いと言うことが、利用する敷居を下げる効果もある。PerlからPythonのようにほぼ同じ用途の言語のシェアが入れ替わることもあるが、それは利用者の世代交代を反映していたりと、ペースは遅い。Pythonが完全にPerlを抜き去ったのは、人工知能エンジンのフロントエンドと言う新たな用途の第一選択肢になった後だ。情報通信産業の新たな応用先に、プログラミング言語の普及は強く影響される。長らく人気とはいえなかったプログラミング言語が、新たなハードウェアと共にブームになる事すらある。Objective-CはC++に対してずっと劣勢であったが、iPhoneがブームになったときに一時人気が逆転した。

地道にユーザーを増やしていくのか*7、何かを契機に一気に普及するのか、それともネットワーク外部性に負けて消えていくのか。Juliaにはどういう未来が待っているのであろうか。

*1実行ファイルを生成できないからセルフホスティングは無理。つまり、JuliaでJuliaの実行環境を書くことはできない。

オブジェクト指向言語でないからオブジェクトごとにやたら細かいプロパティを大量に設定しないといけない種類のプログラミング(i.e. ウィンドウ・アプリケーションの開発)には向かない。クラス的なものが作れるからオブジェクト指向も出来ると言う主張も見かけるのだが、型の継承が制限されている一方で、型が一致していないと問題が起きがちな言語なので、コードの使いまわし技術としてのオブジェクト指向プログラミングはほぼ不可能。

(少なくともバージョン1.6までは)実行時にモジュールをいちいちコンパイルしなおすからシステムコマンドの作成にも向かない。Plotパッケージを使おうと思ってプリコンパイルにイライラしているユーザーはいる。

言語仕様によるものではないが、現状、ウェブアプリケーション等の開発は困難だ。サーバーサイドで使えるプログラミング言語の多様性を考えると、今後、(少なくとも利用者シェアが大きくなるまで)Juliaが積極的に使われる理由は無い。

*2Which programming language is best for economic research? | VOX, CEPR Policy Portal

*3Quantitative Economics with Julia

*4Bezanson, Edelman, Karpinski, and Shah (2015) "Julia: A fresh approach to numerical computing"

*5Google トレンドで「Julia, R言語, Python, MATLAB - 日本、2010/01/01~2020/10/08」の人気度の動向を見る

*6速度が問題になるのだが、ファイル入出力やグラフのプロットなどI/O部分をRで記述し、速度的に問題が出る数値解析のループ部分をC/C++/Fortranで拡張を記述することで、開発効率と実行速度を両立することができる。Julia開発者は二つの言語を接着するグルー言語は速度的な問題を抱えるし、特殊なパッケージにロックインして開発の継続が困難になる可能性を指摘しているが、I/O部分と計算部分がはっきり分かれるので二つの言語を行き来するオーバーヘッドは容易に管理できるし、拡張を記述する場合は特殊なパッケージは用いないのでロックインする事も無い。

*7大学のカリキュラムで使われだしているので、徐々に競合からシェアを奪っていく可能性は高い。

0 コメント:

コメントを投稿