M.Hiroi's Home Page

Julia Language Programming

お気楽 Julia プログラミング超入門

[ Home | Light ]

WHAT'S NEW


CONTENTS


Julia の基礎知識

●番外編


簡単なプログラム

●Puzzle DE Julia!!


はじめに

Julia (ジュリア) は科学技術計算向きのオープンソース (MIT License) なプログラミング言語です。参考 URL 4 によると、『一般的なプログラミングから高水準の科学計算処理まで対処するよう設計された高水準言語及び動的プログラミング言語である。』 とのことです。

Julia は LLVM をベースにした JIT (Just-In-Time) コンパイラを搭載することで、ネイティブなコードにコンパイルするプログラミング言語にせまる実行速度を達成しています。JIT を使った動的なプログラミング言語では Node.js (JavaScript) も速いのですが、Julia はそれを上回る速さのようです。これはあとで試してみましょう。

Julia の関数は CLOS (Common Lisp Object System) の総称関数と同様に、引数のデータ型 (複数ある場合はそれぞれのデータ型) により呼び出される処理が決まります。これを「多重ディスパッチ」といいます。CLOS 以外で多重ディスパッチを採用している (動的な) 言語を M.Hiroi は知らなかったので、Julia にはとても興味を持っています。このほかにも、行列の演算処理、関数型言語の機能 (無名関数や高階関数など)、Lisp 風のマクロなど、興味深い機能がたくさんあります。

Julia は 2018 年 8 月にバージョン 1.0 がリリースされました。今後は Julia 1.0 に対応したプログラムが増えていくと思われます。本ページでは簡単なプログラムを作りながら、Julia 1.0 の基本を勉強していきたいと思っております。なお、本ページは M.Hiroi の「覚え書」にすぎません。なにぶんにも初心者が作るページなので、勘違いや間違いがあると思います。何かお気づきの点がありましたら、メールでご指摘いただけると助かります。たいしたことはできませんが、よろしければお付き合いくださいませ。

●ダウンロード

Julia は次のサイトからダウンロードできます。Windows 用のバイナリが用意されているので、簡単にインストールすることができます。

なお、M.Hiroi がダウンロードしたインストーラではパスの設定が行われませんでした。パスが設定されなかった場合は手動で行ってください。Windows 10 の場合、コントロールパネル > システムとセキュリティ > システム の左端にある「システムの詳細設定」をクリックしてください。「システムのプロパティ」が表示されるので、その下側にある「環境変数」をクリックすると環境変数を設定することができます。

コントロールパネルは スタートボタン > Windows システムツール > コントロールパネル で起動することができますが、シェルや「ファイル名を指定して実行」から control と打ち込んでも OK です。実はもうひとつ簡単な方法があって、[Windows] キーと [Pause] キーを同時に押すと、コントロールパネルのシステム画面を表示することができます。

Linux の場合、バイナリファイル (Generic Linux Binaries for x86) をダウンロードして tar で展開します。あとは、PATH が設定されているディレクトリから実行ファイル julia にシンボリックリンクを張ります。たとえば julia のフルパスが ~/julia-1.0.0/bin/julia で /usr/local/bin にパスが通っているとすると、次のコマンドでリンクを張ることができます。

sudo ln -s ~/julia-1.0.0/bin/julia /usr/local/bin/julia

ls -al /usr/local/bin を実行すると、julia にリンクが張られていることが確認できます。

●Julia の対話モード

Julia の基本を学ぶのであれば、Lisp / Scheme の REPL (read eval print loop) のような対話モードがあると便利です。Python にも対話モードがありますし、Ruby には irb (interactive ruby) というツールがあります。Julia の場合、プログラムを実行するコマンド julia をコマンドプロンプトで起動すると、次のようなプロンプトが表示されて入力待ちになります。

C>julia
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.0.0 (2018-08-08)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

julia>

これで REPL のようにプログラムを入力して実行することができます。終了する場合は CTRL-D を入力する、または関数 exit() を実行してください。

●簡単なベンチマーク

さて、肝心な Julia の実行速度ですが、いつものように「たらいまわし関数」を使って調べてみました。

リスト:たらいまわし関数 (tarai.jl)

function tak(x, y, z)
  if x <= y
    z
  else
    tak(tak(x - 1, y, z), tak(y - 1, z, x), tak(z - 1, x, y))
  end
end

# 時間計測
@time(tak(22, 11, 0))

それでは実行結果を示します。tak(22, 11, 0) を計算しました。使用した Julia のバージョンは 1.0.0 です。プログラムは xubunts 18.04 on VirtualBox で実行しました。

表 : tak(22, 11, 0) の結果
処理系
Python (ver 3.6.6)65.4
Ruby (ver 2.5.1p57)24.8
Gauche (ver 0.9.5)21.5
ocamlc (ver 4.05.0)9.16
SBCL (ver 1.4.5)6.27
SML/NJ (ver 110.79)3.14
JavaScript (Node.js v8.10.0)2.86
Go (ver 1.10.1)2.20
Julia (ver 1.0.0)2.05
SBCL (最適化)1.69
GCC -O2 (ver 7.3.0)1.24
Clang -O2 (ver 6.0.0)1.20
Rust -O (ver 1.25.0)1.20
ocamlopt (ver 4.05.0)1.00

Julia は Python や Ruby とは次元の異なる速さで、ネイティブコードにコンパイルするプログラミング言語に匹敵する結果になりました。同様に JIT を使用している Node.js も高速なのですが、Julia はそれを上回る速度を叩き出しています。この結果には M.Hiroi も大変驚きました。興味のある方はいろいろ試してみてください。


参考文献, URL

  1. The Julia Language, (本家)
  2. Julia 1.0 Documentation, (本家)
  3. Learn X in Y minutes, (英語)
  4. Julia (プログラミング言語) - Wikipedia

『お気楽 Julia プログラミング超入門』の著作権は筆者「広井誠 (Makoto Hiroi)」が保持します。無断使用や無断転載は禁止いたします。『お気楽 Julia プログラミング超入門』で作成したプログラムはフリーソフトウェアとします。ご自由にお使いください。プログラムの改造や配布もご自由にどうぞ。その際は、出典を明記してくださるようお願いいたします。

ただし、これらのプログラムは無保証であり、使用したことにより生じた損害について、作者「広井誠 (Makoto Hiroi)」は一切の責任を負いません。また、これらのプログラムを販売することで利益を得るといった商行為は禁止いたします。

Copyright (C) 2016-2018 Makoto Hiroi
All rights reserved.

[ Home | Light ]