Портативный компилятор C

Компилятор C для Unix и Unix-подобных операционных систем
Портативный компилятор C
Оригинальный автор(ы)Стивен С. Джонсон
Разработчик(и)AT&T Bell Laboratories
Первоначальный выпуск1979 ; 46 лет назад ( 1979 )
Стабильный релиз
1.1.0 / 10 декабря 2014 г. ; 10 лет назад ( 2014-12-10 )
Написано вС
Операционная системаUnix и Unix-подобные
Тип Компилятор Си
ЛицензияЛицензия BSD
Веб-сайтweb.archive.org/web/20231212090621/http://pcc.ludd.ltu.se/

Portable C Compiler (также известный как pcc или иногда pccm — portable C compiler machine) — ранний компилятор языка программирования C, написанный Стивеном С. Джонсоном из Bell Labs в середине 1970-х годов [1], частично основанный на идеях, предложенных Аланом Снайдером в 1973 году [2] [3] и «распространяемый как компилятор C компанией Bell Labs... с благословения Денниса Ритчи ». [4]

Будучи одним из первых компиляторов, который можно было легко адаптировать для вывода кода для различных компьютерных архитектур, компилятор имел долгий срок службы. Он дебютировал в седьмом издании Unix и поставлялся с BSD Unix до выпуска 4.4BSD в 1994 году, когда его заменил GNU C Compiler . Он был очень влиятельным в свое время, настолько, что в начале 1980-х годов большинство компиляторов C основывались на нем. [5] Андерс Магнуссон и Питер А. Йонссон возобновили разработку pcc в 2007 году, значительно переписав его для поддержки стандарта C99 . [6]

Функции

Ключевые особенности pcc — его переносимость и улучшенные диагностические возможности. Компилятор был разработан таким образом, что только несколько его исходных файлов зависят от машины . Он относительно устойчив к синтаксическим ошибкам и выполняет более тщательные проверки валидности, чем его современники. [ по мнению кого? ]

Первый компилятор C, написанный Деннисом Ритчи , использовал рекурсивный спусковой парсер , включал конкретные знания о PDP-11 и полагался на необязательный машинно-зависимый оптимизатор для улучшения кода ассемблера, который он генерировал. Напротив, pccm Джонсона был основан на сгенерированном yacc парсере и использовал более общую целевую машинную модель. Оба компилятора производили целевой ассемблерный код, который они затем собирали для создания связываемых объектных модулей.

Более поздние версии PCC, известные в Bell Labs как «QCC» и «RCC», поддерживали другие модели целевой архитектуры. [ необходима ссылка ]

Язык, реализуемый PCC, представляет собой расширенную версию языка K&R C , которую Бьярне Страуструп назвал «классическим C», включающую voidвозвращаемый тип (для функций, которые не возвращают никакого значения), перечисления и назначение структур. [4]

Текущая версия

Новая версия pcc, основанная на оригинале Стива Джонсона, поддерживается [ когда? ] Андерсом Магнуссоном. [6] Компилятор предоставляется по лицензии BSD , а его разработка финансируется некоммерческой организацией BSD Fund. По словам Магнуссона:

Большим его преимуществом (помимо того, что он имеет лицензию BSD, для фанатов лицензий) является то, что он быстрый, в 5-10 раз быстрее, чем gcc, и при этом выдает приемлемый код. <...> [И]тоже его довольно просто портировать...

—  Андерс Магнуссон [7]

Эта новая версия была добавлена ​​в исходные деревья NetBSD pkgsrc и OpenBSD в сентябре 2007 года [8] , а затем и в основное исходное дерево NetBSD . [9] Были некоторые предположения, что в конечном итоге он может быть использован для замены компилятора GNU C в операционных системах на базе BSD, [10] хотя FreeBSD [11] [12] и NetBSD [13] рассматривают Clang как потенциальную замену, а Тео де Раадт из OpenBSD утверждает, что pcc пока не готов стать заменой gcc, и избавление от gcc не является главным приоритетом. [14] 29 декабря 2009 года pcc стал способен создавать функциональный образ ядра x86 OpenBSD . [15]

PCC версии 1.0 был выпущен 1 апреля 2011 года . [16] На момент выпуска компилятор поддерживал архитектуры процессоров x86 и x86-64 и работал в NetBSD , OpenBSD , FreeBSD , различных дистрибутивах Linux и Microsoft Windows . [17] Дальнейшая разработка, включая поддержку большего количества архитектур и интерфейсов FORTRAN 77 и C++ , продолжалась с 2022 года.

PCC был удален из исходного дерева OpenBSD в 2012 году. [18] Его разработка застопорилась, и ни один из разработчиков не взялся за его развитие, чтобы превратить его в нечто, способное стать практической альтернативой GNU Compiler Collection . [19] [20]

Последняя версия pcc, а именно 1.1.0, была выпущена 10 декабря 2014 года. [21]

Смотрите также

Ссылки

  1. ^ Джонсон, SC (1978). «Переносимый компилятор: теория и практика». Труды 5-го симпозиума ACM SIGACT-SIGPLAN по принципам языков программирования. Тусон, Аризона. : 97– 104. doi : 10.1145/512760.512771 . S2CID  14390804.
  2. ^ Снайдер, А. (1975). «Переносимый компилятор для языка C». Магистерская диссертация. Массачусетский технологический институт, Кембридж, Массачусетс . Архивировано из оригинала 2006-09-05 . Получено 2006-07-19 .
  3. ^ Джонсон, С.С. (1981). Экскурсия по переносимому компилятору C. Руководство программиста Unix, 7-е издание, том 2. Холт, Райнхарт и Уинстон. ISBN 0-03-061743-X.
  4. ^ ab Stroustrup, Bjarne (2002). Соперничество братьев и сестер: C и C++ (PDF) (Отчет). AT&T Labs.
  5. ^ Ритчи, Деннис М. (1993). «Развитие языка C». Вторая конференция ACM SIGPLAN по истории языков программирования. Кембридж, Массачусетс . С.  201–208 . Получено 30 декабря 2008 г. В начале десятилетия почти каждый компилятор был основан на PCC Джонсона ; к 1985 году появилось много независимо произведенных компиляторов.
  6. ^ ab "pcc history". pcc - переносимый компилятор c . 2010-06-21 . Получено 2012-06-26 .
  7. ^ Эрдели, Майк (15.09.2007). "BSD Licensed PCC Compiler Imported". Журнал OpenBSD . Получено 17.12.2011 .
  8. ^ Мурбек, Отто (15 сентября 2007 г.). "CVS: cvs.openbsd.org: src". openbsd-cvs (список рассылки).
  9. ^ Браунли, Дэвид (2007-09-20). "CVS commit: src/dist/pcc". source-changes (список рассылки).
  10. ^ «Компилятор GCC окончательно вытеснен PCC?». /. 2007-09-17.
  11. ^ Ларабель, Майкл (12 мая 2012 г.). "FreeBSD 10 будет использовать компилятор Clang, GCC устареет". Phoronix . Архивировано из оригинала 10 апреля 2015 г. Получено 23 апреля 2015 г.
  12. ^ Брукс, Дэвис (5 ноября 2012 г.). "ВНИМАНИЕ: Clang теперь используется по умолчанию на x86" (список рассылки) . Получено 23 апреля 2015 г.
  13. ^ Йорг, Зонненбергер (17 октября 2013 г.). «Импорт LLVM/Clang» (список рассылки) . Получено 23 апреля 2015 г.
  14. ^ Matzan, Jem (2007-10-15). "Подробнее о новом компиляторе OpenBSD". The Jem Report . Архивировано из оригинала 2012-01-04 . Получено 2011-12-17 . Но это никогда не было повесткой дня, видите ли. Некоторые думают, что мы ненавидим код GNU. Но дело в том, что мы ненавидим большой код и код с ошибками, который апстрим не поддерживает. Вот в чем настоящая проблема... gcc становится примерно на 5-6% медленнее с каждым релизом, у него появляются новые ошибки, он генерирует паршивый код и сводит нас с ума. Это просто попытка увидеть, может ли появиться что-то лучшее.
  15. ^ de Weerd, Paul (29.12.2009). "Призыв к тестированию: pcc и ядро ​​OpenBSD". OpenBSD Journal . Получено 17.12.2011 .
  16. ^ Magnusson, Anders (2011-04-01). "Выпуск 1.0". Portable C Compiler . Получено 2011-12-17 .
  17. ^ "BSD Fund: pcc fund". bsdfund.org . 2011-04-01. Архивировано из оригинала 2009-01-05 . Получено 2012-06-26 .
  18. ^ Пол Ирофти (12.04.2012). "CVS: cvs.openbsd.org: src".
  19. ^ Питер Хесслер (18.06.2012). «Re: История, стоящая за удалением PCC?».
  20. ^ Миод Валлат (2013-07-31). «Компиляторы в OpenBSD».
  21. ^ Magnusson, Anders (2014-12-10). "1.1.0 Release". Portable C Compiler . Получено 2022-04-22 .
  • Официальный сайт
  • Архив в TUHS
  • Репозиторий GitHub с копией оригинальных исходников
  • Еще один репозиторий GitHub с более актуальными исходниками
Взято с "https://en.wikipedia.org/w/index.php?title=Portable_C_Compiler&oldid=1268749473"