Autor Beitrag
[r2d2]
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

WinXP
D5 Enterprise
BeitragVerfasst: Mi 25.02.04 03:14 
Hi
In der Delphi5-Hilfe steht zu 'and' und 'or':

Der Delphi-Compiler unterstützt zwei Auswertungsmodi für die Operatoren and und or: die vollständige Auswertung und das Kurzschlußverfahren. Bei der vollständigen Auswertung werden alle Operanden eines and - oder or-Ausdrucks auch dann ausgewertet, wenn das Resultat des gesamten Ausdrucks bereits feststeht. Das Kurzschlußverfahren geht streng von links nach rechts vor und wird beendet, sobald das Ergebnis des gesamten Ausdrucks feststeht.

So, und jetzt zu meinem Problem :arrow: :
Das bedeutet doch eigentlich, dass beim Kurzschlussverfahren das 'and' wie ein 'then if' wirkt. Jetzt habe ich mir gedacht, zur Optimierung eines meiner Programme ersetze ich einfach alle 'then ifs' durch 'ands'. Komischerweise ist der Effekt von Operation zu Operation aber total unterschiedlich: Anscheinend wird der Code bei Operationen, die am schnellsten in der vorgegebenen Reihenfolge ausgeführt werden, langsamer, bei den anderen schneller. Jetzt heißt es aber doch, dass das Kurzschlussverfahren "streng von links nach rechts" vorgeht :?: . Ich habe mir zum Überprüfen meiner Vermutung ein kleines Testprogramm geschrieben, in dem aber alles funktioniert wie es soll. Das Programm, in dem der Fehler auftritt, ist ziemlich komplex, kann es vielleicht damit zusammenhängen?

Danke schonmal
Chatfix
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1583
Erhaltene Danke: 10

Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
BeitragVerfasst: Mi 25.02.04 09:38 
ist doch ganz einfach...

Kurzschlussverfahren:

ausblenden Delphi-Quelltext
1:
if True and False and True then					

Hier hört der Compiler nach dem ersten and auf, da der gesamte ausdruck bereits "False" ist.

Bei der Vollständigen auswertung wird aber bis zum letzten geprüft (obwohl schon feststeht das "False" rauskommt)

Hoffe das war einigermasen verständlich

in der Delphi Hilfe ist aber auch nen Bsp...

_________________
Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
[r2d2] Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

WinXP
D5 Enterprise
BeitragVerfasst: Mi 25.02.04 13:31 
Das ist mir schon klar, ich habe nur das Gefühl, dass der Compiler aus
ausblenden Delphi-Quelltext
1:
if bla and fgh and asd then					

gern mal
ausblenden Delphi-Quelltext
1:
if fgh and bla and asd then					

macht

Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt
Brainiac
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 25.02.04 19:01 
Wenn 'fgh' eine Boolean-Variable ist aber 'bla' und 'asd' Funktionen, dann könnte ich mir schon denken, dass der Compiler zur Optimierung das am einfachsten auszuwertende nach vorne holt.
UC-Chewie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 531

WinXP
D5 Ent
BeitragVerfasst: Mi 25.02.04 19:55 
Kann ich mir nicht vorstellen. Der Delphi-Code-Optimiererer ist i.d.R. sehr zurückhaltend, wenn es darum geht, die Auswirkungen des Codes zu verändern.
Aber probieren geht über studieren: Wenn du mal eine entsprechenden Stelle hast, an der scheinbar die Reihenfolge der Bedimgungen vertauscht ist, schalte mal die Codeoptimierung ab und prüfe, ob das Problem immer noch auftritt.

_________________
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind