![]() |
AW: Warum ARC abgeschafft?
Zitat:
TMyStringList // ganz normal TMySortedStringList // StringList mit Sortierung TMyStrictSortedStringList // sortiert und mit dupignore (also keine doppelten Einträge) Wenn ich also in einer Prozedur eine einfache Stringlist brauche, geht das einfach so:
Delphi-Quellcode:
Durch die Intialisierungsblöcke im Record wird die StringList automatisch erzeugt (und falls erforderlich wie gewünscht vorbelegt)
Procedure TuWasMitDatei (AFile: String);
begin if FileExists (AFile) then begin // Wenn Datei nicht existiert wird Liste nicht gebraucht, Inline Var macht hier sinn var sl: TMyStringList; sl.List.LoadFromFile (AFile); /// weitere aktionen end; end; Nach Austritt aus der Procedur wird die Finalization im Record aufgerufen und die Liste freigegeben --> Kein Try Finally mehr für solche Sachen in der eigenen Prozedur notwendig (in der Implementation des Records auch nicht, das macht der Compiler automatisch) --> Bei einer streng sortierten Liste erspare ich mir noch das Setzen von "sorted" und "dupIgnore" --> Ein weiteres Feature, das ich liebe. |
AW: Warum ARC abgeschafft?
Zitat:
Ich frage, weil der allergrößte Teil von Fehlern (abgesehen von Semantik) in Software use-after-free sein dürfte. Und auch in der Arbeit haben wir ein ähnliches Problem des Kalibers "Wenn jeder einfach immer aufpassen und es richtig machen würde, hätten wir das Problem ja gar nicht. Wir müssen mehr aufpassen!" Meine persönliche Meinung dazu ist, dass das keine zuverlässige Lösung ist. Entweder braucht man eine Sprache / ein Framework oder eine Coding-Konvention in der das nicht passiert (sprich: man kommt nicht auf die Idee sowas zu tun weil es überall schon anders gemacht wird) oder man lebt mit den Problemen. Beispiel Angular / rxjs: Man muss ständig subscriben, um Callbacks zu registrieren. Man muss aber auch unsubscriben, sonst hat man ein memory leak. Wenn jeder im Team immer dran denkt: Alles super. Wir messen unsere memory leaks in KB/s - aktuell sind wir bei 300 KB/s. |
AW: Warum ARC abgeschafft?
Zitat:
sonst würde es nach 2 Wochen bissl eng. :shock: Auch wenn wir schon zu lange auf 128 und 256 warten, aber Delphi ist ständig hinterher. :lol: Kreuzreferenzen, verkettete Listen, multiple ParentOwner-Child-Verknubbelungen usw. .... endlich gibt es jetzt eine Möglichkeit das nun wieder ohne größere Umstände crossplatform hinzubekommen. |
AW: Warum ARC abgeschafft?
Zitat:
RX ist aber ein gutes Beispiel, was in Delphi (abgesehen von der fast unmöglich implementierbaren generischen API) für ziemliches Kopfzerbrechen sorgt: die Speicherverwaltung für Objekte, die durch so ein Observable wandern. Da das asynchron, parallel und sonst läuft, je nachdem welche Operationen man auf son ein Observable anwendet, ist es einfach nicht möglich das händische manuelle Freigeben zu praktizieren sondern muss mit einem selbst implementierten Mechanismus (über smartpointer oder anders referenzgezählte Objekte) dafür sorgen - das fluppt einfach überall wo GC werkelt wunderbar (jaja, GC hat sein eigenes Päckchen an "tu das halt nicht", aber das haben wir schon an anderer Stelle ad nauseam diskutiert) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:44 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