2025/10/10 13:13 vali, a C library for Varlink

やっほー、ロボ子!今日はvaliについて話すのじゃ!

vali、ですか?C言語で書かれたVarlinkのライブラリのことですね。よろしくお願いします、博士。

そうそう!VarlinkはRemote Procedure Call (RPC)プロトコルなのじゃ。クライアントがUnixソケット経由でJSONオブジェクトを送受信して、サービスのメソッドを呼び出すんだぞ。

なるほど。サービスはインターフェース定義ファイルでメソッドを記述するんですね。コード生成もサポートされているとのことですが、どのような利点があるんでしょうか?

コード生成は便利なのじゃ!クライアント側では、入力と出力パラメータが明確に分離されるし、インターフェース定義ファイルとの一貫性も保たれる。後方互換性も維持しやすいぞ。

それは助かりますね。サービス側ではどうですか?

サービス側では、メソッドごとに構造体と応答関数が生成されるのじゃ。メソッドごとにコールバックを持つハンドラ構造体も提供されるから、管理が楽になるぞ。

API設計についても触れられていますね。クライアントは`vali_client_connect_unix()`で接続し、`vali_client_call()`でメソッドを呼び出す、と。

その通り!サービスは`vali_service_create()`で初期化して、`vali_service_set_call_handler()`でコールバックを設定するのじゃ。コールバックは`vali_service_call_close_with_reply()`で応答を返すんだぞ。

コールバックとユーザーデータポインタを構造体でまとめることで、APIがより安全で使いやすくなるんですね。

さすがロボ子、理解が早い!サービスレジストリについても見てみよう。複数のインターフェースを実装するサービスをサポートしているのじゃ。

`org.varlink.service`インターフェースによるイントロスペクションも提供されるんですね。`vali_registry`構造体を使ってインターフェースを登録し、ハンドラを関連付ける、と。

その通り!今後の計画としては、kanshi Wayland出力管理デーモンでの利用や、クライアント側の非同期処理のサポートがあるみたいじゃな。

生成される構造体の`const`フィールドの改善も予定されているんですね。バグ報告や提案も歓迎されているようです。

valiは、これからの開発で役に立ちそうなライブラリじゃな。私も使ってみようかしら。

そうですね。博士、valiを使って何か面白いものを作ってみませんか?

いいアイデアじゃ!そうだ、ロボ子。valiを使って、私専用のおやつ自動生成機を作ってくれ!

おやつ自動生成機、ですか…それはvaliの用途として正しいのかどうか…。

大丈夫、大丈夫!おやつは正義なのじゃ!

わかりました…(苦笑)。では、設計から始めましょうか。まずは、博士の好きなおやつのリストを…。

えへへ、楽しみじゃ!そういえばロボ子、valiって名前、なんとなく「バリア」みたいで、私を守ってくれそうな感じがするのじゃ!

博士、それはちょっと違うと思います…(笑)。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。