店主KoRoNはtwitterの @kaoriya にてつぶやいてます。主にカレーのことを。 最近はGoogle+の +Taro MURAOKA でも活動を始めました。 …気が付いたら Vim を配布し始めてから10年が経っていました。 沿革 香り屋は店主KoRoNが1997年4月1日に開設したWebサイトです。 Vimなどの店主が興味を持った物事を取り扱っております。
昨日の続きです。クロージャとcallの最適化。 クロージャは lambda、call は手続きの呼び出しのことです。 ((lambda (...) ...) arg ...) 呼び出される手続きが、lambda 式の場合。この呼び出し自体を let に変換する事が出来ます。 ($call ($lambda .. (LVar ...) Body) Arg ...) => ($let (LVar ...) (Arg ...) Body) この lambda がここでしか使われていないことが文脈的に保証されていることが重要です。(ということが後の方のクロージャ最適化を見ると分かります。) ちなみにこの変換が意味をなすのは クロージャ生成コスト + call のコスト > let のコスト という関係が Gauche VM において成り立つからです。 クロージャ最適化 クロージャ最適化の手前の時点
shiro さんが開発されている Scheme 処理系 Gauche 0.8.12 の最適化処理を勉強のためにまとめました。 よく Gauche のコードは宝の山だと聞きますが、その一端を分かってもらえるとうれしいです。 基本的にGaucheのコードのコメントをまとめただけです。 Scheme のソースコードと簡単な英語が読める人はこのまとめを読むより src/compile.scm を直接読んだ方が正確に理解できると思います。 前提1 コンパイルと実行の流れ Gauche はスタックマシン型の仮想マシンでコードを実行します。 そのため Scheme のコードはスタックマシンで実行可能なコードにコンパイルされます。 つまり Scheme のコード →(コンパイル) マシンコード →(実行) 結果 という流れでコードが実行されることになります。 今回取り上げる、最適化は上の流れの「コンパイル
GPU Gems is now available, right here, online. You can purchase a beautifully printed version of this book, and others in the series, at a 30% discount courtesy of InformIT and Addison-Wesley. Please visit our Recent Documents page to see all the latest whitepapers and conference presentations that can help you with your projects. Part I: Natural Effects Special effects have differentiated real-ti
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く