Entries from 2007-01-01 to 1 month

setjmp用の__jmpbuf の スタックポインタがエンコードされている件

継続ライブラリを書くのに、setjmp を使えば(ある程度)可搬性が維持できると思い実験していたら見事にはまった。 setjmp が使う jmp_buf にはスタックポインタやら汎用レジスタが保存されていて、それらを書き換えて longjmp してあげれば好きな状態に復帰…

継続マラソン - 継続の実装方法を考える12

「C/C++言語で簡単に継続を実現するためのライブラリ - cont」がダウンロードできない。 実装に興味があったので残念。 さて、setjmp/longjmp の拡張版を作り、それで Continuation を実現しよう。 と、その前にそんなライブラリは誰かが、他に書いてあるだ…

継続マラソン - PCL / Io のコルーチンの実装を見てみる

id:shinichiro_hさんからコメントを頂きました。ありがとうございます。 『たぶん実装は似たものになると思うのですが、コルーチンですと Ruby や Io なんかから実装ひっこ抜いてきたらそれなりに動いた経験があります。 あと PCL も参考になるかなと思いま…

継続マラソン - 継続の実装方法を考える11 - SigScheme

ふと。他の処理系の実装方法が気になって SigScheme-0.7.1 のソースを読んでみる。 src/continuation.c に大体の処理がまとまっているようだ 「継続を作る」=> setjmp と「継続を call する」=> longjmp setjmp/longjmp をそのまま使用しているようなので深…

お笑い芸人の宮川大輔さんを目撃

さっき、渋谷のドンキホーテでお笑い芸人の宮川大輔さんを目撃。 あの眼鏡かけていたよ。

Fabriceタンは年上

Fabrice Bellard - Wikipedia, the free encyclopedia1972年生まれか。 年上でほっとしたよ。

autotoolsを開発中に使うのは不便な事に気づいた

autotoolsを開発中に使うのは不便な事に気づいた。 依存関係の検知が gcc -MMに比べて甘いので.hを更新しても、依存するファイルの再ビルドが行われない ファイルを追加するときにいろいろ面倒 何気に遅い configure が面倒 などなどでわりと不便。 完成して…

C++

固いよ。 プロトタイプは違う言語で作るべきなのかなぁ。

会社の近くで

TBS 金曜ドラマ 『花より男子2(リターンズ)』 | トップページの撮影しているっぽいなぁ。 こんど探してみよう

継続マラソン - 継続の実装方法を考える10

(define cont 1) (begin 1 (call/cc (lambda (c) (set! cont c) (display "hige"))) (display "higepon")) (cont 1) 昨日に書いていた方法を、Begin限定で試してみて、動いた。 設計が汚くなっている気がするので明日考察しよう。

継続マラソン - 継続の実装方法を考える9

もう少し考えを進めてみよう。 beginの場合 (begin 1 (begin 2 (call/cc ...) 3) 4) begin(内側)->getContinuation() (begin _ 3) begin->parent()->getContinuation() (begin _ 4) ifの場合 - 1 (begin 1 (if (call/cc ...) 2 3) 4) if->getContinuation() …

継続マラソン - 継続の実装方法を考える8

