Steve Yegge escribió una gran publicación de blog que, de manera indirecta, aborda esto.
Gran punto # 1: los compiladores abarcan casi todos los aspectos de la informática. Son un curso de nivel superior porque necesitas saber todas las demás cosas que aprendes en el plan de estudios de informática para comenzar. ¿Estructuras de datos, búsqueda y clasificación, rendimiento asintótico, coloración gráfica? Todo está ahí.
Hay una razón por la que Knuth ha estado trabajando en su monumental (e interminable) "Arte de la programación de computadoras" durante varias décadas, a pesar de que comenzó como (solo) un libro de texto de compilación. De la misma manera que Carl Sagan dijo: "Si desea hacer un pastel de manzana desde cero, primero debe inventar el universo", si desea escribir un compilador, primero debe ocuparse de casi todos los aspectos de la informática.
Eso significa que si el compilador es autohospedado, entonces es bastante seguro que pueda hacer lo que necesito, sin importar lo que esté haciendo. Por el contrario, si no escribió un compilador en su idioma, hay una buena posibilidad de que se pierda algo que es realmente importante para alguien, porque los implementadores del lenguaje nunca tuvieron que escribir un programa que les obligue a pensar en todos esos problemas.
Gran punto # 2: desde 30,000 pies, un sorprendente número de problemas se parecen a los compiladores.
Los compiladores toman una secuencia de símbolos, calculan su estructura de acuerdo con algunas reglas predefinidas específicas del dominio y las transforman en otra secuencia de símbolos. Suena bastante general, ¿no? Bueno sí.
Ya sea que esté en el equipo de Visual C ++ o no, a menudo tendrá que hacer algo que parezca parte de un compilador. Lo hago literalmente todos los días.
A diferencia de la mayoría de las otras profesiones, los programadores no solo usan herramientas, sino que construyen sus propias herramientas. Un programador que no puede (debido a la falta de habilidad o la falta de herramientas utilizables con las que construir otras herramientas) escribirá herramientas para siempre, limitado a las herramientas que alguien más proporciona.
Si un lenguaje "no es adecuado para crear" programas que pueden tomar una secuencia de símbolos, aplicarles reglas y transformarlos en otra secuencia de símbolos, eso suena como un lenguaje bastante limitado, y no uno que sería útil a mi.
(Afortunadamente, no creo que haya muchos lenguajes de programación que no sean adecuados para la transformación de símbolos. C es probablemente uno de los peores lenguajes que se usan actualmente, sin embargo, los compiladores de C suelen ser autohospedados, por lo que nunca se detuvo a nadie).
Una tercera razón por la que terminaré, por experiencia personal, no mencionada por Yegge (porque no estaba escribiendo sobre "por qué auto-anfitrión"): sacude los errores. Cuando escribes un compilador, eso significa que cada vez que lo compilas (no solo cada vez que lo ejecutas ), dependes de que funcione y funcione correctamente contra una base de código de tamaño decente (el compilador en sí).
Este mes he estado usando un compilador no autohospedado relativamente nuevo y famoso (probablemente puedas adivinar cuál), y no puedo pasar 2 días sin segfalarlo. Me pregunto cuánto los diseñadores realmente tuvieron que usarlo.