scheme
Common Lisp quote unquote(黒田寿男) 強い Lisp 愛と、着実に前に1歩ずつ進む力を兼ね備えた人なのだなと感じた。Scheme は Lisp ではない!と言っているときは少し怖い印象だったのだが、懇親会では優しくいろいろと経験談を教えて下さった。どれくらい…
自分の周り3人が shinh さん rui さん 黒田さん という豪華メンバー。恐縮しつつ大変楽しかった。みなさん話題も豊富だしよく勉強されているなと。まだまだ修行が足りませぬ。 Erlang の並列を学べ レジスタ割り当ては適当で、peep hole でちょこっと修正 ネ…
和田先生に SICP にサインしていただきました。 表紙を開くと サインが!
今日の僕の発表の資料です。Toy to practical interpreter Mosh intenals Shibuya.Lisp2009/02/28View more presentations from higepon. (tags: mosh scheme)
Lingr:まとめを見ていて発見。 Gauche 0.1 をチェックアウトする方法。 cvs -d:pserver:gauche.cvs.sourceforge.net:/cvsroot/gauche co -D '2001-03-03' -d gauche-0.1 Gauche Reading Gauche で 0.8.11 のコードを読みまくっているので違いが見られて面白…
2009年2月28日(土) 14:30- に Shibuya.lisp Tech Talk #2 を開催します。 前回と同じく会場は渋谷の 価格比較サイト / ECナビ さんに提供していただきます。ありがとうございます。 今回は前回と同等かそれ以上の豪華な Tech Talker 陣です(自分以外は。。…
SRFI 97: SRFI Libraries。
R6RS の identifier 規則で残念なところ 2つ。 @ が identifier でない(match.scm の移植で困った) -xxx が identifier でない(コマンドラインオプションを identifier として扱えない) Mosh では拡張しどちらも許可している。
マクロがマクロを生成するような場合に define-syntax が入れ子になる。このとき ellipsis "..." に注意。 内側のマクロで利用する ellipsis は外側の ellipsis と区別するために (... ...) とする必要がある。 コード例。 (define-syntax define-command (s…
VM クラスの一部の関数を virtual にしたのでパフォーマンス測定。
鬼車とregex.h で定義されているシンボルが重複する。DETH_TEST は必要ないのでテストのビルド時に -DGTEST_HAS_CLONE=0 とすることで解決。
WEwLC で学んだ通りに進める。Test Harness で VM クラスのインスタンス化を試みる。クラス自体が少し大きい。 クラス自体ではなくまずはファイルを分割する。そうすればすくなくとも Build Dependency は減らす事が出来るし平均ビルド時間の向上もするだろ…
問題 VM のスタックは Object の配列であるが、スタックにスタックポインタを push することがある。例えば Call Frame 時など。 この場合 Object* を Object の配列の要素としたい。つまり Object* 型は Object型でもある必要がある。このため Object* のポ…
call/cc が絡む以下のような eval が動かなかったので修正。 (eval '(let-syntax ([x (lambda (stx) (datum->syntax #'here (condition-message (call/cc (lambda (esc) (with-exception-handler (lambda (exn) (esc exn)) (lambda () (eval '(assertion-vio…
また、 Plan9 などの OS ではプロセスの終了状態を文字列で表すため、 exit の引数には任意の値を渡すことができる。 (exit "success") なるほど。逆引きScheme便利! どなたかは存じませんが Plan9 を引き合いに出すところが OS 好きとしてはたまらない。
Mosh のライブラリに Tiny CLOS を追加しました。 現時点では実用的な速度では動かないので注意。以下のような短いスクリプトでも実行に 500msec ほどかかる。コンパイラ速度改善のためのベンチマークとして使えそう。 (import (rnrs) (clos user) (mosh str…
psyntax にはR6RSライブラリをプリコンパイルしてシリアライズし、後からロードする機能がある。この機能はプログラムの高速起動に役立つのだが、マクロのシリアライズには Record のシリアライズが必要。この実装が面倒で複雑になるので今回のリリースには…
R6RS test suite base のテスト。Mosh で全て通った。base という名前から分かり通り基礎的なテスト。基礎的といっても簡単にテストが通るわけではない。処理系が間違いそうなパターンは当然の事、R6RS の機能をフルに使ったテストがてんこもり。 先週まで M…
letrec のエラー検出を Scheme 側の current-exception-handler で catch したいという要求からエラーを上げるインストラクションを追加した。 この方法が定石かどうかは分からないがこれしか思いつかなかった。 (guard (c [#t #f]) (letrec ([a 3] [b a]) (…
R6RS test suite で、これは実装の仕方によっては通らないだろうという浮動小数のテストを発見。パッチを送ったら採用してもらえた。
letrec の仕様 まずR6RSとしての letrec の仕様は variable と同じ環境で init が評価される init 評価の順序は未規定 順序が未規定であることからも分かる通り、init での variable の直接参照・代入はエラーとしなければならない である。 続いて現在の Mo…
R6RS Test suite は良い。自分では気付きにくい境界条件などもある。 修正したもの (abs (least-fixnum)) は Fixnum の範囲を超える (div (least-fixnum) -1) は Fixnum の範囲を超える (div 1 0.0) はエラーだが (/ 1 0.0) は +inf 。 (expt 0.000000 5+0.0…
私はこの件について、"読むと士気が落ちること請け合い! すげぇとか言いようがない。無題 - 黎明日記"と言った。これは半分冗談であるが、半分は本気だ。つまり、この発言は Ypsilon の高性能さに対する嫉妬心を含んでいるし、また、氏と比べて自分が如何に…
R6RS test suite の bitwise と flonums が通った。 ../mosh tests/r6rs/run/arithmetic/bitwise.sps Running tests for (rnrs arithmetic bitwise) 232 tests passed ../mosh tests/r6rs/run/arithmetic/flonums.sps Running tests for (rnrs arithmetic fl…
ココサブさんのがんばりもあり、実装率はかなり上がってきた。自分が担当している部分も難しさの峠は越えたように思う。
Complex analysis for R6RS implementationに arcsin を追加。導出の過程は高校生の数学の範囲だが久しぶりなので解の公式などがうろ覚えでびっくり。 しかも計算間違ってたので修正。
複素数の三角関数など。 Definitions sin(z) cos(z) tan(z) arcsin(z) arccos(z) arctan(z) sqrt(z) cont'd
数値の read において、 1e2 (=> 100.000..)と #xe2(=> 226) が区別できていないバグを発見。今日やっと解消。 re2c の YYGETCONDITION の仕組みを使い区別。
ホスト名の部分は必ずメジャーモードにするというルールになり、ほとんどのプログラマの Emacs に設定してもらえれば、どの言語が多く書かれているか?とか分かりそう。 言語ごとに一行あたりで実現できる機能の違いがあるので、アウトプットサイズは参考値…