[[Nim-lang]]

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.0)
      • Cコード変換時のバグがまだ残るらしいが、かなり少なくなったとのこと

また、Cライブラリの生成も可能なので、一手間かければ速度が必要な部分をNimで書いて、Pythonなどから利用することもできる。

インストール

インストールは、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
            }
        }
    ]
}

ver.0.6.0 でコード整形が有効にならない

パッケージ管理

nimbleというツールが付いてくる({nim}/bin/nimble.exe)。管理だけで無く、パッケージビルドシステムも兼ねる。

programming/nim.txt · 最終更新: 2018/11/14 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0