Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Array SCHNELL auf Null setzen (https://www.delphipraxis.net/182371-array-schnell-auf-null-setzen.html)

Stevie 21. Okt 2014 10:52

AW: Array SCHNELL auf Null setzen
 
Zitat:

Zitat von p80286 (Beitrag 1276793)
Zitat:

Zitat von hoika (Beitrag 1276777)
Hallo,

also ich verlasse mich nicht auf automatisches Setzen des Compilers.

Da kann ich nur zustimmen, auch wenn ich das gleiche wie ... mache, dann steht's in meinen Sourcen, in 5 Jahren weiß doch keiner mehr ob XE2 dreidimensionale arrays mit 0 initialisiert hat oder ob nicht.

Dazu sag ich nur cargo cult programming.

Das sind so dermaßen grundlegende Dinge in der RTL, die nicht einfach in irgendeiner Version verändert werden.

Uwe Raabe 21. Okt 2014 11:04

AW: Array SCHNELL auf Null setzen
 
Zitat:

Zitat von Stevie (Beitrag 1276799)
Dazu sag ich nur cargo cult programming.

Genau das hatte ich auch schon auf der Zunge :-D

p80286 21. Okt 2014 11:10

AW: Array SCHNELL auf Null setzen
 
Zitat:

Zitat von Stevie (Beitrag 1276799)
Zitat:

Zitat von p80286 (Beitrag 1276793)
Zitat:

Zitat von hoika (Beitrag 1276777)
Hallo,

also ich verlasse mich nicht auf automatisches Setzen des Compilers.

Da kann ich nur zustimmen, auch wenn ich das gleiche wie ... mache, dann steht's in meinen Sourcen, in 5 Jahren weiß doch keiner mehr ob XE2 dreidimensionale arrays mit 0 initialisiert hat oder ob nicht.

Dazu sag ich nur cargo cult programming.

Das sind so dermaßen grundlegende Dinge in der RTL, die nicht einfach in irgendeiner Version verändert werden.

Dann ist Dein Code aber zunächst nur EmbaDelphi-tauglich. Bevor Du Dich nicht eingearbeitet hast kannst Du Dir nicht sicher sein, daß die 1001 anderen Delphi/Pascal-Entwicklungsumgebungen genauso arbeiten. Ein fillchar() zeigt dem Sourcecodeleser übrigens eindeutig, das da etwas zu initialisieren ist, fehlt dies muß er sich erst einmal schlau machen.

Gruß
K-H

Stevie 21. Okt 2014 11:35

AW: Array SCHNELL auf Null setzen
 
Zitat:

Zitat von p80286 (Beitrag 1276808)
Dann ist Dein Code aber zunächst nur EmbaDelphi-tauglich. Bevor Du Dich nicht eingearbeitet hast kannst Du Dir nicht sicher sein, daß die 1001 anderen Delphi/Pascal-Entwicklungsumgebungen genauso arbeiten. Ein fillchar() zeigt dem Sourcecodeleser übrigens eindeutig, das da etwas zu initialisieren ist, fehlt dies muß er sich erst einmal schlau machen.H

Joa, is ja auch die Delphi-Praxis hier und nicht die "1001 Pascal-Praxis".
Wenn du mir die eine andere Pascal Implementierung zeigst, die generics, closures und enhanced rtti kann,
dann können wir nochmal über meinen derzeit nur Embarcadero kompatiblen Code sprechen :)

Dejan Vu 21. Okt 2014 12:20

AW: Array SCHNELL auf Null setzen
 
Also 'cargo cult programming' ist das ja nun nicht, wenn ich eine Variable explizit initialisiere, d.h. auf 0 setze. Denn manchmal meckert der Compiler und manchmal nicht, manchmal muss man initialisieren, manchmal nicht. Das ist doch inkontinent inkonsistent.

Wenn ich ein Array auf '1' initialisiere, muss ich Initialisierungscode schreiben, bei Initialisierung auf '0' nicht? Was soll das?

Man *kann* auf das Nullen verzichten, denn die RTL oder auch Windows macht das schon für einen, aber aus Dokumentationsgründen sollte man (finde ich) Werte explizit initialisieren. Dann fällt man auch nicht in den Matsch, wie Du in deinem Blog(*) mal erwähnt hast. Ich weiß jetzt nicht, ob das passt, aber imho wäre das im verlinkten Artikel beschriebene Problem mit den Packages bei expliziter Initialisierung (im initialization-Abschnitt) kein Problem mehr (aber ich kann mich hier wirklich irren).

