Nim-lang
静的型付けコンパイル言語。実行速度と書きやすさを両立しているという評価がある。
Pythonと同じくインデントでブロックを決定する。他にもif文のカッコや行末セミコロン不要など、基本的な構文はPythonとよく似ている。
Nimのコンパイラは、一旦NimコードをCコードにしてからgccで実行ファイルを生成する。javascriptにも変換できる。
- 長所
- 記述量の少なさ
- 実行速度, バイナリ容量などの自動最適化
- 型推論、ラムダ式、関数型記述など一通り最近の構文はサポート
- C,C++のライブラリをインポートできる
- 二分探索, ヒープキューなどのデータ構造・アルゴリズムが 標準ライブラリ にある
- メタプログラミング機能
- 短所?
- マイナー
- 母数が少ないと情報も少ない
- 将来的な開発の継続が不透明
- ドキュメントが不充実という意見も
- 基本機能の一覧は Nim Manual にまとめられている
- チュートリアルはここ Nim Tutorial (Part I) Nim Tutorial (Part II)
- 取っかかりとしては十分と思うが、深く入り込もうとすると不足なのかも?
- コンパイラのコードは公開されているので自分で読む手段はある
- 開発途上(ver.0.19.2)
- 日本語(マルチバイト文字)の扱いはまだ苦手
- テンプレート構文やマクロなどにより(やろうと思えば)記述を最小限にできる反面、それを乱用されたコードは保守性・可読性が低下しがち
- 長所にも短所にもなる
- 見かけはPythonに近いが、あくまでC言語にコンパイルする言語
- ポインタ変数などが出てくるので、C言語の概念を理解してないと使いこなすのは難しいかも知れない
- 難しい概念は使わないで、簡単な機能だけで手軽に利用することも可能
また、Cライブラリの生成も可能なので、一手間かければ速度が必要な部分をNimで書いて、Pythonなどから利用することもできる。
インストール
- nim-0.18
- Windows
- この辺とか見た方が確実
インストールは、zipを落として任意の場所に展開し、パスを通す。
finish.exeで、以下の3つの設定を自動で行う。
{nim}/binにパスを通す- Cコンパイラ(mingw)のダウンロード
- スタートに登録
Cコンパイラは既にインストールされていればそれを使えるが、Windowsの場合いろいろ互換性が面倒なので、動かないことがあるかも知れない。容量は食うが、nimで動くことが確認されているmingwを個別にインストールしておいてもいい。mingwは{nim}/dist 以下に配置される。{nim}/config/nim.cfg でパス指定されたCコンパイラを使用するので、mingw自体は既存環境を邪魔しないし、後から変更も可能。
(必要に応じて再起動後)cmdから'nim'で確認。
Hello,World
- helloworld.nim
echo "Hello World!"
main関数とかいらないこの簡潔さ。
コンパイル
> nim c -r helloworld.nim
'c'はCコードに変換してコンパイルする指定'-r'を指定するとコンパイル後即実行
リリースモードでコンパイルすると最適化が働き実行速度・バイナリ容量が改善される。
> nim c -d:release helloworld.nim
開発エディタ
Aporia という専用IDEが開発されていたが、VSCodeのプラグインが十分使えるようになってきたため、Aporia開発者も更新停止してそっち使ってとのこと。他にもAtomなどのプラグインが存在。
VSCode上でのビルド用tasks.json例
{
"version": "2.0.0",
"tasks": [
{
"label": "nim build",
"command": "nim",
"args": [
"c",
"-r",
"${file}"
],
"options": {
"cwd": "${workspaceRoot}"
},
"type": "shell",
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
パッケージ管理
nimbleというツールが付いてくる({nim}/bin/nimble.exe)。管理だけで無く、パッケージビルドシステムも兼ねる。

