Home

Julia 1.0 ドキュメント

Julia 1.0 のドキュメントへようこそ。

リリースのブログ投稿を読んで、 juliaの概要をつかみ、v0.6との違いを知りましょう。 バージョン1.0と並行してバージョン0.7がリリースされていますが、これはバージョン1.0以前のパッケージやコードの アップデート用です。 1.0と0.7の違いは非推奨の警告を消しているかどうかだけです。 0.6との相違点すべての完全なリストは バージョン0.7のリリースノート を参照して下さい。

`

まえがき

科学的な計算には昔から高パフォーマンスが必要でしたが、各領域の専門家が日常的な作業を行う場合は、 かなり遅い動的言語にほとんど移行してしまいました。 そうした用途には動的言語が好まれる理由が数多くあるので、利用が減ることはないでしょう。 幸い、現代的な言語設計とコンパイラ技術を使えば、パフォーマンスのトレードオフをほとんど解消できるので、 単一の開発環境によって、試験的開発に向いた生産性と、パフォーマンス重視のアプリケーションの利用に向いた効率性を 兼ね備えることができます。 Julia言語はその役割を果たせます。 柔軟な動的言語でありながら、静的型付言語に匹敵するパーフォーマンスを持ち、科学的・数値的計算に向いているのです。

JuliaのコンパイラはPythonやRなどに使われるインタプリタと異なるので、 初めはJuliaのパフォーマンスは直観に反するかもしれません。 何か遅いと思ったら 、いろいろ試行錯誤するより、まずパフォーマンス・ティップスを通読することを お薦めします。 一旦Juliaの動き方を理解すれば、C言語に迫る速さのコードを書くのも容易でしょう。

Juliaの主だった特徴に、省略可能な型付け、多重ディスパッチ、高パフォーマンスがあります。 この性能は、型推論とジャスト-イン-タイム (JIT) コンパイルによって 達成され、LLVMを使って実装されています。 Juliaはマルチパラダイム言語で、命令型、関数型、オブジェクト指向プログラムの特徴をかけ合わせています。 Juliaでの高水準の数値計算が、R・Matlab・Pythonといった言語と同じように、簡単でで表現力も高いですが、 汎用的なプログラミングも可能です。 これは、Juliaが数学的プログラム言語の系譜にありながら、人気の動的言語から多くを借り入れているからです。 具体的には、Lisp, Perl, Python, Lua, Ruby などからです。

典型的な動的言語とJuliaとの著しい違いは

動的言語には「型がない」という人もいますが、そんなことはありません。 すべてのオブジェクトは、プリミティブ型であれ、ユーザー定義型であれ、型があります。 しかしたいていの動的言語では、型宣言をしなければコンパイラに値の型を伝えることができません。 明示的に宣言できないものも多数あります。 一方、静的言語ではコンパイラに対して型注釈をつけることが可能(たいていは必須)です。 型はコンパイル時にのみ存在し、実行時には操作・表現することができません。 Juliaでは、型は実行時のオブジェクトであり、コンパイラに情報を伝えることができます。

ちょっとプログラムを書きたいだけなら、わざわざ使う必要のない型や多重ディスパッチですが、 実はJuliaの特徴を統合する中核です。 関数は引数の型のいろいろな組み合わせに対して定義され、最も特化・適合したものが選択・適用されます。 この方式は数学的なプログラミングと相性がいいです。 1番目の引数が演算を「所有」するという従来のオブジェクト指向的なディスパッチは不自然でしょう。 演算子は記法の特殊な単なる関数です。 足し算を新しいユーザー定義のデータ型に拡張するには、関数+に対して新しいメソッドを定義します。 すると既存のコードは自然に新しいデータ型にも適用されます。

(必要に応じて型注釈を補った)実行時の型推論や、プロジェクト発足以来のパフォーマンスの強化に焦点を当てたおかげで、 Juliaの計算効率は他の動的言語、さらにライバルの静的コンパイル言語を勝るほどです。 スピードは、大規模な数値問題において、現在に至るまで、おそらくは今後においても常に重要です。 処理すべきデータ量は、過去数十年間にわたってムーアの法則をみたすような増加速度を保っています。

Juliaは、使いやすさ・力・効率という前例のない組み合わせを単一の言語で創りだそうとしています。 さらに、他の言語に対する長所をあげてみます。