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