http://h-miyako.hatenablog.com/entry/2015/01/13/201846
はじめに
Nim (旧称: Nimrod) というVimに似た名称のPython風構文な静的型付言語があります。 先日Twitterで存在を知り、少し触ってみました *1。 書きやすい上に実行速度がとても速く(単純な処理でgo, rustより早くC並)、非常に気に入ったので簡単にインストール方法などを紹介したいと思います。
Nimの特徴
主に公式ページの記述から、主観で特徴を列挙します。
- 言語の特徴
- コンパイラの特徴
- Linux, BSD, Mac OS X, Windowsに対応
- 単一ファイルの実行バイナリを生成
- 一旦Cのコードに変換し、そこからネイティブコードを生成してるらしい
- C、C++, Objective-C, JavaScriptのコードに変換することも可能
日本語の情報は少ないのですが、旧称のNimrodで検索するとブログ記事を書いてくださっている方もいらっしゃいます。 Nimrod Advent Calendar jp: 2011 : ATNDなどもありました。
参考: Nimが影響を受けた言語(影響の強い順)
意外にもPythonは後ろのほうで、上位はPascal系です。 外面はPascal感控えめに感じるのですが、内部処理的にPascalっぽくなっているのでしょうか? C++の影響も受けているので、template, generics, macroなど不穏な機能も豊富です。
コード例
個人的には行末セミコロンとか括弧のブロックとか好きではない(つまりPythonが好き)ので、インデントを使った構文は非常に好感触です。 あと、簡単に試しただけですが、とにかく速かったです。
2015年2月22日 追記
開発の状況
記事執筆現在(2015年1月12日)の最新版は Version 0.10.2 です。 まだ正式リリース(Version 1.0)にはなっていませんが、Roadmap をみると言語仕様はある程度固まっているようです。
コミット数の時系列グラフを見るとコミット数は増加傾向で、開発はどんどん活発になっているようです。
コンパイラのインストール
前置きが長くなってしまいました。
公式サイトのダウンロードページ通りの方法で上手く行くと思います。 いずれの方法でも
nim --version
でバージョンが表示されればOKです。バイナリ利用
これが一番簡単な方法だと思います。
- nim-0.10.2.zip を例えば
~/src
にダウンロード - 展開
sh build.sh
を実行~/src/nim-0.10.2/bin
にPATHを通すか、bin/nim
をパスの遠たディレクトリに置く
例:~/src
にソースとバイナリを置く場合
最後に
~/src/nim-0.10.2/bin
にPATHを通してください。 または、PATHの通っているディレクトリに実行ファイル(bin/nim
)をリンクしてください。 私は~/bin
にPATHが通してあるので、ln -s $HOME/src/nim-0.10.2/bin/nim $HOME/bin/nim
しました。Githubのソースからインストール
開発版を試したりしたい場合はこちらです。 バイナリを利用する場合よりも多少ビルドに時間がかかりますが、 ダウンロードページ の手順通りで上手く行きました。
Hello world という名のコンパイラ動作確認
適当なディレクトリで
hello.nim
を作成し、中に
と書いて保存します。
この時、同じディレクトリに
hello
という実行可能バイナリとnimcache
というディレクトリができているはずです。 ./hello
でシェルから直接このバイナリファイルを実行してもHello, world!
と表示されます。 nimcache
の中には、nimが自動生成したCのコードなどが出力されています。--run (-r)
をつけなければ、バイナリファイルが作られるだけで実行はされません。 また、この時作成されるバイナリファイルはデバッグ用の機能も含まれているので、配布したりベンチマークをする時は-d:release
オプションをつけてコンパイルします。
その他、コンパイラのオプションは
nim --help
やNim Compiler User Guideを参照してください。User Guide
ではより多くの(実験的な)機能も紹介されています。ReSTからHTMLやTeXを生成したり(モジュールのマニュアル作成用っぽい)、クロスプラットフォーム/クロスアーキテクチャなコンパイルも可能(実装途中?動作未確認)です。エディタの設定
EmacsやVimをはじめ、Sublime TextやAtomなど多数のエディタ用プラグイン/設定が提供されています。 コンパイラのオプションでIDEに必要そうな機能も提供されており、これを使えばVimやEmacsのプラグインなども(比較的)簡単に作れそうです。 補完プラグインなど作ってみると面白いかもしれませんね。
Vimの設定
まず、zah/nimrod.vimをインストールします。これはほぼ必須です。これで、シンタックスハイライト・自動インデント・ジャンプ機能等、が有効になります。
他の設定(主にプラグインの設定)は長くなったので別記事にまとめました。興味のある方はご参照ください。
Nimの構文
Nimの構文は行末セミコロンがなく、インデントを使ってブロックを表すので、パッと見はPythonに似ています。 特に条件分岐(if-else)やループ(for, while)の構文はPythonそっくりです。
せっかくチュートリアルなどを読んだので、ExampleにあったFizzBuzzにコメントを入れつつ色々な記法を織り交ぜて書き換えてみます。
構文のまとめというかメモをマニュアルやチュートリアルを見て試しながら書いていたのですが、非常に長くなりそうな上にまだ執筆途中なため、別の記事かGistかQiitaあたりに投稿します。
書きかけですが、とりあえず現状のものをGistに置きました。随時更新予定です。間違いなどありましたらご指摘いただけると幸いです。
最後に
何度も書くようですが、本当に書きやすくて手軽につかえて速度も出るので、もっともっと流行って欲しいです。この記事が、Nimを使う人を一人でも増やすきっかけになれば幸いです。
0 件のコメント:
コメントを投稿