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 .
Si un sistema es tan nuevo que no se ha escrito ningún software para él, entonces el software se desarrolla en otro sistema autohospedado, a menudo utilizando 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. Es raro escribir nuevas herramientas de desarrollo de software sin utilizar otro sistema anfitrión.
Historia
El primer compilador autohospedado (excluidos los 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 habían mejorado el compilador hasta el punto en que podía compilar su propio código fuente, se autohospedaba. [1]
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 trabaje sobre sí mismo a través del intérprete.
- AI Memo 39 [1]
Por lo general, esta técnica solo es practicable cuando ya existe un intérprete para el mismo idioma que se va a compilar; aunque es posible, es extremadamente raro compilar humanamente un compilador consigo mismo. [2] El concepto toma prestado directamente de y es un ejemplo de la noción más amplia de ejecutar un programa en sí mismo como entrada, que se utiliza también en varias pruebas de la informática teórica , como la prueba de que el problema de la detención es indecidible.
Ejemplos de
Ken Thompson comenzó el desarrollo en Unix en 1968 escribiendo y compilando programas en el GE-635 y llevándolos al PDP-7 para probarlos. Después del kernel Unix inicial, se completaron un intérprete de comandos , un editor, un ensamblador y algunas utilidades, el sistema operativo Unix fue autohospedado: los programas se podían escribir y probar en el propio PDP-7. [3]
Douglas McIlroy escribió TMG (un compilador-compilador ) en TMG en una hoja de papel y "decidió dar su hoja de papel a su hoja de papel", haciendo el cálculo él mismo, compilando así un compilador de TMG en ensamblador , que escribió a máquina. y ensamblado en el PDP-7 de Ken Thompson. [2]
El desarrollo del sistema GNU se basa en gran medida en GCC (el compilador GNU C ) 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. En algunos de estos casos, la implementación inicial se desarrolló utilizando bootstrapping , es decir, utilizando otro lenguaje de alto nivel, ensamblador o incluso lenguaje de máquina .
Lista de lenguajes que tienen compiladores autohospedados
Los siguientes lenguajes de programación tienen compiladores autohospedados: [ cita requerida ]
- Ada
- ALGOL ( Burroughs B5000 )
- BÁSICO [4]
- BCPL
- BlitzMax
- C
- C ++ ( Visual C ++ , LLVM / clang , gcc 4.8)
- C # ( Microsoft Roslyn , Mono gmcs)
- Ciao
- ClojureScript [5]
- Cobol
- CoffeeScript
- Cristal
- Curry
- D
- Dylan
- Delphi
- Eiffel
- Elixir
- F#
- FASM
- Factor
- Adelante
- Gambas
- Ir
- Haskell
- Idris
- Java
- Kotlin
- Lisp ( Common Lisp )
- LiveScript
- Mercurio
- Modula-2
- Nemerle
- Nim
- Oberon
- OCaml
- PL / I
- Pascal ( Pascal libre )
- Pyret [6]
- Python ( PyPy )
- Raku ( Rakudo )
- Oxido
- Scala
- Esquema
- Charla
- SML
- Tcl [7]
- TMG
- Mecanografiado
- Vala
- Virgilio [8]
- Umple
- Visual Basic .NET ( Microsoft Roslyn , Mono gmcs)
- XPL
Ver también
- Bootstrapping (compiladores)
- Compilador-compilador
- Compilador cruzado
- Dogfooding
- Proyección futamura
- Auto-intérprete
- Autorreferencia
- Código auto modificable
Referencias
- ^ a b Tim Hart y Mike Levin. "AI Memo 39-El nuevo compilador" (PDF) . Consultado el 23 de mayo de 2008 .[ enlace muerto permanente ]
- ^ a b Ken Thompson. "VCF East 2019 - Brian Kernighan entrevista a Ken Thompson" . Consultado el 28 de octubre de 2019 .
- ^ Dennis M. Ritchie. "El desarrollo del lenguaje C" . 1993.
- ^ Ejemplo de arranque del compilador BASICO
- ^ ClojureScript Siguiente
- ^ https://www.pyret.org Archivado el 10 de abril de 2018 en la Wayback Machine.
- ^ "Copia archivada" . Archivado desde el original el 4 de junio de 2017 . Consultado el 19 de septiembre de 2017 . CS1 maint: parámetro desaconsejado ( enlace ) CS1 maint: copia archivada como título ( enlace )
- ^ "Copia archivada" . Archivado desde el original el 28 de diciembre de 2014 . Consultado el 27 de mayo de 2015 . CS1 maint: parámetro desaconsejado ( enlace ) CS1 maint: copia archivada como título ( enlace )