8
votes

Qu'est-ce qu'un bon vm pour développer une langue de passe-temps?

Je pense à écrire ma propre petite langue.

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

  • JVM
  • PARROT
  • OSA

    Beaucoup de langues utilisent la JVM, mais à moins que vous n'écriviez une langue java-ish, tout le pouvoir que la STDLIB vous donne envie de vous sentir laid; Ce n'est pas très bon sur des choses dynamiques non plus.

    Parrot semble une bonne machine virtuelle pour développer des langues, mais elle a un peu de projet abandonné / inachevé / hobby l'odorant.

    OSA est ce que Powers AppleScript, pas un VM particulièrement connu, mais j'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 fonctionnel orienté fonctionnel de la langue de Dataflow simultanée avec une frappe forte et un mélange de syntaxe Python et Lisp. Sonne bien, hein?

    [modifier]
    J'ai accepté Python pour le moment, mais j'aimerais en savoir plus sur Osa et Perroquet.


2 commentaires

Qu'en est-il des exigences de performance et d'évolutivité?


Je préférerais utiliser Python ou Lua que ce que je pense. Il n'ya presque aucune exigence de performance et d'évolutivité, il ne sera utilisé que pour les petits outils que j'écris.


4 Réponses :


2
votes
  • Lua a un petit, bien écrit et rapide vm
  • Python VM - Vous pouvez vraiment attacher une nouvelle langue si vous le souhaitez. Ou écrire (utiliser?) Quelque chose comme TinyPy qui est une petite et simple implémentation du Python VM.

    Les deux options ci-dessus ont accès à des bibliothèques standard utiles qui vous permettront de vous enregistrer et sont codées dans des éléments relativement propres et modulaires. Ils ne devraient donc pas être difficiles à se connecter.

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


4 commentaires

J'aimerais en savoir plus sur pourquoi vous pensez que le Lua ou Python VM conviennent à moi. Le perroquet pourrait être mature, au moins la plupart des langues sur elle sont incomplètes ou abandonnées.


@Pepijn: J'ai mis à jour la réponse. Je ne sais pas quoi suggérer d'autre que vous avez des questions plus spécifiques?


Je veux transmettre des fonctions et des objets autour de valeurs et je pense à un système de type plus ou moins statique, j'ai également besoin de choses dataflow. Python a une distinction claire entre les fonctions, les valeurs, les expressions et les états, mais son système de type est plutôt dynamique. Est-ce que cela me gêner? Comment est-ce pour Lua, Parrot, JVM ou OSA?


@Pepijn: Vous pouvez implémenter le type de vérification du haut de la machine virtuelle de Python si vous le souhaitez.



4
votes

regarder LLVM . Ce n'est pas un PURE VM en tant que tel, plus un cadre avec sa propre ir qui vous permet de construire des ordinateurs virtuels de haut niveau. A de bonnes choses comme une analyse de code statique et un support JIT


1 commentaires

Je sais que LLVM d'une hirondelle de malédendance. Parce que ma langue est juste un projet de passe-temps, je pense qu'il vaut mieux emprunter une machine virtuelle avec un stdlib.



5
votes

Une approche que j'ai jouée est d'utiliser le python Ast module construire une arborescence de syntaxe abstraite représentant le code à exécuter. Le python compile fonction peut compiler une AST dans python bytecode, quel EXEC peut alors Cours. Il s'agit d'un niveau un peu supérieur à celui de la génération directe de celui-ci, mais vous devrez faire face à des bizarreries de la langue Python (par exemple, la différence fondamentale entre les déclarations et les expressions).

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


5 commentaires

Cela signifie écrire ma langue en python, n'est-ce pas? Ce serait amusant ... je vais devoir réfléchir aux limitations.


True, à l'aide de la bibliothèque Python AST est certainement plus facile de Python. Vous pouvez certainement faire pire que de choisir Python.


Comment ast pour créer un système de type statique et en particulier pour la rédaction de fonctions de style Dataflow (appelez dès que les données arrivent)?


Naturellement, le Python AST n'est pas spécialement conçu pour être un objectif général, mais il est plutôt conçu pour mettre en œuvre ce qui est nécessaire par Python lui-même (que est une langue générale). Il est certainement possible de créer des fonctionnalités telles qu'un système de type statique et des fonctions de Dataflow au-dessus de Python, elle est donc aussi possible dans Python AST. Cela pourrait simplement être un peu de travail, tout comme la mise en œuvre de telles fonctionnalités en byTecode droit pour un VM sera un peu de travail.


N'est-il pas plus facile d'utiliser Perrot, conçu pour être un objectif général?



1
votes

Avez-vous considéré Pypy? De ce que j'ai lu, en plus d'être un compilateur Python Jit, il a également la capacité de gérer d'autres langues. Par exemple, il y a un tutoriel qui explique comment Pour créer un compilateur JIT Brainfuck utilisant Pypy.


0 commentaires