Julia を始める

Julia のインストールは簡単です。コンパイル済みのバイナリを使う方法と、ソースからコンパイルする方法があります。https://julialang.org/downloads/ の指示に従って、Julia をダウンロード・インストールしてください。

Julia を試す最も簡単な方法は対話セッション (read-eval-print loop, REPL) です。Julia の実行形式ファイルをダブルクリックするか、コマンドラインで julia を実行すると、REPL が起動します:

$ julia

               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.5.4 (2021-03-11)
 _/ |\__'_|_|_|\__'_|  |
|__/                   |


julia> 1 + 2
3

julia> ans
3

対話セッションを終了するには CTRL-D (Control キーまたは ^ キーと d キーの同時押し) を入力するか、exit() と入力してからエンターキーを押します。

対話モードで実行しているとき、julia はバナーを表示してユーザーからの入力を待ちます。ユーザーが 1 + 1 のような完全な式を入力してエンターキーを押すと、対話セッションはその式を評価して結果の値を表示します。対話セッションに入力された式の最後がセミコロンで終わる場合には、式の値は表示されません。変数 ans には最後に評価された式の値が (表示されたかどうかに関わらず) 束縛されます。ans は対話セッションでのみ利用でき、他の方法で Julia コードを実行したときには利用できません。

ソースファイル file.jl に書かれた式を評価するには include("file.jl") と入力してエンターキーを押します。

ファイルを非対話的に実行するには、julia コマンドの一つ目の引数としてファイルの名前を渡します:

$ julia script.jl arg1 arg2...

引数の名前が示すように、julia に渡されるファイル名以外のコマンドライン引数はプログラム script.jl への引数となります。プログラムへの引数はグローバル定数 ARGS に格納され、スクリプト自身の名前はグローバル定数 PROGRAM_FILE に格納されます。-e オプションでコマンドラインから Julia の式を渡すと PROGRAM_FILE は空となりますが、ARGS はファイルを渡したときと同じように設定されます。例えば

$ julia -e 'println(PROGRAM_FILE); for x in ARGS; println(x); end' foo bar

foo
bar

となります。また同じコードをファイルに保存してから実行すると次のようになります:

$ echo 'println(PROGRAM_FILE); for x in ARGS; println(x); end' > script.jl
$ julia script.jl foo bar
script.jl
foo
bar

スクリプトファイルに対するコマンドライン引数と Julia に対するコマンドライン引数は -- で区切ります:

$ julia --color=yes -O -- foo.jl arg1 arg2..

Julia でスクリプトを書く方法に関してさらに詳しくは FAQ のスクリプトの節を参照してください。

-p オプションもしくは --machine-file オプションを使うと Julia を並列モードで開始できます。-p n とするとメインプロセスとは別に n 個のワーカープロセスが起動し、--machine-file file とするとファイル file の各行が指定するノードでワーカープロセスが起動します。file で定義されるマシンにはパスワードを使わない ssh ログインでアクセスできて、ホストと同じ場所に julia がインストールされている必要があります。file の各行にあるマシンの定義は [count*][[email protected]]host[:port] [bind_addr[:port]] という形をしており、user のデフォルトは現在のユーザー名、port のデフォルトは標準 ssh ポート、count のデフォルトは 1 です。count はノードで起動するワーカーの個数を表し、省略可能な bind_addr[:port] の部分は他のワーカーがこのワーカーに接続するときに利用すべき IP アドレスとポートを表します。

Julia が実行されるときに必ず実行したいコードがある場合は ~/.julia/config/startup.jl に書き込んでください:

$ echo 'println("Greetings! 你好! 안녕하세요?")' > ~/.julia/config/startup.jl
$ julia
Greetings! 你好! 안녕하세요?
...

~/.julia ディレクトリは Julia を初めて起動したときに作成されますが、~/.julia/config ディレクトリと ~/.julia/config/startup.jl ファイルはあなたが作成する必要がある点に注意してください。

Julia コードを実行する方法は様々なオプションで指定できます。これらのオプションは perlruby で利用可能なオプションに似ています:

