Kleiner Macro-Label Trick...

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
vocalid
Beiträge: 6
Registriert: 25.05.2012 19:01

Kleiner Macro-Label Trick...

Beitrag von vocalid »

Bin gerade am Coden und habe diese Möglichkeit gefunden um Labels in Makros verwenden zu können >:)

Code: Alles auswählen

Macro jump(a,b,label)
  Goto label#1:
  Debug a
  Goto label#2:
label#1:
  Debug b
label#2:
EndMacro

r=3
s=4

jump(r,s,jumphere)
jump(r,s,jumpthere)  
Macros sind 'ne tolle Sache :praise:

...und Hallo an alle :bounce:
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Kleiner Macro-Label Trick...

Beitrag von STARGÅTE »

Na ich weiß nicht so recht, du musst dir ja totzdem bei jedem Aufruf einen neuen Label-Präfix ausdenken ...
Nicht alles muss im Macro besser sein als in einer Procedure.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Kleiner Macro-Label Trick...

Beitrag von Nino »

STARGÅTE hat geschrieben:Na ich weiß nicht so recht, du musst dir ja totzdem bei jedem Aufruf einen neuen Label-Präfix ausdenken ...
Jep. Richtig nützlich wäre sowas, wenn das nicht nötig wäre.
Außerdem ist das Beispiel ziemlich sinnfrei, das macht nämlich nichts anderes als Debug b. :D
vocalid
Beiträge: 6
Registriert: 25.05.2012 19:01

Re: Kleiner Macro-Label Trick...

Beitrag von vocalid »

Nino hat geschrieben:
STARGÅTE hat geschrieben:Na ich weiß nicht so recht, du musst dir ja totzdem bei jedem Aufruf einen neuen Label-Präfix ausdenken ...
Jep. Richtig nützlich wäre sowas, wenn das nicht nötig wäre.
Außerdem ist das Beispiel ziemlich sinnfrei, das macht nämlich nichts anderes als Debug b. :D
klar ist es sinnfrei... aber es geht um's Prinzip :wink:

Macro ist sehr sehr vorteilhaft für die letzten Microsekunden herauszukitzeln, Prozedurenaufruf ist viel zu lahm....
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Kleiner Macro-Label Trick...

Beitrag von ts-soft »

vocalid hat geschrieben:Prozedurenaufruf ist viel zu lahm....
Naja, aber in jedem Falle schneller, als Du es wahrnehmen kannst :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Kleiner Macro-Label Trick...

Beitrag von Nino »

vocalid hat geschrieben:klar ist es sinnfrei... aber es geht um's Prinzip :wink:
Dass man in der "Tipps & Tricks"-Abteilung sinnfreie Beispiele postet ist alles andere als klar.
Das Beispiel zeigt nicht, warum diese Art des Springens zu einem Label einen Vorteil gegenüber dem Springen ohne Macro hat. Wenn es einen solchen Vorteil gibt, sollte man den auch demonstrieren (können).
vocalid
Beiträge: 6
Registriert: 25.05.2012 19:01

Re: Kleiner Macro-Label Trick...

Beitrag von vocalid »

Mensch könnt Ihr einem die Lust am Posten nehmen!

....Es wurde (Vielleicht wars im englischen Forum) nach einer Möglichkeit gesucht Labels in Makros welche im Programm mehrfach verwendet werden einzusetzen. Dies ist der Weg.

Und jetzt könnt Ihr mich so ziemlich, unfreundlicher Haufen.

PS. wenn ich bei einer App pro Sekunde 1'000'000 ein Makro oder 1'000'000 eine Procedur aufrufe, macht sehr wohl einen bemerkbaren Zeitunterschied aus.


......wie löscht man sich?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Kleiner Macro-Label Trick...

Beitrag von ts-soft »

Warum bist Du beleidigt, Dein Code macht nichts sinnvolles, jedenfalls kann ich das nicht erkennen.
Es wird immer derselbe Label, der sich innerhalb des Macros befinden muss, angesprungen :freak:

Geschwindigkeitsvorteil ist in einer realen Anwendung meist auch nicht vorhanden, weil so oft wird
eine Funktion nur selten in einer Schleife angesprungen und wenn, dann kann man dies meist besser
und vor allem leserlicher optimieren.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
vocalid
Beiträge: 6
Registriert: 25.05.2012 19:01

Re: Kleiner Macro-Label Trick...

Beitrag von vocalid »

Sorry wegen dem beleidigt sein.... hatte nen richtig üblen Tag.....

Es ist ohne den kleinen Trick unmöglich in Makros Labels einzubauen weil sonst ein Error wegen 2-fach oder mehr gleiche Labels....

Ich bin gerade daran eine kleine Stringsuchroutine zu schreiben, in Tests habe durchaus wegen solchen kleinen Tricks einen grossen Zeitvorteil
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Kleiner Macro-Label Trick...

Beitrag von STARGÅTE »

vocalid hat geschrieben:PS. wenn ich bei einer App pro Sekunde 1'000'000 ein Makro oder 1'000'000 eine Procedur aufrufe, macht sehr wohl einen bemerkbaren Zeitunterschied aus.
Erstens: Ein Macro wird nicht "aufgerufen", da es zu Kompilerzeiten einfach ersetzt wird.
Zweitens: Ein Prozeduraufruf (ohne komplexe Parameter definitionen) kostet gerade mal 1-3 Taktzyklen. Also nicht bemerkbar gegenüber sachen wie Sin(Winkel) [200 Taktzyklen] oder den Stringfunktionen die auch locker (einzeln) über 100 Taktzyklen verbrauchen.
vocalid hat geschrieben:Es ist ohne den kleinen Trick unmöglich in Makros Labels einzubauen weil sonst ein Error wegen 2-fach oder mehr gleiche Labels....
Das ist richtig. Allerdings bezweifel ich die Notwendigkeit von Goto im allgemeinen und sowieso innerhalb von Macros.
vocalid hat geschrieben:Ich bin gerade daran eine kleine Stringsuchroutine zu schreiben, in Tests habe durchaus wegen solchen kleinen Tricks einen grossen Zeitvorteil
Das liegt vermutlich daran, dass du vorher (bei einem Prozeduraufruf) den String immer als Kopie übergeben hast, was natürlich langsammer ist.
In einer Macro-Version wird der String ja direkt benutzt (was nicht immer erwünscht ist).
Allerdings erreichst du den gleichen Geschwindigkeitsvorteil von deinem Macro auch bei einer Procedure, wenn du einfach die Strings als Pointer übergibst, wenn du eh nur in ihnen "suchen" willst.

(Wir sind hier bei Tips und Tricks, daher solltest du diese Antwort auch als Tip verstehen und nicht als "gemecker")
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten