Skip to content
EntityQ4088295· pop 6· linked from 14 articles

Блоки (расширение языка Си)

Sign in to save

extension to the C programming language designed to support parallel programming

Article · Русский

Блоки (англ. blocks) — расширение языков программирования C, C++, Objective-C, не описанное в стандартах этих языков и созданное фирмой Apple. Расширение позволяет создавать замыкания, используя лямбда-подобный синтаксис. «Блоки» были созданы с целью облегчения написания приложений для платформы Grand Central Dispatch, но могут использоваться и на других платформах. Apple реализовала «блоки» в собственной ветке компилятора GCC. Для компиляторов LLVM создана библиотека времени исполнения. «Блоки» похожи на функции: * могут принимать аргументы и возвращать значения; * могут иметь локальные переменные; * могут вызываться, как и обычные функции; * имеют адреса, которые могут использоваться как обычные указатели на функцию (то есть, указатели на «блоки» могут храниться в переменных, могут передаваться в функции). В отличие от функций: * внутри «блоков» могут использоваться переменные, доступные функции, внутри которой создавался «блок». Для работы с блоками компилятор генерирует дополнительный код. В процессе выполнения программы для каждого создаваемого блока этот код создаёт скрытый объект. Объект содержит следующие поля: * ссылка на код блока; * значения локальных переменных, доступных функции, внутри которой блок был создан. Чтобы сообщить компилятору о том, что в переменной будет храниться адрес «блока» (а не обычной функции) следует использовать особое ключевое слово. Ключевое слово не требуется, если «блок» и переменная находятся в одной области видимости.

Abstract from DBpedia / Wikipedia · CC BY-SA

Available in 6 languages

via Wikidata sitelinks · CC0