Self-hosting (compiladores)
Self-hosting o auto-hospedaje es el uso de un programa de computadora 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 self-hosted es común en computadoras personales y sistemas más grandes. Otros programas que suelen ser self-hosted incluyen kernels, ensambladores, intérpretes de línea de comandos y software de control de versiones.
Si un sistema es tan nuevo que no se ha escrito ningún software para él, entonces el software se desarrolla en otro sistema, a menudo con un compilador cruzado, y se coloca en un dispositivo de almacenamiento que el nuevo sistema puede leer. El desarrollo continúa de esta manera hasta que el nuevo sistema pueda albergar de manera confiable su propio desarrollo. Escribir nuevas herramientas de desarrollo de software sin usar otro sistema host es raro.
En el contexto de la administración del sitio web y la publicación en línea, el término self-hosting se utiliza para describir la práctica de ejecutar y mantener un sitio web utilizando un servidor web privado.[1]
Historia
El primer compilador self-hosted (excluyendo ensambladores) fue escrito para Lisp por Hart y Levin en el MIT en 1962. Escribieron un compilador de Lisp ese mismo lenguaje, probándolo dentro de un intérprete existente de Lisp. Una vez que habían mejorado el compilador hasta el punto en que podía compilar su propio código fuente, se considera self-hosted.
El compilador, tal como existe en la cinta de compilación estándar, es un programa de lenguaje de máquina que se obtuvo al tener la definición de S-expresión del compilador en sí mismo a través del intérprete.AI Memo 39[2]
Esta técnica solo es posible cuando ya existe un intérprete para el mismo lenguaje que se va a compilar. Toma prestado directamente de la noción de ejecutar un programa en sí mismo como entrada, que también se usa 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 llevándolos al PDP-7 para su prueba. Después de que se completó el núcleo inicial de Unix, un intérprete de comandos, un editor, un ensamblador y algunas utilidades, el sistema operativo Unix se auto-hospedaba: los programas se podían escribir y probar en el PDP-7.[3]
El desarrollo del kernel de Linux se alojó inicialmente en un sistema MINIX. Cuando se transfieren paquetes suficientes, como GCC, GNU bash y otras utilidades, los desarrolladores pueden trabajar en nuevas versiones del núcleo Linux basadas en versiones anteriores de sí mismo (como construir el núcleo 3.21 en una máquina que ejecuta el núcleo 3.18). Este procedimiento también se puede utilizar al crear una nueva distribución de Linux desde cero.
Muchos lenguajes de programación tienen implementaciones auto-hospedadas: compiladores que están en y para el mismo lenguaje. Estos lenguajes incluyen Ada, BASIC, C, C ++,[4] C #,[5] CoffeeScript, Crystal, Dylan, F #, FASM, Forth, Gambas, Go, Haskell, HolyC, Java, Lisp, Modula-2, OCaml, Oberon, Pascal, Python, Rust, Scala, Smalltalk, TypeScript, Vala y Visual Basic.[5]
En algunos de estos casos, la implementación inicial no fue auto-hospedada, sino más bien escrita en otro lenguaje (o incluso en lenguaje de máquina); en otros casos, la implementación inicial se desarrolló utilizando bootstrapping.
Véase también
- Bootstrapping
- Compilador cruzado
- Dogfooding
- Proyección de futamura
- Auto-intérprete
- Auto referencia
- Código auto-modificable
Referencias
- ↑ «Self Hosting |» (en inglés estadounidense). Consultado el 7 de mayo de 2017.
- ↑ Tim Hart and Mike Levin. «AI Memo 39-The new compiler». Consultado el 23 de mayo de 2008. Uso incorrecto de la plantilla enlace roto (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última).
- ↑ Dennis M. Ritchie. "The Development of the C Language" Archivado el 28 de marzo de 2015 en Wayback Machine.. 1993.
- ↑ gcc 4.8, LLVM/clang
- ↑ a b Mono gmcs and Microsoft Roslyn
Datos: Q2872462