AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Garbage Collector für Delphi-Objekte?

Ein Thema von himitsu · begonnen am 25. Nov 2012 · letzter Beitrag vom 27. Nov 2012
Antwort Antwort
Seite 2 von 3     12 3      
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#11

AW: Was nervt euch so, während der Programmierung oder so allgemein

  Alt 26. Nov 2012, 18:23
Wieso? Einfach .Free() seiner Funktion berauben (was im Compiler prima geht), alles was manuell mit SPeicher rum macht ist auch sicher, da GetMem/FreeMem New/Dispose wohl nicht angefasst werden, und ich kann mir im Moment nichts vorstellen was man sinnvoll anderes an Konstrukten mit gutem Gewissen gebaut haben könnte. Selbst wenn: Es wäre ein Hack, und würde "mit Recht" kaputt gehen, zumindest aber nicht unerwartet (wenn man einigermaßen sauber zu Werke ging). Es ist ja jetzt nicht neu, dass Hacks nach Versionsänderungen (oder sogar schon Patches) dahin sein können. Das nimmt man wissentlich in Kauf wenn man anfängt zu frickeln. (Tu ich ja auch ab und an, aber ich bin dann nicht knüsselig wenn es mal nicht mehr geht oder geändert werden muss.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Was nervt euch so, während der Programmierung oder so allgemein

  Alt 26. Nov 2012, 21:18
Jetzt (noch) nicht (unbedingt) nervig, aber vielleicht erstmal nur ein bissl erschreckend ... wem ist im XE3-Quellcode etwas aufgefallen?
Man versucht nun von hinten durch die Brust das TObjekt in ein eine Art Interface umzuwandeln und mit einer Referenzzählung zu versehn.
Eigentlich hatte ich nun endlich mal ein System für mehrfach gegenseitig kreuzreferenzierende Objekte, aber jetzt hab ich Angst, daß mir diese blöde Referenzzählung irgendwann alles wieder kaputt macht und ich wunderschöne "Speicherlöscher" erhalte.
Kann das mal jemand in einen eigenen Thread auslagern?
Was sind die genauen Konsequenzen?
Greifen die Änderungen auch bei einer klassischen Objekterzeugung - sprich: Das das Auswirkungen auf bestehende Projekte?

Ich habe zwar mal die Quelle angesehen, aber meine Brille ist wohl irgendwie nicht ganz scharf gestellt...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Was nervt euch so, während der Programmierung oder so allgemein

  Alt 26. Nov 2012, 21:43
Ich melde es gleich mal einen Mod ... muß nur noch schnell den Anfangsbeitrag raussuchen.
Wer dann antworten möchte, kann's da drüben machen (mach ich dann auch gleich)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Garbage Collector für Delphi-Objekte?

  Alt 27. Nov 2012, 10:04
Nja, im Prizip greifen dann in etwa die selben Mechianismen bei Objekten, wie sie schon für Interfaces gelten.


Mal im Ernst, wir haben doch Interfaces und Objekte.
Wenn man das Verhalten eines Interfaces will, dann sollte man Dieses doch auch verwenden?
(bekommt man den schweren Anhänger nicht weg, dann spannt man einen Traktor davor und nicht den Ferrari)

Ich freu mich schon auf die Verknubbelung der verschiedenen Techniken.
TComponent+Owner, Interfaces mit und ohne Referenzzählung, das Free/Destroy der Objekte und dann noch das Neue.

Außerdem, wenn schon Garbage Collector, dann doch gleich richtig?
Hier ist es scheinbar ausschließlich für Objekt-Instanzen vorgesehn.
Also die neue Funktion ... Interfaces, dynamische Arrays, LongStrings und Variant mal außer Acht gelassen, woran sich seit Jahrzehnten, praktisch schon fast immer, nichts dran geändert hat.



Ach ja, es geht übrigens um den Compilerschalter {$IFDEF AUTOREFCOUNT}
[WARUMHABENWIRKEINENSPOILERODERSO]
Der sich eventuell duch einen Parserfehler(?) schon massenhaft in der OH eingenistet hat.

Zitat von Wie ich dieses Parsermistding hasse -.-:
Embarcadero Technologies verfügt zurzeit über keine zusätzlichen Informationen. Bitte unterstützen Sie uns bei der Dokumentation dieses Themas, indem Sie Ihre Kommentare auf der Diskussionsseite eingeben.
[/WARUMHABENWIRKEINENSPOILERODERSO]

und vermutlich das Attribut [Weak] synopse - Delphi XE3 is preparing reference counting for class instances
Roman's Blog




Einfache Beispiele, welche bestimmt an vielen Stellen Probleme bereiten könnten werden, wären z.B. die TList und alles Andere, wo "Objekte" in einem Data-"Pointer" hinterlegt werden.
Oder Objekte per Messages verschicken. (programmintern natürlich)

In Delphi werden bis jetzt problemlos Objekte ständig umhergecastet (OK, bei Win64 nicht ganz unproblematisch, aber da sind die Programmierer ja praktisch obftmals selber dran Schuld)
und genau an diesen Stellen muß es doch zangsläufig die Referenzzählung falsch zählen.




Kreuzreferenzen werden eventuell auch Spaß bereiten.
- ObjektB kennt ObjektA (in einem Feld gespeichert)
- ObjektA kennt und verwaltet ObjektB (in einem Feld gespeichert)
- im Destructor von A wird B freigegeben

Da hier aber eine Referenz von A in B drinsteckt, wird nichmal mehr beim A.Free der Destructor aufgerufen, da es ja noch eine weitere Referenz gibt.
Wie/Ob die es machen, daß beim Freigeben von A die Referenz in B automatisch auf nil gesetzt wird, würde ich gerne wissen (klingt aber so, als wenn die das eventuel machen wollen?)



Ganz im Ernst. Wie haben doch schon Interfaces ... warum verwendet man Diese nicht einfach, wenn man ihre Funktionalität z.B. für WinRT benötigt.
Ich hatte doch auch mal vorgeschlagen, daß man die Interfaceverwaltnug/-erstellung für sowas hätte vereinfachen können.

Im Compiler eine Funktion/Befehl, welcher aus den Public-Schnittstellen eines Objektes "automatisch" ein Interface erstellt.

z.B.:
Delphi-Quellcode:
type
  TMyObject = class(TInterfacedObject)
  public
    function Irgendwas: Integer;
  end as IMyInterface['{6C68C66B-ED43-42D1-8BF2-B41327A31673}']; // mit oder ohne GUID
IMyInterface sähe in diesem Fall dann intern so aus:
Delphi-Quellcode:
type
  IMyInterface = interface
    ['{6C68C66B-ED43-42D1-8BF2-B41327A31673}']
    function Irgendwas: Integer;
  end;
Wenn die keine Lust haben für ihre neue WinRT-API für jedes Objekt ein Interface zu erstellen, dann ginge das auch automatisch, ohne die Objekte selber verschandeln umbauen zu müssen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.353 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Garbage Collector für Delphi-Objekte?

  Alt 27. Nov 2012, 10:33
In Delphi werden bis jetzt problemlos Objekte ständig umhergecastet (OK, bei Win64 nicht ganz unproblematisch, aber da sind die Programmierer ja praktisch obftmals selber dran Schuld)
und genau an diesen Stellen muß es doch zangsläufig die Referenzzählung falsch zählen.
Diese Altlasten aus Zeiten vor Generics müssen dann eben erneut sauber implementiert werden.
Wer solchen Code heute mit einem aktuellen Delphi noch schreibt / schreiben lässt, ist selber schuld.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

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

AW: Garbage Collector für Delphi-Objekte?

  Alt 27. Nov 2012, 12:12
Klassischer Fall von "keinem kann mans recht machen".

Auf der einen Seite schreien genug Leute, dass man neue Features in die Sprache bringen soll und breaking changes in Kauf nehmen soll (wenn man das nicht will, muss man halt auf der letzten Version vor dieser Änderung bleiben, Pech) und auf der anderen Seite schreien die Leute, wenn dann was geändert wird für einen "nextgen compiler", weil sie diesen am liebsten immernoch mit in Delphi 1 erstelltem Sourcecode füttern wollen.

Außerdem bin ich mir nicht sicher und kann mir kaum vorstellen, dass man bei einer VCL Anwendung plötzlich das ARC Model angeschaltet hat.
Soweit ich weiß, wird das eher für die Apple Plattformen nützlich sein (wie auch im Blogpost von Arnaud am Ende erwähnt wurde).
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

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

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Garbage Collector für Delphi-Objekte?

  Alt 27. Nov 2012, 13:35
Geschrien hat ja noch keiner.
Aber u.U. ist das eine weitreichende Änderung (vielleicht Verbesserung?), über die die Entwickler aufgeklärt werden sollten.
Dann gäbe es auch weniger Spekulationen darüber.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Garbage Collector für Delphi-Objekte?

  Alt 27. Nov 2012, 13:58
Jupp, im Augenblick herst erstmal nur Unwissen, Angst und bissl Panik.

Grundsätzlich haben wir ja nichts gegen Neuerungen.
Aber die meisten aktuellen Änderungen/Neuerungen waren (abgesehn von Unicode und 64 Bit, bzw. XPlattform) eher nur "Erweiterungen", welche die Grundfunktionen fast nie grundlegend veränderten.

Hier ist es ja so, daß quasi heimlich im Hintergrund an einer (bewährten etablierten) Grundfunktion aus'm letzten Jahrtausend rumgespielt wird
und das bisher eher nur zufällig entdeckt wurde, weil ausversehn Einige im Quellcode drübergestolpert sind, es aber vorher scheinbar nichtmal erwähnt wurde.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

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

AW: Garbage Collector für Delphi-Objekte?

  Alt 27. Nov 2012, 14:29
Geschrien hat ja noch keiner.
Hier vielleicht

Hier ist es ja so, daß quasi heimlich im Hintergrund an einer (bewährten etablierten) Grundfunktion aus'm letzten Jahrtausend rumgespielt wird und das bisher eher nur zufällig entdeckt wurde, weil ausversehn Einige im Quellcode drübergestolpert sind, es aber vorher scheinbar nichtmal erwähnt wurde.
Es ist kein Geheimnis, dass ARC in Delphi Einzug halten wird.
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
43.163 Beiträge
 
Delphi 12 Athens
 
#20

AW: Garbage Collector für Delphi-Objekte?

  Alt 27. Nov 2012, 14:37
Das kann man auch so lesen, daß es ein neues (zusätzliches) Objektformat gibt ... daß direkt an TObject rumgeschraub wird, kann ich da nicht rauslesen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 22:54 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