Implementación del intérprete MSH. Quiero presentar al estimado público el intérprete del nuevo lenguaje de programación MSH. Ya escribí artículos sobre él en Habr. El último es el
intérprete de MSH . Este artículo tiene enlaces a artículos anteriores sobre este tema.
En realidad, el público local es bastante escéptico sobre tal creatividad. Pero esto es injusto. Un lenguaje de programación exitoso puede avanzar significativamente en toda la industria de TI. Reducción del esfuerzo de desarrollo. Empecé a desarrollar mi lenguaje para no satisfacer mis propias ambiciones. Creo que no hay un lenguaje de programación exitoso. Y es extremadamente necesario. Además, no hay lenguaje, pero sí una ideología del lenguaje. Esta ideología está contenida en el lenguaje MUMPS. Pero como lenguaje de programación no existe. Se usa solo como lenguaje de base de datos y esto limita significativamente el alcance de su aplicación. Esta situación, en mi opinión, se ha desarrollado debido al interés propio de los desarrolladores de bases de datos y a la falta de comprensión del potencial de este lenguaje por parte de todos los demás. MUMPS ahora existe como un estándar de 1995. Por supuesto, en esta forma hace tiempo que está desactualizado. Han aparecido nuevos conceptos de programación que deben tener un lenguaje moderno. Me comprometí a desarrollar tal lenguaje. En este caso, era necesario mantener la ideología de MUMPS. Y la ideología es la unidad de código y datos. El lenguaje se basa no solo en datos, sino en la estructura de datos. Y esta es una estructura bastante poderosa. Este es un arbol. Todas las demás estructuras se modelan en forma de árbol. En un caso degenerado, un árbol puede consistir en un vértice. De hecho, la línea entre el código y los datos es bastante efímera. L
La lógica del programa se puede colocar tanto en el código como en los datos. Y dónde trazar la línea entre el código y los datos depende del programador. Traté de poner toda la lógica del programa en los datos. Y el programa simplemente recorrió el árbol de datos y ejecutó los comandos allí. El código, por supuesto, no ha desaparecido, pero la estructura del programa estaba fuera del programa principal. La flexibilidad de tal programa era alta, pero entenderlo era simplemente imposible. Entonces el código y los datos forman la unidad. Además, la estructura de datos es primaria en relación con el contenido de los datos. La separación en un lenguaje de programación y una base de datos no es natural.
Al diseñar sistemas de información, los programas manipulan principalmente estructuras de datos en lugar de contenido. El contenido se vuelve significativo solo en el momento de las operaciones aritméticas. La naturaleza secundaria del contenido sugiere que no hay necesidad de tipos de datos. Los tipos de datos son generados por la arquitectura de la computadora y la imperfección de los traductores. Los tipos de datos no tienen nada que ver con el significado significativo de los sistemas de información. Está claro que esto simplifica los compiladores y los IDE, pero todo esto es secundario. Los problemas que generan tipos de datos superan con creces los beneficios que proporcionan. Esto no significa que no necesite controlar el contenido de los datos. Pero esto debe hacerse solo en el momento de la recepción de datos desde el exterior. Y los tipos de variables no dan ayuda en esto. La variedad de contenido de datos supera con creces los tipos básicos de lenguajes de programación. Puede ser no solo números, sino también cadenas de varios tipos. Y los números pueden tener varias restricciones. En cualquier caso, es necesario verificar la exactitud de los datos de entrada. Por lo tanto, los tipos básicos tienen muy poca relación con el contenido de los datos.
El lenguaje moderno debería ser compatible con OOP. Debido a la falta de una parte declarativa en el lenguaje, tuve que restringirme solo a una parte de la implementación de la descripción de la clase. Pero el lenguaje no impone un estilo de programación. ¿Quieres usar objetos, no quieres no usar. El manejo de eventos es ampliamente utilizado en Assembler. DOS fue construido sobre el manejo de eventos. En lenguajes de alto nivel, no conozco casos de uso de esta técnica. Aunque ella tiene un alto potencial. La ausencia de procesamiento de eventos en el lenguaje obliga a los programas a usar varios ciclos de procesamiento de mensajes. Una solución bastante torpe que causa muchos problemas al intentar realizar algún tipo de procesamiento dentro del bucle. El procesamiento paralelo de tareas ya se usa en todas partes, pero en muchos idiomas no es compatible a nivel de idioma. Esto hace que los programas dependan del sistema operativo y su versión. Las pérdidas de tal decisión son obvias en mi opinión.
Esta es la ideología sobre la cual se construye el lenguaje MSH.
- La unidad de código y estructuras de datos, lo que significa que el lenguaje tiene una poderosa estructura de datos.
- La falta de tipos de datos y, como consecuencia, su declaración.
- La inclusión de técnicas modernas de programación en el lenguaje. En MSH, estos son objetos, manejo de eventos y ejecución paralela de tareas.
Quien esté interesado en este idioma puede familiarizarse con él en github .
Se presentan el código fuente y un ejemplo de trabajo. El trabajo en el idioma acaba de comenzar y este no es un producto terminado. Pero creo que puedes hacerte una idea del idioma. El lenguaje fue desarrollado en Linux x64.