Русская Википедия:C--
Шаблон:Другие значенияШаблон:Язык программирования C-- (читается как «Си минус минус») — переносимый язык программирования низкого уровня, используемый как промежуточное представление для сверхвысокоуровневых языков. Создан во второй половине 1990-х годов исследователями функционального программирования Пейтоном-Джонсом и Шаблон:Нп3. Основная отличительная особенность в сравнении с различными вариантами байткодов в том, что сгенерированный результат на C-- является человекочитаемым — текстом на языке с си-подобным синтаксисом.
Проектирование языка
Поскольку написание кодогенератора само по себе является довольно сложной задачей, а бэкенды, которые были доступны исследователям тех годов, были сложными и плохо документированными, было создано несколько проектов компиляторов, которые генерировали код на Си (например, был создан компилятор языка Модула-3). Однако язык Си является не самым удобным выбором для функциональных языков программирования: в нём нет поддержки хвостовой рекурсии, сборки мусора и эффективной обработки исключительных ситуаций. C-- был создан как альтернатива Си, в котором присутствует поддержка некоторых из этих возможностей. Самой инновационной особенностью в нём является интерфейс для времени выполнения, который позволяет создавать переносимые сборщики мусора, системы поддержки исключений и другие свойства, которые будут работать с любым компилятором C--.
Синтаксис языка позаимствован в основном из языка Си. C-- исключает или меняет использование некоторых стандартных возможностей Си, таких, как функции с переменным числом аргументов, синтаксис указателей, а также аспекты системы типов Си, поскольку это препятствует неотъемлемым возможностям языка C--, а также простоте, с которой инструменты кодогенерации могут их использовать. Так, например, в C-- не требуется явного объявления типа переменных, в нём отсутствуют структуры и указатели.
Название языка является в некотором роде шуточным, указывая на то, что C-- является уменьшённой формой Си, точно так, как C++ является расширением Си. (В языках C и C++ операции «--» и «++» обозначают уменьшение или увеличение переменной на 1.)
C-- является целевой платформой для Glasgow Haskell Compiler. Некоторые из разработчиков C--, включая Пейтон-Джонса, Диаша (João Dias) и Рэмси, работают или принимали участие в разработке Glasgow Haskell Compiler[1][2]. Шаблон:Прояснить в Microsoft Research в Кембридже, хотя это не проект Microsoft.
Система типов
Система типов в C-- преднамеренно спроектирована так, чтобы отображать ограничения, налагаемые аппаратным обеспечением компьютера, а не традициями систем типов более высокоуровневых языков. В C-- значение, хранимое в регистрах или памяти, может быть только одного типа — битовый вектор. Однако битовый вектор является полиморфным типом и может быть разного размера: например, 8-битный или 32-битный. Кроме того, кроме битового вектора, C-- также предоставляет логический тип bool, который может быть типом результата выражения, а также может использоваться для управления выполнением программы и не может быть сохранён в регистре или в памяти.
Примечания
Литература
- Simon Peyton Jones, Thomas Nordin, and Dino Oliva, C--: a portable assembly language. // Implementing Functional Languages, 1997. Шаблон:Ref-en
- Pablo Nogueira, Getting acquainted with the C-- language, October 2000. Шаблон:Ref-en
Ссылки
- Домашняя страница C-- (из Архива Интернета), 2008 годШаблон:Ref-en
- Страница C-- на сайте Рэмси Нормана (Университет Тафтса)Шаблон:Ref-en
- The C-- Language Specification. Version 2.0 — Спецификация языка, 2005
- Исходный код компилятора Quick C--