MSYSでValaという言語をビルドしてみました。C言語へのトランスレータで、C#風の構文からGObjectの定型的なコードを出力します。
先にglibとpkg-configをビルドします。詳細は以下を参照してください。
※ 必要なのはpkg-configまでです。libpng以降は不要です。
Valaのビルド中にwaitpid()とkill()がないためエラーになります。修正パッチを作成しました。
waitpid()とkill()の代替実装については、前回の記事にまとめました。
使用例
valacに--cc=gccオプションを付けます。glibのエラーが文字化けするため、LANG=Cを付けるのが無難です。
test.vala
print("hello");
実行結果
$ LANG=C valac --cc=gcc test.vala test.vala:1.1-639.7: warning: main blocks are experimental Compilation succeeded - 1 warning(s) $ ./test.exe hello
Genie
Valaにはより先進的な構文を目指したGenie(ジーニー)という言語も含まれています。
特にコンパイルオプションで指定しなくてもvalacで使用できます。
test.gs
init print "hello"
実行結果
$ LANG=C valac --cc=gcc test.gs $ ./test.exe hello
vapi
Vala/GenieはC言語にトランスレートされて通常のCコンパイラに渡されます。C関数の呼び出しはP/Invokeのようなマッピング(vapi)を基に、直接呼び出すコードに変換されます。そのためラッパーのオーバーヘッドがありません。
実際にValaのソースに含まれるvapiディレクトリを見れば、何をやっているのか想像が付くのではないでしょうか。