C--

редактировать
C--
Парадигма императив
Разработано Саймоном Пейтоном Джонсом и
Впервые появилось1997
Печатная дисциплина статический, слабый
Веб-сайтhttps://www.cs.tufts.edu/~nr/c--/index.html
Под влиянием
C

C- - (произносится как cee минус минус) - это C -подобный язык программирования. Его создатели, функциональное программирование исследователи Саймон Пейтон Джонс и Норман Рэмси, разработали его для создания в основном компиляторами для языков очень высокого уровня а не написано людьми-программистами. В отличие от многих других промежуточных языков, его представление представляет собой простой текст ASCII, а не байт-код или другой двоичный формат.

Есть две основные ветви C--. Одна - это исходная ветвь C--, последняя версия которой была выпущена в мае 2005 года. Вторая - вилка Cmm, активно используемая Glasgow Haskell Compiler в качестве промежуточного представления.

Contents
  • 1 Дизайн
  • 2 Система типов
  • 3 Реализации
    • 3.1 Haskell
  • 4 См. Также
  • 5 Ссылки
  • 6 Внешние ссылки
Дизайн

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

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

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

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

Первая версия C-- была выпущена в апреле 1998 года как документ MSRA, в сопровождении статьи по сбору мусора от января 1999 г. Пересмотренное руководство было опубликовано в формате HTML в мае 1999 года. Два набора основных изменений, предложенных в 2000 году Норманом Рэмси («Предлагаемые изменения») и Кристианом Линдигом («Новая грамматика»), привели к C-- версии 2, которая была завершена примерно в 2004 году и официально выпущен в 2005 году.

Система типов

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

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

Реализации

На странице спецификации C-- перечислены несколько реализаций C--. «Наиболее активно разрабатываемый» компилятор Quick C-- был заброшен в 2013 году.

Haskell

Диалект C--, называемый Cmm, является промежуточным представлением для Компилятор Glasgow Haskell. Бэкэнд GHC отвечает за дальнейшее преобразование C-- в исполняемый код через LLVM IR, медленный C или напрямую через встроенный нативный бэкэнд.

Некоторые разработчики C--, включая Саймон Пейтон Джонс, Жоао Диас и, работали или работали над компилятором Glasgow Haskell. Работа над GHC также привела к расширению языка C--, образуя диалект Cmm. Cmm использует препроцессор C. для эргономики.

Несмотря на первоначальное намерение, GHC действительно выполняет многие из своих общих оптимизаций на C--. Как и в случае с другими IR компилятора, GHC позволяет выгружать представление C-- для отладки. Разумеется, целевые оптимизации выполняются серверной частью позже.

См. Также
  • icon Портал компьютерного программирования
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-13 08:53:05
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте