En un momento, esto era cierto, pero en estos días, normalmente escribimos compiladores en C o C ++.
En muchos casos, el desarrollo inicial del lenguaje se realiza en un lenguaje de programación existente, y una vez que el primer compilador es moderadamente estable, se puede reescribir en el lenguaje que se está compilando.
Una vez escribí un compilador de Pascal de esa manera. Conseguí el subconjunto de Pascal más simple posible trabajando en BASIC (!!) y una vez que estuvo funcionando un poco (LENTAMENTE), lo reescribí en mi propio subconjunto de Pascal. Luego utilicé la versión BÁSICA del compilador por última vez, y generé un compilador de subconjunto de Pascal escrito en mi subconjunto de Pascal.
Hice esto porque estaba trabajando en casa en una computadora TRS-80, para la cual el único idioma disponible era BÁSICO. Desarrollar un compilador usando BASIC es muy doloroso.
- El estado actual de la industria de TI en la India es malo, sin duda, pero ¿mejorará en los próximos años? ¿La industria se librará de los robots humanos?
- ¿Cómo son las ubicaciones en TI en BIT Bangalore?
- ¿Cambiaría de ventas a una carrera de TI o ingeniería de software?
- ¿Cuál es su campo / carrera y por qué eligió esta carrera?
- ¿Qué trabajos no técnicos puede obtener con una licenciatura en tecnología de la información?
Una vez que funcionó bien, pude descartar la versión BÁSICA y realizar mejoras incrementales en el idioma, luego en el compilador, luego en el idioma, etc.
El resultado final fue un compilador Pascal completo, escrito en Pascal completo.
¡El único problema fue que era sumamente importante hacer pruebas cuidadosas y control de versiones en el camino! Un resbalón puede hacer que tu compilador se caiga y no hay forma de solucionarlo porque no pudiste recompilarlo. De ahí la necesidad frecuente de retroceder una versión.
Sin embargo, Pascal es un lenguaje relativamente simple, y solo me tomó un par de meses para que funcionara.
Para complicar un poco la historia, al principio no tuve que compilar a Pascal en código de máquina porque no tenía un ensamblador, y la depuración de la salida binaria del compilador hubiera sido ridículamente difícil. Así que en lugar de eso, compilé a Pascal en un pequeño subconjunto de BASIC (!!), y solo lo convertí más tarde para generar el código de máquina Z80.
Este tipo de enfoque de “arranque” no era infrecuente hace 40 o 50 años, pero en estos días hay suficientes implementaciones sólidas de cosas como C y C ++ para permitirle escribir un compilador en uno de esos idiomas y nunca tener que volver a escribirlo en el idioma de destino en absoluto.