Cfront

Cfront приблизно з 1983 року був першим компілятором для C++ (тоді відомий як «C with Classes»), який перетворював C++ у C, розроблений Б'ярне Страуструпом (англ. Bjarne Stroustrup) у лабораторіях AT&T Bell Labs. Препроцесор не розумів усієї мови, і значна частина коду була написана за допомогою транскомпілятора. Cfront мав повноцінний синтаксичний аналіз (англ. Parser), будував таблиці символів, дерева для кожного класу, функції (підпрограми), тощо. Cfront був заснований на CPre — компіляторі мови C, розробка якого почалася у 1979 році.

Оскільки Cfront був написаний на C++, виникла проблема його початкової компіляції (англ. bootstrap) на машині, де ще не існувало компілятора або транслятора C++. Разом із вихідним кодом Cfront на C++ також надавалася спеціальна «спрощена» версія коду C, отримана шляхом компіляції Cfront самим собою. Цей код на C мав бути скомпільований за допомогою рідного компілятора C, а отриманий виконуваний файл використовувався для компіляції повної версії Cfront на C++.

Більшість зусиль з перенесення коду для запуску Cfront на новій машині була пов'язана зі стандартним вводом/виводом. Потоки C++ Cfront були тісно пов'язані з буферизованими потоками вводу/виводу бібліотеки C, але взаємодія з рештою середовища C була малою. Компілятор можна було переносити на більшість похідних System V без великої кількості змін, але системи на основі BSD зазвичай мали набагато більше варіацій у своїх бібліотеках C та пов'язаних структурах stdio.

Cfront визначав мову приблизно до 1990 року, і багато менш очевидних випадків у C++ були пов'язані з його підходом до перекладу з мови C++ на C. Деякі залишки методу перекладу Cfront й досі можна знайти в сучасних компіляторах C++; спотворення імен було започатковано Cfront, оскільки відносно примітивні компонувальники на той час не підтримували інформацію про тип у символах, а деякі моделі створення шаблонів походять від ранніх зусиль Cfront. C++ (і Cfront) були безпосередньо відповідальні за багато вдосконалень у компонувальниках Unix та форматах об'єктних файлів, оскільки це була перша широко використовувана мова, яка вимагала перевірки типів під час компонування, слабких символів та інших подібних функцій.

Cfront 4.0 було закинуто в 1993 році після невдалої спроби додати підтримку винятків.[1] Мова C++ вийшла за межі своїх можливостей; проте пізніше став доступний компілятор зі схожим підходом, названий Comeau C/C++.

Аналогічно до того, як cfront може перетворювати вихідний код C++ на щось, що може бути скомпільовано раніше доступними компіляторами C, cppfront перетворює вихідний код, написаний новим та експериментальним C++ «синтаксисом 2», на щось, що може бути скомпільовано раніше доступними компіляторами C++ «синтаксисом 1».[2][3] cppfront відрізняється за обсягом тим, що він не виконує багато перевірок коду на достовірність, натомість покладаючись на компілятор C++ для будь-яких перевірок, які вимагають нелокального розуміння коду, таких як встановлення правильного використання символів. Cfront, з іншого боку, був повноцінним компілятором, який просто був орієнтований на мову C, а не на асемблер.

Примітки

Джерела

  • Bjarne Stroustrup. Evolving a language in and for the real world: C++ 1991-2006 (PDF). Архів оригіналу (PDF) за 20 листопада 2007.
  • Bjarne Stroustrup. Bjarne Stroustrup's FAQ.
  • Bjarne Stroustrup. The Design and Evolution of C++.

Посилання