¿Es posible o no el acceso directo al puntero?? ¿Cuáles son los tipos de datos de su idioma?? ¿Es un lenguaje estático o dinámico?? ¿Cuál es tu modelo de memoria?? ¿Está utilizando un recolector de basura o una gestión de memoria manual?? (Si está utilizando un recolector de basura, tenga en cuenta que deberá escribir uno o adaptar uno existente a su lenguaje de programación.) ¿Cómo vas a manejar la concurrencia?? ¿Está utilizando un modelo simple de enhebrado/bloqueo o algo más complejo como Linda o el modelo `actor`?? (Debido a que las computadoras de hoy en día tienen múltiples procesadores.) ¿Hay funciones simples integradas en el lenguaje o es todo de una biblioteca?? ¿Cuál es el paradigma o cuáles son los paradigmas de su lenguaje de programación?? Funcional? Orientado a objetos? Prototipo (como JavaScript)? orientado a aspectos? Orientado a plantillas? O algo completamente nuevo? ¿Cómo se comunica su idioma con las bibliotecas e idiomas existentes (principalmente C)? Este punto es importante si está desarrollando un lenguaje específico de dominio. Al final, algunas de estas preguntas serán respondidas en el segundo paso y debes responder el siguiente paso.
Desarrollo de un lenguaje de programación
Muchas personas tienen problemas o frustraciones con los lenguajes de programación que utilizan a diario. A algunos les gustan las cosas manejadas de manera más abstracta, mientras que otros odian implementar características que deberían ser `estándar`. Ya sea que sea un profesional de TI o simplemente un aficionado, muchas veces desearía poder crear un nuevo lenguaje de programación.
Pasos
1. Familiarízate con la tecnología. No puedes desarrollar un lenguaje de programación si no sabes cómo usar una computadora.
2. Familiarícese con la terminología. Los escritores de compiladores a menudo usan terminología desconocida. Lea más sobre los compiladores antes de continuar. Asegúrate de saber todo lo que necesitas saber.
3. Decide qué problema necesita resolver tu idioma. ¿El problema que el lenguaje va a abordar es específico del dominio o debe ser adecuado para todo tipo de aplicaciones??
4. Piensa en la semántica de tu idioma y sus conceptos.
5. Piense en tareas específicas que a alguien le gustaría poder realizar con su idioma. Por ejemplo: hacer que un robot siga una determinada trayectoria, o desarrollar programas de escritorio o aplicaciones web relativamente portátiles.
6. Experimente con ideas de sintaxis (el texto del idioma) para los ejemplos anteriores.
Asegúrese de mantener su idioma dentro de la categoría de idioma independiente del contexto, o algo dentro de eso. Su generador de analizador y lo agradecerá al final.
7. Escribe una gramática formal para la sintaxis.
8. Decidir si interpretar o compilar el lenguaje. Esto significa que con un programa interpretado, el usuario editará un programa en un editor y luego lo ejecutará directamente desde el intérprete; si se compila el programa, el usuario escribirá el programa en un editor, lo compilará, guardará el ejecutable resultante en algún lugar y luego lo ejecutará.
9. Escriba el escáner y el analizador front-end o encuentre una herramienta que pueda ayudarlo con esto.
Piense también en cómo advertirá a los usuarios del compilador/intérprete sobre los errores del programa y los errores de sintaxis.
10. Use los datos del analizador para escribir el código del objeto o para una representación preliminar. Deje que el analizador cree AST y cree su código de objeto a partir del AST usando el "código de tres direcciones" o su hermano mayor SSA, luego cree una tabla de símbolos para definir sus funciones, variables globales, etc.
Según su idioma, es posible que también desee crear tablas de punteros virtuales o tablas de datos para sus clases (para admitir la reflexión o RTTI).
11. Escriba el ejecutor o generador de código que pone todo junto.
12. Escriba muchos programas de prueba para probar su idioma.
En particular, escriba programas que desafíen la gramática formal de su lenguaje para asegurarse de que su compilador acepte todo lo que esté dentro de su definición y rechace todo lo que esté fuera de ella.
13. Considere cómo el usuario depurará sus propios programas.
14. Si su idioma usa una biblioteca estándar, tendrá que escribirlo. Junto con un recolector de basura u otras funciones de tiempo de ejecución, si las necesita.
Especialmente si está escribiendo un compilador, necesita el código que ejecuta el sistema operativo para ejecutar el código de usuario (p.: asignando todas las variables globales).
15. Publica tu lenguaje, junto con su especificación y algunos ejemplos de lo que puedes hacer con él.
No olvide la documentación para la integración con bibliotecas existentes, idiomas y cómo usar las funciones de tiempo de ejecución y/o la biblioteca predeterminada.
Consejos
- Comience a diseñar su lenguaje sin escribir ningún código, hasta que esté satisfecho y haya respondido todas (o la mayoría) de las preguntas o problemas asociados con su diseño, ya que es más fácil cambiar el diseño al principio y luego en una etapa posterior.
- Conozca su plataforma de destino (SO y bibliotecas) para su compilador/intérprete, ya que los usará y manipulará.
Advertencias
- Pregúntese si realmente necesita un nuevo idioma y qué tiene de nuevo su idioma que otros idiomas no tienen (podría ser una combinación de funciones o una sola función).
- Tendrá que dedicar tiempo al diseño del lenguaje, ya que no tendrá la opción de cambiar su idioma después de escribir el compilador y pasar la etapa de diseño.
- Escribir un lenguaje de programación es difícil si no sabes lo que estás haciendo. También se necesita mucha práctica.
- No intente mezclar funciones de diferentes idiomas, como un idioma como una combinación de los idiomas X, Y y Z. La historia nos dice que los lenguajes hechos de esta manera nunca triunfan, de lo contrario todo el mundo estaría programando en PL/1 en lugar de algo basado en C.
Artículos de primera necesidad
- Paciencia.
- Conocimiento de las funciones del lenguaje y el diseño del lenguaje (posiblemente lea Conceptos de diseño del lenguaje de programación por David A. vatios).
- Conocimiento sobre la teoría del compilador (porque escribirá un compilador/intérprete para su idioma y su implementación será la implementación de referencia).
- Usos útiles para su lenguaje (sepa que algunos de los lenguajes más utilizados, como C o Lisp, fueron creados para hacer algo específico, como crear Unix o hacer cálculos simbólicos).
Artículos sobre el tema. "Desarrollo de un lenguaje de programación"
Оцените, пожалуйста статью
Similar
Popular