Intérprete MSH

Intérprete MSH


Trago à sua atenção a minha visão de uma linguagem ideal. Nos meus artigos anteriores, já expus minha idéia da linguagem ideal De MUMPS para MSH Recursos e diferenças da linguagem de programação MSH do MUMPS .

Os comentários foram principalmente negativos. Depois de ler os comentários, fiquei surpreso ao descobrir que tudo no mundo das linguagens de programação já é muito perfeito. Mas suspeitas vagas me dizem que nem tudo é tão bom neste mundo. Obviamente, já existem muitas linguagens, mas uma variedade de conceitos de linguagem não é observada.

Se descartamos os pequenos enfeites das línguas, existem vários desses conceitos.

  • Programação de objetos
  • Gerenciamento de dados, digitando.
  • Passando um número variável de parâmetros para procedimentos e funções.
  • Gerenciamento do processo de execução.

A partir da solução desses problemas, as propriedades de uma linguagem de programação são adicionadas.

Programação de objetos


Na minha opinião, este é um conceito importante e deve estar presente na linguagem. Obviamente, mesmo que a linguagem não possua classes e objetos, nada o impede de pensar e escrever programas no estilo de objeto, mas ainda assim, a presença de tais mecanismos torna possível simplificar essa tarefa.

Gerenciamento de dados, digitação


Considero esta seção a mais importante no conceito de linguagem. Eu conheci muitas discussões sobre esse assunto em Habré. Argumentou principalmente a digitação estática e dinâmica. Na digitação dinâmica, a vantagem foi chamada de flexibilidade da linguagem, mas a desvantagem é supostamente a falta de confiabilidade da linguagem e a fraca adaptabilidade aos ambientes de desenvolvimento. Na digitação estática, tudo é exatamente o oposto. Considero absurdos os argumentos sobre a melhor confiabilidade de linguagens com tipagem estática; é possível que a tipagem estática ajude no desenvolvimento de ferramentas de programação, mas nada mais. Eu não sou um defensor de nenhuma das abordagens. Considero que a digitação é o principal mal das linguagens de programação modernas. Embora esteja presente na grande maioria das linguagens de programação. O idioma deve assumir completamente todo o gerenciamento de dados, incluindo a compreensão de seus tipos. O que é bastante real. E o programador deve lidar com a lógica do programa. Se você precisar verificar os dados, digitar não ajudará. Eles só precisam ser verificados quanto ao conteúdo. Só posso explicar a presença de tipificação pela tradição e inércia do pensamento.

Passando um número variável de parâmetros para procedimentos e funções


Esse é um problema menor, mas é difícil de resolver pela maioria dos idiomas. Embora exista um ótimo exemplo no Assembler. Passando parâmetros pela pilha. Você só precisa abandonar a lista de parâmetros formais e passar parâmetros por uma lista. Não está totalmente claro para mim retornar um número variável de valores de função para o que e como usá-lo. Em qualquer caso, uma entidade deve ser retornada.

Gerenciamento de processos


Esta seção também considero crucial para o conceito de linguagem. As construções de controle das linguagens são quase idênticas. Pequenas nuances surgem usando o comando goto. Eu não entendo por que eles estão lutando contra esse time com tanto frenesi. Um comando muito conveniente, especialmente se o argumento desse comando puder ser calculado. Na implementação da computação paralela, as variantes da variante são principalmente 2. Ou são implementadas por meio de bibliotecas ou podem ser incluídas na própria linguagem. Eu sou um defensor do segundo método.

Os idiomas não têm manipulação de eventos. Embora seja amplamente utilizado. Para criar uma GUI, para implementar o processamento de eventos, o loop principal é iniciado. Esta solução não brilha com elegância. Entrar nesse ciclo é outro problema. Um idioma normal deve ter um recurso de manipulação de eventos.

