.NETのILの仕様(3)
おまけに、CILから.NETのライブラリやら何やら呼び出すことも簡単である。ふつう、言語を自作すると言語に付随するライブラリを作ったりする作業が出てくるが、そういった、言語とは本質的に関係のない(と思われる)作業に手間暇かける必要がない。誰でも気軽に言語を作って走らせることができる。.NETのライブラリを呼び出すことができるので自分の作った言語を誰かに使ってもらう場合でも、ライブラリ部分のドキュメンテーションやら何やらをする必要がない。純粋に言語仕様だけで勝負できる。
つまり、.NETのCILのコードを生成しさえすれば、最小限の労力で最大限の効果が期待できるというわけだ。
CILのコードはC#から実行することも出来る。reflection emitを使えば簡単だ。
http://weblogs.asp.net/joelpob/archive/2004/03/31/105282.aspx
このサンプルは、C#2.0の機能を使用してあるが、次の方法ならば現在のC#でもコンパイルできる。
http://d.hatena.ne.jp/akiramei/20040410#p1
こんなことが出来るならば、自分の作った言語をそのゲームで使用するスクリプト言語として使うことだってわけないだろうし、本当に未知の可能性を感じる。
また、VisualStudio.NET2003にはCILのコードを吐くCのサブセット版がサンプルとして付属している。*1
CILの仕様理解するのが大変だと言う人も心配はいらない。CodeDOMを使えば、C#のコードを生成する気分でコード出力部をコーディングできる。
http://d.hatena.ne.jp/akiramei/20040414#p1
こうしてみれば、.NET用のRubyなりPerlなりPythonなり作るのは、一からコンパイラを作るより、遥かに簡単な作業であることがわかる。ライブラリを一切作らなくて良いなら、parserと基礎的なコード生成部分だけで良い。monoを使えば.NET frameworkをインストールしてない環境でも動かせるし、ネイティブコードだって出力できちゃう。こりゃもう作るしかないですよ!そんなわけで日曜プログラマのしとたちも、ちょっとした休日に自分だけの言語を作ってみませんか?