注:次の投稿には物議を醸す意見が含まれている可能性があります。そのため、これらは私の意見に過ぎず、誰かを怒らせる意図はないことに注意してください。
私は1999年頃から何らかの形でプログラミングを行っています。最初はRを使用し、その後2004年頃に主にPythonに切り替えました。
MCMCなどを含む多くの科学アプリケーション、たとえばシミュレーションでは、RとPythonの両方が遅すぎるため、高速化する必要があります。これを行う通常の方法は、CまたはC ++で拡張することです。RとPythonの両方で、RのC APIをC ++で使用し、Boost PythonライブラリをPythonで使用して、これを行いました。
ただし、さまざまな理由から、この組み合わせは理想的なソリューションではありません。プログラミング、特にアルゴリズムで重要なことは何ですか?もちろん関連する表現力とスピード。言語の表現力が高ければ高いほど、より速く書くことができます。
1)表現力に関する限り、RもPythonも科学的なアルゴリズムを書くのに理想的ではありません。それらは、基礎となるアルゴリズムに密接にマッピングしません。ただし、どちらもC ++よりもかなり優れています。
2)Pythonで書くのが好きです。Pythonは快適な言語ですが、上記のようにアルゴリズム作業には理想的ではありません。ただし、速度の問題のためにPython / C ++の組み合わせで作業しなければならない場合、このミックスを使用するのはかなり快適ではなくなります。通常起こることは、私が最初にPythonで書くことです。そして、うまく機能しているものを見つけたら、それが遅すぎることをしばしば発見します(主観的な価値が遅すぎるため)。それから、C ++での書き換えに不合理な時間を費やすか、遅さに我慢するかの決定に直面します。後知恵では、特に得られるスピードアップが予測不可能であるので、私はしばしばスローネスに我慢した方が良いかもしれないと感じます。また、2つの間のBoost Pythonインターフェースはメンテナンスの大きな頭痛の種です。そして、このように2つの非常に異なる言語のコードを接着すると、気が散ります。Boost Pythonへの批判は意図されておらず、想像できるほど強力なインターフェースであり、ほとんどの場合に機能します。
今、時間とリソースが無制限の理想的な世界では、これらの問題はどちらも大きな問題ではありません。しかし、私が取り組んだ科学プロジェクトでは、次のような経験をしました。
プロジェクトに協力者がいるかどうかにかかわらず、私は常にコンピューティングの大部分を行うようになります。合計5つの重要なプロジェクトでは、1つのプロジェクトに1人の参加者しかいませんでした。その一人は体重を増やす以上のことをしました。彼は私と同じかそれ以上をしました。ただし、複数のコラボレーターを含むプロジェクトを含む他のすべてのケースでは、すべての計算作業を(実質的に)行いました。私は最高の協力者に恵まれていないと言うことができますが(怠mixtureと無能の混合物のようです)、この状況が将来変わる可能性があるかどうかは私には明らかではありません。
計算科学の仕事は多大な労力を要するものであり、共同研究者の行動を変えることができなければ、仕事のやり方を変えることができます。最も重要な改善は、より迅速に物事を成し遂げることです。ここで私は主な考慮事項に至ります。つまり、言語を正統性の低いものに切り替えることが役立つかもしれないということです。過去の研究に基づいて、可能性の順に最も可能性の高い候補は、Common LispとOcamlです。私はこれについて何年も考えてきましたが、最近はもっと真剣に考えています。
私の知る限り、科学計算にCLまたはOcamlを使用している人はほとんどいません。このサイトを検索すると、CL(私は私のもの)とOcaml(私のもの)の2つの参照が見つかりました。私は長年にわたり、フリンジに取り組んでいる冒険心のある人々といくつかの励ましの連絡を取り合ってきました。2008年に、Tamas K. PappによるPeter Seibelの「Practical Common Lisp」(私が所有)の書評に出会いました。これは、私がネット上で出会ったLispの科学的コンピューティングに関する数少ない言及の1つであったため、私の注意を引きました。私はタマスに手紙を書きました。タマスはすぐに助けと励ましで答えました。彼を引用する
私のプログラミングの生産性は、おそらくLispで10倍に増加しましたが、それは起こるのに約1年かかり、まだ学んでいます(しかし、2か月後にはかなりうまくいきました)。したがって、タイムクリティカルな作業をしている場合は、切り替えを延期してください。
これらのことを知っているのは私だけではなく、Lispで科学計算を行う人もいます。
(2006年12月)私が簡単に連絡を取った別の人は、放射線腫瘍学の文脈でCommon Lispを使用したIra Kaletでした。
おそらく、Lispで科学計算を行う他の人もいますが、私は誰も知りません。
人々がCLで言及する最も一般的な問題は、ライブラリーの欠如です。これは、汎用コンピューティングでは重大な問題ですが、特にアルゴリズムのゼロからの実装では、科学コンピューティングではそれほど問題にならない場合があります。具体的には、ほとんどの場合、確率分布関数、多次元配列ライブラリ、およびC ++およびPython標準ライブラリにあるマップ、セット、リストなどのコンテナの基本セットを含む基本的な数学ライブラリで取得できます。
私はCLについてよりもOcamlについてはあまり知りませんが、代わりにそれを捨てました。おそらく非常に高速で、フランスの研究者による無料の実装が1つあり、科学計算用のML言語ファミリーの中で最も実行可能なもののようです。
結論として、他の人がこれを経験したことがあるのか、もしあれば、どんな考えを持っているのか疑問に思っています。
編集:私は主に、私が上で議論した問題の文脈で、直接体験に興味があります。たとえば、以前にPythonとC ++(またはRとC ++)を使用していて、より曖昧な言語に移行した場合、私はあなたの経験について聞いてみたいと思います。