科学的計算のための型破りなプログラミング言語の使用[終了]


22

注:次の投稿には物議を醸す意見が含まれている可能性があります。そのため、これらは私の意見に過ぎず、誰かを怒らせる意図はないことに注意してください。

私は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で科学計算を行う人もいます。

彼にはブログGitHubページもあります

(2006年12月)私が簡単に連絡を取った別の人は、放射線腫瘍学の文脈でCommon Lispを使用したIra Kaletでした

おそらく、Lispで科学計算を行う他の人もいますが、私は誰も知りません。

人々がCLで言及する最も一般的な問題は、ライブラリーの欠如です。これは、汎用コンピューティングでは重大な問題ですが、特にアルゴリズムのゼロからの実装では、科学コンピューティングではそれほど問題にならない場合があります。具体的には、ほとんどの場合、確率分布関数、多次元配列ライブラリ、およびC ++およびPython標準ライブラリにあるマップ、セット、リストなどのコンテナの基本セットを含む基本的な数学ライブラリで取得できます。

私はCLについてよりもOcamlについてはあまり知りませんが、代わりにそれを捨てました。おそらく非常に高速で、フランスの研究者による無料の実装が1つあり、科学計算用のML言語ファミリーの中で最も実行可能なもののようです。

結論として、他の人がこれを経験したことがあるのか​​、もしあれば、どんな考えを持っているのか疑問に思っています。

編集:私は主に、私が上で議論した問題の文脈で、直接体験に興味があります。たとえば、以前にPythonとC ++(またはRとC ++)を使用していて、より曖昧な言語に移行した場合、私はあなたの経験について聞いてみたいと思います。


2
スタック交換は、ライフストーリーを投稿するためではなく、質問するためのものです!あなたの質問は、「Common LispまたはOCamlを使用した科学計算プロジェクトはありますか?」
-khinsen

4
同意して、これはブログ投稿のように少し読みますが、私は前提が好きです。これを2〜3段落に減らしてみてください。
アロンアーマディア

1
また同意した。解説と個人的な経験は、それが主要な質問をサポートするとき、良いです。詳細が多すぎると、主要なポイントが埋もれてしまいます。質問を凝縮できれば、読みやすくなり、より的を絞った、より質の高い回答が得られると思います。
ジェフオックスベリー

1
@FaheemMitha:「理想の世界」では、途中ですべて手作業で最適化されたアセンブリになると言いますが...
meawoppl

3
@FaheemMitha:質問を改善するためにできると思う最善のことは、あなたが尋ねている質問を明確にすることです。あなたはあなたの経験についての話をしているようです(これでいいです)、そして最後に、あなたはあなたの話の最後に声明として質問を埋めます。(「結論として、私は疑問に思っています...」)あなたができる最善のことは、その部分に質問をすることです。私はそれを理解するために数回戻る必要がありました。
ジェフオックスベリー

回答:


18

ジュリアはまさに挙げられた理由で開発されました。C / Fortranでコードの一部を書き換え続ける必要のない、十分なパフォーマンスを提供する優れた高レベルの科学計算言語はありませんでした。juliaのデザインにはかなりのLispの影響があります。そのため、好みに合わせて見つけることができますが、機能部分を気にしないのであれば、共同作業者はそれをmatlabまたはRのように扱うことができます。欠点は、言語が新しく、日々の使用に必要なすべてのライブラリをまだ持っていないことです。

マーク、ジュリアをベンチマークに追加して、私たちの運命を確かめてみたい。メーリングリストにアクセスして、juliaで見たいものをお知らせください。


それは美しく見えます!私は自分の仕事のためにこれを間違いなくチェックします。現在、理論上の凝縮物のすべての作業にpythonを使用しています。高速C ++コードを使用することで得られる時間が、そもそもC ++での書き込みに費やされる時間によって打ち消されるからです:)
Lagerbaer

9

プログラミング言語の速度、サイズ、および信頼性は、「質問」で表明されたさまざまな懸念事項をまとめるのに非常に優れています。33の言語で同じベンチマークの実装の速度とコードベースサイズを比較します!

Pythonが好きになったのは、主に、プログラムするのに余分な時間がかかるよりも、計算に時間がかかることがはるかに一般的だからです。私はCPUサイクルを浪費するよりも、もっと面白いことに専念できる時間を犠牲にするよりも喜んでいます。

また、ジュリアに+1。それがもう少し安定して広くサポートされるようになったとき、つまり、標準モジュールが私がやりたい仕事のためにラップされたとき、私はそれに切り替えるかもしれないと思います。


4

OCamlの科学的応用については、例えば

科学のLispについては、例えば

私はもっ​​と多くの参照があると確信しています。ただし、OCamlまたはLispで計算作業が行われた主要な研究プロジェクトを引用することはできません。どちらかを選択するということは、比較的孤立して作業することを意味します。

また、現在開発中の科学計算用の新しい言語であり、明確なLispの影響を受けているJuliaに興味があるかもしれません。


1
私はおそらく、直接体験にほとんど関心があることをもっと明確にすべきだったでしょう。これを反映するように質問を編集します。
ファヒムミタ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.