Question

Je pense à écrire ma petite langue.

J'ai trouvé quelques options, mais ne hésitez pas à suggérer plus.

  • JVM
  • Parrot
  • OSA

Beaucoup de langues utilisent la machine virtuelle Java, mais à moins que vous écrivez un langage Java-ish, toute la puissance du stdlib vous donne va se sentir laid; Ce n'est pas très bon à des choses dynamiques soit.

Parrot semble une bonne machine virtuelle pour le développement de langues, mais il a un petit projet abandonné / inachevé / passe-temps odeur à elle.

OSA est ce que les pouvoirs AppleScript, pas une machine virtuelle particulièrement bien connu, mais je l'utilise Mac, et il offre une bonne intégration du système.

CLR + Mac ne semble pas une bonne combinaison ...

Ma langue va être un objet orienté langage concurrent fonctionnel avec flux de données typage fort et un mélange de Python et la syntaxe Lisp. Ça sonne bien, hein?

[modifier]
J'ai accepté Python pour l'instant, mais je voudrais en savoir plus sur OSA et Parrot.

Était-ce utile?

La solution

Une approche que j'ai joué avec est d'utiliser Python ast Module pour construire un arbre de syntaxe abstraite représentant le code à exécuter. La fonction python compile peut compiler une AST en python bytecode, qui exec peut alors exécuter. Ceci est un peu plus haut que bytecode générer directement, mais vous devrez faire face à quelques bizarreries du langage Python (par exemple, la différence fondamentale entre les déclarations et expressions).

En faisant cela, j'ai aussi écrit un module « Deparse » qui tente de convertir un AST retour au code équivalent source Python, juste pour le débogage. Vous pouvez trouver le code dans le référentiel PSIL si vous êtes intéressé.

Autres conseils

Jetez un oeil à LLVM . Ce n'est pas une machine virtuelle pur en tant que telle, un cadre plus avec sa propre IR qui vous permet de créer des machines virtuelles de haut niveau. A bien des choses comme l'analyse de code statique et le soutien JIT

  • Lua a une petite, bien écrit et VM rapide
  • Python VM - vous pouvez vraiment joindre une nouvelle langue si vous voulez. Ou écrire (utiliser?) Quelque chose comme tinypy qui est un petit et simple mise en œuvre de la machine virtuelle Python.

Les deux options ci-dessus ont accès à des bibliothèques standard utiles qui vous permettra d'économiser travailler, et sont écrites en langage C. relativement propre et modulaire, de sorte qu'ils ne devraient pas être difficiles à se connecter.

Cela dit, je suis en désaccord que Parrot est abandonné / passe-temps. Il est assez mature, et a certains développeurs très forts qui y travaillent. En outre, il est spécifiquement une machine virtuelle conçue pour être ciblée par plusieurs langages dynamiques. Ainsi, est a été conçu avec la flexibilité à l'esprit.

Avez-vous envisagé Pypy? D'après ce que j'ai lu, en plus d'être un compilateur JIT Python, il a aussi la capacité de traiter d'autres langues. Par exemple, il est tutoriel qui explique comment pour créer un compilateur JIT Brainfuck en utilisant Pypy.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top