|
Vala は GObjectを利用したC言語のソースコードを生成する、セルフホスティングコンパイラを持つオブジェクト指向言語である。C#に似た構文を持ち、無名関数やシグナル、プロパティ、ジェネリクス、メモリ管理、例外処理、型推論、および、for-eachなど、C言語にはない言語仕様を持つ〔Vala: high-level programming with less fat - Ars Technica. Retrieved 2011-12-13 1:40PM EST 〕。開発者であるJürg BilleterとRaffaele Sandriniは、これらの機能を小さいオーバーヘッドかつ特殊なランタイムライブラリを使わずに、GObject オブジェクトシステムを利用した"''生の''"C言語の実行環境に取り込むことを目的とした。そのため、Valaはアセンブリや中間言語に直接コンパイルされるのではなく、C言語のソースコードにコンパイルされるため、Valaの出力するC言語のソースコードはgccなどの標準的なC言語のコンパイラでコンパイルすることができる〔http://lwn.net/Articles/335966/〕。 メモリ管理に関して、GObjectシステムは参照カウントを提供する〔https://developer.gnome.org/gobject/stable/gobject-memory.html#gobject-memory-refcount〕。C言語ではプログラマーが手動で参照の追加や削除を行わなければならないが、Valaでは、プログラマーが直接ポインタを利用せず、言語に備わっている参照型を利用する限り、参照カウントの管理は自動で行われる。 ValaからC言語のライブラリを利用するには、言語間の接続を定義するvapiファイルを書く必要がある。このような定義を書くことは、特にGObjectをベースした場合には、C言語のライブラリに対する良いドキュメントとなる。ただし、C++のライブラリは利用できない。vapiファイルはGTK+を含む大半のGNOMEプラットフォームについて提供されている。 ValaはJürg Billeterにより構想され、彼とRaffaele Sandriniにより実装、2006年3月にセルフホスティングコンパイラとして完成した〔http://gnomejournal.org/article/80/writing-multimedia-applications-with-vala〕。 == 例 == 単純な "Hello, World!" プログラム (:en:GTK+ hello worldを参照) int main () より複雑な例。Valaのオブジェクト指向の特徴の一部を示している。 class Sample : Object GTK+を使った、GUIを作成する "Hello, World!" プログラムの例。 using Gtk; int main (string[] args) 前の例をGNOME3プラットフォームでコンパイルするには、特別なパラメータが必要である。 valac --pkg gtk+-3.0 hellogtk.vala C言語に変換された結果は、次のようになる。 / * hellogtk.c generated by valac 0.21.1, the Vala compiler * generated from hellogtk.vala, do not modify */ #include #include #include #include #include #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL))) gint _vala_main (gchar * args, int args_length1); static void _gtk_main_quit_gtk_widget_destroy (GtkWidget * _sender, gpointer self); static void _gtk_main_quit_gtk_widget_destroy (GtkWidget * _sender, gpointer self) gint _vala_main (gchar * args, int args_length1) int main (int argc, char * argv) 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「Vala」の詳細全文を読む スポンサード リンク
|