C--

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

C--, (читается как Си минус минус), — название для нескольких независимо развитых языков программирования. Цель этих языков состоит в том, чтобы заменить язык программирования C другим портируемым языком, который ближе привязан к компьютерным аппаратным средствам. Его создатели, исследователи функционального программирования Саймон Пейтон Джонс (Simon Peyton Jones) и Норман Рамси (Norman Ramsey), спроектировали его так, чтобы код на нём преимущественно генерировался компиляторами сверхвысокоуровневых языков программирования, а не программистами. В отличие от других промежуточных языков сгенерированный результат представляется в виде обычного текста, а не в виде байткода или в двоичном формате.

Проектирование языка[править | править вики-текст]

C-- является «портируемым языком ассемблера», спроектированным для облегчения задачи реализации компиляторов, которые генерируют высококачественный машинный код. При этом, результат работы таких компиляторов делегируется компилятору C--, который уже в свою очередь занимается более сложной задачей генерации низкоуровневого кода и его оптимизации.

Работа над C-- началась в конце 1990-х. Поскольку написание кодогенератора само по себе является довольно сложной задачей, а бэкенды, которые были доступны исследователям тех годов, были сложными и плохо документированными, было создано несколько проектов компиляторов, которые генерировали код на C (например, был создан компилятор языка Modula-3). Однако, язык C является плохим выбором для функциональных языков программирования: в нём нет поддержки хвостовой рекурсии, сборки мусора и эффективной обработки исключительных ситуаций. C-- является более простой альтернативой языку C, в котором присутствует поддержка некоторых из этих возможностей. Самой инновационной особенностью в нём является интерфейс для времени исполнения, который позволяет создавать переносимые сборщики мусора, системы поддержки исключений и другие свойства, которые будут работать с любым компилятором C--.

Синтаксис языка позаимствован в основном из языка C. C-- исключает или меняет использование некоторых стандартных возможностей C, таких как функции с переменным числом аргументов, синтаксис указателей, а также аспекты системы типов C, поскольку это препятствует неотъемлемым возможностям языка C--, а также простоте, с которой инструменты кодогенерации могут их использовать. Так, например, в C-- не требуется явного объявления типа переменных, в нём отсутствуют структуры и указатели.

Название языка является в некотором роде шуточным, указывая на то, что C-- является уменьшенной формой C, точно так, как C++ является расширенной формой C. (В языках C и C++ операции «--» и «++» обозначают уменьшение или увеличение переменной на 1.)

C-- является целевой платформой для Glasgow Haskell Compiler. Некоторые из разработчиков C--, включая Simon Peyton Jones, João Dias и Norman Ramsey, работают или принимали участие в разработке Glasgow Haskell Compiler. Кодовая база и разработка GHC базируются в Microsoft Research в Кембридже, хотя это не проект Microsoft.

Система типов[править | править вики-текст]

Система типов в C-- преднамеренно спроектирована так, чтобы отображать ограничения, налагаемые аппаратным обеспечением компьютера, а не традициями систем типов более высокоуровневых языков. В C-- значение, хранимое в регистрах или памяти, может быть только одного типа — битовый вектор. Однако, битовый вектор является полиморфным типом и может быть разного размера: например, 8-битный или 32-битный. Кроме того, кроме битового вектора C-- также предоставляет булевский тип bool, который может быть типом результата выражения, а также может использоваться для управления выполнением программы и не может быть сохранён в регистре или в памяти.

См. также[править | править вики-текст]

Ссылки[править | править вики-текст]

Sphinx C--[править | править вики-текст]

Название «C--» также использовалось для языка программирования, разработанного в 1990-х годах Питером Селликом (Peter Cellik) для компьютеров на платформе x86. Sphinx C-- является низкоуровневым языком программирования (по сути ассемблером x86), но с некоторыми мнемоническими и синтаксическими элементами языка C.

Ссылки[править | править вики-текст]