O que é uma boa VM para desenvolver uma linguagem de hobby?
-
24-09-2019 - |
Pergunta
Estou pensando em escrever minha própria linguagem.
Encontrei algumas opções, mas fique à vontade para sugerir mais.
- JVM
- Papagaio
- OSA
Muitos idiomas estão usando a JVM, mas, a menos que você escreva uma linguagem java-ish, todo o poder que o stdlib oferece vai se sentir feio; Também não é muito bom em coisas dinâmicas.
O Parrot parece uma boa VM para o desenvolvimento de idiomas, mas tem um pequeno cheiro de projeto abandonado/inacabado/hobby.
OSA é o que Powers AppleScript, não uma VM particularmente conhecida, mas eu uso o Mac, e oferece boa integração do sistema.
CLR+Mac não parece uma boa combinação ...
Meu idioma será uma linguagem funcional de fluxo de dados funcional orientada a objetos com forte digitação e uma mistura de sintaxe Python e Lisp. Parece bom, não é?
editar
Aceitei Python por enquanto, mas gostaria de ouvir mais sobre Osa e Parrot.
Solução
Uma abordagem com quem toquei é usar o python ast Módulo para construir uma árvore de sintaxe abstrata representando o código a ser executado. O python compile
A função pode compilar um AST no python bytecode, que exec
pode então correr. Esse é um nível um pouco mais alto do que a geração diretamente de bytecode, mas você terá que lidar com algumas peculiaridades da linguagem Python (por exemplo, a diferença fundamental entre declarações e expressões).
Ao fazer isso, também escrevi um módulo "DeParse" que tenta converter um AST de volta ao código -fonte do Python equivalente, apenas para depuração. Você pode encontrar código no psil repositório se você estiver interessado.
Outras dicas
Dê uma olhada em Llvm. Não é uma VM pura como tal, mais uma estrutura com seu próprio IR que permite criar VMs de alto nível. Tem coisas legais, como análise de código estático e suporte a JIT
- Lua tem uma VM pequena, bem escrita e rápida
- Python VM - Você pode realmente anexar um novo idioma, se quiser. Ou escreva (use?) Algo como o Tinypy, que é uma implementação pequena e simples da VM Python.
Ambas as opções acima têm acesso a bibliotecas padrão úteis que economizarão seu trabalho e são codificadas em C relativamente limpo e modular, para que não sejam difíceis de se conectar.
Dito isto, eu discordo que o papagaio é abandonado/hobby. É bastante maduro e tem alguns desenvolvedores muito fortes trabalhando nele. Além disso, é especificamente uma VM projetada para ser direcionada por vários idiomas dinâmicos. Assim, foi projetado com flexibilidade em mente.
Você já considerou o Pypy? Pelo que li, além de ser um compilador Python JIT, ele também tem a capacidade de lidar com outros idiomas. Por exemplo, existe um tutorial O que explica como criar um compilador JIT de Fuck BrainS usando o Pypy.