トップQs
タイムライン
チャット
視点
Julia (プログラミング言語)
汎用プログラミング言語水準から高度の計算科学や数値解析水準まで対処するよう設計された高水準言語かつ仕様記述言語、及び動的プログラミング言語 ウィキペディアから
Remove ads
Julia(ジュリア)は、汎用プログラミング言語水準から高度の計算科学や数値解析水準まで対処するよう設計された高水準言語かつ仕様記述言語、及び動的プログラミング言語である[2][3][4]。並行計算、並列計算、分散コンピューティング、及びAdapter パターン不要でC言語やFORTRANへのForeign function interfaceに対応している。ガベージコレクション[5]を行い先行評価を用いるほか、浮動小数点数計算、線型代数学、高速フーリエ変換、正規表現照合のライブラリを利用できる。
LLVMコンパイラフレームワークを用いてC言語、C++、Schemeで組まれており、標準ライブラリの殆どは独自に実装された[6]。注目すべき特徴はその実行速度であり、完全に最適化したC言語(PythonやR言語よりも桁違いに速い場合が多い)と比べても計算パフォーマンスの低下は半分程度であることが知られている[6]。 一方で、JITコンパイラによって実行時に翻訳がされるので、見かけ上はPythonのようにインタプリタとして動作する。
Remove ads
特徴
- 多重ディスパッチ
- 動的型付け
- C言語などの静的型付け言語に迫る速い実行速度
- パッケージマネージャが組み込まれている
- Lispのようなマクロやその他のメタプログラミング機能
- C言語とFortranのコードの呼び出し
相互運用性
Juliaには、@ccall
マクロを使用してC言語やFortranのライブラリを呼び出すための組み込みサポートがある。外部ライブラリを使用し、Python[7]、R言語[8]、C++[9]、Java[10]、SQL[11][12][13][14]などと相互運用し、関数を呼び出したり呼び出されたりすることもできる。
C言語の printf を呼び出す例。
@ccall printf("Hello, World!\n"::Cstring)::Cvoid
Python とは同じ動的型付けのプログラミング言語であり類似点が多いため、相互運用がしやすい。ただし、NumPyはC言語と同じくrow-majorで配列の添え字は0から始まるが、JuliaはFortranと同じくcolumn-majorで配列の添え字は1から始まる[15]。下記は Julia の側から PythonCall を使用した例である。[16]
using PythonCall
np = pyimport("numpy")
print(np.array([1, 2, 3], dtype=np.float32))
同様に JuliaCall により、Python の側から Julia を呼び出すことも可能であり、Julia は計算が高速にできるので、計算量が多い部分だけを Julia により計算するということも可能である。下記は Python の側から JuliaCall を使用した例で、Julia の多次元配列と NumPy を組み合わせて使用している。[17]
from juliacall import Main as jl
import numpy as np
np.array(jl.rand(range(10), 3, 5))
Remove ads
コード例
Hello world
JuliaではHello worldを次のように書く。
println("Hello, World!")
行列積
次のコードはJuliaで書いた行列AとBの行列積である。
A = randn(10, 10)
B = randn(10, 10)
C = A * B
このように、MATLABや、PythonのライブラリであるNumPyなどと同様に、数学的な操作を簡潔に書けるうえに、行列積に関しては単にBLASのライブラリ(デフォルトはOpenBLAS[18])を呼び出しているだけだが、行列積を含めて多くの機能がC言語やFortranと同程度の速度で動作する[19]。
沿革
関連項目
脚注
参考文献
外部リンク
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads