特徴
Nimのコンパイラは最初Pascalで書かれていたそうです。Nimの面白いところは、コンパイラで、まず最適化されたCコードを生成できる。加えて、C++やObejctive-Cやjavascriptのコードを生成できることです。
使った実感としては、軽い!速い!
構文は少し特殊な印象を受けました。Pythonと同様インデントによってブロックのグルーピングを行います。ただし、Nimはスペース2つ。
関数も演算子もオーバーロード可能。
cstringなどを使って、C言語のコードを直接使うことができる。
ジェネリックOK!
ガベージコレクタ付き。
nimbleでパッケージ管理。NimScriptが使える。
使いこなせるようになれれば楽しそうな言語です。
Hello, world!とコンパイラ
恒例のHello,world!は以下のようになります。
---------
hello.nim
---------
echo "Hello, world!"
以上です。実はNimにはmain
関数がいりません。実行してみましょう。$ nim c -r hello.nim
Hello, world!
nim c -r filename
は、省略したもので、nim complie --run filename
と同じです。リリースバージョンを生成したい場合は、nim c -d:release filename
となります。コンパイルすると、同じディレクトリに実行ファイル
hello
とnimcache
というディレクトリが作られ、その中にhello.c
とhello.json
とhello.o
の3つのファイルが生成されます。またNimではコンパイルについて細かく設定できるようになっており、デフォルトのコンパイラを変更することもできます。例えばgccを使いC++ファイルを生成したい場合、以下のようにします。
$ nim cpp --cc:gcc hello.nim
すると、同じディレクトリに実行ファイルhello
とnimcache
ディレクトリにhello.cpp
とhello.json
とhello.o
が生成されます。$ ./hello
Hello, world!
もちろん-r
をつけてそのまま実行することもできます。$ nim cpp --cc:gcc -r hello.nim
Hello, world!
いずれにしても速度がすごいです。Playground
Nimには、コードをWeb上で試すことができるNim Playgroundというものがあります。このPlaygroundはNimのスタンダードライブラリをインストールして試すこともできて、大変便利です。コンパイルも速い。追記
2019年9月、Nimはversion1.0.0 stableをリリースしました。この記事に書かれている内容はやや古いものとなってしまいました。私のPCでは現在nimcache
というディレクトリではなく、.cache/nim
というディレクトリに、例えばhello.nim
をコンパイルすれば、hello_d
というディレクトリが作成され、その中にhello.nim.c
やhello.nim.o
と言ったファイルが作成されます。様々なモジュールも廃止されたり、統合されたりしておりますので、改めて公式ドキュメントを読み直す必要があるように思います。私も大雑把な記事を書きましたので、よろしければご覧ください。