×

[PR]この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。

サイトトップまとめドキュメントValaValaについて ≫ ツールとしてのVala

ツールとしてのVala

  • C#言語に近い文法を持つVala言語と新しいGenie言語で記述されたコードをコンパイルするツールvalacとその中で用いられる機能の一部(Vala言語のコードを扱う処理など)を提供するライブラリ(libvala),幾つかの追加のツール群から成る

  • Vala言語やGenie言語のコードはGObjectライブラリを用いるC言語のコードを中間ファイルとしてOSネイティブな実行形式を出力する

  • --ccode(-C)オプションを用いることでC言語のソースファイルを出力でき、このソースを同時に配布ファイルに含めることでValaコンパイラのない環境でもビルドができるようにできる[34]

  • C言語ソースを中間ファイルにすることからも既存のC言語ソースとの親和性が高く、比較的容易にC言語のライブラリの機能が利用できる・特にGTK+,GStreamer,libnotifyのようなGObjectライブラリに基づくものはクラスを継承して使うこともできる

  • 最終的にC言語のソースがコンパイルされるため、C++言語のようにコンパイル済みなファイルのレベルでの互換性(ABIの互換性)が言語固有の問題になることはない(バイナリ互換性はC言語と同じレベルになる)

  • 最小限のコードは(Cライブラリを除くと)GLibとGObjectの2つのライブラリ[35]に依存する

  • メモリ管理はGObjectライブラリが持つ参照カウント(リファレンス・カウント)方式[36]によるが、参照が循環するのを防ぐための弱い参照の指定(weakもしくはunowned)や所有権移動の指定(owned)も可能

  • GLib,GObject以外のライブラリの機能は.vapiの拡張子のファイルが提供する言語バインディングを通して外部ライブラリを用いる形となり、--pkg [.vapiファイルの拡張子を除いたファイル名]オプション[37]を付ける・ただしそのライブラリの開発パッケージも必要となる・.vapiファイルのディレクトリは--vapidir [ディレクトリ]で指定することも可



[34] Valaの本体がまさにその例

[35] GObjectライブラリはGLibに依存するため、GLibも用いられる

[36] オブジェクトの他からの被参照数(参照カウンタ)を内部に保持(初期値は1)し、この数が変化するたびに値を書き換えていき、0になるとオブジェクトを破棄する形

[37] 例: --pkg gtk+-2.0