Minhas idéias são obviamente subjetivas e talvez até incorretas. Mas eles são baseados na minha experiência pessoal. Um sistema operacional moderno é um monte de lixo que não é depurado, que nunca será depurado. Pilha de APIs, várias bibliotecas das quais os erros estão sendo transmitidos. O número de linguagens de programação excedeu todos os limites possíveis. Além disso, em princípio eles diferem pouco um do outro. E, geralmente, não direi nada sobre o número de estruturas. Qualquer sistema comum é um bolo de várias camadas de vários subsistemas possivelmente pouco compatíveis, cuja depuração completa nunca será executada. Depurar um programa C simples pode levar meses. E tudo isso na minha opinião é gerado digitando as linguagens de programação.

No momento, não há linguagem que atenda às minhas idéias sobre a linguagem de programação correta. O mais próximo disso, na minha opinião, é a linguagem de programação MUMPS, mas não há implementação de uma linguagem como a linguagem de programação. Existem implementações de banco de dados nas quais esse idioma é usado como um idioma. As limitações dessa abordagem são óbvias, o que me levou a desenvolver uma nova linguagem MSH e escrever sua implementação como intérprete. No momento, nem tudo o que vou fazer está implementado nele. Em particular, não há ambiente de desenvolvimento, mas você pode ter uma idéia da linguagem.

A implementação é feita para Linux x64.

Quem estiver interessado no meu trabalho, escreva para o correio, enviarei a distribuição.
PS.
MSH não é apenas uma linguagem sem tipo, é não declarativa. Em princípio, não há descrições variáveis. No caso geral, uma variável possui não apenas um tipo, mas também uma estrutura. Matrizes, listas, HASH, pilhas e uma declaração são necessárias para descrever cada uma das estruturas. No MUMPS, não existem tais linguagens de declaração em princípio; qualquer variável é uma árvore. Não há espaço reservado para essa árvore. Um nó da árvore é criado no momento da gravação dos dados e somente existem esses nós nos quais a gravação foi feita. Não há restrições para o tipo de índice. Portanto, a comparação de MUMPS com PHP, Java Script e outras linguagens está incorreta. O MUMPS é um mundo separado, com seus próprios problemas e vantagens. Para entender, você precisa reconstruir o pensamento. É impossível entender o MUMPS lendo críticas abusivas. Nós devemos mergulhar nela. Leia a documentação. Instale o sistema MUMPS. Trabalhe nisso. O fato de eles não me entenderem aqui é bastante natural. Estamos falando de mundos diferentes. No mundo do MUMPS, não há discussões que estamos conduzindo aqui sobre tipos, estruturas. Poucos MUMPSists estão interessados ​​em como e onde seus dados são armazenados. Qualquer dado no MUMPS sempre tem duas representações: um número e uma string. E, dependendo da operação, essa ou aquela representação é feita. Eu sempre sei o resultado exato, dependendo da operação que apliquei. O MUMPS força o programador a trabalhar em termos de uma árvore. As árvores podem ser localizadas tanto na mídia externa: globais (analógica de bancos de dados) quanto na memória: localidades (analógica de variáveis ​​em programas). Basicamente, ao projetar um sistema de informações, trabalho diretamente com dados em um disco de dados locais intermediários, tenho um mínimo e eles não causam problemas para mim. Portanto, nos fóruns do MUMPS, você não encontrará discussões sobre os tipos de variáveis ​​de suas localizações. Um método típico de design é projetar árvores de entrada, fins de semana. E então, conforme necessário, você escreve programas para formar árvores de entrada e saída. Os dados no MUMPS são primários e os programas são secundários. Com meus artigos, pretendo apresentar o maior número possível de programadores a esse outro mundo do MUMPS. Eu acho que este mundo está mais correto. Admiro essa linguagem simples, poderosa e elegante. É um prazer escrever sobre isso. Para meu profundo pesar, tenho pouco a fazer. Quero criar uma linguagem na qual tudo possa ser escrito sem ir além dos limites dessa linguagem. Escreva um servidor, escreva um cliente de desktop, adicione um idioma aos navegadores.

Source: https://habr.com/ru/post/pt447668/


All Articles