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)
導入
Linux、特にUbuntu系を想定します。(筆者の環境はLubuntuです)
UbuntuのリポジトリにはNimのパッケージがあるのですが、Nimで使うnimbleというパッケージマネージャー&ビルドツールがインストールされないみたいなので、ソースからビルドします。
必要なツールは、
- gcc
- git
だけです。
あとはシェルで
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向きのサブセットなどがあります。(RubyのSinatraっぽいルーティングDSLもありました)
マクロやDSLがNimの構文によく馴染む形になるのもプラスポイントです。
個人的にはRubyのDSLやLispなどのマクロは大好きなので、Nimの方向性はかなりいいと思います。速度がC並みに速いのもいいですね。
ソフトリアルタイムなども想定しているようなので、これでゲームエンジンなど作ってみたいですね。
引き続きNimを色々試していこうと思います。
以上、Nim言語導入でした。