C--
C-- | |
---|---|
Класс языка | язык программирования |
Появился в | 1997[2] |
Автор | Пейтон-Джонс, Саймон |
Расширение файлов | .c-- [3] |
Выпуск |
|
Испытал влияние | Си |
Сайт | cs.tufts.edu/~nr/c-- |
C-- (читается как «Си минус минус») — переносимый язык программирования низкого уровня, используемый как промежуточное представление для сверхвысокоуровневых языков. Создан во второй половине 1990-х годов исследователями функционального программирования Пейтоном-Джонсом и Рэмси Норманом[англ.]. Основная особенность в сравнении с различными вариантами байткодов в том, что сгенерированный результат на C-- является человекочитаемым — текстом на языке с си-подобным синтаксисом.
Проектирование языка
Поскольку написание кодогенератора само по себе является довольно сложной задачей, а бэкенды, которые были доступны исследователям тех годов, были сложными и плохо документированными, было создано несколько проектов компиляторов, которые генерировали код на Си (например, был создан компилятор языка Модула-3). Однако язык Си является не самым удобным выбором для функциональных языков программирования: в нём нет поддержки хвостовой рекурсии, сборки мусора и эффективной обработки исключительных ситуаций. C-- был создан как альтернатива Си, в котором присутствует поддержка некоторых из этих возможностей. Самой инновационной особенностью в нём является интерфейс для времени выполнения, который позволяет создавать переносимые сборщики мусора, системы поддержки исключений и другие свойства, которые будут работать с любым компилятором C--.
Синтаксис языка позаимствован в основном из языка Си. C-- исключает или меняет использование некоторых стандартных возможностей Си, таких, как функции с переменным числом аргументов, синтаксис указателей, а также аспекты системы типов Си, поскольку это препятствует неотъемлемым возможностям языка C--, а также простоте, с которой инструменты кодогенерации могут их использовать. Так, например, в C-- не требуется явного объявления типа переменных, в нём отсутствуют структуры и указатели.
Название языка является в некотором роде шуточным, указывая на то, что C-- является уменьшённой формой Си, точно так, как C++ является расширением Си (в языках C и C++ операции «--» и «++» обозначают уменьшение или увеличение переменной на 1).
C-- является целевой платформой для Glasgow Haskell Compiler. Некоторые из разработчиков C--, включая Пейтон-Джонса, Диаша (João Dias) и Рэмси, работают или принимали участие в разработке Glasgow Haskell Compiler[4][5]. Кодовая база и разработка GHC базируются[прояснить] в Microsoft Research в Кембридже, хотя это не проект Microsoft.
Система типов
Система типов в C-- преднамеренно спроектирована так, чтобы отображать ограничения, налагаемые аппаратным обеспечением компьютера, а не традициями систем типов более высокоуровневых языков. В C-- значение, хранимое в регистрах или памяти, может быть только одного типа — битовый вектор. Однако битовый вектор является полиморфным типом и может быть разного размера: например, 8-битный или 32-битный. Кроме того, кроме битового вектора, C-- также предоставляет логический тип bool, который может быть типом результата выражения, а также может использоваться для управления выполнением программы и не может быть сохранён в регистре или в памяти.
Примечания
- ↑ https://www.cs.tufts.edu/~nr/c--/extern/man2.pdf
- ↑ https://www.cs.tufts.edu/~nr/c--/abstracts/pal-ifl.html
- ↑ https://github.com/nrnrnr/qc--/tree/master/test2/src
- ↑ LLVM Project Blog: The Glasgow Haskell Compiler and LLVM . Дата обращения: 9 сентября 2017. Архивировано 25 июня 2011 года.
- ↑ ImprovedLLVMBackend – GHC . Дата обращения: 9 сентября 2017. Архивировано 13 августа 2017 года.
Литература
- Simon Peyton Jones, Thomas Nordin, and Dino Oliva, C--: a portable assembly language. // Implementing Functional Languages, 1997. (англ.)
- Pablo Nogueira, Getting acquainted with the C-- language, October 2000. (англ.)
Ссылки
- Домашняя страница C-- (из Архива Интернета), 2008 год (англ.)
- Страница C-- на сайте Рэмси Нормана (Университет Тафтса) (англ.)
- The C-- Language Specification. Version 2.0 — Спецификация языка, 2005
- Исходный код компилятора Quick C--