Vala
[Wikipedia|▼Menu]

Valaパラダイムマルチパラダイム: 命令型言語, 構造化言語, オブジェクト指向言語
登場時期2006年 (18年前) (2006)
開発者Jurg Billeter, Raffaele Sandrini
最新リリース0.56.12[1]/ 2023年8月19日 (9か月前) (2023-08-19)
型付け強い静的型付け
影響を受けた言語C, C++, C#, D, Java, Python
プラットフォームクロスプラットフォーム
ライセンスLGPL 2.1+
ウェブサイトwiki.gnome.org/Projects/Vala
拡張子.vala, .vapi
テンプレートを表示

Vala は GObjectを利用したC言語のソースコードを生成する、セルフホスティングコンパイラを持つオブジェクト指向言語である。C#に似た構文を持ち、無名関数シグナル、プロパティ、ジェネリクスメモリ管理例外処理型推論、および、for-eachなど、C言語にはない言語仕様を持つ[2]。開発者であるJurg BilleterとRaffaele Sandriniは、これらの機能を特殊なランタイムライブラリなしに小さいオーバーヘッドで、GObject オブジェクトシステムを利用した"生の"C言語の実行環境に取り込むことを目的とした。そのため、Valaはアセンブリや中間言語に直接コンパイルされるのではなく、C言語のソースコードにコンパイルされ、Valaの出力するC言語のソースコードはgccなどの標準的なC言語のコンパイラでコンパイルすることができる[3]

メモリ管理に関して、GObjectシステムは参照カウントを提供する[4]。C言語ではプログラマーが手動で参照の追加や削除を行わなければならないが、Valaでは、直接ポインタを利用せずに言語に備わっている参照型を利用する限り参照カウントの管理は自動で行われる。

ValaからC言語のライブラリを利用するには言語間の接続を定義するvapiファイルを書く必要がある。このような定義を書くことは、特にGObjectをベースにした場合には、C言語のライブラリに対する良いドキュメントとなる。ただしC++のライブラリは利用できない。vapiファイルはGTKを含む大半のGNOMEプラットフォームについて提供されている。

ValaはJurg Billeterにより構想され、彼とRaffaele Sandriniにより実装、2006年3月にセルフホスティングコンパイラとして完成した[5]

単純な "Hello, World!" プログラム (en:GTK#Exampleを参照)int main () { print ("Hello World\n"); return 0;}


より複雑な例。Valaのオブジェクト指向の特徴の一部を示している。class Sample : Object { void greeting () { stdout.printf ("Hello World\n"); } static void main (string[] args) { var sample = new Sample (); sample.greeting (); }}


GTKを使ったGUIを作成する "Hello, World!" プログラムの例。using Gtk; int main (string[] args) { Gtk.init (ref args); var window = new Window (); window.title = "Hello, World!"; window.border_width = 10; window.window_position = WindowPosition.CENTER; window.set_default_size(350, 70); window.destroy.connect (Gtk.main_quit); var label = new Label ("Hello, World!"); window.add (label); window.show_all (); Gtk.main (); return 0;}


前の例を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 <glib.h>#include <glib-object.h>#include <stdlib.h>#include <string.h>#include <gtk/gtk.h>#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) { gtk_main_quit ();}gint _vala_main (gchar** args, int args_length1) { gint result = 0; GtkWindow* window = NULL; GtkWindow* _tmp0_ = NULL; GtkLabel* label = NULL; GtkLabel* _tmp1_ = NULL; gtk_init (&args_length1, &args); _tmp0_ = (GtkWindow*) gtk_window_new (GTK_WINDOW_TOPLEVEL); g_object_ref_sink (_tmp0_); window = _tmp0_; gtk_window_set_title (window, "Hello, World!"); gtk_container_set_border_width ((GtkContainer*) window, (guint) 10); g_object_set (window, "window-position", GTK_WIN_POS_CENTER, NULL); gtk_window_set_default_size (window, 350, 70); g_signal_connect ((GtkWidget*) window, "destroy", (GCallback) _gtk_main_quit_gtk_widget_destroy, NULL); _tmp1_ = (GtkLabel*) gtk_label_new ("Hello, World!"); g_object_ref_sink (_tmp1_); label = _tmp1_; gtk_container_add ((GtkContainer*) window, (GtkWidget*) label); gtk_widget_show_all ((GtkWidget*) window); gtk_main (); result = 0; _g_object_unref0 (label); _g_object_unref0 (window); return result;}int main (int argc, char ** argv) { g_type_init (); return _vala_main (argv, argc);}
開発環境

Anjuta

Euclide

Geany

MonoDevelop

NetBeans

RedCar

Sublime Text (syntax plugin)

TextMate

Vala Toys for gedit

Valencia

Val(a)IDE (itself written in vala)[6][7]

Vim (syntax plugin)

関連項目

Genie
- Pythonに似た文法を持つ、Valaコンパイラのための言語。

MonoDevelop - Valaをサポートする、LinuxWindowsmacOSで利用できるIDE[8]

Shotwell - Valaで書かれた、画像管理アプリケーション。

脚注^ “Vala - Compiler Using the GObject Type System” (2023年8月19日). 2023年10月23日閲覧。
^Vala: high-level programming with less fat - Ars Technica. Retrieved 2011-12-13 1:40PM EST
^http://lwn.net/Articles/335966/
^ https://developer.gnome.org/gobject/stable/gobject-memory.html#gobject-memory-refcount
^http://gnomejournal.org/article/80/writing-multimedia-applications-with-vala
^ Vala specific section,Vala Documentation
^ Val(a)IDEのソースコード
^http://monodevelop.com/

外部リンク.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:#f9f9f9;display:flow-root}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}英語版ウィキブックスに本記事に関連した解説書・教科書があります。Vala Programming

公式ウェブサイト

ValaToWindows - Windows版バイナリ

LibGee - Vala用のコレクションライブラリ

Val(a)IDE - Vala IDE

Valencia Gedit用のValaプラグイン

Vala Toys for Gedit - Gedit用のValaプラグイン、補完機能など

API Documentation

Vala sample code for beginners.

List of Vala programs

他言語との比較


Vala and Java

Vala and C#

Benchmark of Vala versus C# and C

More Vala benchmarks


記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:13 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef