Entries from 2007-01-01 to 1 month

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

setjmp/longjmp を使う方法。 ケース1 a(x)->b(x)->c(x)->d(x)のように関数を深い方向に呼び出しているとします。 a(x) { //ここで継続を取り出す // ここ(setjmp) // b(x); } b(x) { c(x); } c(x) { d(x); // d(x)の結果次第で // longjmpする } setjmp時の…

sf.net で svn move が forbiddenになる

sf.netで以前は svn move をcommit出来ていたのですが、最近 forbidden になりませんか? 追記 解決策発見 N2 ToolBox sourceforge.netのSVNで403エラー

継続実装の資料

Gauche - VMのスタック操作 Schemeを作ろう 第3回 ちなみに現時点ではさっぱり分からない。 まあ何とかなるでしょう。

automakeのdepcomp

automakeのdepcompが依存ファイルの管理をやってくれるらしいのだけど微妙。 gcc -MM ほどの精度がない automake で gcc -MMを利用する良い方法はないものか。

マクロの多用

マクロの多用といってもSchemeのマクロではない。 C言語のマクロである。 手続きを簡単に効率良く書けるようにという意図。 例えば char=? であれば PROCEDURE(CharcterEqualP, "char=?") { ARGC_SHOULD_BE(2); CAST(ARGV(0), Charcter, c); RETURN_BOOLEAN(…

symbolの実装

symbol周りを実装。R5RSからの引用によれば シンボルとは,二つのシンボルが(eqv? の意味で) 同一な のは名前が同じようにつづられるときかつそのときに限ら れるという事実に,その有用性がかかっているオブジェクト である。 これだけだと良く分からない。…

vector実装

vectorと必須手続きを実装した。 Schemeのベクタは固定長なのね。 内部実装は std::vector だからいつでも可変長にできるという話。

本家Slashdotでちょっと言及された

http://www.monaos.org へアメリカからやたらアクセスがあると思ったら、ちょっとだけSlashdotで言及されていたよ。 大変光栄です。アクセス多い。 Other free-desktop operating system projects which take different and innovative approaches like Reac…

次は

symbol周りを完成させる。 そのあとは基本手続きをがーっと作って。 call/ccかな。楽しみだ。

[Scheme] quote/char

quote の syntax sugar ' を実装した char を実装した char関連の必須手続きを実装しテストも書いた 手続きを簡単に定義できるようにCのマクロを書いた 明日は vector かな。

ChangeLogの特定の箇所に簡単にジャンプ

ChangeLog で長期的な todo を管理している場合、過去の特定のChangeLogエントリーにその todo が書かれていることがあると思います。 分量が少ない todo であれば、新しい日付のエントリーにコピーしていけば良いのでしょうが、量が多い場合はそうはいきま…

Hey Bulldog

Hey Bulldogを静かな部屋で良いスピーカで聞きたい!(もしくはQC3で) QC3で聴いた。あぁベース最高だ。これでごはん3杯はいけるよね。 演奏したことあるけど歌とギターだった。 ベースの人はさぞかし気持ちよかっただろうなぁ。 やっぱり中後期になるとベー…

quote とは? - 2

quote とはに関して迷っていたわけですが、shiroさん, arinoさん, id:hiratchさん, id:alohakunさんにたくさんのアドバイスを頂きました。 ありがとうございます。 おかげさまできちんと理解できました。 ↓過去の迷い quoteとは quote続き 結局 quote とは?…

unit test - その2

マクロがある程度動いているので id:tomapd:20060515:1147711444 を参考にちょっとしくみを作った。 assert-true/assert-false をラップした assert-check-true/assert-checke-false。 (assert-check-true "eqv? - should be #t" (eqv? #t #t) (eqv? #f #f) …

Emacs CVS headにしたらなるとが!

Rieceでなるとが、なるととして表示されている。感動。

load

shiroさんの御指摘をうけて load を eval を利用して通常手続きとして実装しようと試みる。 マクロの展開がうまくいっていないので調べ中。

quote続き

quoteの用途 eval の引数 gosh> (eval (quote (cons 1 2)) (scheme-report-environment 5)) (1 . 2) gosh> (cons 1 2) (1 . 2) データ構造を入力する (define x (quote (a b c))) (car x) a なんとなく gosh> (eq? (list 'a 'b) (quote (a b))) #f gosh> (eq…

補助スクリプト

class_create.pl を書いた。 これでC++で実装するSchemeの通常手続きを書きやすくなった。

なんだってー

確かにSICPは入門コースの教科書だけど、最初にあれに触れて全部理解できた 人は選ばれた人って感じがする。Shiro な、なんだってー。 shiroさんとか arinoさんとかそういう人はさらっと読んでいるんだろうなと思っていた。

Quoteとは

eval を実装するには Quote を知らなくてはいけない。 Quoteはインタプリタの中の小人から見たらどういうものだろうか。 というようなことを悶々と考えていて、脳味噌がグルグルした。 あるとき閃き「分かった!」と大声で叫んで、すぐに実装してみた。 それ…

ヘッダにコードを書きまくる

C++

いま +-*/ などの関数をそれぞれ Plus.[h|cpp], Minus.[h|cpp], Multiply.[h|cpp], Devide.[h|cpp]のように、まじめにクラスを書いている。 ただ apply を実装するだけなのでクラスの構造は保ちつつ、楽をしたいというのが正直な気持ち。 一つの方法として .…

エラーの整備

現状はエラー時に fprintf で stderr にごにょっとメッセージを出して return NULL; みたいなありえないことをやっている。 そのせいでたまにセグフォするという極悪仕様なのだけれども、これをまともにするのが今日の作業。 実現したいこと 大域脱出してシ…

Emacs CVS HEAD

ひさしぶりに cvs up して Emacs を CVS HEADにした。 安定すると良いな。

and/or

and/or を特殊形式として実装していたが、マクロに置き換えた。 マクロ便利。

load と set! を実装

load はじめに load を + - * / などと同じ土俵で実装しよう試みたが大間違いに気づいた。 マクロの展開以前の、テキスト => Node というフローで load しておかないとまずい。 他の手続きとは全然違うレイヤの手続きであることに今更ながらにきづいた。 set…

Unit Test環境の構築

今までのテストは test.scm を実行して結果を目視 cppunit で C++ の関数をテスト というフローでした。 マクロの実装が進んできたので Scheme での Unit Test の必要性が出てきました。 そこで目をつけたのが id:kzk さんの SigSchemeの unittest.scm です…

EmacsのChangeLog で todo を管理するときにちょっとだけ楽しく

僕は ChangeLog で todo を管理しています。 以下の様に箇条書きで、終わっていないものは□、終わったものは■(塗りつぶし)で書いています。(この方式は id:kambara に教わりました。) -□括弧の数の対応をチェック -□現状把握をして優先度を決める -□すべての…

audio

trunkにある audio 試してみました。割り込みが来てないとのことでしたがキタキタ! カーネルに割り込みが来ているか?を調べる方法 kernel/ihandlers.cppで // こいつをコメントアウト //IRQHANDLERSlave(9) // こいつを追加 void irqHandler_9() { g_console->p…

マクロ展開その後

メモ帳に図を描きまくった。 挙げ句の果てに今僕に必要な関数が分かった! 気づくの遅いよ… int MacroFilter::foreachNodes(Node* root, int (MacroFilter::*f)(Node*))

マクロ展開その後2

以下の様な関数を書いた。 int MacroFilter::foreachNode(Node* root, bool (Node::*match)() const, int (MacroFilter::*func)(Node* root, Node* node)) { int ret = 0; if (root->isNodes()) { // don't use iterator for (Nodes::size_type i = 0; i < r…