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