Оригинальный автор(ы) | Стивен С. Джонсон |
---|---|
Разработчик(и) | AT&T Bell Laboratories |
Первоначальный выпуск | 1979 ( 1979 ) |
Стабильный релиз | 1.1.0 / 10 декабря 2014 г. ( 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]
начале десятилетия почти каждый компилятор был основан на
PCC
Джонсона ; к 1985 году появилось много независимо произведенных компиляторов.
Но это никогда не было повесткой дня, видите ли. Некоторые думают, что мы ненавидим код GNU. Но дело в том, что мы ненавидим большой код и код с ошибками, который апстрим не поддерживает. Вот в чем настоящая проблема... gcc становится примерно на 5-6% медленнее с каждым релизом, у него появляются новые ошибки, он генерирует паршивый код и сводит нас с ума. Это просто попытка увидеть, может ли появиться что-то лучшее.