Julia (プログラミング言語)

Julia（ジュリア）は、汎用プログラミング言語水準から高度の計算科学や数値解析水準まで対処するよう設計された高水準言語かつ仕様記述言語、及び動的プログラミング言語である。並行計算、並列計算、分散コンピューティング、及びAdapter パターン不要でC言語やFORTRANへのForeign function interfaceに対応している。ガベージコレクションを行い先行評価を用いるほか、浮動小数点数計算、線型代数学、高速フーリエ変換、正規表現照合のライブラリを利用できる。
LLVMコンパイラフレームワークを用いてC言語、C++、Schemeで組まれており、標準ライブラリの殆どは独自に実装された。注目すべき特徴は速度であり、完全に最適化したC言語（PythonやR言語よりも桁違いに速い場合が多い）と比べて計算パフォーマンスの低下は半分程度であると知られている。
一方で実行時には、JITコンパイラによって処理されるため、表面的にはPythonの様にインタプリタとして動作する。

**特徴**
 多重ディスパッチ- 動的型付け- C言語などの静的型付け言語に迫る速い実行速度- パッケージマネージャが組み込まれている- Lispのようなマクロやその他のメタプログラミング機能- C言語とFortranのコードの呼び出し

**相互運用性**
Juliaには、@ccall マクロを使用してC言語やFortranのライブラリを呼び出すための組み込みサポートがある。外部ライブラリを使用し、Python、R言語、C++、Java、SQLなどと相互運用し、関数を呼び出したり呼び出されたりすることもできる。
C言語の printf を呼び出す例。
@ccall printf("Hello, World!\n"::Cstring)::Cvoid
Python とは同じ動的型付けのプログラミング言語で似ている点も多いため、相互運用がしやすい。ただし、NumPyはC言語と同じくrow-majorで配列の添え字は0から始まるが、JuliaはFortranと同じくcolumn-majorで配列の添え字は1から始まる。下記は Julia から PythonCall を使用した例。
using PythonCall
np = pyimport("numpy")
print(np.array(1, 2, 3, dtype=np.float32))
同様に JuliaCall により、Python から Julia を呼び出すことも可能で、Julia は計算が高速なので、計算量が多い部分だけを Julia で計算させるということも可能である。下記は Python から JuliaCall を使用した例。Julia の多次元配列と NumPy を組み合わせて使用している。
from juliacall import Main as jl
import numpy as np
np.array(jl.rand(range(10), 3, 5))

**コード例**

**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）を呼び出しているだけだが、行列積を含めて多くの機能がC言語やFortranと同程度の速度で動作する。

**沿革**
2009年に開発が始まり、2012年2月にオープンソースとして公表された。
*2018年8月8日にバージョン1.0がリリースされ、2020年8月1日にバージョン1.5がリリースされた。
*2018年12月、開発者の3人がSIAM（アメリカ工業及び応用数学会）によるジェームズ・H・ウィルキンソン賞を受賞したことが発表された。

**関連項目**
 Fortran- Mathematica- NumPy- SciPy- R言語- MATLAB- GNU Octave

**脚注**

**参考文献**

**洋書**
 publisher=Springer- pages=65-98- Ben Lauwens and Allen B. Downey: Think Julia: How to Think Like a Computer Scientist, Oreilly & Associates Inc, ISBN 978-1492045038 (2019年5月). - Eric Darve and Mary Wootters: Numerical Linear Algebra with Julia, SIAM, ISBN 978-1-611976-54-0 (2021).- Tobin A Driscoll and Richard J. Braun: Fundamentals of Numerical Computation: Julia Edition, SIAM, ISBN 978-1-611977-00-4 (2022年8月）.- Noel Kalicharan: Julia - Bit by Bit: Programming for Beginners, Springer, ISBN 978-3-030-73935-5 (2021).- C. T. Kelley: Solving Nonlinear Equations with Iterative Methods: Solvers and Examples in Julia，SIAM，ISBN 978-1-611977-26-4（2022年）.- Clemens Heitzinger: Algorithms with Julia, Springer, ISBN 978-3-031-16559-7 (2022).

**和書**
 publisher=NTS- Cite book|和書|last1=Kamiński|first1=Bogumił|last2=Szufel|first2=Przemysław|translator=中田秀基|date=2019-10|title=Juliaプログラミングクックブック 言語仕様からデータ分析、機械学習、数値計算まで|publisher=オライリー・ジャパン|isbn=978-4-87311-889-5- 進藤裕之、佐藤建太:「1から始める Juliaプログラミング」、コロナ社、ISBN 978-4-33902905-5（2020年3月26日）。- 石井一夫:「基礎から学ぶJulia 基本文法からデータサイエンスまで」、SCC(エスシーシー）、ISBN 978-4-88647-022-5（2021年1月25日）。- Tanmay Bakshi、菅原 宏治 (訳):「天才プログラマータンメイが教える Julia超入門」、東京化学同人、ISBN 978-4-8079-2021-1（2021年2月14日）。 - 須山敦志：「Juliaで作って学ぶ ベイズ統計学」、講談社、ISBN 978-4-06-525980-1 (2021年11月24日)。- 永井佑紀：「1週間で学べる! Julia数値計算プログラミング」、講談社 (KS情報科学専門書)、ISBN 978-4-06-528282-3（2022年6月23日）。- 後藤俊介：「実践Julia入門」、技術評論社、ISBN 978-4-297-13350-4（2023年3月15日）。- 佐藤建太：「Juliaプログラミング大全」、講談社、ISBN 978-4-06-531819-5　(2023年6月1日)。- 小高知宏：「Juliaによる数値計算とシミュレーション」、オーム社、ISBN 978-4-27423049-3 （2023年6月20日）。- 永井佑紀：「Juliaではじめる数値計算入門」、技術評論社、ISBN 978-4-297-14128-8 (2024年5月13日).

**外部リンク**
  The Julia Manual-  Tobin A. Driscoll and Richard J. Braun: "Fundamentals of Numerical Computation" ※ Julia version, 原著の第6章まで, 2020年夏版。- issn=1342-6907-  Ben Lauwens and Allen Downey: "Think Julia: How to Think Like a Computer Scientist", (2018).-  永井佑紀:「物理で使う数値計算入門：Julia言語による簡単数値計算」-  Julia Computing Receives DARPA Award to Accelerate Electronics Simulation by 1,000x(HPCWire誌記事、2021年3月5日)-  Julia in physicsでのチュートリアル講演-  Julia でデータサイエンス 統計検定や一般化線形モデルなどの計算とプロットの完結コード-  「数学と物理におけるJulilaの活用」、マス・フォア・インダストリ研究 No.27、九州大学（2024年）。-  「Julia in physics2024」、東京大学
カテゴリ:Windowsのソフトウェア
カテゴリ:macOSのソフトウェア
カテゴリ:Linuxのソフトウェア
カテゴリ:Linux向け数値解析ソフトウェア
カテゴリ:数式処理システム
カテゴリ:ドメイン固有言語