マジセミドライブ

ウェビナー関連のニュースやITサービス&ツールの最新情報を随時配信します。

OSS情報

2020.01.01

【OSS情報アーカイブ】Julia

【OSS情報アーカイブ】Julia

※当記事に記載されている情報は、古くなっている場合があります。オフィシャルサイトで最新情報をご確認ください。

「Julia」とは

「Julia」基本情報

■概要

Julia(ジュリア)とは、科学計算処理向けの高水準/動的プログラミング言語です。比較的新しい言語で「JITコンパイラによる高速処理」「外部ライブラリ連携」などの特徴があります。

■基本説明

Juliaは、「実行速度」と「記述性」の両立を目指したテクニカルコンピューティングのためのハイレベルで高性能な科学技術計算向けプログラミング言語です。

オフィシャルサイトでは『他の技術計算環境のユーザーに馴染みのある構文を備えた、高レベル・高パフォーマンスな技術計算のための動的プログラミング言語』と説明されています。

「高度なコンパイラ」「分散並列実行」「高い数値精度」「広範な数学関数ライブラリ連携」を提供します。

Juliaは、汎用プログラミング言語水準から高度の計算科学や数値解析水準まで対処するよう設計された高水準/動的プログラミング言語で、Julia自身で実装された基本ライブラリをコアとして、C/Fortranライブラリを統合することで、「線形代数」「乱数生成」「信号処理」「文字列処理」などの機能を実現します。

■経緯

2012年2月、オープンソース公開されました。

■オフィシャルサイト情報

オフィシャルサイト

→Julia(The Julia Language)

ライセンス情報

Juliaのライセンスは「MIT License」です。

詳細について、こちらを参照ください。
→GitHub →JuliaLang/julia →LICENSE.md

ダウンロード

→Julia →downloads

■同様製品

同様な機能を提供する製品として、次のようなものがあります。

オープンソース製品:「R言語」「Python」など。

「Julia」の主な特徴

■高速性(JITコンパイラ)

Julia最大の特徴は「実行速度の高速性」です。

Juliaの「LLVMベースのJIT(ジャストインタイム)コンパイラ」は、コード実行前に型推論/最適化を行い、その後コードを実行します。型推論の結果、型が決定できる部分では強力な最適化を行い、曖昧性が残る部分では実行時の型に合わせて実行します。

JITコンパイラと言語設計を組み合わせることで、ネイティブコンパイル言語並の高速動作を実現でき、静的コンパイル言語に近いパフォーマンスを発揮できます。

JuliaのコンパイラはPython/Rのような言語に使用されているインタプリタとは異なるため、最初は、Juliaが備えるハイパフォーマンスを実感できないこともあります。そのような場合には、Juliaドキュメントの「パフォーマンスヒント」セクションを参照し、Juliaの仕組みを理解すると、C言語並の高速処理に近づけます。

処理速度

Juliaの処理速度については、
・「Fortran」「C言語」の半分程度の速度
・スクリプト言語最速といわれる「JavaScript」を上回る速度
・「Go」「Java」と良い勝負ができるレベル
・「Python」の数十倍高速
・「R言語」「MATLAB」の数百倍高速
などの報告があがっています。

実行速度比較ベンチマーク

Juliaの公式サイトでは、他言語との相対的パフォーマンス比較として、マイクロベンチマーク結果について紹介されています。

→Julia →Julia Micro-Benchmarks

■分散処理

Juliaは「並列処理」や「分散(クラウド)コンピューティング」も視野に入れて設計が行われています。

ユーザーに特定スタイルの並列処理を課すものではなく、分散計算のための複数のビルディングブロックを提供し、多数の並列スタイルをサポートするための十分な柔軟性を持たせています。

■パッケージ(外部ライブラリ連携)

Juliajは「歴史が浅いためライブラリ数が少ない」という問題について、外部ライブラリ連携でカバーできるようになっています。

