AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Array SCHNELL auf Null setzen

Ein Thema von bernhard_LA · begonnen am 20. Okt 2014 · letzter Beitrag vom 21. Okt 2014
Antwort Antwort
Seite 3 von 3     123
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
3.834 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#21

AW: Array SCHNELL auf Null setzen

  Alt 21. Okt 2014, 11:52
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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.657 Beiträge
 
Delphi 10.4 Sydney
 
#22

AW: Array SCHNELL auf Null setzen

  Alt 21. Okt 2014, 12:04
Genau das hatte ich auch schon auf der Zunge
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.658 Beiträge
 
Delphi 7 Personal
 
#23

AW: Array SCHNELL auf Null setzen

  Alt 21. Okt 2014, 12:10
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
3.834 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#24

AW: Array SCHNELL auf Null setzen

  Alt 21. Okt 2014, 12:35
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
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#25

AW: Array SCHNELL auf Null setzen

  Alt 21. Okt 2014, 13:20
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!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.797 Beiträge
 
Delphi 10.4 Sydney
 
#26

AW: Array SCHNELL auf Null setzen

  Alt 21. Okt 2014, 13:30
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]
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
3.834 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#27

AW: Array SCHNELL auf Null setzen

  Alt 21. Okt 2014, 14:07
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.

(*) Ein *SEHR* empfehlenswerter Blog, liebe Mitleser!
Schleimer! - nee Spaß, danke für die Blumen.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.596 Beiträge
 
Delphi 10.4 Sydney
 
#28

AW: Array SCHNELL auf Null setzen

  Alt 21. Okt 2014, 14:09
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#29

AW: Array SCHNELL auf Null setzen

  Alt 21. Okt 2014, 14:20
(*) Ein *SEHR* empfehlenswerter Blog, liebe Mitleser!
Schleimer! - nee Spaß, danke für die Blumen.
Zuckerbrot und Peitsche

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.
  Mit Zitat antworten Zitat
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 +2. Es ist jetzt 06:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf