Jump to content

С--

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

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

Есть две основные ветви:

C — «переносимый язык ассемблера », [6] разработан для облегчения реализации компиляторов, создающих высококачественный машинный код . [7] Это делается путем делегирования низкоуровневой генерации кода и оптимизации программы компилятору C--. языка Синтаксис в значительной степени заимствован из C, но при этом отсутствуют или изменяются стандартные функции C, такие как функции с переменным числом аргументов , синтаксис указателей и аспекты системы типов C, поскольку они затрудняют основные функции C и простоту генерации кода.

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

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

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

Типовая система

[ редактировать ]

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

C — версия 2 устраняет различие между битовыми векторами и типами с плавающей запятой. Эти типы могут быть аннотированы строковым тегом «вид», чтобы отличать, среди прочего, целочисленный тип переменной от типа с плавающей запятой и ее поведение при хранении (глобальное или локальное). Первое полезно для целей, которые имеют отдельные регистры для целых чисел и значений с плавающей запятой. Были введены специальные типы для указателей и собственного слова, хотя они отображаются в битовый вектор с длиной, зависящей от цели. [3] : 10 

Пример кода

[ редактировать ]

Следующий код C- вычисляет сумму и произведение целых чисел от 1 до n. [10] (n принимается в качестве аргумента). Он демонстрирует две особенности языка:

  • Процедуры могут возвращать несколько результатов.
  • Хвостовая рекурсия явно запрашивается с помощью ключевого слова jump.
/* Tail recursion */
export sp;
sp( bits32 n ) {
  jump sp_help( n, 1, 1 );
}

sp_help( bits32 n, bits32 s, bits32 p ) {
  if n==1 {
      return( s, p );
  } else {
      jump sp_help( n-1, s+n, p*n );
  }
}

Реализации

[ редактировать ]

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

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

Бэкэнды GHC отвечают за дальнейшее преобразование C-- в исполняемый код через LLVM IR, медленный C или напрямую через встроенный собственный бэкэнд. [13] [14] [15] Несмотря на первоначальное намерение, GHC выполняет многие из своих общих оптимизаций на C--. Как и в случае с другими IR компилятора, представление C-- можно сохранить для отладки. [16] Оптимизация для конкретных целей выполняется позже серверной частью.

Системы обработки

[ редактировать ]

По состоянию на 2023 год большинство систем обработки не поддерживаются, включая выпуск исходного кода.

  • Quick C-- — это компилятор, разработанный командой Quick C--. Он компилирует версию 2 кода C- в машинный код Intel x86 Linux. Компиляция в машинный код для других платформ доступна в качестве экспериментальной функции. Ранее Quick C-- разрабатывался параллельно с развитием спецификации языка C--. Однако исходный код теперь доступен только на GitHub, и разработка прекратилась.
  • cmmc — это компилятор C--, реализованный Фермином Рейгом на языке программирования ML. Он генерирует машинный код для архитектур Alpha, Sparc и x86. [17]
  • Trampoline C- Compiler — это транспилятор C--C, разработанный Сергеем Егоровым в мае 1999 года. Он транслирует код C-- в код C, что позволяет компилировать его с использованием стандартных компиляторов C.
  • Компилятор C-- (OGI C-- Compiler) Орегонского института последипломного образования — самый ранний прототип C-- компилятора, реализованный на языке программирования ML в 1997 году. Поддержка OGI C--компилятора была прекращена после разработки Quick C-- началось.

См. также

[ редактировать ]
  1. ^ Jump up to: а б Нордин, Томас; Джонс, Саймон Пейтон; Иглесиас, Пабло Ногейра; Олива, Дино (23 апреля 1998 г.). «Справочное руководство по языку C–» . {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  2. ^ Jump up to: а б Рейг, Фермин; Рэмси, Норман; Джонс, Саймон Пейтон (1 января 1999 г.). «C–: переносимый язык ассемблера, поддерживающий сборку мусора» : 1–28. {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  3. ^ Jump up to: а б с д Рэмси, Норман; Джонс, Саймон Пейтон. «Спецификация языка C, версия 2.0» (PDF) . Проверено 11 декабря 2019 г.
  4. ^ Jump up to: а б Комментарий GHC: Что, черт возьми, такое файл .cmm?
  5. ^ «Улучшенный бэкэнд LLVM» . Апрель 2019.
  6. ^ Олива, Дино; Нордин, Т.; Пейтон Джонс, Саймон (1 января 1997 г.). «C-: портативный язык ассемблера» . Материалы семинара 1997 г. по реализации функциональных языков - через Microsoft.
  7. ^ Джонс, Саймон Пейтон; Нордин, Томас; Олива, Дино (1998). Клак, Крис; Хаммонд, Кевин; Дэви, Тони (ред.). «C--: переносимый язык ассемблера» . Реализация функциональных языков . Берлин, Гейдельберг: Springer: 1–19. дои : 10.1007/BFb0055421 . ISBN  978-3-540-68528-9 .
  8. ^ «Операторы увеличения и уменьшения в C с приоритетом» . unstop.com . Проверено 20 июня 2024 г.
  9. ^ Нордин, Томас; Джонс, Саймон Пейтон; Иглесиас, Пабло Ногейра; Олива, Дино (23 мая 1999 г.). «Справочное руководство по языку C–» .
  10. ^ Рэмси, Норман; Джонс, Саймон Пейтон; Линдиг, Кристиан (23 февраля 2005 г.), Спецификация языка C, версия 2.0 (CVS Revision 1.128) (PDF) , стр. 7 , получено 22 июня 2023 г.
  11. ^ «C-- Загрузки» . www.cs.tufts.edu . Проверено 11 декабря 2019 г.
  12. ^ «5.10. Серверные части GHC — Руководство пользователя компилятора Glasgow Haskell 9.8.1» . downloads.haskell.org . Проверено 20 июня 2024 г.
  13. ^ Серверные части GHC
  14. ^ «Мнение о бэкэндах GHC» . andreaspk.github.io . 25 августа 2019 года . Проверено 20 июня 2024 г.
  15. ^ «Использование компилятора Glasgow Haskell (GHC)» . ПрогДоер . Проверено 20 июня 2024 г.
  16. ^ Отладка компиляторов с использованием топлива для оптимизации.
  17. ^ «C-- Загрузки» . www.cs.tufts.edu . Проверено 20 июня 2024 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 6c249973d54e0389d326e8d22692c4f7__1718888700
URL1:https://arc.ask3.ru/arc/aa/6c/f7/6c249973d54e0389d326e8d22692c4f7.html
Заголовок, (Title) документа по адресу, URL1:
C-- - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)