Hello World!

Nimのインストールが無事に終わってnimコマンドが使えるようになったところで、さっそくコードを書いて動かしてみることにします。最初のプログラムは予想される通り、伝統的なHello Worldです。テキストエディタを起動して次のコードを打ち込みます。

echo "Hello, world!"

1行だけと極めてシンプルになっています。この内容のファイルを適当な作業用ディレクトリに、hello.nimという名前で保存します。Nimで書かれたプログラムを実行するには、コンパイルを必要とします。nim c hello.nimとすることでコンパイルできます。

$ nim c hello.nim
Hint: used config file '/home/freemikan/.choosenim/toolchains/nim-2.0.2/config/nim.cfg' [Conf]
Hint: used config file '/home/freemikan/.choosenim/toolchains/nim-2.0.2/config/config.nims' [Conf]
......................................................................
Hint:  [Link]
Hint: mm: orc; threads: on; opt: none (DEBUG BUILD, `-d:release` generates faster code)
27611 lines; 0.118s; 30.383MiB peakmem; proj: /home/freemikan/code/NimTutorial/hello.nim; out: /home/freemikan/code/NimTutorial/hello [SuccessX]

やや冗長なメッセージが出力されますが、[SuccessX]というところに目を向けると、正常に完了したであろうことが窺えます。nim c hello.nimの代わりに、nim compile hello.nimとすることも出来ます。コンパイルの結果、helloという名前の実行可能ファイルが生成されます。それを実行してみます。

$ ./hello
Hello, world!

期待通りの結果が得られました。

nimには、コンパイルと実行を同時に行ってくれるサブコマンドrもあります。

$ nim r hello.nim
Hint: used config file '/home/freemikan/.choosenim/toolchains/nim-2.0.2/config/nim.cfg' [Conf]
Hint: used config file '/home/freemikan/.choosenim/toolchains/nim-2.0.2/config/config.nims' [Conf]
Hint: mm: orc; threads: on; opt: none (DEBUG BUILD, `-d:release` generates faster code)
10086 lines; 0.014s; 10.488MiB peakmem; proj: /home/freemikan/code/NimTutorial/hello.nim; out: /home/freemikan/.cache/nim/hello_d/hello_47C5784933AC9B407791D45AD5FD951C951DB01D [SuccessX]
Hint: /home/freemikan/.cache/nim/hello_d/hello_47C5784933AC9B407791D45AD5FD951C951DB01D [Exec]
Hello, world!

最下行にHello, world!と出力されていることが確認できます。同様のことを行う別のオプションもあります。nim compile –run hello.nimや、nim c -r hello.nimでも同じ結果が得られます。

nimはJavaScriptにコンパイルする能力も備えています。

$ nim js hello.nim 
Hint: used config file '/home/freemikan/.choosenim/toolchains/nim-2.0.2/config/nim.cfg' [Conf]
Hint: used config file '/home/freemikan/.choosenim/toolchains/nim-2.0.2/config/config.nims' [Conf]
.......................................
Hint: opt: none (DEBUG BUILD, `-d:release` generates faster code)
21576 lines; 0.054s; 19.828MiB peakmem; proj: /home/freemikan/code/NimTutorial/hello.nim; out: /home/freemikan/code/NimTutorial/hello.js [SuccessX]

hello.jsが生成されています。Node.jsでこれを実行することが出来ます。

$ node hello.js
Hello, world!

WebブラウザでHTMLに読み込んで実行することももちろん可能です。