| |
|
|
H.Brill | Normalerweise sind ja Konstanten, die mit DEF definiert wurden, im späteren Programmlauf unveränderlich. Das ist ja auch der Sinn davon.
Daß es dennoch anders geht, beweisen die Escpae-Sequenzen und die eingebetteten Variablen.
Ist vielleicht für etwas nützlich. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 08.05.2023 ▲ |
|
|
|
|
Matthias Arlt | Dieses Verhalten gibt es aber offenbar erst ab X3. Vorher wurde eine Stringkonstante auch nur als Literal behandelt, so wie es der Logik entspricht. Immerhin gut zu wissen... |
|
|
| |
|
|
|
H.Brill | Vor allem die engebetteten Variablen machen es ja so interessant. Mal sehen, ob ich eine gute, sinnvolle Verwendung dafür finde.
Vorstellen könnte ich mir solche Adress-Etiketten, wo der Absender fest ist und die Kundenadressen aus einer DB gezogen werden.
Zum Ausdruck bräuchte man nur eine Stringkonstante. Die Adressfelder aus der DB speichert man sowieso meistens in normalen Variablen (zur Weiterverarbeitung) zwischen. Sobald man die Adressteile in den Variablen hat, ist auch die Stringkonstante aktuell, bzw. mit der aktuellen Adresse versehen.
Ich glaube, da finden sich bestimmt noch andere Einsatzgebiete. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 08.05.2023 ▲ |
|
|
|
|
Matthias Arlt | Nun ja...dann wohl eher 'kosmetisch' relevant. Aber warum nicht...
Letztendlich verhält sich eine Stringkonstante ja nicht anders als eine global definierte Stringvariable, die im Programmablauf unverändert bleibt. Und hierin besteht auch der einzige Vorteil der Konstante gegenüber der Variablen, nämlich in der globalen Sichtbarkeit und dem festen Inhalt, eben einem unveränderten Literal.
Daraus könnte theoretisch ein marginaler Geschwindigkeitsvorteil resultieren. Ob das in einem 'durchschnittlichen' Programm tatsächlich messbar ist, habe ich allerdings nie getestet.
Wenn ich nun aber statt einem konstanten Literal eine Mischung aus veränderbaren Teilen zuweise, bleibt nur die globale Sichtbarkeit. Die erreiche ich aber ebenso mit einer global deklarierten Variable. |
|
|
| WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 08.05.2023 ▲ |
|
|
|
|
H.Brill | Im Grunde genommen ist es ja auch nur eine Spielerei von mir. Da hast du natürlich Recht, daß man das auch mit normalen Variablen erledigen kann.
Und einen Geschwindigkeitsvorteil sehe ich auch nicht wirklich, obwohl nach RGH's Zitat in der Hilfe :
Die Verwendung von Konstanten kann ein Programm übersichtlicher und ggf. auch schneller machen, da auf Konstanten deutlich schneller zugegriffen wird, als auf Variablen.
Mag sein, wenn man eine riesige Schleife mit zig tausenden Durchläufen hat, daß man da etwas schneller unterwegs ist. Das ist aber auch dem Interpreter geschuldet. Irgendwo in der Hilfe hatte ich mal gelesen, daß der alle 20 Zeilen eine 'Pause' oder was immer, macht.
Das einzige, was ich mal festgestellt habe : Wenn man große Datenmengen in einer sehr großen Schleife abarbeiten muß, kann es vorteilhaft sein, RGH's interne Schleifen (z.B. MoveListProc) zu verwenden. Mit den ...ToList-Befehlen kann man ja in dieser Proc machen, was man will, d.h. ma braucht ja nicht unbedingt die interne Listboxliste zu benutzen.
Da konnte ich schon mal einen Geschwindigkeitsvorteil feststellen. Aber meistens schreiben wir ja, wie du schon sagtest, 'durchschnittliche' Programme, wo das dann nicht auffällt. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 09.05.2023 ▲ |
|
|
|
|
Matthias Arlt | Na wie auch immer, schaden wird es nicht. Und sei es auch nur, daß es vielleicht den Quelltext schöner strukturiert...
Interessant wäre nun, ob sich ab X3 die anderen Konstanten (long, float etc.) auch irgendwie atypisch verhalten. Vielleicht fällt Dir da ja mal was auf. |
|
|
| |
|
|
|
H.Brill | Bei den Zahlen-Konstanten wüßte ich jetzt nicht, wie. Das ist ja eine feste Zahl und kein Literal "xxxx", das zumindest in der Länge beweglich ist. Ein Long (&,%) hat nunmal 4 Bytes, nicht mehr und nicht weniger. Da kann man auch keine zusätzliche Variable einbetten. Das hier funktioniert ja auch nicht :
Und auch mit Addr() kommt man nicht dran. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 09.05.2023 ▲ |
|
|
|
|
Matthias Arlt | Da hast Du recht. Ich hätte auch nicht wirklich damit gerechnet. Es ist aber immer wieder interessant, was man nach Jahren der Nutzung so an 'Neuigkeiten' entdeckt... |
|
|
| |
|
|
|
H.Brill | Ja, manchmal führen auch Flüchtigkeitsfehler bzw. Programmierfehler zu solchen Erkenntnissen. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 10.05.2023 ▲ |
|
|
|