AGB  ·  Datenschutz  ·  Impressum  







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

Procedure vs Function, Vor- und Nachteile

Ein Thema von KodeZwerg · begonnen am 15. Apr 2018 · letzter Beitrag vom 23. Apr 2018
Antwort Antwort
Benutzerbild von bernau
bernau

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

AW: Procedure vs Function, Vor- und Nachteile

  Alt 16. Apr 2018, 15:00
Doch, Result ist definitiv initialisiert und besitzt keinen Zufallswert.
Mag sein, dass beim ersten Aufruf von "Test" das Result mit "" initialisiert ist.

Wenn Result bei jedem Aufruf von "Test" initialisiert wäre, dann würde als Ergebnis immer "a" herhauskommen. Ist aber nicht so. Es ist immer der Wert des vorherigen Result vorhanden. Was für mich erst mal undefiniert ist.

Da man ja nicht weis, von wo überall "Test" aufgerufen wird, muss man davon ausgehen, dass Result einen string mit dem Buchstaben "a" in zufälliger Länge hat. Was übrigens irgendwann einen Stackoverflow nach sich zieht, wenn "Test" nur oft genug ausgeführt wird.

Zusätzlich kommt hinzu, dass das Verhalten sich mit dem nächsten Compiler ändern kann. Dann wird vielleicht Result bei jedem Aufruf der Funktion auf "" gesetzt. Mann weis ja nie. Es sei denn, dass dieses Verhalten so dokumentiert ist.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: Procedure vs Function, Vor- und Nachteile

  Alt 16. Apr 2018, 15:04
Selbst bei den class operator werden temporäre R-Values verwendet. Wenn man beispielsweise die Addition eines Record überläd, wird ein komplett neuer temporärer Record erstellt und als Ergebnis des Operators zurückgeliefert, welcher dann letztlich der
Was aber eventuell nichts mit diesem Problem zu tun hat,
denn wenn dort dieser Result-Record auch als VAR-Parameter in eine neue leere Variable geht, dann wäre es praktisch das Gleiche.
Damit wollte ich vor allem die Inkonsistenz aufzeigen.

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.

Zusätzlich kommt hinzu, dass das Verhalten sich mit dem nächsten Compiler ändern kann. Dann wird vielleicht Result bei jedem Aufruf der Funktion auf "" gesetzt. Mann weis ja nie. Es sei denn, dass dieses Verhalten so dokumentiert ist.
Das ist ein wichtiger Punkt. Bin auch der Meinung, dass zumindest die "nicht initialisiert" Meldung trotzdem angezeigt oder die ganze Optimierung anders umgesetzt werden sollte.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

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

AW: Procedure vs Function, Vor- und Nachteile

  Alt 16. Apr 2018, 15: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

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

AW: Procedure vs Function, Vor- und Nachteile

  Alt 16. Apr 2018, 15: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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: Procedure vs Function, Vor- und Nachteile

  Alt 16. Apr 2018, 15: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.874 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Procedure vs Function, Vor- und Nachteile

  Alt 16. Apr 2018, 15: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
 
#7

AW: Procedure vs Function, Vor- und Nachteile

  Alt 16. Apr 2018, 15: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

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

AW: Procedure vs Function, Vor- und Nachteile

  Alt 16. Apr 2018, 15: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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.490 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Procedure vs Function, Vor- und Nachteile

  Alt 16. Apr 2018, 15: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
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz