テクニカルコンピューティングの新しいPLであるJuliaを作成した理由

要するに、私たちは貪欲だからです。



Matlabの上級ユーザーです。 私たちの何人かは、Lispハッカーです。 一部のパイニスト、他のルビスト、Perlハッカーもいます。 顔の毛が伸び始める前にMathematicaを使用していた人たちもいます。 まだ成長していない人がいます。 健全な人ができるよりも多くのグラフをRに構築しました。 Cは無人島で使用する言語です。



これらすべての言語が大好きです。 彼らは美しく、強力です。 科学的計算、機械学習、データマイニング、大規模線形代数、分散および並列計算など、私たちが行う作業については、それぞれが特定の面では理想的ですが、他の面ではひどいものです。 それぞれが妥協です。



私たちは貪欲です。もっと欲しいです。



無料のライセンスの下で、オープンソース言語が必要です。 Cの速度とRubyのダイナミズムが必要です。 Lispのような実際のマクロを備えたコードとデータの等価性を備えた言語が必要ですが、Matlabのような明白で使い慣れた数学表記法が必要です。 Pythonのような一般化されたプログラミング、Rのような統計のためのシンプル、Perlのような自然な文字列処理、Matlabのような強力な線形代数、シェルのようなプログラムの良い接着のための便利なツールが欲しい。 学ぶことは絶対に簡単ですが、同時に最も深刻なハッカーを幸せにするものです。 インタラクティブで、コンパイルしたいのです。



(Cのように高速であるべきだと述べました)



私たちが要求し続けているので、Hadoopの分散パフォーマンスを確保するために何か他のものを追加します-キロバイトのJavaとXMLの定型コードなし。 数百台のマシンでギガバイトのログを調べてバグを見つける必要がありません。 私たちは、通過できない複雑さの殻のない力を求めています。 1つのCPU上のレジスタのみを使用して、コンパクトなマシンコードにコンパイルされる単純なスカラーループを記述します。 A * Bを記述し、1000台のマシンで1,000個のプロセスを実行し、一緒に巨大なマトリックスを計算します。



不必要にデータ型に言及したくありません。 しかし、ポリモーフィック関数が必要な場合は、一般化プログラミングを使用してアルゴリズムを1回作成し、それを無限型ラティスに適用する必要があります。 複数のディスパッチを使用して、多数のメソッド記述からすべての関数引数に最適なメソッドを効果的に選択し、根本的に異なるタイプ間で共通の機能を提供したいと考えています。 このような力にもかかわらず、私たちは言語をシンプルで明快にすることを望んでいます。



あまり質問しませんよね



容認できない欲を認識しているとしても、私たちはこれをすべて望んでいます。 約2年半前、私たちは夢の言語を作り始めました。 まだ完成していませんが、リリース1.0の時間です。作成したプログラミング言語はJuliaと呼ばれます。 彼女はすでに私たちの総要求の90%を満たしており、今ではさらに発展させるために、他の人々からのさらに大きな総要求が必要です。 あなたが貪欲で無謀で要求の厳しいプログラマーなら、試してみるべきです。





2.53 GHz Intel Core 2 Duo CPUと8 GB DDR3 RAM 1066 MHzを搭載したMacBook Proのマイクロベンチマーク、C ++のミリ秒単位の絶対実行時間、C ++に相対的な残り(小さい方が良い)



すべてのベンチマークのソース



マンデルブロ集合とランダム行列統計のサンプルジュリアコード

function mandel(z) c = z maxiter = 80 for n = 1:maxiter if abs(z) > 2 return n-1 end z = z^2 + c end return maxiter end function randmatstat(t) n = 5 v = zeros(t) w = zeros(t) for i = 1:t a = randn(n,n) b = randn(n,n) c = randn(n,n) d = randn(n,n) P = [abcd] Q = [ab; cd] v[i] = trace((P.'*P)^4) w[i] = trace((Q.'*Q)^4) end std(v)/mean(v), std(w)/mean(w) end
      
      






All Articles