AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Procedure vs Function, Vor- und Nachteile
Thema durchsuchen
Ansicht
Themen-Optionen

Procedure vs Function, Vor- und Nachteile

Ein Thema von KodeZwerg · begonnen am 15. Apr 2018 · letzter Beitrag vom 23. Apr 2018
Antwort Antwort
Seite 5 von 10   « Erste     345 67     Letzte »    
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#41

AW: Procedure vs Function, Vor- und Nachteile

  Alt 16. Apr 2018, 16:07
Was übrigens irgendwann einen Stackoverflow nach sich zieht, wenn "Test" nur oft genug ausgeführt wird.
Nee, das nicht. Strings werden in Delphi Heap-allocated.
Hast recht. Trotzdem bekommst du dann irgendwann eine Fehlermeldung, dass kein Speicherplatz mehr zur Verfügung steht.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.078 Beiträge
 
Delphi 12 Athens
 
#42

AW: Procedure vs Function, Vor- und Nachteile

  Alt 16. Apr 2018, 16:08
Das Problem ist ja, dass hier nun oft kein eigtändiger Compiler mehr zum Einsatz kommt und (bald) alles über LLVM geschleift wird.

Im Prinzip müsste "nur" für diese Vaiable der "würde initialisiert"-Status zurückgesetzt werden und schon käme diese Meldung.
Und nebenbei wird das Kompilieren merklich langsamer, als früher das Eigene.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.446 Beiträge
 
Delphi 11 Alexandria
 
#43

AW: Procedure vs Function, Vor- und Nachteile

  Alt 16. Apr 2018, 16:10
Zur Ausgangsfrage:
Bei uns verwenden wir wenn immer möglich functions gegenüber out-Parameter (var sind noch outer )
Der hauptaspekt ist dass der code leichter lesbar wird. Bei den Parametern sieht man es beim Aufruf nicht an, dass hier WErte rausgegeben werden, bei einer function ist das klar. Außerdem lassen sich auch Eigenschaften verwenden.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#44

AW: Procedure vs Function, Vor- und Nachteile

  Alt 16. Apr 2018, 16:19
Das Problem ist ja, dass hier nun oft kein eigtändiger Compiler mehr zum Einsatz kommt und (bald) alles über LLVM geschleift wird.
Auch die Win32/64 Kompilate? Das wäre wunderbar. Ich bin sicher LLVM schafft solche Optimierungen auch ohne ungewollte Nebeneffekte umzusetzen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#45

AW: Procedure vs Function, Vor- und Nachteile

  Alt 16. Apr 2018, 16:35
Der Compiler ist weiter eigenständig. Nur die Codegenerierung ( vom LLVM-Bitcode) wird über eine angepasste Version von LLVM erledigt. Selbst der C-Compiler ist kein Original-CLang
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#46

AW: Procedure vs Function, Vor- und Nachteile

  Alt 16. Apr 2018, 16:47
Der Compiler ist weiter eigenständig. Nur die Codegenerierung ( vom LLVM-Bitcode) wird über eine angepasste Version von LLVM erledigt. Selbst der C-Compiler ist kein Original-CLang
Jap schon klar Das ist aber mehr als ausreichend, weil die Optimierungen ja trotzdem schon dem Intermediate Layer durch LLVM ausgeführt werden sollten. Wenn die Übersetzung nach X86 dann nicht absolut versaut wird, sollten wir deutlich bessere Kompilate bekommen. Cool auf jeden Fall.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.078 Beiträge
 
Delphi 12 Athens
 
#47

AW: Procedure vs Function, Vor- und Nachteile

  Alt 16. Apr 2018, 16:57
In LLVM ist es wohl nur nicht möglich für diese "speziellen" VAR-Parameter (Result) den "Variable wurde initialisiert"-Status auf nein zu setzen, zu beginn einer jeden Funktion, welche hier im LLVM ja schon eine Prozedur ist.
Klang jedenfalls so, als ich schonmal sowas vorgeschlagen hatte.

Ohne LLVM im eigenen Code wäre sowas bestimmt problemloser machbar gewesen.

Ob dann nun irgendwann der "Bug" an sich behoben würde, wobei er per se ja nicht unbedingt ein Bug ist, wäre dann egal, wenn hier wenigstens die Compilerwarnung kommen würde.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
485 Beiträge
 
Delphi 11 Alexandria
 
#48

AW: Procedure vs Function, Vor- und Nachteile

  Alt 16. Apr 2018, 16:59
Wie schon richtig gesagt wurde, ist "var" mit "out" identisch.
Und beide sind wiederrum mit "const" funktionsweise identisch: Alles eine referenzbasierte Übergabe, im Grunde gleichbedeutend mit einem Zeiger. Lediglich "const" hat die besonderheit, dass der Compiler dem Programmierer den direkten Zugriff auf die Variable verbietet. Das lässt sich aber auch über ASM umgehen, wenn man es braucht (was nie der Fall sein sollte!). Auch werden "const"-Parameter bei String-Typen ein wenig optimiert (steht so zumindest im DocWiki), ansonsten verhält es sich aber intern exakt wie mit "var" oder "out".
Wer sich ebenfalls etwas mit ASM in Delphi auskennt, der weiß, dass das Ergebnis, genau wie der erste Parameter einer Funktion, bei 32-Bit immer im EAX-Register übergeben bzw. zurückgegeben wird. Strings und Records werden außerdem IMMER als Referenz übergeben. Insofern ist es völlig belanglos, welche dieser Routinen man benutzt, der Code ist in jedem Fall identisch:

procedure Foo(var X: Integer);

procedure Foo(out X: Integer);

procedure Foo(X: PInteger);

function Foo(const X: Integer): PInteger;
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#49

AW: Procedure vs Function, Vor- und Nachteile

  Alt 16. Apr 2018, 17:12
Strings und Records werden außerdem IMMER als Referenz übergeben. Insofern ist es völlig belanglos, welche dieser Routinen man benutzt, der Code ist in jedem Fall identisch:
Hier muss man schon aufpassen. Im Falle eines nicht-const/var/out Strings wird keine direkte Referenz übergeben, sondern lokal ein neuer mutable String erzeugt. Ansonsten würde man ja die übergebene Instanz modifizieren können - was definitiv unerwünscht ist. Auch im Falle von Record stimmt es NICHT, dass immer Referenzen übergeben werden. Das hängt mitunter z.B. von der Record-Größe ab. Selbst ein const garantiert hier nicht zu 100% Referenzen! Musste ich selbst noch die Tage nachlesen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.078 Beiträge
 
Delphi 12 Athens
 
#50

AW: Procedure vs Function, Vor- und Nachteile

  Alt 16. Apr 2018, 17:27
sondern lokal ein neuer mutable String erzeugt. Ansonsten würde man ja die übergebene Instanz modifizieren können - was definitiv unerwünscht ist.
Bei WideString stimmt das, da ohne Referenzzählung, aber die LongStrings im Delphi haben eine Referenzzählung.

Referenz wird direkt übergeben (die auf den String und nicht auf die Variable) und verwendet, aber mit RefCount+1 ... beim Schreibzugriff kommt dann ein CopyOnWrite da kein UniqueString.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 10   « Erste     345 67     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz