Play with Blocks(closure in C)

by syoyo

Snow Leopard を待つまでもなく、LLVM/clang を使い, C で block 構文(クロージャ)を使ってみることができます.
(ただし Mac 限定)
Grand Central Dispatch も構文が似ているので、これをベースにした仕組みなのかな?

参考にしたのはこれ.

http://lists.cs.uiuc.edu/pipermail/cfe-dev/2009-June/005378.html

– LLVM/clang を svn から引っ張りだす.
– compiler-rt を $(llvm)/tools に放り込む
– ML に attach されている Makefile も放り込む
– LLVM/clang を make する.

こんな感じのコードを作る.


#include 
int main(int argc, char **argv) {
 void (^helloBlock)(void) = ^{
   fprintf(stdout, "The World! Time stops...\n");
 };

 helloBlock();

 return 0;
}

こんな感じでコンパイル&実行します.


$ clang -o muda main.c -L/path/to/LLVMlib -lBlocks
$ ./muda
The world! Time stops...

おー. しかし現状 Mac でしか動かない(ランタイム側のサポートも必要なので)のが残念ですね.

ただ、gcc でもそのうちサポートされそうな気がします.
(compiler-rt は libclosure ってライブラリをベースにしていて、さほど Apple 独自のランタイムライブラリ群を使っているというわけではないようなので)

Advertisements