強まっていこう

あっちゃこっちゃへ強まっていくためのブログです。

Nim を使って楽しくプログラミング その 1 - はじめに

Nim ってドキュメントが致命的に無いことは以前書きました。これだと困る人が多かろうという事で、ちょいちょいこれから書いていきたいと思います。今回は一番手始めのセットアップから Hello world まで書いていきます。

github.com

まずは、ここからコードを落とします。解凍後に /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

になります。とりあえず動かすところまで行きました。次回からは実際にコードの書き方を詳しく解説していきたいと思います。