julia [switches] -- [programfile] [args...]
オプション 説明
-v, --version バージョン情報を表示する
-h, --help コマンドライン引数の一覧 (この表) を表示する。
--project[={<dir>|@.}] <dir> をホームプロジェクト (環境) に設定する。デフォルトの @. を指定すると親ディレクトリが順に探索され、最初に Project.toml または JuliaProject.toml が見つかったディレクトリがホームとなる。
-J, --sysimage <file> 指定されたシステムイメージファイルで開始する。
-H, --home <dir> julia 実行形式の場所を設定する。
--startup-file={yes|no} ~/.julia/config/startup.jl を読み込むかどうかを指定する。
--handle-signals={yes|no} Julia のデフォルトのシグナルハンドラを有効化または無効化する。
--sysimage-native-code={yes|no} システムイメージのネイティブコードが利用可能な場合に利用するかどうかを指定する。
--compiled-modules={yes|no} モジュールの漸進的な事前コンパイルを有効化または無効化する。
-e, --eval <expr> <expr> を評価する。
-E, --print <expr> <expr> を評価して結果を表示する。
-L, --load <file> 全てのプロセッサで <file> をすぐに読み込む。
-t, --threads {N|auto} N 個のスレッドを有効化する。auto を指定すると、ローカルの CPU スレッドの個数が N として使われる。ただし auto を指定したときの動作は将来変更される可能性がある。
-p, --procs {N|auto} N に整数を指定すると、N 個のローカルなワーカープロセスを起動する。auto を指定すると、ローカルの CPU スレッド (論理コア) と同じ数だけのワーカーを起動する。
--machine-file <file> <file> が指定するホストでプロセスを起動する。
-i 対話モード: REPL が起動し、isinteractive()true となる。
-q, --quiet 静かに起動する: REPL の警告やバナーを無効化する。
--banner={yes|no|auto} 開始時のバナーを有効化または無効化する。
--color={yes|no|auto} テキストの色付けを有効化または無効化する。
--history-file={yes|no} 履歴の読み込みまたは保存を行う。
--depwarn={yes|no|error} 構文やメソッドの非推奨化や廃止に関する警告を有効化または無効化する (error を指定すると警告がエラーになる)。
--warn-overwrite={yes|no} メソッドの上書きの警告を有効化または無効化する。
-C, --cpu-target <target> CPU 機能の利用を <target> に制限する。help を指定すると利用可能なオプションが表示される。
-O, --optimize={0,1,2,3} 最適化レベルを設定する (デフォルトのレベルは 2 で、レベルを指定せずにこのオプションを付けると 3 になる)。
-g, -g <level> デバッグ情報の生成レベルを有効化および設定する (デフォルトでは 1 で、レベルを設定せずにこのオプションを付けると 2 になる)。
--inline={yes|no} インライン化を許すかどうかを指定する。このオプションは @inline 宣言を上書きする。
--check-bounds={yes|no} 境界検査を常に行うか、常に行わないかを指定する (このオプションを付けると @inbounds 宣言が無視される)。
--math-mode={ieee,fast} 安全でない浮動小数点数最適化を許可または不許可とする。このオプションは @fastmath 宣言を上書きする。
--code-coverage={none|user|all} 実行したソースファイルの行番号を記録する。
--code-coverage --code-coverage=user と同じ意味を持つ。
--track-allocation={none|user|all} ソースの各行がアロケートしたバイト数を記録する。
--track-allocation --track-allocation=user を同じ意味を持つ。
Julia 1.1

デフォルトの [email protected] オプションを指定したとき、Julia 1.0 では Project.toml の探索が Git レポジトリのルートディレクトリで終わっていました。Julia 1.1 以降では Git レポジトリのルートより上のディレクトリも探索されます。

学習リソース

初心者の学習に役立つリソースのリストが Julia のメインウェブサイトの learning ページにまとめてあります (英語)。

日本語 Julia 書籍 (Amazon アソシエイト)
1 から始める Julia プログラミング
Julia プログラミングクックブック―言語仕様からデータ分析、機械学習、数値計算まで
スタンフォード ベクトル・行列からはじめる最適化数学