C言語で lambda っぽいもの - from reddit

Reddit で見つけたネタ。
programming: First Class Functions in C

int main() {
    returns_int_f *times2 = returns_int_lambda("int f(x) { return x * 2; }");
    int answer = (*times2)(55);
    printf("answer is %d\n", answer);
}

C言語で lambda 式が作れるぜという話。
もちろん色々な点*1で、本物の lambda 式ではないのだけどネタとしては面白い。


仕組みのコードはリンク先に書いてありますが

  1. 与えられた文字列を gcc に渡してコンパイル結果をELFで取得
  2. ELFを良い感じに読み飛ばして、関数本体部分を見つけて call

という感じ。

追記

コメントで教えてもらいました。
libtcc を利用した alohakunさんの方法の方がよりスマートですね。
http://alohakun.blog7.fc2.com/blog-entry-667.html

*1:レキシカルスコープ云々とか変数の束縛云々とか