c40こんな感じです。extendは各自試してみてください。長くなりそうなので、また次の日記で書こうと思います。*1:Arc自体については以下に作者のポールグレアム氏の記述があります。19:20JavaScriptでNode.JS/ブラウザ上で動くArc処理系を作った。Glaze展示の為に、まとまった量のArcのコードを書いてglazeで実行したらsegvが頻発した。調べてみるとまだ使用中のオブジェクトを解放してしまっていたようである。glazeは環境フレームをstd::vectorにオブジェクトを格納する形で実装していたが、もしかして、std::vector内は参照不可能と判断されてしまい、collectされてしまうのではないか思い、以下のような実験コードを書いて検証してみた。0;}コンパイルして実行。(9418)ものの見事に全部GCされてしまっている。上記現象を調べてみるとBoehmGCはstd::vectorやstd::mapと併用する場合は、それらの定義時にgc_allocator<>やtraceable_allocator<>などというものを指定する必要があるらしい。参考:http://osdir.com/ml/programming.garbage-collection.boehmgc/2004-06/msg00014.htmlまだあまりうまく理解できていないが、これは参照を知らせるためのものかなにかだろうか??とりあえず、テストコードを以下のようにしてみた。0;}コンパイルして実行。9999)ちゃんと参照不能としたもの(3000-4999)のみがGCされている。この結果をもとにglazeの実装も直したらうまく動いた。08:38BoehmGCによる早すぎる解放Tweet広告を非表示にするもっと読むコメントを書く2011-11-26問題4.14SICPはてなDiaryの一日の文字数制限なのか、途中できられていたので書き直す。一度Replを止める。mapに渡されてくるのはメタschemeのデータなので、内部でメタschemeのapplyをしてやらねばならない。19:40問題4.14Tweet広告を非表示にするもっと読むコメントを書く2011-11-094章のメタschemeを参考に、C++でscheme処理系を作る。SICP大体3000行程度のC++になった。単純な機能のschemeとなっている。macroやcall/ccはない。GCはboehmGCを使用した。C++で作るにあたって、一番違ったのはreaderとobjectだった。そこらへんを見ると参考になるかも。02:354章のメタschemeを参考に、C++でscheme処理系を作る。unboundされる変数名のコンスペア連結を外して消す。先頭にあった場合のみ、frameのcar部とcdr部を変更するので違う処理が必要。listの中にある場合は、そのコンスを飛ばして下のコンスと接続するようにする。直近の環境に無ければ、上方の環境をたどりながら探していく。読者になる検索リンクはてなブログブログをはじめる(無料)お知らせ最新記事ArcJSを使って、Webページ上にミニゲームを作るJavaScriptでNode.JS/ブラウザ上で動くArc処理系を作った。問題4.144章のメタschemeを参考に、C++でscheme処理系を作る。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。