CおよびFortran共有ライブラリの外部関数について、ラッパーコードを記述したり、既存コード再コンパイルすることなく呼び出せます。Juliaのインタラクティブなプロンプトから直接外部ライブラリ関数を呼び出して実行できます。

Julia開発者コミュニティは、Juliaのビルトインパッケージマネージャを通じて、多数の外部パッケージを迅速に提供しています。

ポイント

・「C言語」「Fortran」のライブラリをラッパーなしで直接呼び出し可能(Foreign function interfaceに対応)
・Python関数の直接呼び出し(PyCallパッケージを使用)
・C関数を直接呼び出し(ラッパーや特別なAPIは不要)
・「Python」「PyLab」「iPython Notebook」のためのインターフェース
・「浮動小数点数計算」「線型代数学」「高速フーリエ変換」「正規表現照合」などのライブラリを利用可能

Juliaパッケージリスト

多くのパッケージがJuliaパッケージリストに用意されています。

→Julia →Julia Package Listing

■サポートOS

Juliaは、次のプラットフォームで定期的に構築されテストされています。
・公式版:Linux、macOS、Windows
・コミュニティ版:FreeBSD

■サポートIDE

Juliaは「Atom」「Visual Studio Code」「Eclipse」の3つの主要なIDEにサポートされています。

「Julia」の言語仕様

「Julia」の言語仕様

■Julia言語の目標

Julia開発チームは、目指している最終的なJuliaの姿として、次のような目標を掲げています。
・ゆるやかなオープンソースライセンス
・コンパイルできる言語
・C言語の高速性
・Ruby言語の動的性
・Lisp言語のような真のマクロが使える同図象性
・Matlabのように分かりやすい数学記述と線形代数計算機能
・Python言語のような汎用性
・R言語のような統計処理機能
・Perl言語のような文字列処理機能
・シェルのように簡単に使用できる複数パーツ連携機能
・ベテラン技術者(研究者)も満足できる高機能性
・Hadoopのような大規模分散コンピューティングへの対応
・インタラクティブ性
・低い学習コスト

→丸井綜研 →なぜ僕らはJuliaを作ったか(翻訳)

■言語仕様概要

Juliaは「LLVMコンパイラフレームワーク」を用いて「C言語」「C++」「Scheme」などで実装されています。ほとんどの標準ライブラリは独自実装されています。

Juliaは、言語設計とコンパイラ最適化技術により、パフォーマンスに関する多くのトレードオフを排除でき、プロトタイプ化に十分な生産性を持ち、パフォーマンスを重視するアプリケーションを展開するのに十分な単一環境を提供することを可能にします。

Juliaは厳密な低レベルループから高レベルのプログラミングスタイルに至るまで、複雑なアルゴリズムを簡単に表現できます。プログラミングレベルでの連続的なスペクトルが、Juliaのプログラミングに対するアプローチの特徴であり意図的に設計されています。

型推論とJIT(ジャストインタイム)コンパイルにより、「オプションの型指定」「多重ディスパッチ」「優れたパフォーマンス」を実現します。

■科学技術計算向け言語

Juliaは、従来の静的型付き言語に匹敵するパフォーマンスで、科学的数値計算に適した柔軟な動的言語です。

「科学技術計算向け言語」とは、専門的な科学技術分野(線形代数、数値解析、統計解析など)での計算処理に特化させた言語です。多くの専門的な計算用ライブラリが用意され、計算処理をシンプルに記述できるように設計されています。

科学技術計算向け言語であるJuliaも、「MATLAB」や「numpy/scipy」と同じような感覚で利用でき、多次元配列などについて簡単に扱えるように設計されています。

■マルチパラダイム言語

Juliaは、「命令型」「機能型」「オブジェクト指向プログラミング」などを組み合わせたマルチパラダイム言語です。

R/MATLAB/Pythonなどの言語と同じように、一般的なプログラミングをサポートしていることに加え、高度な数値計算のための容易さと表現力を提供します。

