Портативный компилятор C
Оригинальный автор(ы) | Стивен С. Джонсон |
---|---|
Разработчик(и) | AT&T Bell Laboratories |
Первоначальный выпуск | 1979 год |
Стабильная версия | 1.1.0 / 10 декабря 2014 г |
Написано в | С |
Операционная система | Unix и Unix-подобные |
Тип | Си Компилятор |
Лицензия | Лицензия БСД |
Веб-сайт | сеть |
Портативный компилятор C (также известный как pcc или иногда pccm — портативный компилятор C) — ранний компилятор языка программирования C, написанный Стивеном К. Джонсоном из Bell Labs в середине 1970-х годов. [1] частично основанный на идеях, предложенных Аланом Снайдером в 1973 году, [2] [3] и «распространяется как компилятор C компанией Bell Labs… с благословения Денниса Ритчи ». [4]
Будучи одним из первых компиляторов, которые можно было легко адаптировать для вывода кода для различных компьютерных архитектур, компилятор имел долгий срок службы. Он дебютировал в седьмом издании Unix и поставлялся с BSD Unix до выпуска 4.4BSD в 1994 году, когда он был заменен компилятором C. GNU В свое время он оказал большое влияние, настолько, что в начале 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 смогла создать функциональный образ ядра OpenBSD x86 . [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]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Джонсон, Южная Каролина (1978). «Портативный компилятор: теория и практика» . Материалы 5-го симпозиума ACM SIGACT-SIGPLAN по принципам языков программирования. Тусон, Аризона. : 97–104. дои : 10.1145/512760.512771 . S2CID 14390804 .
- ^ Снайдер, А. (1975). «Портативный компилятор языка C» . Магистерская диссертация. Массачусетский технологический институт, Кембридж, Массачусетс . Архивировано из оригинала 5 сентября 2006 г. Проверено 19 июля 2006 г.
- ^ Джонсон, Южная Каролина (1981). Обзор портативного компилятора C. Руководство программиста Unix, 7-е издание, том 2. Холт, Райнхарт и Уинстон. ISBN 0-03-061743-Х .
- ^ Перейти обратно: а б Страуструп, Бьярн (2002). Соперничество между братьями и сестрами: C и C++ (PDF) (Отчет). Лаборатории AT&T.
- ^ Ричи, Деннис М. (1993). «Развитие языка Си» . Вторая конференция ACM SIGPLAN по истории языков программирования. Кембридж, Массачусетс . стр. 201–208 . Проверено 30 декабря 2008 г.
В начале десятилетия почти каждый компилятор основывался на pcc Джонсона ; к 1985 году было много независимо выпущенных компиляторов.
- ^ Перейти обратно: а б «история ПКК» . PCC — портативный компилятор C. 21 июня 2010 г. Проверено 26 июня 2012 г.
- ^ Эрдели, Майк (15 сентября 2007 г.). «Импортированный компилятор PCC с лицензией BSD» . Журнал OpenBSD . Проверено 17 декабря 2011 г.
- ^ Мурбек, Отто (15 сентября 2007 г.). «CVS: cvs.openbsd.org: src» . openbsd-cvs (список рассылки).
- ^ Браунли, Дэвид (20 сентября 2007 г.). «CVS-фиксация: src/dist/pcc» . исходные изменения (список рассылки).
- ^ «Компилятор GCC наконец-то вытеснен PCC?» . /. 17 сентября 2007 г.
- ^ Ларабель, Майкл (12 мая 2012 г.). «FreeBSD 10 использует компилятор Clang, GCC устарел» . Фороникс . Архивировано из оригинала 10 апреля 2015 года . Проверено 23 апреля 2015 г.
- ^ Брукс, Дэвис (5 ноября 2012 г.). «ВНИМАНИЕ: Clang теперь используется по умолчанию на x86» (список рассылки) . Проверено 23 апреля 2015 г.
- ^ Йорг, Зонненбергер (17 октября 2013 г.). «Импорт LLVM/Clang» (список рассылки) . Проверено 23 апреля 2015 г.
- ^ Мацан, Джем (15 октября 2007 г.). «Подробнее о новом компиляторе OpenBSD» . Отчет Джема . Архивировано из оригинала 4 января 2012 г. Проверено 17 декабря 2011 г.
Но это никогда не было в повестке дня, понимаете. Некоторые думают, что мы ненавидим код GNU. Но дело в том, что мы ненавидим большой код и код с ошибками, который не поддерживается основной веткой разработки. Это настоящая проблема… gcc с каждым выпуском становится примерно на 5-6% медленнее, содержит новые ошибки, генерирует дрянной код и сводит нас с ума. Это просто попытка посмотреть, может ли появиться что-то лучшее.
- ^ де Верд, Пол (29 декабря 2009 г.). «Призыв к тестированию: PCC и ядро OpenBSD» . Журнал OpenBSD . Проверено 17 декабря 2011 г.
- ^ Магнуссон, Андерс (1 апреля 2011 г.). «Релиз 1.0» . Портативный компилятор C. Проверено 17 декабря 2011 г.
- ^ «Фонд BSD: фонд PCC» . bsdfund.org . 01 апреля 2011 г. Архивировано из оригинала 5 января 2009 г. Проверено 26 июня 2012 г.
- ^ Пол Ирофти (12 апреля 2012 г.). «CVS: cvs.openbsd.org: src» .
- ^ Питер Хесслер (18 июня 2012 г.). «Re: История удаления PCC?» .
- ^ Миод Валлат (31 июля 2013 г.). «Компиляторы OpenBSD» .
- ^ Магнуссон, Андерс (10 декабря 2014 г.). «Релиз 1.1.0» . Портативный компилятор C. Проверено 22 апреля 2022 г.