読者です 読者をやめる 読者になる 読者になる

【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

MSYSでValaをビルド

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ディレクトリを見れば、何をやっているのか想像が付くのではないでしょうか。