<< (newer post)

Julia って何?


MIT とか NYU あたりの人たちが開発中の,2012年に公開が始まった,科学技術計算の専用言語ですな. web は http://julialang.org/ .

さすがに言語開発にあたって欲張りだと自認するだけあって,後発の強みも活かして,

  • 科学技術計算に便利な文法になっている
  • 科学技術計算に便利なコマンドやライブラリが最初からある
  • 計算が速い 1
  • 言語設計が近代的なので,プログラミングが随分楽

という利点がある言語になっている. まだ開発版ですらバージョン 0.5 という未完成な状態ながら,これからが楽しみな言語だ.

今のところ?2 JIT compile, つまり「実行時にコンパイルして動かすスタイル」をとっているので,使い勝手的にはインタプリタと言える3. プログラム開発中や,いろいろ試しながら動かすにも,これは便利.

よって,「たいへん気楽に使える高速な科学技術計算言語」として使える. また,ライセンスはMIT ライセンスなので安心して無料で使えるし,ソースも全部公開されているので中身をいじりたければ自由にいじれる.


知っておくと混乱しないで済む?基本知識

  • Julia は(上に書いたように) JIT コンパイラがその場でプログラムソースをコンパイルして動かす仕組み. つまり,プログラムを「本当に」実行するマシン上には Julia 環境(Julia カーネル)がインストールされている必要がある.

  • プログラムやルーチンをそのカーネルセッションで「初めて動かすとき」は JIT コンパイルにかかる時間が余計にかかる. 「ちょっと 1回だけ触ってみた」という使い方だとこのせいで「Julia って遅くね?」と誤解するかもしれないので注意しよう4.

  • Julia プログラムを動かす「カーネル」と,人間用インターフェイスは分離できるし,違うコンピュータに置くこともできる. よって「使い勝手の良いインターフェイス」を自分で選ぶことが推奨されるし,インターフェイスは手元の PC で動かしつつ,実際にプログラムが動く環境は計算用の大きなサーバに置くということもできる.

  • インターフェイスとしては,以下の様なものが有名.好きなモノを選べ.

    • jupyter
      web browser で操作するインターフェイス. わかりやすいし, おすすめ
      これを使うと,Mathematica や Matlab のような見た目と使い勝手になる.
      後で紹介する JuliaBox もこれを使っている.
      ただし,グラフや画像の出力も web browser で見ようとすると(内部で画像ファイルの転送があるので)どうしてもワンクッション遅れるのが欠点といえば欠点.

    • juno
      Julia 専用の統合開発環境.文法に沿ったいろいろなアシスト機能があって大変便利. ただ,うまく動かないときもあって,そうした場合のトラブル解決はやや面倒かも 5

    • 文字端末ソフトで直接対話する REPL 6
      Windows だと Powershell で,Unix 系だと shell から Julia を立ち上げて,いわゆる「黒い画面」で操作するもので, マニュアルなんかでは read-eval-print loop の略で REPL と呼ばれている.
      悪くない.悪くないが,カーネルが落ちると 7 それまでのやりとりも画面から消えてしまうので,長時間扱うならやっぱインターフェイスは別にしておくといいかも.
      ちなみに,REPL でもグラフや画像の表示は思ったよりきちんとできる 8 .画像がぽこっと別ウィンドウや web browser 呼び出しで出てくる様子はちょっとかわいいので一度試してみるといいかも.

    • ESS (Emacs Speaks Statistics)
      Emacs で動く統合開発環境のようだ. 面白そうだし,自分が使うエディタは Emacs なので,そのうち試してみて,良ければ移行しようかと考えている.
      ちなみに,Emacs の julia-mode 用の elisp もあって,syntax hilighting についての解説 もあったりする.

    • Julia-vim
      vim の julia-mode …らしい. Emacs について書いた以上,vi についても書かないとね,ということで書いてみたが,自分は vi 使いではないのでよくわからん. でもまあ,いろいろ見てみるとこれはこれでなかなか良さそうだ.
  • グラフを描くライブラリや文法はデフォルトでは決まってない.
    インターフェイスに自由度があるので,グラフをどういう手段で描くのがベストか,決めようがないんですな. どういうものがあるかはいずれ解説するとして,とりあえず「そういうもんだ」と思っておきましょう.


  1. 実行時間は(JIT コンパイルにかかる時間は除いて)ほんとに高速で,C や Fortran とほぼ同等.julia の web の top にも表で載っているので見てみよう.ただし,計算速度は様々な要因で変化するので,あくまで参考に という視点で見ておいて,あとは自分で計測してみるといい. [return]
  2. Julia が出たばかりの頃は,「いずれ通常の意味でのコンパイラも開発する」という話だったんだが,いつの間にかその話はあまり触れられないようになってる様子だ. [return]
  3. その代わり,コンパイルしたバイナリだけを他のマシンに持ってきて動かす,ということはできないな. [return]
  4. 使っていくと,この特性がなんとなくわかってくるので問題にならなくなるが… 「ただいまコンパイル中だぜ」「今から計算するぜ」とか出力してくれると初心者に紛らわしくなくて分かり易いんだけどなあ. [return]
  5. 自分もはまった.解決が面倒そうなトラブルなので,juno はそれ以上使わずにそのまま放置してある.いろんなものがバージョンアップしたらまた試してみよう. [return]
  6. 説明上の混乱を最小限にするためか,書籍や解説書の多くはこの「直接対話」にもとづいて書かれている… けれども,実際にそうする必要はなくて,とりあえず jupyter おすすめということで. [return]
  7. Julia には定義した変数や関数を本当の意味で初期化するためのコマンドがないため(近いことは可能だが),試行錯誤しているときは状況をクリアにするために頻繁にカーネルを再起動したくなる.そういうときはちょいと REPL は使いにくいかもね. [return]
  8. なぜかこちらの方のインターフェイスの方が使いやすいライブラリが存在する(PyPlot とかね).不思議な状況だ… [return]
     << (newer post)