AW: [Squeak-ev] Schleifen und Skriptunterbrechung
Markus Schlager
m.slg at gmx.de
Son Dez 18 12:53:33 UTC 2005
Hallo Knut,
Vielen Dank für den Tip mit den Semaphoren! Das bringt mich in der Tat ein
gutes Stück weiter. An der Stelle auch einen kleinen Dank an Uwe für sein
MazeProjekt. Die Idee, in einem Behälter mit Kacheln zu programmieren und dann
auch durch den Zeiger dem Programm schön beim Laufen zuschauen zu können, habe
ich mir frech zu klauen erlaubt. Nur möchte ich halt auch Kacheln für
Verzweigungen und Schleifen sowie evtl. Unterprogramme. Es sieht im Moment
nicht schlecht aus. (Teilweise scheine ich noch Synchronisationsprobleme beim
Setzen der Semaphoren zu haben. Meine Schleifen lassen z.B. den ersten Schritt
aus und machen den letzten doppelt.)
Bislang habe ich mir das alles mit eToys zusammengeklickt, stoße jetzt aber
wohl doch an die Grenzen dieses Vorgehens. Naja, darf ich halt wieder einmal
etwas dazulernen - auch recht.
Vielleicht noch zwei konkrete Fragen:
1. Gibt es bei eToy-Skripten auch so etwas wie Kacheln für lokale Variablen,
die nur innerhalb des Skripts benutzt werden? Oder ist das nur im Textmodus
zu machen?
2. Meine Schleifenkacheln sind einfach Behälter, die einen Beobachter für eine
ihrer Variablen (die Schleifenzahl) und einen weiteren Behälter für den
Schleifeninhalt enthalten. Diese beiden Objekte sind in dem Behälter
eingebettet und auch als Variablen des Behälters diesem bekannt. Wenn ich
nun so eine Schleifenkachel in einem Objektlager deponiere und in der Folge
Kopien erzeuge, darf ich dann davon ausgehen, daß diese Kopien ihre beiden
Bestandteile (Zähler und Block) als solche auch automatisch kennen, oder
muß ich die betreffenden Variablen immer erst eigens mit Hilfe des Zeigers
mit den richtigen Objekten belegen?
3. Werden Variablen eines Objektes durch gleichnamige lokale Variablen etwa
eines Skriptes dieses Objektes verdeckt oder gelten sie als global und
werden bei solchen Namenskollisionen auch überschrieben (Seiteneffekt)?
Hintergrund: Ich habe ein Objekt 'Programm', mit einer Variablen
'Programmblock', der jeweils ein Behälter voller Kacheln (der 'Programmtext',
oder, wenn im Programmtext ein Schleifenbehälter auftaucht. zwischendurch
dessen 'Schleifenblock') als Wert zugewiesen wird, und einer Methode
'werteAus', die innerhalb des gerade aktuellen Programmblocks den Zeiger von
Kachel zu Kachel wandern läßt und die zu den Kacheln gehörigen Befehle
aufruft. Jeder der Blöcke hat eine eigene Semaphore
'SchrittInArbeit'. Spätestens bei einer Schleife innerhalb einer anderen stehe
ich dann vor solchen Namensüberschneidungen.
Schöne Grüße
Markus
-----------------------------------------------
Markus Schlager m.slg(at)gmx.de