Articulo de referencia

Compilador C portátil

El Compilador C Portátil (también conocido como pcc o a veces pccm - máquina compiladora C portátil) es un compilador temprano para el lenguaje de programación C escrito por Ste...

El Compilador C Portátil (también conocido como pcc o a veces pccm - máquina compiladora C portátil) 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 C por Bell Labs... con la bendición de Dennis Ritchie ". [ 4 ]

Al ser uno de los primeros compiladores que se adaptaba fácilmente para generar código para diferentes arquitecturas informáticas, tuvo una larga vida útil. Debutó en la Séptima Edición de Unix y se incluyó en 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 C se basaban en él. [ 5 ] Anders Magnusson y Peter A. Jonsson reiniciaron el desarrollo de pcc en 2007, reescribiéndolo extensamente para que fuera compatible con el estándar C99 . [ 6 ]

Características

Las características clave de PCC son su portabilidad y sus capacidades de diagnóstico mejoradas. El compilador fue diseñado de manera que solo algunos de sus archivos fuente dependen de la máquina . Es relativamente robusto frente a errores de sintaxis y realiza comprobaciones de validez más exhaustivas que sus competidores.

El primer compilador de C, escrito por Dennis Ritchie , utilizaba un analizador sintáctico descendente recursivo , incorporaba información específica sobre el PDP-11 y dependía de un optimizador opcional específico de la máquina para mejorar el código en lenguaje ensamblador que generaba. En cambio, el pccm de Johnson se basaba en un analizador sintáctico 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 para cada plataforma, que luego ensamblaban para generar módulos objeto enlazables.

Las versiones posteriores de PCC, conocidas dentro de Bell Labs como "QCC" y "RCC", admitían otros modelos de arquitectura de destino.

El lenguaje que implementa PCC es una versión extendida de K&R C que Bjarne Stroustrup ha llamado "C clásico", que incorpora el voidtipo de retorno (para funciones que no devuelven ningún valor), enumeraciones y asignación de estructuras. [ 4 ]

Versión actual

Anders Magnusson mantiene una nueva versión de PCC, basada en la original de Steve Johnson . [ 6 ] El compilador se distribuye bajo la licencia BSD y su desarrollo es financiado por una organización sin fines de lucro llamada BSD Fund. Según Magnusson:

Su gran ventaja (aparte de que tiene licencia BSD, para los entendidos en licencias) es que es rápido, entre 5 y 10 veces más rápido que gcc, y aun así produce código razonable. <...> También es bastante sencillo de portar...

Anders Magnusson [ 7 ]

Esta nueva versión se añadió a los árboles de código fuente de NetBSD pkgsrc y OpenBSD en septiembre de 2007, [ 8 ] y posteriormente al árbol de código fuente principal de NetBSD . [ 9 ] Se había especulado con la posibilidad de que eventualmente se utilizara para reemplazar al compilador GNU C 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 reemplazar a gcc, y que la eliminación de gcc no es una prioridad máxima. [ 14 ] El 29 de diciembre de 2009, pcc se volvió capaz de construir una imagen funcional del kernel x86 de OpenBSD . [ 15 ]

La versión 1.0 de pcc se publicó 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 posterior, que incluye soporte para más arquitecturas y front-ends para 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 se había hecho cargo de convertirlo en algo que pudiera ser una alternativa práctica a GNU Compiler Collection . [ 19 ] [ 20 ]

La última versión de pcc, concretamente la 1.1.0, se publicó el 10 de diciembre de 2014. [ 21 ]

Véase también

