stringtranslate.com

Autohospedaje (compiladores)

En programación de computadoras , el autohospedaje es el uso de un programa como parte de la cadena de herramientas o sistema operativo que produce nuevas versiones de ese mismo programa; por ejemplo, un compilador que puede compilar su propio código fuente . El software de autohospedaje es común en computadoras personales y sistemas más grandes. Otros programas que suelen ser autohospedados incluyen kernels , ensambladores , intérpretes de línea de comandos y software de control de revisiones .

Sistemas operativos

Un sistema operativo es autohospedado cuando la cadena de herramientas para construir el sistema operativo se ejecuta en ese mismo sistema operativo. Por ejemplo, Windows se puede construir en una computadora que ejecute Windows.

Antes de que un sistema pueda convertirse en autohospedado, se necesita otro sistema para desarrollarlo hasta que alcance una etapa en la que el autohospedaje sea posible. Cuando se desarrolla para una nueva computadora o sistema operativo, se necesita un sistema para ejecutar el software de desarrollo, pero también es necesario el software de desarrollo utilizado para escribir y construir el sistema operativo. Esto se denomina problema de arranque o, más genéricamente, el dilema del huevo o la gallina .

Una solución a este problema es el compilador cruzado (o ensamblador cruzado cuando se trabaja con lenguaje ensamblador). Un compilador cruzado permite compilar el código fuente en una plataforma para una máquina o sistema operativo diferente, lo que hace posible crear un sistema operativo para una máquina para la que aún no existe un compilador autohospedado. Una vez escrito, el software se puede implementar en el sistema de destino utilizando medios como una EPROM , un disquete , una memoria flash (como una memoria USB) o un dispositivo JTAG . Esto es similar al método utilizado para escribir software para consolas de juegos o para dispositivos portátiles como teléfonos móviles o tabletas, que no albergan sus propias herramientas de desarrollo.

Una vez que el sistema es lo suficientemente maduro como para compilar su propio código, la dependencia entre desarrollos finaliza. En este punto, se dice que un sistema operativo es autohospedado.

Compiladores

El desarrollo de software que utiliza compiladores o intérpretes también puede ser autohospedado cuando el compilador es capaz de compilarse a sí mismo. [1]

Dado que los compiladores autohospedados sufren los mismos problemas de arranque que los sistemas operativos, un compilador para un nuevo lenguaje de programación debe escribirse en un lenguaje existente. Por lo tanto, el desarrollador puede usar algo como lenguaje ensamblador, C / C++ o incluso un lenguaje de programación como Python o Lua para construir la primera versión del compilador. Una vez que el lenguaje esté lo suficientemente maduro, el desarrollo del compilador puede pasar al lenguaje nativo del compilador, permitiendo que el compilador se construya por sí mismo.

Historia

El primer compilador autohospedado (excluyendo ensambladores) fue escrito para Lisp por Hart y Levin en el MIT en 1962. Escribieron un compilador Lisp en Lisp, probándolo dentro de un intérprete Lisp existente . Una vez que mejoraron el compilador hasta el punto en que podía compilar su propio código fuente, se autohospedó. [2]

El compilador tal como existe en la cinta del compilador estándar es un programa en lenguaje de máquina que se obtuvo haciendo que la definición de expresión S del compilador funcione sobre sí mismo a través del intérprete.

-  Memorándum AI 39 [2]

Esta técnica normalmente sólo es practicable cuando ya existe un intérprete para el mismo lenguaje que se va a compilar; Aunque es posible, es extremadamente poco común compilar humanamente un compilador consigo mismo. [3] El concepto toma prestado directamente y es un ejemplo de la noción más amplia de ejecutar un programa sobre sí mismo como entrada, utilizado también en varias pruebas en informática teórica , como la prueba de que el problema de detención es indecidible.

Ejemplos

Ken Thompson comenzó el desarrollo en Unix en 1968 escribiendo y compilando programas en el GE-635 y transfiriéndolos al PDP-7 para realizar pruebas. Después de que se completaron el kernel inicial de Unix, un intérprete de comandos , un editor, un ensamblador y algunas utilidades, el sistema operativo Unix se autohospedó: los programas se podían escribir y probar en el propio PDP-7. [4]

Douglas McIlroy escribió TMG (un compilador-compilador ) en TMG en una hoja de papel y "decidió darle su hoja de papel a su hoja de papel", haciendo el cálculo él mismo, compilando así un compilador TMG en un ensamblador , que mecanografió. y ensamblado en el PDP-7 de Ken Thompson. [3]

El desarrollo del sistema GNU se basa en gran medida en GCC (la Colección de Compiladores GNU) y GNU Emacs (un editor popular), lo que hace posible el desarrollo autónomo, mantenido y sostenido de software libre para el Proyecto GNU .

Muchos lenguajes de programación tienen implementaciones autohospedadas: compiladores que están en y para el mismo lenguaje. Un enfoque es el bootstrapping , donde inicialmente se implementa una versión central del lenguaje utilizando otro lenguaje de alto nivel, ensamblador o incluso lenguaje de máquina ; El compilador resultante se utiliza luego para comenzar a construir sucesivas versiones ampliadas de sí mismo.

Lista de idiomas que tienen compiladores autohospedados

Los siguientes lenguajes de programación tienen compiladores autohospedados: [ cita necesaria ]

Ver también

Referencias

  1. ^ Heaton, Robert. "¿Qué es un compilador autohospedado?". www.robertheaton.com/ .
  2. ^ ab Hart, Tim; Levin, Mike. "AI Memo 39-El nuevo compilador" (PDF) . Archivado desde el original (PDF) el 13 de diciembre de 2020 . Consultado el 23 de mayo de 2008 .
  3. ^ ab Thompson, Ken. "VCF East 2019: Brian Kernighan entrevista a Ken Thompson". YouTube . Consultado el 28 de octubre de 2019 .
  4. ^ Dennis M. Ritchie. "El desarrollo del lenguaje C". 1993.
  5. ^ Ejemplo de arranque del compilador BASICO
  6. ^ ClojureScript Siguiente
  7. ^ "ensamblador plano" . Consultado el 7 de enero de 2022 . El ensamblador plano es autohospedado y se incluye el código fuente completo.
  8. ^ "Informe de actividades y comunidades de Haskell".
  9. ^ https://www.pyret.org Archivado el 10 de abril de 2018 en Wayback Machine.
  10. ^ "Implementar TCL en TCL". Archivado desde el original el 4 de junio de 2017 . Consultado el 19 de septiembre de 2017 .
  11. ^ "Virgilio".