GaucheFest:rui
植山 類(Rui)です。
GaucheFest第18回 (2006年12月)
土曜日のみ参加します。PEGパーザの設計と実装。
GaucheFest第17回 (2006年11月)
コンビネータパーザについて何かしらの作業をする予定。HaskellのParsecと似たようなものが提供できればいいですが、来月初旬にそこまで到達できないでしょう。
びさんがGaucheに移植したLShiftのpackratパーザをつかって、SIP (RFC 3261)のパーザを書いてみたのですが、パーザライブラリを学習して、中間表現を決めて、SIP turture test message (RFC 4775)にあるひねくれたメッセージのテストもパスするパーザを書く作業で、トータル15時間くらいで終わりました。絶対的に早いかどうかよくわかりませんが、少なくとも以前パーザを別に書いたときよりは確実に早いし、頑健なパーザができました。
いくつかアイデアがあるのでメモ。
- LShiftのpackratパーザは任意のオブジェクトの列をパーズできますが、それをやめてパーズ対象を文字列に限定したほうがよさそう。正規表現も概念的には文字列以外にマッチさせることができますが、実際には文字列を対象に絞って最適化をしているように、パーザコンビネータも文字列のパーズに機能を限定したほうがよさそうということ。
- Packratパーザでなく、単なるパーザコンビネータで必要十分ではないでしょうか。メモ化すると文脈依存のパーズが難しくなるし、パーズ対象の文字列長に比例したメモリを必要とするので、あんまりうれしくないような気がします。かわりにPerl6のruleにあるような、使いやすいバックトラックの制御を提供すればいいような。
- ちゃんとしたパーザコンビネータを作れば、苦労して正規表現を書いているような状況の多くでそれを代わりにつかえるのではないでしょうか。正規表現は(とくに大きいのになると)書くのが面倒、デバグはかなり困難、読むのは不可能みたいになりがちですから、わかりやすい代替物があるメリットは大きいです。それに、PEGは正規表現より文法の範囲が広いので、根本的に正規表現で扱えないものが扱えますからね。
GaucheFest第16回
Japan Juggling Festival 2006 (通称JJF)と同日なので不参加で。プログラミングとはまた違った超絶テクニックを見てきます。やるほうは腱鞘炎にならない程度にほどほどに……。
GaucheFest第14回
参加できなくなってしまいました。
GaucheFest第12回
土曜日のみ参加します。
GaucheFest第11回
土日とも参加します。土曜日は午後から参加で、Gaucheのバグを発見してしまい、それの解決にあたっていました。
日曜日: 2つのオブジェクトの構造が同型かどうかを調べるobject-isomorphic?でハマる。リストをスロットに持つオブジェクトで、そのリストの中に自分自身を持つような場合、equal?では構造を含めた同一性を確認できないので、isomorphic?を使う。isomorphic?は循環を持つ構造に使うことができる。ところがこれが帰ってこないので調べてみたところ、第3引数のコンテキストをリストに対するisomorphic?に渡していなかっただけだった。再帰的なisomorphic?の呼び出しでは、コンテキストをきちんと受け渡していかないと無限の再帰に入ってしまう。ところで、「同型」とは数学用語みたいだが、Gaucheのマニュアルはバックグラウンドのきちんとした用語がさらりと出ていててかっこいい。
GaucheFest第10回
参加してます。今日のお題はJavaScriptとKahuaのお勉強。
- 1日目: Kahuaをインストールし、SXMLがなんなのかを知りました。以上。あまり進歩がない。
- 2日目: いまいち根本がわかっていない不安を感じつつも、プリミティブな電話帳アプリケーションはKahuaで完成。JavaScriptを使うまでにいたらなかった。
Festで得た情報。入門Haskell—はじめて学ぶ関数型言語という日本語のHaskell入門書がでているそうです。さっそく購入するつもり。
GaucheFest第9回
正規表現の拡張のまとめをしていました。発表できてよかったです。
いくつか忘れないうちにメモ:
- 継続ベースのアプリケーションでのパラメータの使い方について。手続きの呼び出しをparameterizeでくくって、その動的コンテキストでグローバルな設定とは異なる値を見せることができるが、継続ベースのアプリケーションでは、継続の中では元の値が見えてしまう。なぜなら、parameterizeフォームからいったん抜けた後に継続のクロージャが呼び出されるから。Kahuaではloggerでこの問題にあたって(log-default-drainかな?)、結局、ログ出力先をグローバル変数で持っているそうな。
- 継続ベースのアプリケーションで、継続同士が影響するようなケースをきれいに扱う方法。これは実例を挙げないと説明が難しいのでまた別のところで。
Last modified : 2006/11/27 03:29:03 UTC