"Cacti VS Llamas" - BCC #98

Übersicht Kommentare Worklogs


Eingeproggt

Link zu diesem BeitragFr, Apr 05, 2019 21:32
Der Beitrag zu weak references gefällt mir.
Führt mir schön vor Augen, dass die Uni-Zeit schon ein paar Jährchen zurück liegt... Aber man sich doch mit ein paar theoretischen Eigenschaften von Programmen beschäftigen muss, um sie "gut" zu machen.
Ehrlich gesagt könnte man fast den "Glauben" an Software-Entwicklung verlieren. Wenn ich überlege, wie viele "professionelle" und / oder kommerzielle Programme ich schon gesehen habe, in denen sich die Entwickler nicht um solche Details gekümmert haben...
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

DAK

Link zu diesem BeitragMo, Apr 08, 2019 10:39
Und wenn der BMax-GC zyklische Referenzen erkennen könnte (wie z.B. der Python-GC) dann hätte man das ganze Problem auch nicht. Dann bräuchte man nicht mal mehr sich darum kümmern müssen, welche Referenzen weak oder strong sind.
Gewinner der 6. und der 68. BlitzCodeCompo

DAK

Link zu diesem BeitragMo, Apr 08, 2019 10:44
Mist, man kann Worklog-Kommentare nicht editieren... Also falls sich ein Mod bemüßigt fühlt die beiden Posts zu mergen, bitte gerne Wink

Um das Problem in BMax zu umgehen könnte man den ganzen GC auslassen. Dafür gibt man jedem Objekt eine Delete-Methode, die von allen referenzierten Objekten die Delete-Methode aufruft und dann sich selbst löscht. Braucht etwas mehr Hirn und ein explizites Aufrufen der Delete-Methode, aber dafür klappt es zuverlässig und man braucht sich nicht auf den mäßigen GC von BMax verlassen.
Gewinner der 6. und der 68. BlitzCodeCompo

DivineDominion

Link zu diesem BeitragMo, Apr 08, 2019 19:21
Brucey, der bmax-ng pflegt, reagiert auf Probleme auf GitHub sehr schnell. Da scheinen noch Leute dran zu arbeiten. Leider haben die keine laufende Test-Suite, sodass viele Änderungen ungeahnte Konsequenzen haben könnten -- wie zum Beispiel mein Problem von neulich: " Abstract base type in different file with Field does not keep Field's value in concrete subclass from other file #417 " (https://github.com/bmx-ng/bcc/issues/417)

Hat sich herausgestellt, dass bmax-ng auch nicht mehr einfach Referenzen zählt. Dann wäre nämlich sehr einfach gewesen, "weak" zu implementieren, indem man bei solchen Referenzen eben den Zähler nicht erhöht. Das wäre eher analog zu Swift/Objective-C, wo retain/release aufgerufen wurden, damit der Garbage Collector weiß, wann er was löschen darf.

Klar, manuelles memory management würde das Problem umgehen. Dafür andere aufmachen. Wie immer Smile



christian.tietze@gmail.com - https://christiantietze.de
macOS

Thunder

Link zu diesem BeitragMi, Apr 10, 2019 19:14
@DAK: bin mir nicht sicher, wie du dir das vorstellst. Manuelles Memory Management kannst du natürlich machen, aber wie soll das mit BlitzMax-Typen funktionieren? Mit malloc den memory für den Typen bereitstellen und dann hineinkopieren?

Wie soll die Delete-Methode das eigene Objekt löschen? Vielleicht gibt es ja eine Funktion vom GC die ich nicht kenne Very Happy

Jedenfalls müsste man aufpassen mit dem Namen "Delete". Die "Delete"-Methode wird nämlich vom BlitzMax GC aufgerufen, wenn er das Objekt freigibt. Das heißt mit manuellem Memory-Management kommt es ganz schnell zu double-frees. Es ist übrigens auch nicht garantiert, dass die "Delete"-Methode vom GC jemals aufgerufen wird. Habe das hier dokumentiert: https://www.blitzforum.de/foru...hp?t=39579
Ob das ganze auch für Bmax-NG zutrifft, kann ich nicht sagen.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

DAK

Link zu diesem BeitragFr, Apr 12, 2019 12:47
@Thunder:
Du hast natürlich recht. Es ist schon eine Weile her dass ich in BMax was gemacht hab, hab gedacht es gab ein manuelles Delete. Es ist hald schon blöd, wenn man einen GC hat, der einem das Memory Management abnehmen soll, das aber nicht gut tut...
Gewinner der 6. und der 68. BlitzCodeCompo

DivineDominion

Link zu diesem BeitragSa, Apr 13, 2019 07:41
Was heißt "nicht gut" -- Mein Java ist ein bisschen eingerostet, aber da erinnere ich mich auch nicht an "unowned" und "weak references," da gab es auch nur die einfache Unterscheidung: ist Referenz da oder nicht. Das ist dann ja keine Idiotie vom GC, sondern einfach nur eine Beschränkung der Sprache Smile

Es gibt eine Wrapper-Klasse, WeakReference<T>: https://docs.oracle.com/javase...rence.html

Analog dazu den Bmax-Vorschlag: https://github.com/bmx-ng/brl.mod/issues/108

Worklog-Kommentare zu kommentieren ist leider maximal umständlich. Fände eine Diskussion in einem separaten Thread aber interessant
christian.tietze@gmail.com - https://christiantietze.de
macOS

DAK

Link zu diesem BeitragDo, Apr 18, 2019 11:01
In Java (wie auch Python) sind weak references nicht nötig, da der GC nicht nur Referenzen zählt, sondern auch Zyklische Referenzen erkennt. In BMax wird ein Objekt erst dann freigegeben, wenn es keine Referenzen mehr darauf gibt. Das heißt, wenn man die letzte outside reference auf eine zyklische Referenz verliert hat man ein Memory Leak das man nicht mehr recovern kann.

In Java und Python wird ein Objekt freigegeben wenn es keine Verbindung von dem Objekt zum Global Space/Local Space/Stack mehr gibt. Das heißt, wenn man die letzte outside reference auf eine zyklische Referenz verliert, dann wird selbige Referenz vom GC gefressen.
Gewinner der 6. und der 68. BlitzCodeCompo


Übersicht Kommentare Worklogs