



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.










Desenvolvendo uma linguagem de programação
Contente
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

1. Familiarize-se com a tecnologia. Você não pode desenvolver uma linguagem de programação se não souber usar um computador.

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.

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?

4. Pense na semântica da sua linguagem e seus conceitos.

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.

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.

7. Escreva uma gramática formal para a sintaxe.

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á.

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.

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).

11. Escreva o executor ou gerador de código que junta tudo.

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.

13. Considere como o usuário irá depurar seus próprios programas.

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).

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"
Оцените, пожалуйста статью
Similar
Popular