呼び出しの変換などを処理するために実行時に生成されるコードをサンクと呼びます。サンクを利用したクロージャの実装を説明します。またサンクとは別に、コルーチンによる継続の実装も試みます。独自言語に組み込むことを想定した説明ですが、今回は独自言語の作成には踏み込まずにC++を使用します。
- 2011年10月29日(土) 午後1時〜6時
- マイ・スペース&ビジネスブース池袋西武横店 7号室 (東京都豊島区南池袋1-16-20 ぬかりやビル2階)
- 詳細・参加登録 ⇒ http://atnd.org/events/19963
大まかな流れは以下の通りです。
- スタックとアセンブラ
- 簡単なJIT: https://gist.github.com/1225880
- 呼び出し規約と変換
- 関数ポインタや関数オブジェクト
- サンクによるメンバ関数へのコールバック: https://gist.github.com/1225997
- Win32へのサンクの応用
- Win32で委譲モデルを構築: https://gist.github.com/1273003
- setjmp/longjmpによるコルーチン
- setjmp/longjmpの自前実装: https://gist.github.com/1257249
- コルーチンのクラス化: https://gist.github.com/1271829
- Win32への継続の応用: https://gist.github.com/1275467
配布資料の叩き台を公開しています。参加するかどうかの判断材料としてどうぞ。
ご参加をお待ちしています。