Как Лязг 'блоки' работает?

http://clang.llvm.org/docs/BlockLanguageSpec.txt

Взгляды действительно охлаждаются.

Однако

  1. Я не понимаю это.
  2. Я не вижу примеров это.
  3. Я не вижу примеров идей трудно для выражения в C++, как, но тривиальный для выражения в блоках.

Кто-либо может просветить меня на этом?

7
задан Shafik Yaghmour 16 October 2013 в 19:20
поделиться

5 ответов

Блоки, по сути, являются способом передачи кода и области видимости в виде данных. В некоторых других языках они известны как замыкания и анонимные функции.

Вот статья с более подробной информацией и примерами кода.

14
ответ дан 6 December 2019 в 05:55
поделиться

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-блоки" кажутся более приспособленными к языкам, которые не поддерживают шаблоны или деструкторы.

10
ответ дан 6 December 2019 в 05:55
поделиться

Это просто термин Apple для закрытий / анонимных функций. Как отмечает Николай, это то, как вы используете Grand Central Dispatch для параллельного выполнения нескольких функций (таким образом, используя более одного ядра), не беспокоясь о потоках и блокировках.

2
ответ дан 6 December 2019 в 05:55
поделиться

Насколько я понимаю, это расширение предназначено для платформы Apple Grand Central Dispatch . Блоки - это крошечные объекты с возможностью планирования / очереди, которые потенциально могут выполняться параллельно.

0
ответ дан 6 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: