TLDR:ValaはGLib / GObjectの上に設計されているため、GLib/GObjectで使用することをお勧めします。
valacの代替プロファイルがあるかもしれませんが、それらは未完成または非推奨のいずれかです。
Valaの要点は、CでGLibおよびGtk+アプリケーションを作成するために必要な定型文の量を減らすことです。
また、文字列と配列がエラーが発生しやすいポインタではなく単純なデータ型であるなど、Cに比べていくつかの優れた改善点が追加されています。
これは主に、GObjectに存在するすべての概念を次のようにラップします。
- クラス
- プロパティ
- 継承
- 代表者
- 非同期メソッド
- 参照カウント(C + GObjectでは手動、Valaでは自動別名ARC)
- オブジェクトの型安全性
- ジェネリック
- おそらくもっと...
これらの概念はすべて、GObject / GLib / Gioを使用せずに実装できますが、それは基本的にGObject / GLib/Gioを書き直すことを意味します。これはあまり意味がありません。
GUIアプリケーションを作成したくない場合は、GLibを使用してコンソールアプリケーションを作成することもできます。ValaではGIOまたはGTK +の使用はオプションであり、アプリケーションはヘッドレスサーバーでも機能します。
Qtには、最終的にGLibメインループに切り替えるための努力さえあると思います。これにより、QtとGLibの相互運用性がはるかに簡単になります。
GLibを使用するフレームワークの良い例は、さまざまなデスクトップ環境でも使用されるGStreamerです。
要約すれば:
- GLibは、基本的なクロスプラットフォームアプリケーションフレームワークです。
- GObjectは、GLibエコシステムで使用されるオブジェクトシステムです。
- GIOは、GLib+GObjectに基づくI/O抽象化(ネットワーク、ファイルシステムなど)です。
- GTK +は、GLib + GObject +GIO+その他に基づくグラフィックUIツールキットです。
- GNOMEは、すべての「G」テクノロジーに基づくデスクトップ環境です。
- Valaは、C言語の「G」ライブラリを使用するために必要なボイラープレートを減らすように設計された高級プログラミング言語です。
GTK +は元々GIMPから来て、それ以来、今日のGNOMEの基礎となっているさまざまな「G」ライブラリに分割されました。
Valaには非常に強力なバインディングメカニズムもあり、あらゆる種類のCライブラリ用のいわゆる「VAPI」ファイルを簡単に作成できます。
正しいVAPIバインディングを使用すると、手動のメモリ管理、ポインター、文字列と配列のゼロ終了、および正しいCコードの記述を非常に困難にするその他の面倒なことについて心配する必要はありません。