Как работают «блокирует»?
-
25-09-2019 - |
Вопрос
http://clang.llvm.org/docs/blocklanguagespec.txt.
Выглядит очень круто.
Однако,
- Я этого не понимаю.
- Я не вижу примеры это.
- Я не вижу примеры идей трудно выражать в C ++, как есть, но тривиально выразить в блоках.
Может кто-нибудь просветить меня на этом?
Решение
Блоки, по сути, способ пройти код и объем вокруг данных. Они известны на некоторых других языках в качестве закрытия и анонимных функций.
Вот а статья С более подробными деталями и примерами кода.
Другие советы
Nanotech уже связан с объяснением блоков. Что касается того, как это относится к C ++, позвольте мне указать мое личное мнение: это расширение нет полезно в C ++. Вот почему:
Что касается типа ссылочного типа: у нас уже есть «полиморфные функции», которые могут нести некоторое состояние вокруг, см. Boost :: Функция, TR1 :: Функция. Отказ C ++ будет включать в себя полированную версию этого в своей следующей стандартной библиотеке. Преимущество над «C блоками» состоит в том, что вам не нужно беспорядок с вещами, такими как Block_copy
а также Block_release
. Отказ Эти полиморфные функции объекты достаточно умны, чтобы сделать свое собственное управление памятью.
Что касается блочного литерального синтаксиса: это хороший синтаксис, который позволяет вам поместить код, в котором он «принадлежит» без необходимости намного кода котел. Но то же самое относится и к его C ++ CO счетницей: C ++ 0x лямбдас. Отказ Но функция лямбда C ++ 0x также позволяет использовать объекты лямбда в жестких внутренних циклах без высоких затрат на производительность функционных вызовов из-за возможного встроителя.
Поскольку C ++ 0x Lambdas также можно использовать в ситуациях, когда производительность представляет собой проблему, а STD :: Функция легче обрабатывать управление памятью WRT, добавление «блоков C» на C ++ кажется избыточным. «C блоки», кажется, более адаптированы к языкам, которые не поддерживают шаблоны или деструкторы.
Для получения дополнительной информации о блоках и как они работают, вы можете обратиться к следующему:
- Представляем блоки и Grand Central Discatch
- Блоки темы программирования
- Какао для ученых (часть XXVII): закрытие с целью
- Какао для ученых (XXXI): все на борту Большой Центральный
- Руководство по программированию параллелизма: реализация задач с использованием блоков
- Колонные компетенции Cocoa: блок объекта
Они в основном просто термин Apple для замыкание/ анонимные функции. Как отмечает Nikolai, они, как вы используете Grand Central Dispratch для запуска нескольких функций параллельно (таким образом, используя более 1 ядра) без необходимости беспокоиться о резьбе и блокировке.
Насколько я понимаю, это расширение для Apple Гранд Центральная отправка фреймворк. Блоки являются крошечными планируемыми / способами, способными могут быть потенциально запускаются параллельно.