' schrieb:Oliver Frank hat das sehr schön und kurz und knapp ausgedrückt.
Abgesehen von diesem Aspekt haben lokale Variablen und Globale noch in grösserem Masse, zwei grundlegende technische Probleme. Da LabVIEW inherent multithreading ist muss jeder Zugriff auf eine lokale/globale Variable geschützt sein. Das könnte durch komplettes Locking geschehen während der Lebensdauer eines Drahtes der von einer solchen Variablen kommt, aber würde dadurch die parallele Ausführung des Programms schwer einschränken bis ganz unmöglich machen. Deshalb hat LabVIEW dafür entschieden um bei jedem Zugriff auf so eine Variable eine komplette Kopie davon anzulegen. Das ist für Skalarwerte keine Katastrophe aber sobald man da ein multi-Megabyte Array hineinstellt ist es eine garantierte Methode um das Programm dahinkriechen zu lassen. Alles was ich dazu sagen kann ist: selber schuld wenn jemand das so macht.
Das gravierendere Problem ist meines Erachtens aber die Möglichkeit um Raceconditions zu verursachen die schwer zu debuggen sein können. Sobald auf eine globale oder lokale Variable an mehr als einem Ort geschrieben werden kann, sind solche Race-Conditions immer gleich um die Ecke potentiel anwesend. Und das Gemeinste ist dass es durch die quasi-parallele Ausführung von LabVIEW Nodes und die Unvorhersagbarkeit davon in welcher Reihenfolge diese ausgeführt werden, manchmal funktionieren kann und durch minimalste A"nderungen am VI, die eine Recompilation des VIs verursachen plötzlich nicht mehr.
Zitat:Wenn das mit dem Verleiten halt nicht immer so schön wäre ... (Überlegt euch mal es gäbe in LV noch einen goto. Ja, selbst der wird noch bei objektorientiert benutzt.)
Goto in C ist nicht grundsätzlich falsch. Aber wenn es für etwas anderes als frühzeitige Beendung eines Codeabschnittes gebraucht wird, dann ist es immer eine Indikation dafür, dass der Programmierer von saubererem Programmieren keinen Schimmer hat.
try/catch als Exception handling ist ja eigentlich auch nicht so viel anders, nur etwas mehr formalisiert.
Rolf Kalbermatter