科学技術計算系プログラミング言語Julia Language が個人的に激アツ【3/2追記】

お久しぶりです。
本当は月一ペースで更新予定でしたが、時間がとれずできませんでした。

昨年から今年に入って様々なプログラミング言語(C#, swift, Objective-C, HDL, VBA, Juliaなど)に触れてきました。理由は愛するjavaの有償化が原因ですがっ

その中でも面白かったJuliaの紹介です。

これまでに触れてきたCやjava、Pythonのような科学技術計算言語は一長一短です。機械学習のためにPython、ネットワーク/GUIのためにjava、計算速度のためにCなどと、目的に合わせた言語選びが必要でした。複数の本を持ち、ブックマークには様々な言語が飛び交う日々・・・
そんな日々とはさよならです。

Juliaは大天使です。一目惚れです。今後、他の言語を抜いて上位に登り上げると思います。地下アイドルを応援する気持ちが少しわかる・・・
これまで出会った他の言語も好きですよ。(VBAとかはどうせ会社でOffice使うから業務効率化に必須なので独学はアリでした。報告書のデータが自動生成されるのは神です。それを作り上げるまでの通常業務が辛いけど・・・。就職で設計・開発・研究業務に携わるなら勉強して良いレベル。したかった。)

さて、一番最初に注意事項です。

Amazonで、"Julia"と検索しないほうがいいです。

アダルトコンテンツが出てきます。職場で検索したら絶望します。本当に困ります。部長に呼び出し食らいます。
ちゃんと、Julia lang とか、Julia languageとかプログラミング言語として検索しましょう。


目次

1. Juliaの特徴
2. Juliaの歴史
3. Juliaのサンプルコード
4. Juliaの苦手分野【3/2追記】

1. Juliaの特徴

Juliaの特徴はJulia1.0 Blogを読むと詳細がわかります。
抜粋すると、Juliaは次の目的を達成するために作られました。
  • オープンソース、オープンライセンス(MIT license)
  • Cの速度
  • Rubyのダイナミズム(動的)
  • Lispのマクロコンパイル(同図象性)
  • Matlabの数学的表記・強力な線形代数計算力
  • Ruby, Lisp, Matlabのような Homoiconicity(Data is code)
  • Pythonの汎用性
  • Rの統計情報計算力
  • Perlの文字列処理の自然さ
  • Shellのプログラム同士の接続能力
  • 簡単に学べる
  • インタラクティブ 方式/コンパイル方式でプログラム実行
ここに登場した言語C, Ruby, Lisp, Python, Matlab, R, Perl, Shellはどれも一長一短であり、その長所の裏には何かしらの短所があります。そのため、開発言語の選択はトレードオフでした。このようなプログラム言語界に降りたったJuliaはこれらの長所をまとめ、最強の言語として利用できるようになりました(なってきました)。

つまり、C,C++のような計算速度が速く、実用性もあるが、実装が難しい。Pythonのようなライブラリが豊富で科学技術計算の実装が容易であるが、スクリプト言語のために計算速度が遅い。これらを解決できるのが、Juliaです。

気になる欠点を挙げれば、"計算速度がCの半分程度"ということです。
しかし、Pythonistからすれば大天使でしょ。
C programmerからすれば他の利点が多い(ライブラリたくさん(他言語ライブラリも使用可能)、線形計算のコード少ないなど)ので目を瞑ればいいんじゃないかな・・・。

まだ始まったばかりなので今後に期待です。

2. Juliaの歴史

ここはちょちょいと述べていきます。新興言語なので歴史が短いです。


2009年:Julia開発開始
2014年:Julia 0.3リリース
2015年:Julia 0.4リリース
2016年:Julia 0.5リリース
2017年:Julia 0.7リリース
2018年:Julia 1.0リリース(2018.08.08)
2019年:Julia 1.1リリース


各リリースの詳細は気分がいいときに書きます。

3. Juliaのサンプルコード

さて、これまで特徴や歴史などの実用的な話は全くしませんでした。実用的な話よりも好奇心が勝ったからです。
サンプルコードはggr。
ドキュメントはJulia
日本語がよければJuliaTokyo(作業中(最新バージョンにも非対応)のため、Google先生にお願いして本家を読んだ方がいいです)

ここまで書きましたが、自分が満足に書き足りないのにブログに公開するとかありえないので後日公開します。申し訳ないです。

4. Juliaの苦手分野
【3/2追記】
とりあえず構って見た結果、再帰的処理や並列処理などは非常に得意な分野ですが、オブジェクト指向が苦手です。オブジェクトの継承ができないという絶望を味わったため、他の方法を探します。
解決策としては、PythonやCのライブラリとしてオブジェクトを作って無理やりJuliaで使うのが手っ取り早いと思いますが、Juliaを他の言語で汚すことはできないです。



コメント