Which Programming Language Should You Use?

AruobaとFernandez-Villaverdeが、いろいろなプログラミング言語で、新古典派成長モデルをValue Function Iterationとグリッドサーチを使って解いて、そのスピードを比べるというペーパー(A Comparison of Programming Languages in Economics, NBER WP 20263)を発表したので、その要旨を纏めてみる。要旨といっても、以下のTable 1にすべての結果が要約されているのでこのテーブルを見てほしい。
主な結果(個人的な感想も含む)は以下のとおり。
  1. 一番早いのはC++とFortran。ほかのもっと使いやすい言語がこれらの古い言語と肩を並べられるくらい速くなったと考えている人がいるがそれは迷信である。
  2. また、C++とFortranでもコンパイラとOSの組み合わせでスピードはかなり違ってくるようだ。GCC系はもちろんLinux(およびMac)と相性がよく、IntelコンパイラはWindowsと相性がよい。個人的には、FortranはC++より1バージョン分遅いと聞いたことがある。
  3. RやMathematicaはお話にならないくらい遅い。但し、Rは統計関連のパッケージが群を抜いて充実しているので、それらが、たとえば、Juliaに移植されるまでは、有用なプログラミング言語であり続けるだろう。
  4. MatlabやPythonもコンパイラ(Matlabの場合Mex、Pythonの場合Numba)を使わなければお話にならないくらい遅い。OctaveなどのMatlab cloneはさらにお話にならない。
  5. JuliaはJust-in-timeコンパイラのおかげで、コンパイラを使ったMatlabやPython(ちょっとめんどくさい)と同じくらい速い(でもC++やFortranよりは遅い)。JuliaはMexやNumbaのように特別なことをしなくてもコンパイルされるし、Open Sourceでもあるし、CやFortranのサブルーチンを特別なことをせずに呼べるので、将来的には有望。
  6. 個人的に、MatlabはMatrix operationを使えば速いという人がいて、そんなことないと思っていたが、実際に、それは大体のケースで間違い。かなり小規模な(マクロのモデルで使うようなモデルの規模よりぜんぜん小さい)問題でしか成り立たない。
個人的にはJuliaは速いとは聞いていたが、ここまで速いとは知らなかった。今度試してみよう。 それ以外は大体、皆が知っていることと整合的である。どの言語もやったことがない人で、C++やFortranは敷居が高いと思う人はJuliaをやってみるのがお勧め。もちろん、まだ駆け出しの言語なので今後ちゃんと発展していくかというリスクはあるが。

0 comments:

Post a Comment