¿Cuánto tiempo llevará desarrollar un nuevo lenguaje desde C?

Depende de lo que quieras que haga el idioma. En la década de 1980, después de leer la primera edición de Programación orientada a objetos: un enfoque evolutivo: Brad J. Cox, Andrew J. Novobilski: 9780201548341: Amazon.com: Libros. Pude “comentar extender” c para crear un lenguaje con semántica C objetiva. Un comentario identificó una estructura typedef como una clase; uno identificó una estructura typedef como metaclase, otro identificó un procedimiento como método de instancia y otro identificó un procedimiento como método de clase. Luego escribí dos nuevos procedimientos “S” (enviar) y “SS” (enviar super). Finalmente, escribí un preprocesador que creó tablas para S y SS. Esto tomó una o dos semanas y me permitió escribir la mayor parte del código en los libros originales de Smalltalk.

Asi que. Algunos puntos aquí. La especificación anterior es concisa, completa y explica el valor agregado por la extensión. No estaba interesado en redefinir “+”, por lo que el trabajo adicional también fue mínimo. Si tiene nuevas ideas y está interesado en ver cómo funcionan, nuevamente, la extensión de comentarios le permitirá aislar solo lo que está agregando y ahorrarle algo de tiempo.

Un punto adicional La extensión no se pudo escribir completamente en ‘C’. Como señala Brad Cox en el libro, la última instrucción de máquina en el ensamblaje generado para sy ss tuvo que editarse para cambiarla de una ‘llamada’ a una ‘goto’. Esto permite que el creador del lenguaje vincule el ‘mensaje’ (firma de la función) con el ‘método’ (implementación de la función) mientras deja el marco de la pila intacto. Los ‘lenguajes modernos’ (después de fortran) habían eliminado el ‘goto’ después del ataque sibilante de Dijkstra (Página en utexas.edu) para ‘proteger’ al programador. Sospecho que esta castración también hace que la implementación de ‘continuaciones’ sea más difícil en C. pura.

Bjarne Stroustrup tomó una ruta más complicada pero similar. Originalmente escribió un preprocesador para C ++ que usaba C como lenguaje de destino. Su posición era que había escrito un nuevo idioma. Algunos críticos argumentaron que un preprocesador que tomó algo que parecía C como entrada y produjo algo que era C como salida, no hizo nada.

Si está interesado en escribir código que apunte al hardware, es posible que no necesite cambiar mucho la entrada, pero pasará mucho tiempo generando código. A principios de los años 80 formé parte de un equipo que simuló un lenguaje esquemático gráfico. Luego tuvimos que reajustar el simulador del software a una pieza de hardware dedicado. Luego, el hardware dedicado le permitió conectar un chip externo como parte de la simulación. No hay mucho cambio de entrada, pero sí requería un nuevo generador de código. Unas 2-3 semanas de trabajo.

Escribí un intérprete de Lisp en PL / M en 1984 usando una versión inicial de Estructura e interpretación de programas de computadora. Me llevó unos días escribir y tenía una sintaxis que era trivial para mí analizar, pero difícil de leer para los usuarios. Este ha sido un problema permanente para Lisp y, en mi humilde opinión, LA razón principal por la que el lenguaje fue, ha sido y siempre será un nicho. Una vez más, hacer que la gente vuelva a comprender cómo funciona “+” es una garantía para una adopción lenta.

Mi historia final es donde fui el usuario, no el implementador. Estaba construyendo sintetizadores de música para mi tesis de maestría usando TTL discreto en 1978. Mead y Conway llegaron al campus con un curso cuyo proyecto final era un conjunto de chips producidos por los estudiantes. Así que tuve la oportunidad de construir un sintetizador de música en una sola pieza de Silicon. El problema era que su formato de archivo de entrada era una descripción de texto de una serie de rectángulos etiquetados. Después de unos días, un miembro de nuestro laboratorio (Chris Terman) anunció que tenía un editor gráfico para el formato. Me sentí aliviado, pero un poco aprensivo ya que era competente en el programa “dibujar” de AT&T y no estaba ansioso por aprender un nuevo editor. Luego descubrí cómo Chris pudo crear un nuevo editor tan rápido. Había tomado el programa de dibujo y agregó un solo comando: rectángulo. Luego pude crear mi chip usando rectángulos visualizados gráficamente y todos los otros comandos funcionaron como lo habían hecho: abrir / cerrar, guardar, imprimir, etc.

Entonces, por supuesto, la respuesta es “depende”, pero espero que pueda desarrollar una sensación a partir de estos ejemplos.

Si quiere usar C para escribir un intérprete o compilador para un lenguaje desde cero sin ningún tipo de arranque, entonces la respuesta es: probablemente una o dos horas. Para un “lenguaje” completo que no es de Turing, eso es. Un ejemplo sería un programa en C que lee en una cadena de comandos separados por comas.

Si desea algo más poderoso, puede optar por un lenguaje de Turing con una sintaxis muy estricta (por ejemplo, el espacio en blanco tiene significado), luego, después de aprender sobre la integridad de Turing, probablemente necesitará unos meses para diseñar el lenguaje y desarrollar el compilador o intérprete.

Si quieres algo como los lenguajes populares completos que vemos hoy, probablemente te llevará de varios meses a muchos años, dependiendo de qué tan bien diseñas el idioma para empezar y cómo pretendes que sea usado.

Como comentario adicional, podría considerar mirar LLVM, lo que haría el proceso mucho más fácil y rápido.

Depende de lo que intentes hacer con el idioma. Un lenguaje simple que puede hacer IO, y las matemáticas básicas se pueden desarrollar en menos de 4 meses. Lo hicimos hace mucho tiempo como trabajo escolar mientras estudiamos compiladores durante los viejos tiempos de ingeniería.