Einloggen
[c] [meta] [fefe]

/c/ – Pufferüberlauf


Antwort erstellen

(≤ 4)



[Zurück]

  • [l] Felix Tue, 14 Jan 2025 15:40:33 GMT Nr. 145230
    PNG 810×456 134.8k
    JPG 1920×2560 694.8k
    Feuerfuchs hat das Speicherleck gefunden und fixiert.
    Schuld war die gute Müllabfuhr garbage collection, hätte uns doch nur jemand vor Müllabführ gewarnt.

    https://bugzilla.mozilla.org/show_bug.cgi?id=1913404
    https://bugzilla.mozilla.org/show_bug.cgi?id=1931717
    https://bugzilla.mozilla.org/show_bug.cgi?id=1935456
    https://bugzilla.mozilla.org/show_bug.cgi?id=1939295#c16
    https://hg.mozilla.org/releases/mozilla-release/rev/ea241be5664d

    Fixierung ist in 134.0.1 drin:
    https://ftp.mozilla.org/pub/firefox/releases/134.0.1/
  • [l] Felix Tue, 14 Jan 2025 16:09:07 GMT Nr. 145231
    JPG 563×442 33.4k
    >Feuerfuchs hat das Speicherleck gefunden und fixiert.
    >Schuld war die gute Müllabfuhr garbage collection
    Nein! Doch! Oh!
  • [l] Felix Wed, 15 Jan 2025 20:23:15 GMT Nr. 145337
    PNG 600×629 426.5k
    Problem war wohl eher, dass nicht genug Sozialismus Müllabfuhr drin war. Hätte man die von vornherein verwendet, anstatt seine eigene fehlerbehaftete drumherum zu zimmern, hätte man dieses Problem gar nicht gehabt.
  • [l] Felix Wed, 15 Jan 2025 20:47:07 GMT Nr. 145340
    >>145337
    Naja, sie müssen eben einen Javascript-Interpretierer mit Müllabfuhr implementieren, das ist deren Aufgabe. Und wenn man den Javascript-Interpretierer in einer Programmiersprache mit Müllabfuhr implementieren würde, müsste jemand den Kompilierer mit Müllabfuhrunterstützung für diese Programmiersprache implementieren, wo dann ebenfalls Fehler mit der Müllabfuhr lauern könnten. Damit verschiebt man das Problem nur, es ist Müllabfuhr den ganzen weg runter.
  • [l] Felix Thu, 16 Jan 2025 03:04:46 GMT Nr. 145353
    >>145340
    Dort unten würde die Müllabfuhr aber deutlich mehr Zeit und Arbeit abbekomben.
  • [l] Felix Thu, 16 Jan 2025 14:33:38 GMT Nr. 145370
    >>145353
    Jetzt mal realistisch gesehen: Wenn Mozilla so eine müllabführende Programmiersprache entwickelt, wird dadurch der bisher schon dünne Personalbestand an Entwicklern nur noch dünner.

    Welche real existierende müllabführende Programmiersprache bietet überhaupt
    *Performanz auf dem Niveau von C/C++
    *Man muss die Müllabführ zeitweise unterbinden, zeitlich selber auslösen, und jederzeit beim Laufen unterbrechen können (sonst Brauser-Jank)
    ?
  • [l] Felix Thu, 16 Jan 2025 21:29:20 GMT Nr. 145418
    wat?
    > Müllabfuhr
    damit hatte Felix schon vong Ewigkeit her ein Problem. Auf'm Schoßauf war die nie so richtig zugange; regelmäßiger Neustart erforderlich.

    War aber auch so'n Frickelschoßauf mit vong eigentlcih für Fenster, aber irgendwie Penguin draufgeklatscht.
  • [l] Felix Fri, 17 Jan 2025 15:24:54 GMT Nr. 145452
    >>145370
    >*Performanz auf dem Niveau von C/C++
    Das ist eher eine Kompiler- bzw. Implementationsfrage statt einer Sprachfrage; C++ hatte früher mal den Ruf, arschlahm zu sein. SBCL (Common Lisp) ist mit Typdeklarationen z.B. heute schon gut im Rennen.

    >*Man muss die Müllabführ zeitweise unterbinden, zeitlich selber auslösen, und jederzeit beim Laufen unterbrechen können (sonst Brauser-Jank)
    Die Anforderung ist kompletter Unsinn. Sind in Felixens Welt alle Müllabfuhren seriell und halten die Welt an?
  • [l] Felix Fri, 17 Jan 2025 15:38:50 GMT Nr. 145456
    >>145452
    Die Lösung ist natürlich verteiltes Echtzeit-Java!
  • [l] Felix Fri, 17 Jan 2025 20:57:46 GMT Nr. 145492
    >>145452
    >Das ist eher eine Kompiler- bzw. Implementationsfrage
    Naja, da steht schon "real existierend", was sich auf eine Implementierung beziehen sollte.
    Bei C/C++: Gibt nur 3 in Frage kommende Implementierungen, und zwar ähnlich gute Implementierungen.
    Bei müllabführenden Sprachen: Gibt in der Regel (C#, Java, JavaScript) einen Platzhirsch, ansonsten nehme die dir genehme Implementierung.
    Wobei die Implementierung natürlich egal ist, weil alle Müllabfuhr-basierten Sprachen, in egal welcher Implementierung, huntslahmer Müll sind (nicht ganz ernst gemeint, oder doch?)

    >SBCL ist mit Typdeklarationen z.B. heute schon gut im Rennen.
    Ich mag das Bankmarken-Spiel nicht, aber da ist SBCL ungefähr Faktor 5x lahmer, was für eine JavaScript-Maschine den absoluten Tod bedeuten würde (bei JavaScript-Maschinen wird darum gekämpft, wer 5-10 % schneller als die JavaScript-Konkurrenz ist).
    https://benchmarksgame-team.pages.debian.net/benchmarksgame/box-plot-summary-charts.html

    >Die Anforderung ist kompletter Unsinn. Sind in Felixens Welt alle Müllabfuhren seriell und halten die Welt an?
    Genau das war ja beim Käfer der Fall. Wenn man den Brauserinhalt gescrollt hat, ist buchstäblich ein Streifen vom Bildausschnitt mit Fensterhintergrundfarbe gefüllt worden, und erst nach dem Ende der Müllabfuhr, 7 Sekunden später, wurde der Bildinhalt gerendert und ging es weiter. Das hängt auch damit zusammen, dass JavaScript einzelfadig ist - wenn der eine, einzige JavaScript-Faden stoppt, ist auch die Seite eingefroren.

    >Currently, all modern engines ship a mark-and-sweep garbage collector. All improvements made in the field of JavaScript garbage collection (generational/incremental/concurrent/parallel garbage collection) over the last few years are implementation improvements of this algorithm, but not improvements over the garbage collection algorithm itself nor its reduction of the definition of when "an object is no longer needed".
    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_management

    So, und nun die Frage: Wenn der JavaScript-Faden gerade läuft, wie soll man währenddessen von einem anderen Faden auf die Objekte in der JavaScript-Maschine zugreifen, während die Maschine gerade ausgeführt wird und diese Objekte manipuliert und neue Objekte erstellt/die Referenzen zwischen diesen Objekten umbiegt? Genau, dafür braucht man entweder einen Globalen-Interpretierer-Lock (CPython) oder feingranulare Locks/Mutexe, die bei jeder solchen Stelle im JavaScript-Interpretierer den Interpretierer sperren. Und sperren bedeutet Jank.

    Weiteres Problem: Die Müllabfuhr muss ja auf irgendeinem Faden laufen (Endgegner: System hat nur 1 Kern), und wenn alle Fäden bereits vom Brauser belegt sind, und die Müllabfuhr laufen soll, muss einer der anderen Fäden anhalten. Dann stoppt hoffentlich nicht der aktuelle Tab, weil der ja gerade in Benutzung ist. Aber hoffentlich auch kein Hintergrundtab, in dem gerade ein DuRöhre-Video abgespielt wird, und dann die Musik stoppt, wenn die Müllabfuhr zu lange dauert und die JavaScript-Engine nicht mehr die Audio-API füttert. Jedenfalls hat C# extreme Probleme mit Müllabfuhr, wie man bei Unity sieht, und die müssen große Klimmzüge unternehmen, um die Müllabfuhr und den damit einhergehenden Jank/Spikes zu umgehen:
    https://embrace.io/blog/garbage-collector-spikes-unity/
    In Unity sind ~5 ms bereits eine inakzeptable Zeit für die Müllabfuhr, weil das länger als ein ganzer Frame auf einem guten Monitor ist. Ein Brauser soll aber so flüssig wie eine Spiele-Maschine laufen. Lösung in Unity ist natürlich, native Allokationen und Deallokationen, die die Müllabfuhr nicht sieht, zu benutzen. Also diesbezüglich keine Müllabfuhr zu benutzen.

    >Welche real existierende müllabführende Programmiersprache bietet überhaupt [...]?
    Aber ich entnehme deiner Antwort, dass es aktuell keine hier verwendbare Programmiersprache dafür gibt.


[Zurück]
[c] [meta] [fefe]