Как работают "блоки" Clang?
http://clang.llvm.org/docs/BlockLanguageSpec.txt
Выглядит действительно круто
Тем не мение,
- Я не понимаю это
- Я не вижу примеров этому.
- Я не вижу примеров идей, которые трудно выразить в C++ как есть, но тривиально выразить в блоках.
Кто-нибудь может просветить меня об этом?
5 ответов
По сути, блоки - это способ передачи кода и области видимости в виде данных. На некоторых других языках они известны как замыкания и анонимные функции.
Вот статья с более подробной информацией и примерами кода.
NanoTech уже связан с объяснением блоков. Что касается того, как это относится к C++, позвольте мне высказать свое личное мнение: это расширение бесполезно в C++. Вот почему:
Относительно ссылочного типа блока: у нас уже есть "полиморфные функции", которые могут нести некоторое состояние, см. Boost:: function, tr1:: function. C++ включит полированную версию этого в свою следующую стандартную библиотеку. Преимущество над "блоками С" заключается в том, что вам не нужно возиться с такими вещами, как Block_copy
а такжеBlock_release
, Эти объекты полиморфных функций достаточно умны, чтобы самостоятельно управлять памятью.
Относительно литерального синтаксиса блока: это хороший синтаксис, который позволяет вам разместить код там, где он "принадлежит", без необходимости большого количества стандартного кода. Но то же самое относится к его контрагенту C++: C++ 0x lambdas. Но лямбда-функция C++ 0x также позволяет использовать лямбда-объекты в узких внутренних циклах без высоких затрат производительности на вызовы функций из-за возможного встраивания.
Поскольку лямбда-символы C++ 0x также могут использоваться в ситуациях, когда производительность является проблемой, а std:: function проще в управлении памятью, добавление "C Blocks" в C++ кажется излишним. "Блоки C" кажутся более приспособленными к языкам, которые не поддерживают шаблоны или деструкторы.
Чтобы узнать больше о блоках и о том, как они работают, вы можете обратиться к следующему:
- Представляем блоки и Grand Central Dispatch
- Темы программирования блоков
- Какао для ученых (часть XXVII): как достичь цели с помощью Objective-C
- Какао для ученых (XXXI): все на борту Grand Central
- Руководство по программированию параллелизма: реализация задач с использованием блоков
- Основные компетенции Cocoa: блочный объект
Они в основном просто термин Apple для замыканий/ анонимных функций. Как отмечает Николай, именно так вы используете Grand Central Dispatch для параллельного запуска нескольких функций (таким образом, используя более 1 ядра), не беспокоясь о многопоточности и блокировке.
Насколько я понимаю, это расширение предназначено для платформы Apple Grand Central Dispatch. Блоки - это крошечные планируемые / очереди объекты, которые потенциально могут выполняться параллельно.