こんにちは。
今回は、機械学習などの最先端分野で注目されているプログラミング言語「Julia」について紹介していこうと思います。
お品書き
Juliaの概要
Juliaは、プログラミング言語の一種です。
最初のバージョンがリリースされたのは、9年前の2012年です。
ちなみにPythonは30年前、Go言語が11年前に誕生したので、比較的若い言語であることがわかり、これからが期待される言語です。
最近では、Firefoxで有名なMozillaが、Julia teamに参加して、注目の高さが伺えます。
言語の設計思想
Juliaは、一言で言えば、非常に欲張りな言語です。
Pythonのように簡単に書け、C言語のように高速に動き、Go言語のように簡単に並列化処理が行えます。
初心者でもプログラミングを扱いやすいですが、メタプログラミングのような高度で難解なテクニックも利用できます。
Pythonは、必要な機能だけに絞り、最低限の機能だけに絞って開発されたのに対して、Juliaは全部のせを行なっています。
言語の特徴
Juliaのメインターゲットは、計算科学分野のプログラマーです。
つまり、機械学習や統計処理、理系の研究活動でプログラミング言語を利用する人たちです。
彼らはデータなどを処理する方法を試行錯誤して検討し、必要であればそのプログラムを大規模に実行する必要があります。
つまり、簡単に書けて、大規模化に簡単に対応できる必要があります。
Pythonであれば、前者のコーディングの簡易性は満たしていても、後者に関して問題があります。
多くの人は、Pythonの黒魔術的なテクニックで、なんとか大量のデータを処理しています。
Juliaは、試行錯誤してコードを書き殴れるくらいコーディングの敷居を下げつつ、コンパイラとの相性も良く、大規模実行時に必要な並列化などに対応しています。
具体的な特徴を挙げると以下のようになります。
- 型を指定しなくても良いし、指定しても良い
- 引数タイプに応じたコードの自動生成
- C言語に匹敵する優れたパフォーマンス
Juliaを使うメリット
ここからはJuliaの持つメリットを羅列して行きます。
Juliaは速い
インタラクティブ・コンピューティング(1行ずつ実行するプログラミング)のための言語としては、世界最速です。
テキトーなコードを書いても、Go/Java/C#などに匹敵する実行速度が達成できます。
さらに、コードの最適化を行えば、C++の性能に並ぶ(プログラミング言語の中でほぼ最速)ことができます。
Juliaは学びやすい
Python/Matlab/Rubyなどのスクリプト言語に似た文法を採用していますので、基礎を学べば、すぐにコーディングを始めることができます。
Juliaは汎用的に利用できる
Juliaは、単なる計算科学のための言語ではありません。
ネットワーク、並行処理、テキスト解析、C言語の呼び出しなどに関する一般的も簡単に行えます。
Juliaは拡張性がある
込み入った話になるので、詳しい説明はしませんが、Juliaは非常に拡張性が高いです。
ユーザーが型を組み合わせて、オリジナル型を作ったり、オリジナルの演算子を作ることができます。
このような仕様は複雑性が増しますが、それを動的型推論を行うことで、便利さを保っています。
Juliaのコンパイラも世界最高性能で、しかもその技術の多くはオープンになっているため、拡張性も優れています。
科学計算に適した豊富なライブラリ
コンパイラの拡張性のおかげで、微分方程式、最適化、自動微分などの高度な計算が高性能に実行できます。
そのため、他の言語と比較しても、この種の計算ライブラリは非常に優れています。
Juliaを使うデメリット
ここからは、Juliaの持つ負の側面を紹介していきます。
最初の実行が遅い
基本的な機能であれば、高速に実行できますが、サードパーティのパッケージをロードし始めると,実行までに時間がかかることがあります。
一度コンパイルされれば、十分な速度で実行できますが、一番最初の実行がとにかく遅いことがあります。
ただJulia Computing社(言語開発者とコア貢献者の多くを雇用している会社)はこの問題を認識しており、改善されるめども立っています。
Juliaを使いこなすのは難しい
Juliaはとにかく機能が豊富な上に、絵文字を含めた特殊文字もコードに組み込むことができます。
演算子の種類も多く、全てを把握するまでには時間がかかると思います。
しかし、おそらくこれは言語設計時に承知していたことであり、全てを知らなくても十分なプログラミングが行えます。
まだまだ知名度が低い
私のブログで紹介するほど、Juliaの知名度は低いです。
今後、Juliaが大流行する可能性もありますが、泣かず飛ばずで消えていく可能性もあります。
なので、この時期に学び始めるのはチャンスである一方、勇気が必要な行為でもあります。
用途が限定されている
現状のJuliaでは、利用範囲が制限されることになります。
現在のランタイムでは、エンドユーザーにアプリケーションを配布することはできません。
組込みプログラミングに使うには重すぎで、JITやGCによる一時停止機能があるため、リアルタイムアプリケーションには不向きです。
もちろん、これらの点についても、スタティック・コンパイルに関する取り組みが進めば、改善する可能性があります。
十分なキラーアプリケーションがない
まだ、Juliaを使った代表的なサービスや製品がありません。
これにより知名度が上がらないという危険性をはらんでいます。
まとめ
まとめると、Juliaは画期的な言語ではありますが、まだ普及するかどうか分からないです。
Juliaの言語設計は、非常に画期的で、今までにない素晴らしい性能を持っています。
そのため、そのライブラリも非常に優秀で高性能です。
しかし、まだ若い言語であり、現状では代表的な製品やサービスがありません。
個人的には、現状はビジネスには利用できる状態ではないかと思います。
一方で、研究分野などの少数精鋭で開発を行い、試行錯誤の多い分野では積極的に採用していけるのではないでしょうか。
私もJuliaのファンとして、これからも応援していきます!
実際のインストール方法については、以下の記事に書いてあります。