2009-07-17 15 views
13

Je suis en train de concevoir un langage de programmation qui se compile en un bytecode intermédiaire. Cependant, j'ai beaucoup de mal à concevoir la structure bytecode. Est-ce que quelqu'un a des indications sur la façon de représenter un programme en binaire? Alternativement, y a-t-il des ressources (de préférence gratuites) sur la façon de faire cela? Le plus proche que j'ai trouvé est le description of the Lua interpreter's bytecode.Conception de code octet?

EDIT: Un peu plus d'informations: J'implémente mon propre système de garbage collection qui est fortement optimisé pour l'immuabilité et la simultanéité. Par souci d'efficacité, j'ai besoin d'instructions de bytecode uniques qui permettent aux programmes d'interagir avec le système de récupération de place.

Répondre

4

This article décrit la GNU Smalltalk VM et son bytecode. googler « Smalltalk bytecode » viendra avec d'autres ressources.

1

Vous trouverez peut-être utile de regarder l'article de Wikipedia sur bytecode http://en.wikipedia.org/wiki/Bytecode " et suivez quelques-unes des références aux langues de l'âge et le style qui vous intéresse.

5

ne pas concevoir votre bytecode il est inutile!

Je vous conseille de regarder dans LLVM et GNU Lightning qui font beaucoup de travail pour vous et vous demandent simplement de créer un schéma de type AST pour la traduction après avoir annoté les choses et résolu la portée et ainsi de suite.

Le livre de dragon comprend également quelques sections sur le bytecode. L'art de la programmation informatique peut également aider car le langage Mix énonce certaines décisions de conception (datées) mais importantes.

Vraiment, votre code intermédiaire doit être:

  1. Quelque chose que vous écrit comme une forme intermédiaire efficace qui permet d'algorithmes d'optimisation populaire et de traduction d'un back-end sans la perte de la sémantique par mauvaise traduction et similaire:
  2. Un IR bien connu et utilisé que vous pouvez utiliser d'autres outils pour traduire en code machine. Même si vous utilisez la configuration .NET/Mono comme IR, alors si elle répond à vos besoins, alors génial.

Tout dépend de vos besoins, ne concevez pas votre propre IR/bytecode sauf si vous en avez besoin. Si quelque chose d'autre vous va, utilisez-le! Vous n'avez pas besoin de le maintenir!

+0

Merci pour votre contribution, mais les fonctionnalités les plus innovantes de ma langue sont dans les structures de données intégrées et la façon dont elles sont collectées, qui doivent malheureusement être mises en œuvre au niveau de la machine virtuelle. – Imagist

+0

@Imagist ... alors peut-être une façon d'avancer serait de construire un moteur de bytecode qui permette un hook externe pour ces choses en créant un moteur de bytecode avec des internes pilotés par les événements et une délégation de fonctionnalités. Ce serait tout à fait génial, cela permettrait aux gens de spécifier dans la Colombie-Britannique quel GC ils aimeraient utiliser (et les choses) –