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.
- ¿Qué es el diseño de investigación?
- ¿Cuáles son algunos de los algoritmos más importantes?
- ¿Cuál tiene un futuro más prometedor: desarrollo web o de software?
- ¿Cuáles son los límites en la complejidad computacional de algunos de los problemas más importantes?
- ¿Cuándo tiene sentido informar el tiempo de CPU y / o tiempo de pared en publicaciones de informática?
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.