« 2008年07月 | メイン | 2008年10月 »

2008年08月 アーカイブ

2008年08月07日

LL Future の「 LL で未来を発明する」に参加します

8/30 のLL Futureにて「LL で未来を発明する」セッションにて話します。

私以外のメンバーが


  • Larry Wallさん => Perl の生みの親

  • まつもとゆきひろさん(ネットワーク応用通信研究所) => Ruby の生みの親

  • 住井 英二郎さん => MinCaml コンパイラを書かれた住井先生

と豪華すぎて緊張しますが、言語処理系を作るという立場から面白い話ができればと思っています。

2008年08月28日

Mosh 0.0.6 をリリースしました

Mosh 0.0.6 をリリースしました。

R6RS のエラーシステムの多くが実装され、より柔軟にエラー処理が書けるようになりました。

例えば (car 3) のようにエラーが発生しそうな場合、guard で囲むことにより

(import (rnrs))

(guard
[con
[(message-condition? con)
(display (condition-message con))]]
(car 3))

例外をキャッチすることができます。


また guard で囲まない場合はデフォルトの例外ハンドラにより以下のようなエラーが表示されます。


 Exception:
Unhandled exception

Condition components:
1. &assertion
2. &who: car

3. &message: "pair required"
4. &irritants: (3)

また本リリースでR6RSが要求する Hashtables、Conditions、Enumerations、List utilities 多くの機能が実装されました。

追加、変更点の詳細は以下の通りです。


R6RS モードの速度向上


「R6RS モード(-b オプション)」の起動が大幅に速くなりました。


R6RS Hastables


ハッシュテーブルを利用するための手続きがすべて実装されました。

使用例


(import (rnrs))

(let ([hashtable (make-eq-hashtable)])

(hashtable-set! hashtable 'red 'apple)
(display (hashtable-ref hashtable 'red)))

;; => apple

R6RS Hastables では equivalence function と hash function を自分で定義し独自のハッシュテーブルを作成することもできます。


詳細な仕様はR6RS 13.Hashtablesをご覧ください。


R6RS Records

以下のように構造体を利用することができます。


(import (rnrs))

(define-record-type (point make-point point?)
(fields (mutable x)

(immutable y)))

(let ([p (make-point 3 4)])

(display (point-x p))) ; => 3

構造体は継承をすることもできます。詳細な使い方は6.Recordsをご覧ください。

R6RS Exceptions and conditions


例外とコンディションの仕組みが実装されました。


これにより



  • 例外を発生させる

  • 発生した例外の状況(コンディション)を示す
  • 例外をキャッチしたり、そのまま実行を継続する


といったことが安全に行えるようになりました。


詳細な使い方は7.Exceptions and conditionsをご覧下さい。


細かい追加・内部的な改善など


  • VM 内部で発生したエラーを全て新しいエラーシステムに入れ替え

  • R6RS List Utilities のすべての機能を実装

  • R6RS Enumerations のすべての機能を実装

  • オープンソースで公開されている r6rs-test-suite に対応。以下のテストが通っています。

    • mutable-strings.sps

    • mutable-pairs.sps

    • contrib.sps

    • programs.sps

    • control.sps
    • hashtables.sps

    • records/procedural.sps

    • lists.sps

    • enums.sps


  • equal? が循環参照しているリストでも停止するように

  • dynamic-wind を実装

  • ライブラリプリコンパイルの速度改善

    • g++ への負荷がだいぶ減りました


  • psyntax の静的リンク

  • parameterize のサポート

  • call/cc が多値に対応してなかったバグを修正

  • apply の速度向上
  • IRIE Shinsuke さんによる READ_CHAR のパッチの取り込み

  • IRIE Shinsuke さんによる grass.scm のパッチの取り込み


謝辞


今回のリリースまでに多くの方のアドバイス、不具合報告をいただきました。

みなさんありがとうございました。


不具合報告


不具合報告までお願いします。


もし面倒であれば、ここのコメント欄に書いていただくのでもかまいません。

About 2008年08月

2008年08月にブログ「higepon @ cybozu labs」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2008年07月です。

次のアーカイブは2008年10月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。