Desenvolvendo uma linguagem de programação

Muitas pessoas têm problemas ou frustrações com as linguagens de programação que usam todos os dias. Alguns gostam de coisas tratadas de forma mais abstrata, enquanto outros odeiam implementar recursos que deveriam ser `padrão`. Seja você um profissional de TI ou apenas um hobby, muitas vezes você deseja criar uma nova linguagem de programação.

Degraus

Imagem intitulada Criar uma linguagem de programação Passo 1
1. Familiarize-se com a tecnologia. Você não pode desenvolver uma linguagem de programação se não souber usar um computador.
Imagem intitulada Criar uma linguagem de programação Etapa 2
2. Familiarize-se com a terminologia. Escritores de compiladores geralmente usam terminologia desconhecida. Leia mais sobre compiladores antes de continuar. Certifique-se de que sabe tudo o que precisa saber.
Imagem intitulada Criar uma linguagem de programação Passo 3
3. Decida qual problema seu idioma precisa resolver. O problema é que a linguagem vai abordar um domínio específico ou a linguagem deve ser adequada para todos os tipos de aplicativos?
Imagem intitulada Criar uma linguagem de programação Passo 4
4. Pense na semântica da sua linguagem e seus conceitos.
  • O acesso direto ao ponteiro é possível ou não?
  • Quais são os tipos de dados do seu idioma?
  • É uma linguagem estática ou dinâmica?
  • Qual é o seu modelo de memória? Você está usando um coletor de lixo ou gerenciamento manual de memória? (Se você estiver usando um coletor de lixo, lembre-se de que você terá que escrever um ou adaptar um existente para sua linguagem de programação.)
  • Como você vai lidar com a simultaneidade? Você está usando um modelo simples de encadeamento/bloqueio ou algo mais complexo como Linda ou o modelo `ator`? (Como os computadores de hoje têm vários processadores.)
  • Existem funções simples embutidas na linguagem ou é tudo de uma biblioteca?
  • Qual é o paradigma ou quais são os paradigmas da sua linguagem de programação? Funcional? Orientado a Objeto? Protótipo (como JavaScript)? Orientado a aspectos? Orientado a modelos? Ou algo completamente novo?
  • Como sua linguagem se comunica com bibliotecas e linguagens existentes (principalmente C)? Este ponto é importante se você estiver desenvolvendo uma linguagem específica de domínio.
  • No final, algumas dessas perguntas serão respondidas na segunda etapa e você terá que responder na próxima etapa.
    Imagem intitulada Criar uma linguagem de programação Passo 5
  • 5. Pense em tarefas específicas que alguém gostaria de realizar com seu idioma. Por exemplo: fazer um robô seguir uma determinada trajetória ou desenvolver programas de desktop relativamente portáteis ou aplicativos da web.
    Imagem intitulada Criar uma linguagem de programação Passo 6
    6. Experimente com ideias de sintaxe (o texto da linguagem) para os exemplos acima.
    Certifique-se de manter seu idioma dentro da categoria de idioma independente de contexto, ou algo dentro dessa. Seu gerador de analisador e você será grato por isso no final.
    Imagem intitulada Criar uma linguagem de programação Passo 7
    7. Escreva uma gramática formal para a sintaxe.
    Imagem intitulada Criar uma linguagem de programação Passo 8
    8. Decida se quer interpretar ou compilar a linguagem. Isso significa que, com um programa interpretado, o usuário editará um programa em um editor e o executará diretamente do interpretador; se o programa for compilado, o usuário escreverá o programa em um editor, compilará, salvará o executável resultante em algum lugar e depois o executará.
    Imagem intitulada Criar uma linguagem de programação Passo 9
    9. Escreva o scanner e o analisador front-end ou encontre uma ferramenta que possa ajudá-lo com isso.
    Pense também em como você avisará os usuários do compilador/interpretador sobre erros de programa e erros de sintaxe.
    Imagem intitulada Criar uma linguagem de programação Passo 10
    10. Use os dados do analisador para escrever o código do objeto ou para uma representação preliminar. Deixe o analisador criar AST e crie seu código de objeto a partir do AST usando `código de três endereços` ou seu irmão maior SSA, depois crie uma tabela de símbolos para definir suas funções, variáveis ​​globais, etc.
    Dependendo do seu idioma, você também pode criar tabelas de ponteiros virtuais ou tabelas de dados para suas classes (para suportar reflexão ou RTTI).
    Imagem intitulada Criar uma linguagem de programação Passo 11
    11. Escreva o executor ou gerador de código que junta tudo.
    Imagem intitulada Criar uma linguagem de programação Passo 12
    12. Escreva muitos programas de teste para testar sua linguagem.
    Acima de tudo, escreva programas que desafiem a gramática formal de sua linguagem para garantir que seu compilador aceite tudo o que estiver dentro de sua definição e rejeite tudo o que estiver fora dela.
    Imagem intitulada Criar uma linguagem de programação Passo 13
    13. Considere como o usuário irá depurar seus próprios programas.
    Imagem intitulada Criar uma linguagem de programação Passo 14
    14. Se sua linguagem usa uma biblioteca padrão, você terá que escrevê-la. Junto com um coletor de lixo ou outras funções de tempo de execução, se você precisar deles.
    Especialmente se você estiver escrevendo um compilador, precisará do código que executa o sistema operacional para executar o código do usuário (por exemplo,.: atribuindo todas as variáveis ​​globais).
    Imagem intitulada Criar uma linguagem de programação Passo 15
    15. Publique seu idioma, juntamente com sua especificação e alguns exemplos do que você pode fazer com ele.
    Não esqueça da documentação para integração com bibliotecas existentes, linguagens e como usar as funções de tempo de execução e/ou a biblioteca padrão.

    Pontas

    • Comece a projetar sua linguagem sem escrever nenhum código, até que esteja satisfeito e tenha respondido todas (ou a maioria) das perguntas ou problemas associados ao seu design, pois é mais fácil alterar o design no início e depois em um estágio posterior.
    • Conheça sua plataforma de destino (SO e bibliotecas) para seu compilador/interpretador, pois você os usará e manipulará.

    Avisos

    • Pergunte a si mesmo se você realmente precisa de um novo idioma e o que seu idioma tem de novo que outros idiomas não (pode ser uma combinação de recursos ou um único recurso).
    • Você terá que gastar tempo no design do idioma, pois não terá a opção de alterar seu idioma depois de escrever o compilador e passar do estágio de design.
    • Escrever uma linguagem de programação é difícil se você não sabe o que está fazendo. Também requer muita prática.
    • Não tente misturar funções de idiomas diferentes, como um idioma como uma combinação do idioma X, Y e Z. A história nos diz que linguagens feitas dessa forma nunca dão certo, senão todo mundo estaria programando em PL/1 ao invés de algo baseado em C.

    Necessidades

    • Paciência.
    • Conhecimento de funções de linguagem e design de linguagem (possivelmente leia Conceitos de Design de Linguagem de Programação por David A. watts).
    • Conhecimento sobre a teoria do compilador (porque você estará escrevendo um compilador/interpretador para sua linguagem e sua implementação será a implementação de referência).
    • Usos úteis para sua linguagem (saiba que algumas das linguagens mais usadas, como C ou Lisp, foram criadas para fazer algo específico, como criar Unix ou fazer cálculos simbólicos).

    Artigos sobre o tópico "Desenvolvendo uma linguagem de programação"
    Оцените, пожалуйста статью