Snow LeopardのC / C ++ / Objective-Cでのクロージャサポート

それが何であるかを推測する:



testblock = ^( char *s) { printf( "String is %s\n" , s); };

testblock( "TEST!" );



* This source code was highlighted with Source Code Highlighter .






まもなく、そのようなデザインは、Mac OS、そしておそらくiPhone OS用のアプリケーションでますます見つかるでしょう。



2008年夏の終わりに、Appleはコード名「Blocks」の下でC / C ++ / Obj-Cの拡張に取り組んでいると発表しました。





なんでこんなこと?



クロージャーを使用すると、コードがより明確で明確になることがよくありますが、それがAppleが行動した唯一の理由ではありません。



macresearch.comが1年前に推測したように、これは2009年6月に確認された「マルチコア戦争」とも関連しています。AppleはGrand Central Dispatch (Macの重要な要素の1つ) OS X 10.6 Snow Leopard)。



Grand Central Dispatchを使用すると、さまざまなキューをコードブロックで簡単に操作できます(これは非常に興味深いことに簡単に書かれています)。マルチコアシステムのリソースをより効率的に使用できます。



プログラマーからはどのように見えますか?



これは、Snow LeopardからXcodeにアクセスできる開発者だけでなく、Mac OS X 10.5用のPLBlocksツールチェーン/ランタイムをインストールするすべての人が理解できます。 このプロジェクトには、「高度な」GCC、Xcode用プラグイン、および必要なフレームワークが含まれています。 このコードはどこから来たのですか? PLBlocksの作者は、実際にAppleのGCCパッチを 10.5に移植しました。 インストールはプロジェクトページで説明されており、問題はありません。



15分で書いたサンプルコード:



#include <stdio.h>

#include <string.h>



void run_callback( char *s, void (^callback)( int len)) {



printf( " %s:" , s);

callback(strlen(s));

}



void print_numbers( int *array, size_t array_size, int (^chooser)( int )) {

int i;



for (i = 0; i < array_size; i++)

if (chooser(array[i]))

printf( "%4d" , array[i]);



printf( "\n" );

}



int main ( int argc, const char * argv[]) {

void (^testblock)( char *);



testblock = ^( char *s) { printf( "String is %s\n" , s); };

testblock( "TEST!" );





int test[] = { -1, 5, 91, -45, 0, 4, -43, 42 };

int len = sizeof (test)/ sizeof ( int );



printf( "all numbers:\n " );

print_numbers(test, len, ^( int n) {

return 1;

});



printf( "positive only:\n " );

print_numbers(test, len, ^( int n) {

return n > 0;

});





int factor = 2;

printf( "another demo..\n" );

run_callback( "hello" , ^( int len) {

int i;

for (i = 1; i <= len*factor; i++) printf( "%3d" , i);

printf( "\n" );

});



return 0;

}




* This source code was highlighted with Source Code Highlighter .






実行結果:



文字列はテストです!

すべての数字:

-1 5 91-45 0 4 -43 42

ポジティブのみ:

5 91 4 42

別のデモ...

こんにちは:1 2 3 4 5 6 7 8 9 10





この例は非常に単純です。 確かに、C / Obj-CのコードブロックのテーマとGrand Central Dispatchの使用は、はるかに広く深くなっています。



他に読むものは何ですか?



さらに読むために特別に選択された資料(英語):

Snow Leopardのリリースと新しいXcodeを楽しみにしています。 ただし、ブロックがiPhone OSにも表示されるという証拠はありません(前述のPLBlocksの実装を除く)。



全体として、これは素晴らしいことです。



All Articles