Implementação do interpretador MSH. Quero apresentar ao público estimado o intérprete da nova linguagem de programação MSH. Eu já escrevi artigos sobre ele no Habr. O último é o
Intérprete MSH . Este artigo possui links para artigos anteriores sobre este tópico.
Na verdade, o público local é bastante cético em relação a essa criatividade. Mas isso é injusto. Uma linguagem de programação bem-sucedida pode avançar significativamente em todo o setor de TI. Reduzindo o esforço de desenvolvimento. Comecei o desenvolvimento da minha linguagem para não satisfazer minhas próprias ambições. Eu acredito que não há linguagem de programação bem sucedida. E é extremamente necessário. Além disso, não há linguagem, mas há uma ideologia da linguagem. Essa ideologia está contida na linguagem MUMPS. Mas, como linguagem de programação, ela não existe. É usado apenas como uma linguagem de banco de dados e isso limita significativamente o escopo de sua aplicação. Essa situação, na minha opinião, se desenvolveu devido ao interesse próprio dos desenvolvedores de banco de dados e à falta de compreensão do potencial dessa linguagem por todos os outros. MUMPS agora existe como um padrão de 1995. É claro que, dessa forma, há muito tempo está desatualizado. Surgiram novos conceitos de programação que devem ter uma linguagem moderna. Eu me comprometi a desenvolver essa linguagem. Nesse caso, era necessário manter a ideologia do MUMPS. E a ideologia é a unidade de código e dados. A linguagem é baseada não apenas em dados, mas na estrutura de dados. E essa é uma estrutura bastante poderosa. Isto é uma árvore. Todas as outras estruturas são modeladas em uma base de árvore. Em um caso degenerado, uma árvore pode consistir em um vértice. De fato, a linha entre código e dados é bastante efêmera. L
A lógica do programa pode ser colocada no código e nos dados. E onde traçar a linha entre código e dados depende do programador. Eu tentei colocar toda a lógica do programa nos dados. E o programa simplesmente percorreu a árvore de dados e executou os comandos lá. O código, é claro, não desapareceu, mas a estrutura do programa estava fora do programa principal. A flexibilidade de um programa desse tipo era alta, mas entender esse programa era simplesmente impossível. Portanto, código e dados compõem a unidade. Além disso, a estrutura de dados é primária em relação ao conteúdo dos dados. A separação em uma linguagem de programação e em um banco de dados não é natural.
Ao projetar sistemas de informação, os programas manipulam principalmente estruturas de dados em vez de conteúdo. O conteúdo se torna significativo apenas no momento das operações aritméticas. A natureza secundária do conteúdo sugere que não há necessidade de tipos de dados. Os tipos de dados são gerados pela arquitetura do computador e pela imperfeição dos tradutores. Os tipos de dados não têm nada a ver com o significado significativo dos sistemas de informação. É claro que isso simplifica os compiladores e IDEs, mas tudo isso é secundário. Os problemas que geram tipos de dados superam os benefícios que eles fornecem. Isso não significa que você não precisa controlar o conteúdo dos dados. Mas isso deve ser feito apenas no momento do recebimento de dados externos. E os tipos de variáveis não ajudam nisso. A variedade de conteúdo de dados excede em muito os tipos básicos de linguagens de programação. Pode ser não apenas números, mas também cadeias de vários tipos. E os números podem ter várias restrições. Em qualquer caso, é necessário verificar se os dados de entrada estão corretos. Portanto, tipos básicos têm muito pouca relação com o conteúdo dos dados.
A linguagem moderna deve suportar OOP. Devido à falta de uma parte declarativa na linguagem, tive que me restringir a apenas uma parte da implementação da descrição da classe. Mas a linguagem não impõe um estilo de programação. Você quer usar objetos, não quer não usar. A manipulação de eventos é amplamente usada no Assembler. O DOS foi construído com a manipulação de eventos. Nas linguagens de alto nível, não conheço casos de uso dessa técnica. Embora ela tenha um alto potencial. A ausência de processamento de eventos no idioma força os programas a usar vários ciclos de processamento de mensagens. Uma solução bastante desajeitada que causa muitos problemas ao tentar executar algum tipo de processamento dentro do loop. O processamento paralelo de tarefas já é usado em qualquer lugar, mas em muitos idiomas não é suportado no nível do idioma. Isso torna os programas dependentes do sistema operacional e de sua versão. As perdas de tal decisão são óbvias na minha opinião.
Essa é a ideologia na qual a linguagem MSH é construída.
- A unidade de código e estruturas de dados, o que significa que a linguagem possui uma poderosa estrutura de dados.
- A falta de tipos de dados e, como conseqüência, sua declaração.
- A inclusão de técnicas modernas de programação na linguagem. No MSH, esses são objetos, manipulação de eventos e execução paralela de tarefas.
Quem estiver interessado nesse idioma pode se familiarizar com ele no github .
É apresentado o código fonte e um exemplo de trabalho. O trabalho no idioma está apenas começando e este não é um produto acabado. Mas acho que você pode ter uma idéia do idioma. A linguagem foi desenvolvida no Linux x64.