C--

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
C--
Класс языка язык программирования
Появился в 1997[2]
Автор Саймон Пейтон-Джонс и Norman Ramsey[вд]
Разработчик Саймон Пейтон-Джонс и Norman Ramsey[вд]
Расширение файлов .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, который может быть типом результата выражения, а также может использоваться для управления выполнением программы и не может быть сохранён в регистре или в памяти.

Примечания

[править | править код]
  1. https://www.cs.tufts.edu/~nr/c--/extern/man2.pdf
  2. https://www.cs.tufts.edu/~nr/c--/abstracts/pal-ifl.html
  3. https://github.com/nrnrnr/qc--/tree/master/test2/src
  4. LLVM Project Blog: The Glasgow Haskell Compiler and LLVM. Дата обращения: 9 сентября 2017. Архивировано 25 июня 2011 года.
  5. ImprovedLLVMBackend – GHC. Дата обращения: 9 сентября 2017. Архивировано 13 августа 2017 года.

Литература

[править | править код]