40 votes

Quelles sont les primitives de Suite opérateurs?

Je suis intéressé dans la mise en œuvre d'une quatrième système, juste pour que je puisse obtenir une certaine expérience de la construction d'une simple VM et de l'exécution.

Lors du démarrage dans une généralement apprend au sujet de la pile et de ses opérateurs (CHUTE de, DUP, SWAP, etc.) tout d'abord, il est donc naturel de penser que parmi les primitives des opérateurs. Mais ils ne sont pas. Chacun d'eux peut être décomposé en opérateurs de manipuler directement la mémoire et la pile de pointeurs. Plus tard, on apprend de store (!) et fetch (@) qui peut être utilisé pour mettre en œuvre DUP, SWAP, et ainsi de suite (ha!).

Quels sont donc les primitives opérateurs? Ceux qui doivent être mis en œuvre directement dans l'environnement d'exécution à partir de laquelle tous les autres peuvent être construits? Je ne suis pas intéressé à haute performance; je veux quelque chose que je (et d'autres) peuvent apprendre. Opérateur d'optimisation peuvent venir plus tard.

(Oui, je suis consciente que je peux commencer avec une machine de Turing et à partir de là. C'est un peu extrême.)

Edit: Ce que je vise est semblable à l'amorçage d'un système d'exploitation ou d'un nouveau compilateur. Que dois-je mettre en œuvre, au minimum, de sorte que je peux construire le reste du système, à partir de ces primitives blocs de construction? Je ne vais pas mettre en œuvre cette nus sur du matériel; comme un exercice éducatif, allais-je écrire mon propre minimale de la VM.

23voto

plinth Points 26817

Ce fil couvre votre question exacte. Voici une soupe-aux-noix de mise en œuvre avec une documentation complète.

J'ai écrit une sous-routine filetée de Suite ciblage 68K quand j'étais au collège. J'ai défini l'environnement d'exécution et le format du dictionnaire, puis écrit du code C qui de démarrage court d'une application Macintosh qui a chargé un dictionnaire par défaut, peuplé de quelques I/O vecteurs et obtenu le code en cours d'exécution. Puis j'ai pris le Leo Brodie livre de Commencer de Suite et a commencé la mise en œuvre de la base de dictionnaire en langage assembleur 68K. J'ai commencé avec l'arithmétique/logique des mots, alors ne les structures de contrôle, puis définition d'un mot et la manipulation des mots. Ma compréhension est qu'au minimum vous devez @, !, +, -, * et /. Le reste peut être mis en œuvre en termes de personnes, mais c'est comme essayer d'écrire toute une bibliothèque de graphiques basés sur SetPixel et GetPixel: cela va fonctionner, mais bon sang, pourquoi?

J'ai apprécié le fait qu'il y a vraiment des puzzles intéressants, comme s' DOES> exactement (et une fois que j'avais une solide DOES> mise en œuvre, j'ai été la création de fermetures qui s'est transformé en minuscules quantités de code).

13voto

David Thornley Points 39051

Il y A longtemps, j'avais un livre appelé "Fileté d'Interprétation des Langues", publié, je crois, par Octet, qui discutent de la façon de mettre en œuvre une Suite-comme la langue (je ne pense pas qu'ils aient jamais il a appelé de Suite) dans le Z80 de l'assemblée.

Vous ne pouvez pas avoir un Z80 à portée de main, ou en veux un, mais le livre pourrait être instructif.

8voto

epatel Points 32451

Ce poste comp.lang.suite énumère quelques-unes des "minimes voyages aller".

http://groups.google.com/group/comp.lang.forth/msg/10872cb68edcb526

Pourquoi dois-je le savoir? Mon frère, Mikael, écrit #3 et il a également écrit un livre au sujet de faire un "minimal de Suite" (en suédois, tout de même). Si je me souviens bien, il a voulu obtenir un ensemble minimal d'opérateurs qui pourraient être construits dans le silicium.

4voto

Charlie Martin Points 62306

Je ne suis toujours pas convaincu que la question est bien formé. Par exemple, le Socle, les instructions peuvent être réduits; après tout, * et / peut être mis en œuvre en termes de + et -, mais ensuite " + " peuvent être mis en œuvre en termes d'une fonction successeur (voir les axiomes de Peano.) Qui vous met dans le voisinage d'une machine de Turing. Comment savoir où s'arrêter?

4voto

boost Points 3169

Vous pouvez également jeter un oeil à Hans Bezemer du 4e compilateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X