Gauche/Kahuaセミナー2008 Fallに行ってきました

Gauche/Kahuaセミナー2008 Fallに行ってきました。

http://practical-scheme.net/wiliki/wiliki.cgi?Seminar%3aGauche%2fKahua

セミナーの内容は以下のものでした。

  • HOPプロジェクトの説明(山下さん)
  • Gauche on Railsの内部実装の解説(吉田さん)
  • Kahuaの内部実装(主にpersistent部分)の解説(備前さん)

とても興味深い内容でした。

以下メモです。

HOPプロジェクト

HOPプロジェクトは、GaucheHaskellを使ったソフトウェア開発の促進を目的としている様です。

プレスリリース
http://www.timedia.co.jp/news/press/3545906324

GaucheHaskellをいざ仕事で使おうとした際の障壁を少なくするために、

  • 開発に必要な情報の共有
  • 開発事例の蓄積

などを推進していく様です。

Gauche on Rails

Gauche on Railsの内部実装の解説は基本的にはGauche nightの時と同じでした。
今回はさらに内部実装に突っ込んだ話をして頂きました。

  • Gaucheの(CLOS由来の)オブジェクトシステムではクラスとメソッドが分離している
  • Gachueにはクラス再定義の機能がある。但しGauche固有。これはKahuaを実装するために追加された機能らしい。再定義機能は、ActiveRecoadでDBから読み出してきたレコード情報からクラスへスロットを追加するために使った。
  • ActiveControllerは、マクロを使って実装。マクロでこっそりコンテキスト情報を渡すコードを生成。
  • (reload-modified-modules)を呼ぶと、変更の在ったモジュールが再読み込みされる。便利。
  • (report-error e)は正式なAPIでは無いが、stack traceを取得できる。

ソースは以下から…
http://ey-office.com/svn/rails/trunk/GaucheRails
リンクが切れている模様です。

Kahuaの内部実装

Kauhaプロジェクトのサイト
http://www.kahua.org/

Kahuaの内部実装の解説をすることで、Gaucheの使い方のえぐい面を見てみましょうという内容です。

  • MOP使いまくり。便利
  • entry-lambdaとかマクロ使いまくり。バッククォート、アンクォート使いまくり。
  • persistent-class-bind-metainfoは内部定義を含めて100行もある。長ー

あとは、現在のKahuaの問題点として以下のような話がありました。

  • 継続手続きはプロセスローカルとなる。つまり、同一アプリケーションを複数プロセスで動かしている場合、継続を埋め込んだプロセスが必ずその継続手続きを実行しなければならない。
  • プロセスを再起動すると、全ての継続手続きが消えてしまう。これはpersistent可能なlambdaで解決可能かも。
  • ファイルシステム上のDBはまだトランザクション機能が無い。必要な場合、RDBMSを使ってね。
  • Kahua独自のデータ形式でデータベースを使うため、既存のデータベースと連携が出来ない。

高負荷に耐えるGauche webサーバ

  • Kahua内蔵のwebサーバは現在はselect + posixスレッドベース。posixスレッドは重い。
  • 昔のapacheではプロセスを複数立ち上げて、fdパッシングを使って負荷分散をしていた。Gaucheにはfdパッシングの機構が無い。仕様を綺麗にするためには結構考えないとならない。
  • call/ccを使った比較的軽いグリーンスレッドを使う場合、non-blocking I/Oが無いため、I/Oで止まる。
  • I/OはGauche 0.9から1.0にかけて見直される予定のため、取りあえずそれまでまつ方針。