Ich persönlich neige dazu, die Initialisierung grundsätzlich vorzunehmen. Ausgenommen, ich benötige jede Nanosekunde an Performance.

(*) Ein *SEHR* empfehlenswerter Blog, liebe Mitleser!

mkinzler 21. Okt 2014 12:30

AW: Array SCHNELL auf Null setzen
 
Wenn man schon bei so rudimentären Dingen der RTL nicht vertraut, sollte man besser alles selber schreiben[Zynikmodus] auch den Compiler und das Betriebssystem, denn man weiss ja nicht, welchen Mist die verantwortlichen Entwickler verzapft haben[/Zynikmodus]

Stevie 21. Okt 2014 13:07

AW: Array SCHNELL auf Null setzen
 
Zitat:

Zitat von Dejan Vu (Beitrag 1276818)
Man *kann* auf das Nullen verzichten, denn die RTL oder auch Windows macht das schon für einen, aber aus Dokumentationsgründen sollte man (finde ich) Werte explizit initialisieren. Dann fällt man auch nicht in den Matsch, wie Du in deinem Blog(*) mal erwähnt hast. Ich weiß jetzt nicht, ob das passt, aber imho wäre das im verlinkten Artikel beschriebene Problem mit den Packages bei expliziter Initialisierung (im initialization-Abschnitt) kein Problem mehr (aber ich kann mich hier wirklich irren).

Das ist eine hässliche Situation, da stimme ich zu. Allerdings spielen dort andere Umstände eine Rolle, nämlich, dass der finalization Block nicht zur Lazy initialization passt. Die prüft nämlich auf assigned, der finalization Code setzt aber nicht auf nil. Da es sich hier um ein Package handelt, wird die "globale Variablen werden genullt Prozedur" nur einmal (nämlich beim Laden des Packages ausgeführt). Initialization/Finalization in diesem Fall bei jedem Laden der benutzenden DLL.

Zitat:

Zitat von Dejan Vu (Beitrag 1276818)
(*) Ein *SEHR* empfehlenswerter Blog, liebe Mitleser!

Schleimer! - nee Spaß, danke für die Blumen. :)

himitsu 21. Okt 2014 13:09

AW: Array SCHNELL auf Null setzen
 
Zitat:

Leider ist der Compiler nicht so schlau ein gleichförmiges
Das hat nichts mit "schlau" zu tun.
Es ist einfach nicht möglich alle SubArrays in eine Reihe zu legen (OK, möglich teilweise schon, aber sinnlos), um dann alles mit einem FillChar füllen zu können.

Das fällt sofort auf, wenn man weiß wie so ein dynamisches Array aufgebaut ist und daß die Verwaltungsdaten (Länge und Referenzzählung) auch noch vor dem Ersten (Nullten) Feld liegen.

Dejan Vu 21. Okt 2014 13:20

AW: Array SCHNELL auf Null setzen
 
Zitat:

Zitat von Stevie (Beitrag 1276829)
Zitat:

Zitat von Dejan Vu (Beitrag 1276818)
(*) Ein *SEHR* empfehlenswerter Blog, liebe Mitleser!

Schleimer! - nee Spaß, danke für die Blumen. :)

Zuckerbrot und Peitsche :mrgreen:

Im Ernst.

Immer Initialisieren hilft. und PAttern wie:
Delphi-Quellcode:
initialization
  InitializeGlobalStuff();
finalization
  FinalizeGlobalStuff();

und
Constructor Create();
begin
  InitializeFields();
End;

Destructor Destroy();
begin
  FinalizeFields();
End;
Sind einfacher und sicherer, wenn sie so stringent durchgezogen werden, das selbst die Reihenfolge der Finalisierungen umgekehrt zu den Initialisierungen ist (sofern sinnvoll). Einfach oberspießige Ordnung. Normalerweise nicht mein Ding, aber hier schon.

Und meine Initialisierungen IMMER explizit (dafür vielleicht redundant). WTF.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:09 Uhr.
Seite 3 von 3     123   

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