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の実装を除く)。

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

Source: https://habr.com/ru/post/J66632/


All Articles