Julia 1.5.4 ドキュメント

Julia 1.5.4 のドキュメントにようこそ。

一つ前のリリースからの変更点についてはリリースノートを参照してください。

情報

このドキュメントの英語版は PDF フォーマットでも公開されています: julia-1.5.4.pdf

Julia の紹介

伝統的に科学計算は最上のパフォーマンスを要求してきましたが、一方でドメインエキスパートの大部分が日常的な計算で使う言語は低速な動的言語に移行してきました。一部の応用分野で動的言語が好まれるのはもっともなことであり、動的言語が将来使われなくなることはないだろうと私たちは考えています。幸いにも、現代的な言語設計とコンパイラ技術を使えば動的言語が迫られる柔軟性と性能のトレードオフをおおむね解消でき、プロトタイプに使える生産性と性能が重視されるアプリケーションで実際に使える実行速度を兼ね備えた単一環境の作成が可能になります。プログラミング言語 Julia が担うのがこの役割です: Julia は柔軟な動的言語であり、科学計算および数値計算に適していて、古くからある静的型付けの言語に迫る性能を持ちます。

Julia のコンパイラは Python や R といった言語のインタープリタとは異なるので、最初は Julia のパフォーマンスが直感的に思えないかもしれません。もし何らかの処理が遅いと感じたら、何か試す前にまずパフォーマンス Tips に目を通すことを強く推奨します。Julia の動作を一度理解すれば、C と同程度に高速なコードを書くのは簡単です。

Julia の特徴は省略可能な型付け・多重ディスパッチ・高い性能です。これらの特徴は型推論と just-in-time (JIT) コンパイル で実現されており、実装には LLVM が使われています。Julia は手続き型プログラミング・関数型プログラミング・オブジェクト指向プログラミングの機能を兼ね備えるマルチパラダイムな言語です。R, MATLAB, Python といった言語と同じように高水準数値計算が必要とする簡便さと表現力を Julia は提供しますが、加えて汎用プログラミングもサポートします。このため、Julia は数学的プログラミング言語だけではなく、Lisp, Perl, Python, Lua, Ruby といった有名な動的言語からも様々なアイデアを借りてきています。

典型的な動的言語と比べたときの最も重要な Julia の特徴を示します:

「動的言語には型がない」などと言われることがありますが、これは全くの間違いです。Julia の全てのオブジェクトは型 (プリミティブ型もしくはユーザー定義型) を持ちます。多くの動的言語では型宣言がないためにコンパイラへ型を明示できず、プログラムからは型について何もできないことがよくあります。これに対して静的言語では型の注釈を入れることが可能 ──あるいは必要── なものの、型が存在するのはコンパイル時のみであり、実行時に型を操作したり読み取ったりすることはできません。Julia の型はそれ自身実行時オブジェクトで、かつコンパイラへ情報を伝えるのにも利用できます。

Julia を簡単に使うだけであれば型や多重ディスパッチを明示的に使う必要はありませんが、この二つは Julia に欠かせない中心的な機能です。関数は引数の型の組み合わせごとに別々に定義され、型の組み合わせに最も特定的に適合する定義をディスパッチ (起動) することで呼び出されます。伝統的なオブジェクト指向のディスパッチでは第一引数が操作を "持って" いますが、数学的プログラミングではこの考え方は上手く当てはまらず、多重ディスパッチの方が適しています。Julia の演算子は特殊な記法を持つただの関数です ──例えば加算を拡張してユーザー定義型に対応させるには + 関数に対する新しいメソッドを定義します。このとき既存のコードは新しいデータ型に対する定義があってもシームレスに動作します。

実行時の型推論 (および型推論を補強する省略可能な型注釈) があること、そしてプロジェクト発足当初からパフォーマンスに注力してきたことで、Julia の計算性能は他の動的言語を上回り、静的にコンパイルされる言語に匹敵します。これまで大規模計算の問題では常に速度が重要でしたが、これからも重要であり続け、その重要性は今後揺るがないでしょう: 過去数十年に渡って、処理されるデータの量はムーアの法則と軽々と肩を並べるペースで増加しているのです。

Julia は使いやすさ・パワー・性能を今までにない形で組み合わせて単一の言語を作成するという前例のない試みです。上で説明した事項に加えて、Julia は他のシステムに対して次の利点を持ちます:

広告