Referencias

  1. Johnson, SC (1978). "Un compilador portátil: teoría y práctica". Actas del 5.º simposio ACM SIGACT-SIGPLAN sobre principios de lenguajes de programación - POPL '78 . págs. 97–104 . doi : 10.1145/512760.512771 . S2CID 14390804 .  
  2. Snyder, A. (1975). "Un compilador portátil para el lenguaje C" . Tesis de maestría. MIT, Cambridge, Massachusetts . Archivado del original el 5 de septiembre de 2006. Consultado el 19 de julio de 2006 .
  3. Johnson, SC (1981). Un recorrido por el compilador C portátil . Manual del programador de Unix, 7.ª edición, volumen 2. Holt, Rinehart and Winston. ISBN 0-03-061743-X.
  4. 1 2 Stroustrup, Bjarne (2002). Rivalidad entre hermanos: C y C++ (PDF) (Informe). AT&T Labs.
  5. Ritchie, Dennis M. (1993). "El desarrollo del lenguaje C" . Segunda conferencia ACM SIGPLAN sobre la historia de los lenguajes de programación. Cambridge, Massachusetts . págs. 201–208 . Recuperado el 30 de diciembre de 2008. A principios de la década, casi todos los compiladores se basaban en pcc de Johnson ; para 1985 había muchos compiladores producidos de forma independiente. 
  6. 1 2 "Historial de pcc" . pcc - compilador C portátil . 21/06/2010. Archivado del original el 03/05/2023 . Consultado el 26/06/2012 .
  7. Erdely, Mike (15 de septiembre de 2007). "Compilador PCC con licencia BSD importado" . OpenBSD Journal . Consultado el 17 de diciembre de 2011 .
  8. Moerbeek, Otto (15 de septiembre de 2007). "CVS: cvs.openbsd.org: src" . openbsd-cvs (Lista de correo).
  9. Brownlee, David (2007-09-20). "CVS commit: src/dist/pcc" . source-changes (Lista de correo).
  10. "¿El compilador GCC finalmente ha sido reemplazado por PCC?" . /. 17-09-2007.
  11. Larabel, Michael (12 de mayo de 2012). "FreeBSD 10 utilizará el compilador Clang y desaconsejará el uso de GCC" . Phoronix . Archivado del original el 10 de abril de 2015. Consultado el 23 de abril de 2015 .
  12. Brooks, Davis (5 de noviembre de 2012). "HEADS UP: Clang ahora es el predeterminado en x86" (Lista de correo) . Recuperado el 23 de abril de 2015 .
  13. Joerg, Sonnenberger (17 de octubre de 2013). "Importando LLVM/Clang" (Lista de correo) . Recuperado el 23 de abril de 2015 .
  14. Matzan, Jem (15-10-2007). "Más sobre el nuevo compilador de OpenBSD" . The Jem Report . Archivado del original el 4-01-2012 . Recuperado el 17-12-2011 . Pero esa nunca ha sido realmente la agenda, ¿ves? Algunas personas piensan que odiamos el código GNU. Pero la cosa es que odiamos el código grande y el código con errores que el proyecto principal no mantiene. Ese es el verdadero problema... gcc se vuelve un 5-6% más lento con cada lanzamiento, 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.
  15. de Weerd, Paul (2009-12-29). "Llamada a realizar pruebas: pcc y el kernel de OpenBSD" . OpenBSD Journal . Recuperado el 2011-12-17 .
  16. Magnusson, Anders (1 de abril de 2011). "Versión 1.0" . Compilador C portátil . Archivado del original el 4 de julio de 2022. Consultado el 17 de diciembre de 2011 .
  17. "Fondo BSD: fondo pcc" . bsdfund.org . 1 de abril de 2011. Archivado del original el 5 de enero de 2009. Consultado el 26 de junio de 2012 .
  18. Paul Irofti (12 de abril de 2012). "CVS: cvs.openbsd.org: src" .
  19. Peter Hessler (18 de junio de 2012). "Re: ¿La historia detrás de la destitución de PCC?" .
  20. Miod Vallat (31-07-2013). "Compiladores en OpenBSD" .
  21. Magnusson, Anders (10-12-2014). "Versión 1.1.0" . Compilador C portátil . Archivado del original el 22-04-2022 . Recuperado el 22-04-2022 .
  • Archivo en TUHS
  • Repositorio de GitHub con una copia de las fuentes originales
  • Otro repositorio de GitHub con fuentes más actualizadas