Как работают "блоки" Clang?

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

Выглядит действительно круто

Тем не мение,

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

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

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

Другие вопросы по тегам