Juliaは数学プログラミング言語の系統をベースにしていますが、マルチパラダイムを実現するために、Lisp/Perl/Python/Lua/Rubyなどの一般的な動的言語の汎用性も組み入れています。

■型宣言

一般的な動的言語において、基本的にはユーザー定義なども含め、すべてのオブジェクトに型があります。しかし、ほとんどの動的言語での型宣言の欠如は、コンパイラに値の型について明示的に指示できないことを意味します。

一方、静的言語では、コンパイラの型に注釈を付けることができますが、型はコンパイル時にのみ存在し、実行時に操作または表現することはできません。

Juliaでは、型はそれ自身が実行時オブジェクトであり、情報をコンパイラに伝えるためにも使用できます。

■関数定義

Juliaのプログラムコードは、複数のディスパッチを中心に編成されています。

Juliaにおいて、関数はさまざまな引数型の組み合わせで定義され、最も具体的なマッチング定義にディスパッチすることによって適用されます。

このモデルは、従来のオブジェクト指向のディスパッチのように「操作を所有する」という第一引数が不自然である数学的プログラミングに適しています。演算子についても、特別な表記法を持つ関数に過ぎません。

新しいユーザー定義データ型への追加を拡張するためには、関数の新しいメソッドを定義します。既存コードは、新しいデータ型にシームレスに適用されます。関数を定義し、それらを引数の型の異なる組み合わせに対してオーバーロードすることによるユーザー定義も行えます。

■その他の言語仕様ポイント

・スクリプト言語
・構文は「MATLAB」ベース
・複数ディスパッチ(引数型の多くの組み合わせで関数の動作を定義)
・さまざまな引数型による効率的で特殊なコードの自動生成
・動的型システム(文書化/最適化/ディスパッチタイプ)
・組み込みパッケージマネージャ
・Lispのようなマクロ機能
・メタプログラミング機能
・他プロセス管理機能
・並列処理(分散計算用に設計、軽量スレッディング)
・拡張可能なコンバージョンとプロモーション
・ガベージコレクションによる先行評価
・Unicodeの効率的なサポート など

 

参考元サイト

※定期的にメンテナンスを実施しておりますが、一部情報が古い場合がございます。ご了承ください。

この記事のタグ一覧

おすすめの記事

【デジタル寺田の3分用語解説】「 経済産業省:コンテンツ制作のための 生成AI 利活用ガイドブック 」とは?📘

デジタル寺田の3分用語解説

2024.11.18

【デジタル寺田の3分用語解説】「 経済産業省:コンテンツ制作のための 生成AI 利活用ガイドブック 」とは?📘

経済産業省による「 生成AI 利活用ガイドブック 」は、企業やクリエイター向けに、安心して「生成AI」を利用するための、「指針」「実例」「注意点」を明示しています。「業務効率化」や「新しいアイデア創出」の支援を目的としています。

【デジタル寺田の3分用語解説】「 VMWare 問題 」とは?🖥️

デジタル寺田の3分用語解説

2024.11.18

【デジタル寺田の3分用語解説】「 VMWare 問題 」とは?🖥️

「 VMWare 」の仮想化技術は、「ITインフラの効率化」に大きく貢献する技術ですが、Broadcomによる買収後のライセンス変更が大きな問題として注目されています。柔軟で慎重な契約見直しが今後の鍵となります。

【デジタル寺田の3分用語解説】「 2029年問題 」とは?📅

デジタル寺田の3分用語解説

2024.11.18

【デジタル寺田の3分用語解説】「 2029年問題 」とは?📅

「 2029年問題 」とは、高校でのデジタル教育改革により、新入社員と既存社員間でデジタルスキル格差が拡大する懸念を指します。企業は早急に対応が求められています。この格差は、企業競争力や業務効率にも、影響を及ぼす可能性があります。