[Allegro] Flex-Stack (war: Views revisited)

Anando Eger a.eger at aneg-dv.de
Di Apr 1 10:55:45 CEST 2014


Hallo Herr Berger,

Sie schrieben u.a.:

> (In Analogie zu meinem, wesentlich weniger ausgearbeiteten Ansatz):
> /Aufrufe/ von solchen Pseudounterprogrammen koennten die iV nutzen,
> Sie scheinen das normalerweise aber nicht zu einzusetzen und legen
> lieber alles auf den Stack, selbst wenn "alles" ein einzelnes
> Argument ist?

Einfach aus Systematik-Gründen.

> (In Analogie zu meinem, wesentlich weniger ausgearbeiteten Ansatz):
> /Aufrufe/ von solchen Pseudounterprogrammen koennten die iV nutzen,

über

   var "Sprungmarke"\jump 

läßt sich der originale iV-Inhalt leider nicht hinwegretten ...

Dehalb die Vereinbarung, dass der Rückgabewert des UP in der iV
durch jump Return in die $iv übertragen wird.

> Fuer Rueckgabewerte haben Sie kein Beispiel gegeben, offensichtlich
> ist aber $iv dazu gedacht. Theoretisch koennte man auch da den
> Stack nutzen.

Das war auch der Hintergrund für die ursprüngliche Entscheidung, den 
Adressstack vom Datenstack zu trennen. Die Möglichkeit der Rückgabe 
über den Stack habe ich in Praxis jedoch nie genutzt, eher dann 
schon "indirekte" Adressierung der Parameter (also Übergabe von 
Variablennamen), die dann ja auch Rückgabewerte aufnehmen können.

Man könnte natürlich am UP-Ende
  perf Push\jump Return
und nach der "Rückkehrmarke" 
  perf Pop
verwenden. Die Möglichkeit ist da. 

Zur Datenstack-Verwaltung:
Ich habe den Ansatz gewählt, dass der gerufene Prozess dafür 
verantwortlich ist, den Stack sauber zu hinterlassen - also alle 
Parameter, die für ihn gedacht sind, zu entnehmen. Intern kann der 
gleiche Stack natürlich auch als Zwischenspeicher genutzt werden.

Zur Idee des automatischen Aufräumens:

Das hätte etwas, würde aber voraussetzen, dass man sich die 
Datenstackposition vor der Parameterübergabe / dem UP-Aufruf merkt -  
um den Preis weiteren Overheads. Damit das dann "Rund" wird, müsste 
man auch UP-bezogen den (Teil-)Stackunterlauf behandeln. (Und das 
alles mit einer Nicht-Programmiersprache ;-)
Ich denke aber, dass ein UP-Programmierer soviel Disziplin 
aufbringen kann, sich um seine eigenen Parameter auf dem Stack zu 
kümmern ...

Viele Grüße
Anando Eger


On 31 Mar 2014 at 19:07, Thomas Berger wrote:

> Lieber Herr Eger,
> 
> >> Schick, schick. Und dass Rueckgabe nicht in der iV  sondern
> >> in $iv erfolgt, ist B.E. (Braunschweig Entzuecken) pur  ;-)
> > 
> > Diesen Namen kann man sich leicht merken - welchen Vorschlag hätten 
> > Sie für den Namen einer Variablen, die Werte bei "Verhinderung" der 
> > iV ersatzweise aufnehmen soll? 
> 
> Nicht so einfach, evtl. habe ich da auch nicht alles verstanden:
> 
> Prinzipiell problematisch ist, dass die iV eine viel hoehere Kapazitaet
> hat als die normalen $-Variablen (und die unnormale $-Variable "$"
> aka iV2 will man dem Anwender ja nicht wegnehmen)
> 
> (In Analogie zu meinem, wesentlich weniger ausgearbeiteten Ansatz):
> /Aufrufe/ von solchen Pseudounterprogrammen koennten die iV nutzen,
> Sie scheinen das normalerweise aber nicht zu einzusetzen und legen
> lieber alles auf den Stack, selbst wenn "alles" ein einzelnes
> Argument ist?
> 
> Fuer Rueckgabewerte haben Sie kein Beispiel gegeben, offensichtlich
> ist aber $iv dazu gedacht. Theoretisch koennte man auch da den
> Stack nutzen.
> 
> Apropos: Ich habe Ihr Beispiel nicht ausfuehrlich studiert, hatte aber
> den Eindruck, dass in einem Fall die aufgerufene Routine den Stack manipuliert,
> so etwa in Richtung Optimierung bei "tail recursion". Es ist aber eigentlich
> so: Sie haben zwei Stacks, einen fuer Adressen und einen fuer Daten,
> die eigentlich voellig unabhaengig voneinander sind? Beim Adress-Stack
> ist es klar, beim (Pseudo-)Call wird er auf- und beim (Pseudo-)Return
> jeweils um ein Element abgebaut. Beim Datenstack ist auch klar, dass
> vor einem Call der Caller etwas draufzustapeln hat, aber wie wird der
> genutzt: Soll sich die aufgerufene Routine alle Argumente herunternehmen
> oder fundamental anders: Die aufgerufene Routine nutzt es als
> (les- und/oder schreibbaren Datenbereich) und der Aufrufende ist
> fuers abschliessende Aufrauemen zustaendig? (zunaechst hatte ich
> sogar gedacht, Sie wuerden mit Doppelzaehlern arbeiten, d.h. pro
> Ebene des Adressstacks wuerde ein eigener Datenstack simuliert, der
> dann beim Pseudo-Return automatisch aufgeraeumt werden koennte)
> 
> viele Gruesse
> Thomas Berger
> 
> _______________________________________________
> Allegro mailing list
> Allegro at biblio.tu-bs.de
> http://sunny5.biblio.etc.tu-bs.de/mailman/listinfo/allegro





Mehr Informationen über die Mailingliste Allegro