Nim帳

プログラミング言語Nimについて書いていきます。

20160921155215

Nimの導入

以前のブログに描いたNimの記事がNim 入門で検索するとトップにくるという想定外の事態になり、さらにNimのバージョンも進み記事の内容が古くなってしまったので、これはきちんと書き直さないといけないと思い、こちらのブログで導入記事を書き直すことにしました。

この記事はNimのバージョン0.15.2時点での記事です。おそらくしばらく経てばまた古くなると思います。その時はまた記事を更新しようと思います。

この記事ではWindowsを想定しています。Linux向けの記事はまたいずれ書きたいと思います。

必要なもの

Nimはコンパイルの際、基本的にCを通してバイナリにコンパイルするので、必然的にCのコンパイラが必要になります。
Nimで使うCコンパイラは様々なものがサポートされており、下記のものが公式にサポートされているようです。

他のものが使える場合もあるそうですが、おそらく非推奨になるでしょう。
ここでは一番無難なGCCを導入します。

ダウンロード

Nimコンパイラ

Windowsの場合、Nim公式のdownloadページにあるZipsの32bitか64bitのどちらかを好みで選びましょう。
ここで重要なのが後述のCコンパイラとbitを合わせることです。32bitのNimコンパイラと64bitのCコンパイラを組み合わせると動かない場合があるので、合わせてダウンロードしましょう。
ここでは64bit版を導入します。

Zipsの下にはExesがありますが、 これはインストーラー形式でインストールができ、 同時にCコンパイラやAporia IDE(Nim用IDE)などもインストールできる優れものだったのですが、 0.15.0でバグが見つかり、メンテナンスも困難になっているようで、現在使うのは非推奨になっています。 とても便利なものだったので是非復活してほしいですね。

Cコンパイラ

GCCWindowsの場合、おそらくTDM-GCCがいいと思います。 GCCは他にもmingw-w64からもダウンロードでき、Nim公式はこちらを推奨していますが、どれをダウンロードすればいいかわかりにくいのと、Msys2やCygwinなど今回必要なCコンパイラに加えて他の物もダウンロードしてきてしまうものが多いので、導入がしやすいTDM-GCCにしました。

TDM-GCCのDownloadページに行き、tdm64-gcc-[バージョン].exeをダウンロードします。

インストール

Nimコンパイラはダウンロードしたzipファイルを任意のディレクトリに展開し、展開したディレクトリのbinディレクトリにPATHを通しましょう。
TDM-GCCはインストールの際に出てくる選択でMinGW-w64/TDM64を選んでインストールしましょう。ここではデフォルトのディレクトリ(C:/TDM-GCC-64)にインストールしたという前提でいきます。

設定

最後に設定です。このままではNimコンパイラにTDM-GCCの情報が伝わってないので、設定ファイルに追記します。
展開したNimコンパイラディレクトリ(ここではnim-0.15.2)のconfigディレクトリにあるnim.cfg

@if windows:
  gcc.path = r"C:\TDM-GCC-64\bin"
@end

を追記します。
TDM-GCCのインストール場所を変えた場合は各自gcc.pathの変更をお願いします。
これでインストールは完了です。

使い方

インストールが上手くいったかの確認として、試しにコンパイルしてみます。 下記のコードをhelloworld.nimというファイルに保存し、

# helloworld.nim
echo "Hello World!!"

下記のコマンドを実行でハローワールドプログラムのコンパイルです。

nim c helloworld.nim 

あとは

helloworld.exe

Hello World!!が表示されれば確認完了です。

まとめ

バージョン0.15.2現在では結構インストールが面倒くさくなってしまっています。おそらく将来的(1.0が出るまで)には改善されると思うので期待して待ちましょう。

補足

Nimは0.15からwindowsでの端末出力がUTF-8になり、Windowsコマンドプロンプトでは日本語を使った場合文字化けするようになってしまいました。
一時的な対策として、minttyをUTF-8で使うなどするしかないと思います。
おすすめはGitをインストールした際に付いてくるGit Bashをminttyで使うあたりでしょうか。
こちらもいずれ改善してほしいですね。

0.15.0ではUTF-8になってましたが、0.15.2からはもとに戻ったようです。 現在調査中です。