UnrealLIFE!

UE4やプログラミング言語に関するブログです。

Nim言語入門(インストール)

追記

新しいNimのバージョンに合わせた記事を別ブログに書きました。 nim-memo.hatenablog.com

本文

最近、新しく使っていく言語を決めようと思って色々試している中で、今のところ一番良さそうなNimという言語の簡単な導入記事です。
Nim、とてもいい言語なのですが、日本では知名度が低いみたいなので記事も少ないです。なので、入門記事でも役に立つと思って書いてみました。

一応簡単なNimのサンプルを公式から引用させていただきます。 (引用元: http://nim-lang.org/ )

type Person = object
  name: string
  age: int

proc greet(p: Person) =
  echo "Hi, I'm ", p.name, "."
  echo "I am ", p.age, " years old."

let p = Person(name:"Jon", age:18)
p.greet() # or greet(p)

見たところPython風構文のOCamlって感じですね。

導入

Linux、特にUbuntu系を想定します。(筆者の環境はLubuntuです)
UbuntuリポジトリにはNimのパッケージがあるのですが、Nimで使うnimbleというパッケージマネージャー&ビルドツールがインストールされないみたいなので、ソースからビルドします。
必要なツールは、

だけです。
あとはシェルで

cd ~/
git clone https://github.com/nim-lang/Nim.git
cd Nim
git clone --depth 1 https://github.com/nim-lang/csources
cd csources && sh build.sh
export PATH=~/Nim/bin:$PATH
cd ..
nim e install_nimble.nims

とやればインストールできます。
あとは~/.profileあたりにexport PATH=~/Nim/bin:$PATH を追記してパスを通しておけばいいでしょう。
これで nim や nimble コマンドが使えるようになってるはずです。

nimbleを使ったプロジェクト

nimbleはパッケージのインストールだけでなく、パッケージのビルドにも使えるシステムです。(RustでいうCargoのようなものです)
なので、試しにnimbleを使ったプロジェクトを作ってみます。
最初にプロジェクト用のフォルダを作り、 mkdir nimble_test
nimble用のファイルをコマンドで作ります。 nimble init (対話処理で進みますが入力必須以外は大体デフォルトでいいと思います)
そこでできた*.nimbleに

srcDir = "src"
binDir = "bin"
bin = @["main"]

を追記します。
余談ですが、nimbleで使う設定ファイルはNimScriptというNimのサブセットになっており、DSLで設定が書けるようになっています。ここはRubyのRakeに似ていますね。(構文はPython風ですが)

あとはsrcディレクトリとbinディレクトリ、src/main.nimファイルを作り、src/main.nimに

echo "Hello World!" # echo("Hello World!")でもいい

を書いてからnimble buildでHelloWorldプログラムが生成されます。
生成されたbin/mainプログラムはネイティブバイナリなのでそのまま実行できます。

所感

NimはどうやらメタプログラミングDSLをかなり重視しているようで、TemplateやMacro(AST操作可能)などの言語機能や、NimScriptなどのDSL向きのサブセットなどがあります。(RubySinatraっぽいルーティングDSLもありました)
マクロやDSLがNimの構文によく馴染む形になるのもプラスポイントです。
個人的にはRubyDSLLispなどのマクロは大好きなので、Nimの方向性はかなりいいと思います。速度がC並みに速いのもいいですね。
ソフトリアルタイムなども想定しているようなので、これでゲームエンジンなど作ってみたいですね。
引き続きNimを色々試していこうと思います。

以上、Nim言語導入でした。