El compilador portátil de C (también conocido como pcc o, a veces, pccm - máquina de compilación portátil de C) es un compilador temprano para el lenguaje de programación C escrito por Stephen C. Johnson de Bell Labs a mediados de la década de 1970, [1] basado en parte en ideas propuestas por Alan Snyder en 1973, [2] [3] y "distribuido como el compilador de C por Bell Labs... con la bendición de Dennis Ritchie ". [4]
Al ser uno de los primeros compiladores que se podía adaptar fácilmente para generar código para diferentes arquitecturas informáticas, el compilador tuvo una larga vida útil. Debutó en la Séptima Edición de Unix y se envió con BSD Unix hasta el lanzamiento de 4.4BSD en 1994, cuando fue reemplazado por el compilador GNU C. Fue muy influyente en su época, tanto que a principios de la década de 1980, la mayoría de los compiladores de C se basaban en él. [5] Anders Magnusson y Peter A Jonsson reiniciaron el desarrollo de pcc en 2007, reescribiéndolo ampliamente para que fuera compatible con el estándar C99 . [6]
Las características principales de pcc son su portabilidad y sus capacidades de diagnóstico mejoradas. El compilador fue diseñado de modo que solo unos pocos de sus archivos fuente dependan de la máquina . Es relativamente resistente a los errores de sintaxis y realiza verificaciones de validez más exhaustivas que sus contemporáneos. [ ¿según quién? ]
El primer compilador de C, escrito por Dennis Ritchie , utilizaba un analizador descendente recursivo , incorporaba conocimiento específico sobre el PDP-11 y se basaba en un optimizador opcional específico de la máquina para mejorar el código en lenguaje ensamblador que generaba. Por el contrario, el pccm de Johnson se basaba en un analizador generado por yacc y utilizaba un modelo de máquina de destino más general. Ambos compiladores producían código en lenguaje ensamblador específico del destino que luego ensamblaban para producir módulos de objetos enlazables.
Las versiones posteriores de PCC, conocidas en Bell Labs como "QCC" y "RCC", admitían otros modelos de arquitectura de destino. [ cita requerida ]
El lenguaje que implementa PCC es una versión extendida de K&R C que Bjarne Stroustrup ha llamado "C clásico", incorporando el void
tipo de retorno (para funciones que no devuelven ningún valor), enumeraciones y asignación de estructura. [4]
Anders Magnusson mantiene una nueva versión de pcc, basada en la original de Steve Johnson. [ 6 ] El compilador se proporciona bajo la licencia BSD y su desarrollo está financiado por una organización sin fines de lucro llamada BSD Fund. Según Magnusson :
Su gran beneficio (aparte de que tiene licencia BSD, para los fanáticos de las licencias) es que es rápido, 5 a 10 veces más rápido que gcc, y al mismo tiempo produce código razonable. <...> [Y] también es bastante simple de portar...
—Anders Magnusson [7]
Esta nueva versión fue añadida a los árboles de código fuente de NetBSD pkgsrc y OpenBSD en septiembre de 2007, [8] y más tarde al árbol de código fuente principal de NetBSD . [9] Se había especulado sobre la posibilidad de que pudiera utilizarse eventualmente para suplantar al compilador C de GNU en sistemas operativos basados en BSD, [10] aunque FreeBSD [11] [12] y NetBSD [13] están considerando a Clang como un posible reemplazo, y Theo de Raadt de OpenBSD afirma que pcc aún no está listo para ser un reemplazo de gcc, y que la eliminación de gcc no es una prioridad principal. [14] El 29 de diciembre de 2009, pcc se volvió capaz de construir una imagen funcional del núcleo de OpenBSD x86. [15]
La versión 1.0 de pcc se lanzó el 1 de abril de 2011. [16] A partir de esta versión, el compilador admite arquitecturas de procesador x86 y x86-64 y se ejecuta en NetBSD , OpenBSD , FreeBSD , varias distribuciones de Linux y Microsoft Windows . [17] El desarrollo adicional, que incluye soporte para más arquitecturas y front-ends FORTRAN 77 y C++ , continúa a partir de 2022.
PCC fue eliminado del árbol de código fuente de OpenBSD en 2012. [18] Su desarrollo se había estancado y ningún mantenedor había dado un paso adelante para desarrollarlo hasta convertirlo en algo que pudiera constituir una alternativa práctica a GNU Compiler Collection . [19] [20]
La última versión de pcc, es decir 1.1.0, se lanzó el 10 de diciembre de 2014. [21]
A principios de la década, casi todos los compiladores se basaban en
el pcc
de Johnson ; en 1985, ya existían muchos compiladores producidos de forma independiente.
Algunas personas piensan que odiamos el código GNU. Pero el problema es que odiamos el código grande y el código con errores que el desarrollador no mantiene. Ese es el verdadero problema... gcc se vuelve un 5-6% más lento en cada versión, tiene nuevos errores, genera código de mala calidad y nos vuelve locos. Esto es solo un intento de ver si puede aparecer algo mejor.