Realmente disfruto el diseño del lenguaje de programación. A veces pienso que mis proyectos de idiomas y sus usuarios potenciales se beneficiarían de un documento completo de estándares. He examinado muchos estándares de lenguaje, desde el muy formal (C ++) hasta el bastante informal (ECMAScript), pero realmente no puedo entender cómo debo desglosar y organizar dicho documento, aunque Creo que soy bastante bueno en la escritura técnica en general.
¿Debería escribirlo como un tutorial largo o más como un trabajo formal de matemáticas? ¿Cómo lo mantengo actualizado si lo estoy desarrollando junto con una implementación de referencia? ¿Debo renunciar y tratar la implementación y la documentación como el estándar de facto? Además, ¿hay realmente algún beneficio significativo al tener un estándar? ¿ Requerir un estándar significa que el lenguaje es innecesariamente complejo?
Respuestas:
Encontré la especificación del lenguaje Java formal y legible, y creo que tiene una estructura sensible. Algunas de las especificaciones del W3C también podrían ser buenos ejemplos.
Hacer el trabajo formal podría ayudarlo a mantener baja la complejidad del lenguaje y ver los casos de esquina.
Volcado de encabezados: codificación de origen, lexing, tipos fundamentales, literales, operadores, expresiones, declaraciones simples, condicionales, bucles, funciones (definiciones y llamadas), declaraciones de tipo, módulos, unidades de compilación, alcance variable, varios tipos de resolución de nombres (p. Ej. importaciones, métodos), modelo de memoria, efectos secundarios, mecanografía, concurrencia ...
fuente
Lee mucho y hazlo simple
Diseñar un nuevo idioma es difícil. Realmente difícil. Pero en última instancia, es muy satisfactorio si se vuelve popular y realmente resuelve un problema que las personas experimentan de una manera elegante.
Como mencioné en los comentarios, le aconsejo que lea los Idiomas específicos de dominio de Martin Fowler por las siguientes razones:
En cuanto a cómo escribir su especificación, piense en su audiencia. Obviamente, antes de poner el dedo en el teclado para diseñar su idioma, habrá pensado cuidadosamente sobre lo que se pretende hacer.
Si se trata de un lenguaje nuevo e interpretado para reemplazar JavaScript, querrá un enfoque muy laissez faire para llegar a los desarrolladores web con una capacidad de atención limitada y un deseo de resultados inmediatos, o más rápido si es posible.
Si se va a usar en la próxima misión a Titán, las especificaciones extremadamente detalladas que muestren pruebas formales exactas del comportamiento de cada componente serán el nivel de entrada mínimo.
Entonces, no es algo sencillo. Para acercarse a la especificación, probablemente sea mejor que gane mucha experiencia en la creación de sus idiomas y también que trabaje con aquellos que realmente los usan a diario. Si tiene víctimas dispuestas ... er ... desarrolladores, en el trabajo que pueden tomarse un tiempo para aprender su idioma, entonces pueden brindarle comentarios sobre lo que se necesita para que lo usen.
En resumen, manténgalo simple y más personas lo usarán.
fuente
Wirth diseñó e implementó muchos lenguajes de programación: de estos, las especificaciones para los lenguajes Oberon y Oberon2 son notables por su integridad, concisión y legibilidad.
fuente
Common Lisp y Haskell tienen estándares de idioma. Ruby y Python tienen implementaciones y documentación. Por lo tanto, diría que no es necesario un estándar de idioma, pero podría ser útil si espera que haya más de una implementación del lenguaje que está diseñando. Por otro lado, un estándar es prematuro si espera cambios significativos en la definición de su idioma.
fuente
cualquier especificación debe ser breve y capaz de resistir la prueba del tiempo
esta es la razón por la que ve una abstracción como BNF utilizada para muchos estándares de lenguaje ... es breve y aún se entenderá mucho después de que muchas de nuestras herramientas actuales se hayan quedado atrás.
por supuesto, hay más que solo una gramática. miren lo que otros han hecho ... perl6, esquema, C ... abordan cuestiones que al implementador también les interesan.
fuente