Nim ってドキュメントが致命的に無いことは以前書きました。これだと困る人が多かろうという事で、ちょいちょいこれから書いていきたいと思います。今回は一番手始めのセットアップから Hello world まで書いていきます。
まずは、ここからコードを落とします。解凍後に /usr/local へ移動させます。例として v0.17.2.tar.gz を落としたとします。
tar xzvf v0.17.2.tar.gz sudo mv Nim-0.17.2 /usr/local cd /usr/local sudo ln -s /usr/local/Nim-0.17.2 Nim cd Nim sh ci/build.sh
シンボリックリンクを貼ったのは、違うバージョンをバンバン切り替えるためです。Nim は途上の言語なのでバージョン戻したりしたいことがあるので、こうしておくことをオススメします。後で切り替え用のスクリプトも書きます。その為コンパイルしただけでインストールまでは行っていません。
(なんか昔までは ci/build.sh じゃなくて直下に build.sh がいて、ドキュメントでもそうなっているんですが、さっき試したら何故かおりません。一応こいつでコンパイルはできました。)
コンパイルが終わったら、bin/nim にコマンドができます。後はこいつをシンボリックリンクで
ln -s /usr/local/Nim/bin/nim /usr/bin/nim
とすれば終わりです。
trunk も一緒に入れておくと色々試せて良いです。
cd /usr/local git clone https://github.com/nim-lang/Nim.git Nim-trunk cd Nim-trunk git clone --depth 1 https://github.com/nim-lang/csources.git cd csources sh build.sh cd ../ bin/nim c koch ./koch boot -d:release
さて切り替え用スクリプトですが以下のスクリプトを /usr/local/bin/nimchanger.pl として置きます。
#!/usr/bin/perl use strict; use Data::Dumper; use File::Basename; my $base = '/usr/local/Nim'; sub list { my $dir = dirname $base; my $app = basename $base; my @ret = (); for (sort grep /^$app-/, `ls $dir`) { chomp; s/^$app-?//; $_ and push @ret, $_; } return \@ret; } sub main { my $list = list; $ARGV[0] eq '' and do { my $b = basename readlink $base; $b =~ s/^Nim-//; my $i = 1; for (@$list) { my $cur = $_ eq $b ? ' *' : ''; print $i++ . ": $_$cur\n"; } exit; }; my $target = $ARGV[0]; $target = $list->[$target - 1]; my $target_path = "$base-$target"; if (-d $target_path) { unlink $base; system "ln -s $target_path $base"; } else { die "no such dir $target_path"; } } exit main;
sudo chmod +x /usr/local/bin/nimchanger.pl
で実行ビットを与えてあげて、後は sudo をいちいち書かなくて良いように適当にエイリアスを指定しておくと良いと思います。
alias nimchanger='sudo /usr/local/bin/nimchanger.pl'
コマンドを実行すると
1: 0.17.2 * 2: trunk
こんな感じで出てくると思います。* がついているのが今のバージョンです。
nimchanger 2
とやると trunk と切り替わります。なんとなく便利なので使ってみてください。
さて、セットアップが終わったらお次は、実際コードを書いて実行してみます。
hello.nim に以下を書いて
echo "Hello world"
nim c -r hello
とするとコンパイルして実行が行われます。コンパイルだけであれば -r を外せば良いです。これはテストビルドで、本ビルドしたい場合は
nim c -d:release hello
になります。とりあえず動かすところまで行きました。次回からは実際にコードの書き方を詳しく解説していきたいと思います。