うーん。longjmpに逃げたいがぐっとこらえよう。 S式で考えた方が分かりやすいと昨日思ったのだけど、それはなぜだろうかと今考えてみる。 S式で考えれば ( (lambda () (display "1") ( (lambda () (display "2") (call/cc (lambda (c) (set! cont c))) (dis…

継続マラソン - 継続の実装方法を考える7

継続の実装方法に関して、理解できたと思ったりやっぱりだめだというのを繰り返していたのだけど、理解を妨げていたものが分かった。 ずばり僕の処理系の実装におけるS式の扱いに問題がある。 処理系は text => S式 => Scheme内部オブジェクト => Scheme内部…

ηなのに夢のよう

このシリーズもそろそろ中盤のスパートに入った印象。 本書の終盤のアレは泣ける。(ネタばれなのでこれ以上は書けない)ηなのに夢のようposted with amazlet on 07.01.24森 博嗣 講談社 売り上げランキング: 193Amazon.co.jp で詳細を見る

停滞中

ちと停滞中。 産みの苦しみが50%。残りはまあアレですよ。 そういえばWBSを見ていたらid:kujirahandさんをお見かけしました。

Software Design 2月号にインタビュー掲載

Software Design 2月号の「開発者よ立ち上がれ」!OSS開発者が贈る熱きメッセージ」というコーナでインタビューが掲載されました。 Software Design (ソフトウエア デザイン) 2007年 02月号 [雑誌]posted with amazlet on 07.01.22技術評論社 売り上げランキ…

んー

特殊形式の扱いについて整理する必要あり。

水泳

10日ぶりの水泳。 泳ぎながら継続スタックの実装を考える。 全然関係ないが、ヒップホップダンス教室に興味があるんだけど行くのが恐い。

継続マラソン - 継続の実装方法を考える6

迷っていることを書き出してみる。 継続の単位は? 手続き呼出しが最小単位 1つのScheme Objectの eval が最小単位 どちらだろうか。 実験(Gauche) (define a 3) (define cont '()) (+ ((lambda () (set! a (+ a 1)) (+ 1 2))) (call/cc (lambda (c) (set! co…

Mona オフィシャルサイト

745 Name: Be名無しさん [sage] Date: 2007/01/21(日) 23:50:10 ID: Be: 簡単なものを複雑に実現しないと、大人OSであるMonaOS界隈では 認められないのかもしれませんね > j様 Yamamoto Mona-OS (オフィシャルサイト) http://yamamoto-mona.cocolog-nifty.…

junjunnさんのファイルシステム高速化をとりこもう

現在の trunk と junjunnさんのファイルシステムコードの diff をとって差分を把握してからとりこみたい。 ただ単純に diff をとったのでは大量の変更(数千行)が検出されてしまいうれしくない。 問題点は 文字コード/改行コードが変わっている →手動であわせ…

継続マラソン - 継続の実装方法を考える5

「Schemeを作ろう 第3回」さんにある方法だが、自分でスタックを把握しながら図を描いたら良く分かった。 僕の理解では 処理系に存在する継続を順にリストに保存する 手続き呼出し key, 引数を value として手続きに必要なものを保持する ことが肝要であり、…

継続マラソン - 継続の実装テスト

(begin (+ 1 7) (+ 3 5)) 処理系に汚く、コードを埋め込むかたちで、上の (+ 3 5) の途中に (+ 1 7) の処理を継続リストから無理矢理実行 & exit するコードを書いた。 実行結果は予想通りうまくいった。 実装してみて分かったけど、継続には Environment も…

Hello World が2回目の呼出しで落ちるバグの修正

「バグの原因調査はツールの作成から」で書いたツールをつかってバグの検証と修正をした。 ツールを使って差分を検証していったら r3862 と r3865 の間にこのバグが入り込んだことが分かった。 PEParserの fixups パッチが原因。 ちょっと自信がないのだけど…

継続マラソン - 継続の実装方法を考える4

arinoさんから質問を頂いた。 arino 『現在の実装では、関数の引数が別の関数呼び出しの結果になっている場合、どう処理されているのでしょう? (func1 (func2))みたいな形。 Cの世界での再帰? (func1 (func2) (func3)) の場合は、内部的には apply(func1, …

継続マラソン - 継続の実装方法を考える3

Schemeを作ろう 第3回で触れられている方法。 ではどうしたか。結局私は、内部構造を本当にバカ正直にに継続の連続にしましたこれについて考えてみようと思います。ただ僕の理解が正しいかは自信なし。 シンプルな例から考えるのが良いだろう。 考え方 (+ 1 …

λに歯がない

λには歯がない、僕には がない

バグの原因調査はツールの作成から

ちょっと厄介なバグがあって、原因を調べたい。 ただ原因に心当たりがあまりない。(心当たりが多すぎる) このような状況なので、どのリビジョンからこのバグが入り込んだか調べたいのだけど意外と面倒。 大まかにやらなければいけないことは 該当ブランチ…

継続マラソン - 継続の実装方法を考える2

shiroさんに頂いたコメントにあった問題点を自分なりに消化してみる。 デストラクタが呼ばれない場合 longjmp してしまうと auto変数のデストラクタが呼ばれない場合があるという話。 登場人物としては 僕の書いたクラス std::string/map/vector が想定され…

mona-stdio/contrib-stdioブランチを trunk にマージ

次のリリースに向けて Stream や標準入出力を実装したブランチを trunk にマージしました。 ただ id:shotaro_tsujiが指摘していた argv 周りの何かがまだ地雷で残っているので調べます。