C--

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

C-- (читается как «Си минус минус») — переносимый язык программирования низкого уровня, используемый как промежуточное представление[en] для сверхвысокоуровневых языков. Создан во второй половине 1990-х годов исследователями функционального программирования Пейтоном-Джонсом и Рэмси (англ. Norman Ramsey). Основная отличительная особенность в сравнении с различными вариантами байткодов в том, что сгенерированный результат на C-- является человекочитаемым — текстом на языке с си-подобным синтаксисом.

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

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

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

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

C-- является целевой платформой для Glasgow Haskell Compiler. Некоторые из разработчиков C--, включая Пейтон-Джонса, Диаша (João Dias) и Рэмси, работают или принимали участие в разработке Glasgow Haskell Compiler. Кодовая база и разработка GHC базируются в Microsoft Research в Кембридже, хотя это не проект Microsoft.

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

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

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