例えば順序付きのMapが欲しくて、Rubyで自前でOrderedMapクラスを実装した人がいたら、struct FooStruct { 1: map barField; } typespec FooStruct.barField MyRubyApp:OrderedMap; と書く
2011-03-27 03:22:01@frsyuki 実装が大変なのはおいておいて、「処理系ではインタフェースに基づいた型だけを提供」がまずほしいですねー
2011-03-27 03:23:10typespecがstruct定義の外側に書けるのは結構ポイントで、元の(インタフェースを記述した)structの定義を書き換えずに、実装に関する定義を追加できる。
2011-03-27 03:25:40@muga_nishizawa クライアントを書く側からすると、実装の詳細を省いた記述が欲しい印象ですね。サーバを書く側からすると、実装の詳細もIDLに書きたくなる印象です。
2011-03-27 03:28:07@muga_nishizawa まとめてというと、typespec MyApp { MyApp専用の記述をまとめて書く... } という感じで、アプリケーション(言語)ごとにまとめて書くということでしょうか?
2011-03-27 03:30:40実装の詳細には、kumofs.msgpack を継承した kumofs-impl.msgpack を定義するとか。
2011-03-27 03:32:26定義を外側に書ければ、あとは idl-processor kumofs.msgpack kumofs-impl.msgpack -lang=cpp のように、コマンドが複数ファイルからの入力に対応すればOK!
2011-03-27 03:34:29kumofs-impl.msgpack の先頭に include kumofs.msgpack; と書く手もあるか。「継承」はどうやるんだろう…
2011-03-27 03:38:33継承の記述方法は、2010.07.30 と 2010.09.14 にもtwitterでつぶやいていた記録が。(オブジェクト指向的な)継承は問題が多いが、RPCの例外に限っては継承が欲しいので別に対応という流れ。
2011-03-27 03:47:25書き方は exception SubException < SuperException { ... } とか、exception SuperException { ... exception SubException { ... } } という感じ。
2011-03-27 03:48:09Partial class: http://en.wikipedia.org/wiki/Partial_class
2011-03-27 04:06:41@frsyuki 昔やった時には、このへんはIDLでのサポートじゃなくて、型レゾルバを拡張するプラグイン機構の提供くらいにしてました
2011-03-27 04:03:34「Thriftの謎とIDLの型システム」をトゥギャりました。 http://togetter.com/li/116494
2011-03-27 04:10:43@frsyuki プロパティ変更時にイベントを発火させるとか特殊要件になりすぎて、IDLのセマンティクスが破綻しそうになったので、属性ベースで拡張していくような感じにしてました。組み合わせ爆発は起こりにくい代わりに細かいことが難しいって欠点があります
2011-03-27 04:16:37パーサとASTまでは固定にしてコード生成器だけをプラガブルにするのが良いと思っていたけども、ASTとコード生成の間に「型リゾルバ」ということでプラガブルな層を1層追加するのも良さそう。
2011-03-27 04:16:50struct FooStruct { 1: map<string,string> @ordered BarField; }; resolve map<string,string> @ordered cpp:map<string,string> これはちょっと厳しいか…
2011-03-27 04:21:50