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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top