Aussehen
Suche Einloggen
[c] [meta] [fefe] [erp]

5442 Ergebnisse

[0] ... [155] [156] [157] [158] [159] [160] [161] [162] [163] [164] ... [272]
  • [l] Felix Wed, 29 Jan 2025 20:57:03 GMT Nr. 146575
    >>146368
    ВАС ЛАББЕРСТ ДУ ФЮР АЙНЕ ШАЙЗЕ МИКОЛА?
  • [l] Felix Tue, 28 Jan 2025 17:56:26 GMT Nr. 146431
    Im Gegensatz zu Fefe hat Zuse wenigstens eine hübsche Fehlerseite, wenn das Brett umfällt.
  • [l] Felix ☎️ Tue, 28 Jan 2025 05:39:04 GMT Nr. 146368
    Was geht nur in der Rübe dieses Spammers ab? Postet zu jeder noch so unpassenden Situation seine dumme Putinschlampe
    >Hurri durri der Waldi würde doch niiiiiemals ein anderes Land angreifen
    <Pudding marschiert in die Urine ein
    Damit hat die doofe Putinschlampe für immer verschissen. Konsequenzen zieht sie daraus eh nicht, einfach dumm weitersabbeln.
  • [l] Felix Tue, 28 Jan 2025 01:27:19 GMT Nr. 146359
    JPG 1125×702 51.1k
    Freuns?
  • [l] Felix Sun, 26 Jan 2025 11:50:12 GMT Nr. 146235
    Was war los?
    Warum war DC unten?
  • [l] Felix Sun, 26 Jan 2025 03:00:39 GMT Nr. 146214
    PNG 710×577 29.6k
    Weiß nicht
  • [l] Felix Fri, 24 Jan 2025 17:31:59 GMT Nr. 146120
    PNG 1000×712 177.0k
    Yeee ... dietchan ist wieder da.
  • [l] Felix Wed, 22 Jan 2025 01:23:04 GMT Nr. 145874
    >>145661
    Komplett pausenloser GC ist nun mal für 99%+ aller Programme eine Quatschanforderung deinerseits, da Pausen insbesondere im niedrigen einstelligen Millisekundenbereich unbedenklich sind. Das gilt selbst für die meisten Videospiele, geschweige denn Brauser. Da muss man sich nicht wundern, dass das eher Nischenkram ist, für den entsprechend Geld auf den Tisch gelegt wird.

    Ein GC würfelt auch nicht aus, wann er denn mal spaßeshalber alles anhält, sondern tut dies in den meisten Implementationen nur, wenn der Speicher bei einer Allokation zur Neige geht (steht auch in deinem verelften Artikel). Mit anderen Worten: Wo wenig alloziert wird, wird auch nur selten und kurz pausiert. In Anwendungen mit hohen Latenzanforderungen sorgt man auch ohne GC schon dafür, weil Latenz und Durchsatz von malloc/free meist erbärmlich sind. Diese Idee, dass man in Sprachen mit GC gar nicht um Allokationen herumkommt, ist vor allem ein Javaismus.

    >Was soll das heißen?
    Dass bei V8 wie bei jedem anderen Programm auch priorisiert wird; niemand im V8-Team optimiert etwas, dass nicht so oft ausgeführt wird, dass es sich letzten Endes doch um mehr als Mikrosekunden handelt. Dass Zeiten in Mikrobankmarken winzig sind, liegt in der Natur der Mikrobankmarken.

    >>Unity ruckelt wegen Müllabfuhr-Spikes, obwohl Multi-Milliarden-Dollar-Firma, deren Brötchengeber das ist
    Unity ist ein Saftladen, der zehn Jahre gebraucht hat, um Grundlagen wie verschachtelte Prefabs zu implementieren, und ihren schlecht gewählten GC Ewigkeiten nichtinkrementell betrieben haben, was für Videospiele tatsächlich kernbehindert ist. Die sind nun wirklich kein Maßstab für Kompetenz.

    >Wo ruft der Kot die Müllabfuhr von SBCL auf?
    Genau so wie man sie in normalem Kot aufrufen würde.
  • [l] Felix Tue, 21 Jan 2025 21:37:29 GMT Nr. 145864
    >>145661
    > Unsere Anwender sind Vollidioten, die sonst den Speicher vollkoten würden.
    Wenn ich mir anschaue wer so in Programmierersöckchen rumspringt liegt der Verdacht nicht so fern.
  • [l] Felix Tue, 21 Jan 2025 15:43:42 GMT Nr. 145836
    >>145567
    Altschauerberg 8
  • [l] Felix Mon, 20 Jan 2025 15:01:38 GMT Nr. 145729
    >>145695
    Ich hatte das irgendwie so verstanden, dass irgend ein Hacker, der anonym bleiben wollte, sich an den CCC gewendet hat, und dieser pinkhaarige Wichtigtuer dann wichtig tuend den Vortrag gehalten hat - man merkte ja schon auch irgendwie, dass der Vortragende wenig Ahnung hatte. Und natürlich konnte der Vortragende nicht "Hacker" sagen, sondern "Hacker*in".
  • [l] Felix ☎️ Mon, 20 Jan 2025 10:13:01 GMT Nr. 145695
    >>144274
    So hat sich Felix auch fühlt beim Folksvagenhack. Die lila Haare — oke, zähneknirschend akzeptiert. Doch als es dann hieß:
    >Die Hackerin...
    Fragte sich Felix zunächst welche Hackerin denn nun auf einmal gemeint sey. Bis die Realisierung kam, dass dieses Viech sich damit selbst meint🤮
  • [l] Felix Sun, 19 Jan 2025 23:39:37 GMT Nr. 145674
    Felix war allgemein nie ein Freund von der Müllabfuhr. Aber man kann über das Für und Wider ja diskutieren. Es mag Anwendungsfälle geben, in denen es geeignet ist, aber einer gehört sicherlich nicht dazu und das sind Videospiele. Also keine Ahnung, was Unity sich dabei gedacht hat. Naja, Felix kann es sich schon denken: Unsere Anwender sind Vollidioten, die sonst den Speicher vollkoten würden.
  • [l] Felix Sun, 19 Jan 2025 21:36:01 GMT Nr. 145661
    PNG 1920×1080 1.3M
    >>145563
    >Das hausgemachte Referenzzählergefrickel hat dann gefefelt [0] und tote Zyklen nicht als tot erkannt, diese aber später immer wieder gescannt. Hätte die C++-Seite einen vernünftigen GC, wäre das gar nicht erst passiert.
    Naja, die C++-Seite hatte damit ja eine Müllabfuhr, welche nicht seriell ist. Deswegen war der Einwand, dass die Müllabfuhr in Firefox seriell ist/einen blockierenden Teil hat, schon richtig. Wenn die Müllabfuhr viel scannen muss (was eben auch im normalen Betrieb passieren kann, nur eben in kleinerem Maßstab), hält die Welt an.

    >V8 ist viel zu komplex, als dass es um jede Mikrosekunde feilschen könnte.
    Was soll das heißen? Das ist Flinte-ins-Korn-Schmeißen ("Performanz kriegen wir sowieso nicht hin") oder Performanzignoranz ("Performanz ist doch gar nicht wichtig").

    Natürlich geht es auch bei V8 um Mikrosekunden, und zwar buchstäblich in den Bankmarken. Z.B. wenn man g++/glibc mit V8/Node.js vergleicht.
    Den Problemen aus dem Bankmarken-Spiel haben sich auch andere angenommen:
    >This is in contrast to other projects such as the Computer Language Benchmark game, which encourage finding the smartest possible way to express a problem in a language to achieve best performance, an equally interesting but different problem.
    >To allow us to compare the degree of optimization done by the implementations as well as the absolute performance achieved, we set the following basic rules:
    >The benchmark is 'identical' for all languages. This is achieved by relying only on a widely available and commonly used subset of language features and data types.
    >The benchmarks should use language 'idiomatically'. This means, they should be realized as much as possible with idiomatic code in each language, while relying only on the core set of abstractions.
    https://github.com/smarr/are-we-fast-yet

    >C++98 gcc -O2 vs. Node.js 12.16
    >all times in μs
    https://github.com/rochus-keller/Are-we-fast-yet/blob/main/FreePascal/Are-we-fast-yet_FreePascal_results.pdf

    >Unity ruckelt wegen Müllabfuhr-Spikes, obwohl Multi-Milliarden-Dollar-Firma, deren Brötchengeber das ist
    >C# suspendiert Fäden, obwohl ebenfalls Multi-Billionen-Dollar-Firma, die in den 2000ern voll drauf abgefahren ist
    >Java braucht kostenpflichtige VM
    Tut mir Leid, das hört sich alles nicht nach einer Programmiersprache/Implementierung von der Stange an, die die Feuerfuchs-Entwickler einfach verwenden könnten.

    Darüber hinaus hat Müllabfuhr das bereits angesprochene Grundproblem, dass sie eben ausgeführt werden muss. D.h. auch im behindertsten Moment loslaufen kann, insbesondere dann, wenn alle Fäden eigentlich schon was zu tun haben. Man hat damit etwas, das der Programmierer nicht steuern kann. Das ist schlecht, egal ob Teil der Programmiersprache/Implementierung, der Standardbibliothek der Programmiersprache oder von externen Bilbiotheken. Felix würde sogar sagen, man hat in den letzten Jahren (mit immer mehr Verbreitung von "Rahmenwerken" in vielen Bereichen der Computerey) immer mehr gesehen, dass Nichtsteuerbarkeit eine grundschlechte Idee ist. Wie soll der Programmierer da dann noch Performanz sicherstellen? Man schaue sich Bild relatiert an, und überlegt sich, wenn auf einem Faden plötzlich die Müllabfuhr reinplatzt.

    Das ist Felixens Meinung nach ein Grundproblem, dem sich auch die Müllabfuhrleute merkwürdigerweise viel zu wenig angenommen haben.

    >CL hat Laufzeitkompilierung von Kot als Standardfeature, es genügt also, den Kot in optimiertes CL zu übersetzen.
    Wo ruft der Kot die Müllabfuhr von SBCL auf? Wie das gelöst wäre, wäre doch das interessante und der Knackpunkt, weil man das selbst steuern möchte und die Müllabfuhr nicht anspringen soll, wenn z.B. der Benutzer gerade die Seite scrollt.

    Bonus: Felix sieht gerade, dass der Feuerfuchs mit privacy.resistFingerprinting = true es nicht hinkriegt, auf DuRöhre ein 60-FPS-Video in doppelter Geschwindigkeit (=120 Hz) abzuspielen, ohne dass Frames gedroppt werden. Und ja, es liegt nicht nur ein Artefakt bei Zeitmessungen, sondern Felix konnte gedroppte Frames auf dem Monitor gerade nachweisen. Mit privacy.resistFingerprinting = false ist es weg. Jetzt hat Felix also wieder ein Problem, das er nicht ignorieren kann, und mal wieder liegt es an irgendwelchem hochperformanten Hochperformanzkot...
  • [l] Felix Sat, 18 Jan 2025 18:24:54 GMT Nr. 145567
    >>145289
    Wo kann ich das Geld für die begangene Wahlwerbung abholen?
  • [l] Felix Sat, 18 Jan 2025 18:00:29 GMT Nr. 145565
    >>145563
    >und einen referenzzählerbasierten für C++
    Igitt, das wusste Felix gar nicht. GC in C++ ist absolut haram! Inkscape nutzt auch sowas. Scheußlich und wahrscheinlich der Grund, warum es ständig crasht.
  • [l] Felix Sat, 18 Jan 2025 17:37:29 GMT Nr. 145563
    >>145543
    >Die Profile zeigten, dass es Spikes von der Müllabfuhr waren, mit Aufrufstapel in der Müllabfuhr.
    FF hat zwei GCs: Einen klassischen für JS (GC im Profil) und einen referenzzählerbasierten für C++ (CC im Profil, für Cycle Collector, weil Referenzzähler ohne sowas nicht alles behandeln können). Das hausgemachte Referenzzählergefrickel hat dann gefefelt [0] und tote Zyklen nicht als tot erkannt, diese aber später immer wieder gescannt. Hätte die C++-Seite einen vernünftigen GC, wäre das gar nicht erst passiert.

    >Das Problem ist, dass das bereits zu langsam für eine JavaScript-Maschine ist, wenn bei V8 um jede Mikrosekunde gefeilscht wird.
    V8 ist viel zu komplex, als dass es um jede Mikrosekunde feilschen könnte. Die Unterschiede aus dem Bankmarken-Spiel sind im Bereich der zuvorgenannten Compilerarbeit: Felix hatte z.B. vor kurzem aus C übersetzten CL-Kot gesehen, der in einer neuen SBCL-Version plötzlich 1.5x schneller lief, ein Fach weil einige der Optimierungen aus GCC und Co. nun auch in SBCL gelandet sind.

    >Das sieht nach dem Gegenteil von voll-paralleler Müllabfuhr aus.
    Ist aber nicht der Grund, warum Unity ruckelt. Das liegt am (insb. nicht-inkrementellen) Boehm-GC und eventueller Inderey.

    >Gibt es überhaupt eine einzige weit verbreitete Programmiersprache/Implementierung, die nicht eine "stoppe die Welt"-Phase hat?
    Komplett ohne Unterbrechung, egal wie klein? Azuls Implementation der JVM hat sowas, heißt C4 [1]. Ist proprietär und kostet, weil kaum einer einen wirklich pausenlosen GC braucht, und die, die ihn brauchen, dafür zahlen. OpenJDK hat ansonsten z.B. Shenandoah [2], welcher üblicherweise Pausen im niedrigen einstelligen Millisekundenbereich hat. Man bemerke auch die Heap-Größen. SBCL hatte vor ein zwei Jahren auch sowas im Anmarsch, aber Felix weiß nicht, wie der Stand da gerade ist. Anmerkung nebenbei: Latenz ist nicht alles. Kürzere Pausen bedeuten praktisch immer niedrigeren Durchsatz, was für sehr viele Programme viel relevanter ist.

    >Wie soll der gejittete Maschinenkot die Müllabfuhr von Programmiersprache X aufrufen?
    CL hat Laufzeitkompilierung von Kot als Standardfeature, es genügt also, den Kot in optimiertes CL zu übersetzen:
    * (disassemble (compile nil '(lambda (x y z) (declare (optimize (speed 3) (debug 0)) (type (unsigned-byte 32) x y z)) (+ x y z))))
    ; disassembly for (LAMBDA (X Y Z))
    ; Size: 13 bytes. Origin: #xB800B4A2EF                        ; (LAMBDA (X Y Z))
    ; EF:       488D0C3A         LEA RCX, [RDX+RDI]
    ; F3:       488D1431         LEA RDX, [RCX+RSI]
    ; F7:       C9               LEAVE
    ; F8:       F8               CLC
    ; F9:       C3               RET
    ; FA:       CC0F             INT3 15                          ; Invalid argument count trap
    NIL

    Die Definition der Funktion ist hier eine Konstante, aber die kann auch zur Laufzeit berechnet werden.

    [0] https://bugzilla.mozilla.org/show_bug.cgi?id=1939295#c18
    [1] https://docs.azul.com/prime/c4-garbage-collection
    [2] https://wiki.openjdk.org/display/shenandoah/Main
  • [l] Felix Sat, 18 Jan 2025 15:43:15 GMT Nr. 145552
    >Pannierung bis 23.1.
    Da hast du mich aber eben erschreckt, dass die Wahl schon im Januar stattfindet.
  • [l] Felix Sat, 18 Jan 2025 13:30:32 GMT Nr. 145543
    >>145517
    >>>Sind in Felixens Welt alle Müllabfuhren seriell und halten die Welt an?
    >>Genau das war ja beim Käfer der Fall.
    >Nein, das Problem war, dass bestimmte Dinge fälschlicherweise von der Müllabfuhr ausgenommen waren und sich dann anstauten.
    Aber selbst dann würde nicht stottern, wenn es parallel wäre und die Welt nicht anhalten würde. Da es stotterte, gab es einen seriellen Teil, der alles blockiert.
    Die Profile zeigten, dass es Spikes von der Müllabfuhr waren, mit Aufrufstapel in der Müllabfuhr.

    >>fannkuch-redux (1.20x), n-body (1.52x), spectral-norm (0.95x), mandelbrot (1.78x)
    >Ist Felixens Erfahrung nach realistisch. Er schließt dennoch nicht aus, dass auch die Vergleiche schwachsinnig sind und bloß zufällig in der richtigen Größenordnung landen.
    Das Problem ist, dass das bereits zu langsam für eine JavaScript-Maschine ist, wenn bei V8 um jede Mikrosekunde gefeilscht wird.

    Gibt es überhaupt eine einzige weit verbreitete Programmiersprache/Implementierung, die nicht eine "stoppe die Welt"-Phase hat?

    >Das ist ein notorisches Unity-Problem.
    Wenn ich mir C# allgemein anschaue (Jahr 2017):
    >Above, we see GC was triggered by thread 2948 and it waits for the CLR to suspend all managed threads.
    https://devblogs.microsoft.com/premier-developer/understanding-different-gc-modes-with-concurrency-visualizer/
    Das sieht nach dem Gegenteil von voll-paralleler Müllabfuhr aus.

    >Daher muss es beim schnippischen "lies ein Buch" bleiben; Felix empfiehlt The GC Handbook, dessen Raubmordkopie für diesen Kanal leider zu groß ist.
    Danke für den Buchtipp, Felix wird es sich mal anschauen.

    Darüber hinaus gibt es aber noch das Problem der Sprachbarriere. Es geht hier darum, mit Programmiersprache X eine JavaScript-Maschine (und deren Anbindungen ans DOM) zu schreiben. Wenn man den Fall hat, dass X eine Müllabfuhr hat, dann geht es hier um die Idee, dass man diese Müllabfuhr auch für das, was in der JavaScript-Maschine ausgeführt wird, verwendet (und zwar die gleiche Müllabfuhr-Instanz in und außerhalb der Maschine, wegen Abhängigkeit zwischen DOM/dahinterhängenden JS-APIs und dem Kot in der JavaScript-Maschine). Eine JavaScript-Maschine muss Maschinenkot jitten (siehe Performanz oben). Wie soll der gejittete Maschinenkot die Müllabfuhr von Programmiersprache X aufrufen? Dafür muss in der Programmiersprache X selbst es Funktionalität geben, mit der man die Müllabfuhr des eigenen Programms steuern kann, aber hoffentlich ohne explizite Allokationen/Deallokationen, sonst ist man wieder an der gleichen Stelle wie ohne Müllabfuhr.


[0] ... [155] [156] [157] [158] [159] [160] [161] [162] [163] [164] ... [272]
[c] [meta] [fefe] [erp]