タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

compilerとprogramming-functionalとprogrammingに関するkgbuのブックマーク (3)

  • すごい勢いでSchemeコンパイラを作りたい - .mjtの日記復帰計画

    nmoshは、単体でR6RSスクリプトを展開(expand)するためのライブラリを備えている。ここでいうexpandとはマクロの処理のことで、これを使うことでnmoshのsyntax-caseとかsyntax-rulesの実装を簡単に流用できる。 世間的には、Schemeサブセットのコンパイラは比較的簡単に作ることが出来るとされている。 http://www.iro.umontreal.ca/~boucherd/mslug/meetings/20041020/minutes-en.html (再掲) ↑で説明しているのはCPS変換とクロージャ変換だが、Schemeを作るのに必要な残りの部分はMoshのものをそのまま流用することができる(はず - 例外のハンドリングのために、かなりトリッキーな手法が必要になる)ので、これらを流用すれば、フルに機能するR6RS Schemeも簡単に実装できるよ

    すごい勢いでSchemeコンパイラを作りたい - .mjtの日記復帰計画
  • mad日記

    Erlangが末尾再帰最適化をしてるか調べようとした - みずぴー日記 に興味が湧いたので,erlangのアセンブリコードを見てみた.beamのバイトコードにほぼ一対一対応していると考えていいと思う. まず単純な定義の場合 fact(0) -> 1; fact(N) -> N * fact(N-1). 以下のようになる.アセンブリコードの各行はそのままerlangのタプルとなっている.ここで, {x, N}: はx registerという.Nはレジスタ番号. {y, N}: はy registerという.レジスタという名前だが,スタック上に置かれる. {f, N}: は{label, N}に対応している.{f, 0}はプログラム終了コードのラベル. {function, fact, 1, 2}. % 引数1個, {label,2}がエントリーポイントという意味. {label,1}. {f

    mad日記
    kgbu
    kgbu 2007/10/05
    コンパイル時にプログラムを実行してしまおうという話。Template Haskellを使用した例
  • テンプレートメタプログラミング - Wikipedia

    出典は列挙するだけでなく、脚注などを用いてどの記述の情報源であるかを明記してください。 記事の信頼性向上にご協力をお願いいたします。(2022年9月) テンプレートメタプログラミング(英: template metaprogramming)は、メタプログラミング技法の一種であり、コンパイラがテンプレートを使って一時的ソースコードを生成し、それを他のソースコードと結合してコンパイルする方式である。テンプレートが出力するものは、コンパイル時の定数、データ構造、関数定義などがある。テンプレートの利用は言わばコンパイル時の実行である。この技法は様々な言語で使われている(C++、D言語、Eiffel、Haskell、ML、XLなど)。 メタプログラミング手法としてのテンプレート利用には2段階の操作が必要である。まずテンプレートを定義し、次にそれをインスタンス化しなければならない。テンプレートは生成す

    kgbu
    kgbu 2007/10/05
    コンパイル時の定数計算やテンプレートのインスタンス化が関数型言語というか参照透明性のある言語の実行モデルと似ているという話もある
  • 1