Skip to content

Instantly share code, notes, and snippets.

@unnonouno
Created March 27, 2013 08:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save unnonouno/5252555 to your computer and use it in GitHub Desktop.
Save unnonouno/5252555 to your computer and use it in GitHub Desktop.
IDL semantics

IDL semantics

現状

service = (name, arg_types, ret_type) の3つ組で、名前、引き数の型の組み、戻り値の型で表現される。 ただし、arg_typesの先頭は必ず文字列であり、クラスタ名を示す。 生成されるクライアントは名前nameのmsgpack-rpcをarg_typesの型の引き数を渡す。 サーバーからの戻り値は、ret_typeに変換されて返し、できない場合はクライアントライブラリ固有の型変換エラーを発生させる。 サーバーは、名前nameで渡された時に、arg_typesによって引き数を変換し、ユーザーの実装した処理を行う。 この処理は、arg_typesの先頭のクラスタ名以外の型の変数を引き数に、ret_typeの型の値を返す関数として実装される。 ret_type型の処理の戻り値は、msgpackにパックされて、クライアント側に戻される。

改良版

service = (name, arg_types, ret_type, except_types) の4つ組で、名前、引き数の型の組み、成功時の戻り値の型、失敗時の例外の型の集合で表現される。 生成されるクライアントは名前nameのmsgpack-rpcをarg_typesの型の引き数に、事前に与えられたクラスタ名を示す引き数とともに渡す。 サーバーからの戻り値は、ret_typeに変換されて返し、できない場合はクライアントライブラリ固有の型変換エラーを発生させる。 サーバーはexcept_typesのいずれかで指定された例外型を、msgpack-rpcのエラー値として返すことができ、クライアント側は各言語固有の例外型に変換した上でクライアントライブラリから例外として通知される。 サーバーは、名前nameで渡された時に、arg_typesによって引き数を変換し、ユーザーの実装した処理を行う。 この処理は、arg_typesの型の変数を引き数に、ret_typeの型の値を返す、あるいはexcept_typesで指定された型の例外を投げる関数として実装される。 ret_type型の処理の戻り値は、msgpackにパックされて、クライアント側に戻される。 except_typesのいずれかの型の例外が発生した場合は、msgpackにパックされてエラー値としてクライアント側に戻される。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment