2016-05-01から1ヶ月間の記事一覧
SICPようやく読み終わりました。 2014年5月から読み始めたので、 足かけ丸2年。愛娘も1才から3才に成長。 練習問題やブログの記事を上げていたGitHubのコミットグラフを見ると、 サボっていた期間も結構あり、実働は1年ちょっとくらいかな。 他のSICPブログ…
いよいよ最後のセクション。練習問題はやってないです。 5.5.7 翻訳したコードと評価器のインターフェース (compile)でコンパイルしたコードを積極制御評価器で動作させる。 いつものように、まずはRacketで動かせるようにした。 https://github.com/uents/s…
今回は「5.5.6 文面アドレス」から。 5.5.6 文面アドレス 「文面」とはlexicalの直訳のよう。 これまでの評価機は変数の値を探す際に、実行時にenvフレームを 都度探索していたので、それなりに計算コストがかかっていたはず。 Schemeはレキシカルスコープな…
前回に続き翻訳系のセクションを読み進めて行きました。 5.5.2 式の翻訳 defineやset!などの特殊形式のコンパイルの話。ざっと読んだ。 5.5.3 組み合わせの翻訳 主に手続き適用のコンパイルの話。簡単にまとめると、 compile-applicationでは、演算子と非演…
いよいよ最後のセクション。 これまでレジスタマシン、積極制御評価機(解釈系=インタプリタ)と来て、 ここでは翻訳系(=コンパイラ)について学びます。 翻訳系の概観 ひとことで言うと「環境をenvに保持し、引数リストをarglに集積し、 適用する手続きをproc…
積極制御評価機 (explicit-control evaluator) とは、 レジスタマシンシミュレータ上で動作する マシン語で実装されたScheme処理系のことのよう。 Schemeプログラム→積極制御評価機→レジスタマシン→Scheme処理系 と、さらに抽象化が増してきた。 実装として…
「§5.3 記憶の割当てとごみ集め」から。以下を順に読みました。 ベクターとしてのメモリ Lispデータの表現 基本リスト演算の実装 スタックの実装 無限メモリーの幻想の維持 ストップアンドコピーごみ集めの実装 メモリ管理とガベージコレクションの話。無限…