Thriftの謎とIDLの型システム

3
Sadayuki Furuhashi @frsyuki

型ベース+属性でやるならgenericsが欲しい。resolve<K,V> map<K,V> @ordered cpp:<K,V>; とか。generics付きのtypedefをサポートするか、フィールドベースか、微妙。

2011-03-27 04:26:54
Sadayuki Furuhashi @frsyuki

両方できればいいという話も。フィールドベースに加えて typedef<K,V> map<K,V> OrderedMap<K,V>; typespec<K,V> OrderedMap<K,V> cpp:map<K,V>; が書ければいい。

2011-03-27 04:30:16
Sadayuki Furuhashi @frsyuki

MessagePack IDL 言語仕様案。色々いれた。 http://bit.ly/e2exFx

2011-03-27 05:53:29
Sadayuki Furuhashi @frsyuki

基本型14種、コンテナ型3種、nullable("?")とoptional、enum、typedef、総称型、typespec、例外クラス、service定義、include。

2011-03-27 05:56:50
Muga Nishizawa @muga_nishizawa

@frsyuki 40行目の NullableExample message 内の string? の '?' って何ですか??

2011-03-27 06:00:06
Sadayuki Furuhashi @frsyuki

@muga_nishizawa nullableです。よく使いそうなので短めにしてみました。

2011-03-27 06:00:49
Muga Nishizawa @muga_nishizawa

@frsyuki message NullableExample? { ... } はナシ?

2011-03-27 06:01:46
Muga Nishizawa @muga_nishizawa

@frsyuki いや、なくてもよいけど、以前「フィールド全部を nullable にしたい」という要望があったのを思い出しました。

2011-03-27 06:02:51
Sadayuki Furuhashi @frsyuki

?だけで済むなら要らない気がした…! でもどうだろうなぁ。

2011-03-27 06:05:07
Muga Nishizawa @muga_nishizawa

@frsyuki いや、あくまで便利機能なので、なければないというポリシーでも良いと思います。

2011-03-27 06:06:49
Sadayuki Furuhashi @frsyuki

(ちなみにJava版はクラスの宣言に @MessagePackMessage(FieldOption.NULLABLE) アノテーションを付けると、デフォルトでnullableになる

2011-03-27 06:04:29
Muga Nishizawa @muga_nishizawa

@frsyuki おぉ… 知らなかったー>< RT @frsyuki: (ちなみにJava版はクラスの宣言に MessagePackMessage(FieldOption.NULLABLE) アノテーションを付けると、デフォルトでnullableになる

2011-03-27 06:05:44
Muga Nishizawa @muga_nishizawa

@frsyuki Generics は必要ですか?IDL を使う段階だと、もう型はある程度確定している気がするのだけど、そんなことはない?さっきつぶやいてましたっけ?

2011-03-27 06:21:06
Sadayuki Furuhashi @frsyuki

@muga_nishizawa Genericsの用途は主にtypespecになると思います。

2011-03-27 06:22:36
Muga Nishizawa @muga_nishizawa

@frsyuki ごめん、たぶんぼくが理解できてないんだ。typespec って、実装の詳細を後付けするということでよいですか?

2011-03-27 06:25:11
Sadayuki Furuhashi @frsyuki

@muga_nishizawa そうですそうです。型やtypedefやフィールドについて、コード生成される実際の型を上書きします。

2011-03-27 06:26:39
Sadayuki Furuhashi @frsyuki

Genericsで記述しても、生成されるコードはgenerics(やtemplate)ではなくPOJO/POD型、にしそうだけどgenericsになっていた方が便利なケースってあるかな。

2011-03-27 06:24:04
Sadayuki Furuhashi @frsyuki

typedef<V> map<string,V> GenericStringMap より typedef map<string,V> GenericStringMap<V> の方がいいかも。あるいは alias GenericStringMap<V> map<string,V>

2011-03-27 06:40:20
Muga Nishizawa @muga_nishizawa

@frsyuki たぶん充分 parse は可能だとは思うのですが、この 97 行目の GenericExample の V には、いつ実際の型が代入されるのですか?利用用途が気になります…

2011-03-27 06:50:44
Sadayuki Furuhashi @frsyuki

コード生成プラグインにGenericな型が渡されることはない。型変数がすべて解決されている型だけをコード生成し、解決されていない総称型はコード生成しないので。

2011-03-27 06:57:53
Sadayuki Furuhashi @frsyuki

@muga_nishizawa typespecはGenericをうまく使わないと相当に繁雑になりそうです。ただtypespecは実装の詳細の指定なので、例えばパフォーマンスが重要なケースか、性能チューニングのフェーズに使うことになるので、多少繁雑でも大丈夫かなーと思っています。

2011-03-27 07:02:10