Transkript: Python 3.13

· Zurück zur Episode

Vollständiges Transkript der Episode. Zeitstempel beziehen sich auf die Audiowiedergabe.

Dominik

Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Python-Podcast.

Dominik

Heute Jubiläumsepisode 60.

Dominik

Hi oh,

Jochen

Jubiläum, herzlichen Glückwunsch und auch herzlich willkommen, Dominik.

Jochen

Ja, und auch genau, ja, beziehungsweise was.

Ja, genau.

Johannes

Hallo zusammen und herzlichen Glückwunsch zur 60.

Dominik

Episode.

Dominik

Danke.

Dominik

Und lieber TF, auch dir.

Vielen Dank, hallo.

Dominik

Du warst ja auch schon mal da, habe ich noch in Erinnerung.

Carl Friedrich

Januar 23 haben wir gerade rekonstruiert.

Ja.

Dominik

Wir sprechen heute über Python 3.13.

Dominik

Ja.

Dominik

Und ich würde sagen, da legen wir auch direkt los.

Jochen

Ja, wollen wir noch News machen oder nicht?

Ich wollte gerade sagen, mit den News.

Also Python-Radresse des Jahres.

Jochen

Genau, das ist natürlich irgendwie schon.

Dominik

Ja, ist ja ein bisschen her.

Dominik

Wir sind ein bisschen spät dran.

Dominik

Aber das ist vielleicht auch noch interessant.

Dominik

Es gibt ein paar schöne Sachen, die man darüber erzählen kann, oder?

Jochen

Ja, also wollen wir direkt PythonRail 13 kommen wir auch direkt.

Dominik

War gar nicht so viel los, oder?

Jochen

Nee, sonst war auch nicht so viel los, das stimmt.

Jochen

Na, dann machen wir es doch direkt.

Also ja, dann erzählen uns was.

Jochen

Ich habe es jetzt auch schon überall irgendwie installiert, wo ich irgendwie Projekte angefasst habe und es funktioniert super.

Jochen

Und genau, ja, jetzt haben wir da so einige Dinge.

Jochen

Vielleicht fangen wir einfach tatsächlich mit der neuen REPL an.

Jochen

Irgendwie, die halt aus dem Pipe-Projekt übernommen wurde.

Mit der neuen REPL.

Dominik

Was ist eine REPL?

Jochen

Ja, so eine Read, Evil Print Loop, irgendwie das, was man bekommt, wenn man einfach nur Python eingibt und entrückt.

Dominik

Also nutzt ihr schon Pre13 alle?

Außer Jochen?

Johannes

Nee, ich habe es noch nicht installiert.

Carl Friedrich

Ich nutze es nicht, also die neue RAPL.

Jochen

Ah.

Das ist natürlich ein Speiser.

Johannes

Ja gut, ich benutze iPython überall.

Dominik

Warum nicht viel bei das?

Carl Friedrich

Das hatten wir vorhin im Vorgespräch schon mal kurz besprochen.

Carl Friedrich

Also ich fand die Bekundung interessant, warum sie eigentlich überhaupt die RAPL verbessern, wenn sie sowieso, ja, wissen, dass die meisten Leute halt sich sowieso als erstes erstmal iPython installieren, weil das halt einfach viel, viel netter ist.

Carl Friedrich

Aber der Grund scheint zu sein, dass die CPython Core Devs halt, während sie quasi dann die nächste Version entwickeln, erstmal geht PyPy nicht und PIP nicht und iPython geht vielleicht auch nicht auf der neuen Version.

Carl Friedrich

Und damit sie es quasi beim Entwickeln etwas netter haben, haben sie sich quasi den schöneren Multiline-Edit, schönere History-Farben Raple implementiert, der jetzt in Teil 13 released.

Dominik

Ich fand's auch toll, weil ich meine ZV für iPython und ich mache das eigentlich sonst nochmal klassisch und toll.

Dominik

Endlich, die Welt bunt.

Johannes

Die Welt verbessert durch Eigennütz.

Also Sauerei.

Carl Friedrich

Ja, also das mit den Farben finde ich relativ abgefahren tatsächlich.

Carl Friedrich

Also ich habe jetzt seit, weiß ich nicht, Oktober dann jetzt auch den Farbing Raple.

Carl Friedrich

Und wenn ich dann aber eine alte Version benutze, und das ist dann plötzlich nur noch schwarz-weiß und es ist ja gar nicht so viel Farbe, das sind ja wirklich nur die Größe als Zeichen.

Carl Friedrich

Aber das kommt einem dann fast schon altbacken vor nach so einem Fragen.

Dominik

Ja, Bang to the Future, das ist schon ein bisschen wie als damals, ja.

Dominik

Aber das hat das nicht früher, dass es noch grün war oder so, aber echte Hacker und so.

Carl Friedrich

Ja, die Farbauswahl, die die C-Peiten-Entwickler getroffen haben, das war ein riesen Diskussionsthema.

Carl Friedrich

Das ist halt so Bike-Shading-mäßig.

Carl Friedrich

Also da kann man halt gut drüber diskutieren.

Carl Friedrich

Und das Problem ist, dass man halt aus der Shell raus nicht rausfinden kann, ob die Shell auf schwarz auf weiß oder weiß auf schwarz eingestellt ist.

Carl Friedrich

Das heißt, man muss Farben wählen, die bei beiden Hintergrundfarben quasi noch einen einigermaßen brauchbaren Kontrast dann ergeben.

Carl Friedrich

Und deswegen ist dieses, was ist das, dieses Pink und Rot, das sind so ein bisschen so ein Kompromiss, weil das halt sowohl auf dem schwarzen Hintergrund als auch auf dem weißen Hintergrund noch einigermaßen gut lesbar bleibt.

Jochen

Ach, okay, interessant.

Jochen

Wusste auch nicht.

Jochen

Ja, aber genau, wie kommt das denn, dass du die REPL schon verwendet hast, obwohl gar nicht.

Carl Friedrich

Ja, also die RAPL ist, das ist quasi die PyPy-Raple, nicht ganz.

Carl Friedrich

Also die haben total viele neue Features eingebaut und Bugs gefixt und so.

Carl Friedrich

Aber so dieses Kern-Feature, dass es eben Multiline-Edit gibt, also vielleicht können wir auch kurz sagen, was das ist.

Carl Friedrich

Also wenn man quasi auf der Python-Chell eine Funktion eingibt, die halt über mehrere Zeilen geht und man macht dann irgendwie so einen Tippfehler in Zeile 2 von 8, dann musste man bisher halt quasi dann mit der History Zeile für Zeile in der richtigen Reihenfolge dann die Funktion wieder so neu zusammensetzen, die entsprechende kaputte Zeile dann reparieren und dann die anderen wieder über die History holen und das ist halt total nervig.

Carl Friedrich

Und deswegen gibt es jetzt eben Multiline-Edit und PyPy hatte das, wie ich gerade schon gesagt habe, quasi schon immer, also in Anführungszeichen, also seit PyPy 2.4 oder 2.5 oder so hatten wir das, dass man halt quasi, wenn man nach einer Funktion Pfeil nach oben drückt, dann kriegt man halt die ganze Funktion über mehrere Zeilen.

Carl Friedrich

Man kann dann auch wie in einem Editor mit Pfeil nach oben dann in die früheren Zeilen der Funktion, kann das einfach editieren, geht dann wieder ans Ende und mit Enter definiert man die Funktion neu.

Carl Friedrich

Und das hatte halt, das haben halt zwei der frühen Piper-Entwickler einfach so als in Anführungszeichen normalen Python-Code geschrieben.

Carl Friedrich

Das war einfach, also das hat eigentlich keine Pipel-spezifischen Features irgendwie gebraucht.

Carl Friedrich

Michael Hudson, Doyle und Armin Rigo waren das.

Carl Friedrich

Und so vor ungefähr vor einem Jahr haben halt zwei der C-Python-Entwickler, Wurka Schlanger und Pablo Galinus Salgado, gesagt, dass sie das auch gern für C-Python hätten.

Carl Friedrich

Beziehungsweise die haben halt versucht, sich zu überlegen, wie sie den Rappl verbessern können.

Carl Friedrich

Der RAPL war bisher in C-Python in C geschrieben und das macht halt alle Verbesserungen darin relativ nervig und aufwendig.

Carl Friedrich

Und dann haben sie halt geguckt, woher man vielleicht Python-Code nehmen könnte, der irgendwie einen Teil des Problems schon löst, ohne dann alles nochmal neu machen zu müssen.

Carl Friedrich

Und dann habe ich halt gesagt, dass sie vielleicht sich mal anschauen könnten, was PyPy da hat.

Carl Friedrich

Und dann haben sie das eben übernommen, angepasst.

Carl Friedrich

Den Code auch total verbessert, weil in PyPy ist der auch immer noch Python 2-kompatibel, weil wir auch immer noch Python 2-Versionen releasen haben.

Carl Friedrich

Und also da haben die quasi so ein bisschen Grund überholt und neue Tests geschrieben und so.

Carl Friedrich

Und eben auch einiges an neuen Feature hinzugefügt.

Carl Friedrich

Also, ich habe ein paar Notizen dazu gemacht.

Carl Friedrich

Also einmal die Farben, die haben wir nicht gehabt.

Carl Friedrich

Dann diesen Paste-Mode, den es jetzt gibt.

Carl Friedrich

Also wenn man quasi aus der Zwischenablage irgendwie mehrere Zeilen Code einfügt, dann geht der auf die Einwirkung kaputt.

Carl Friedrich

Und das ist jetzt eben auch repariert.

Carl Friedrich

Auch Support für Windows hatten wir bisher auch nicht.

Carl Friedrich

Und halt die Farben.

Dominik

Was ich tatsächlich auch nicht kannte, war, dass man einfach so ein Skript reinfliegen kann.

Dominik

Ich habe gehört, dass das schon ein bisschen älter ist, weiß aber nicht, bei welche Version das reingekommen ist.

Dominik

Man kann eine Environment-Variable setzen und dann wird ein Skript ausgefüllt.

Dominik

Das heißt, du hast deine Imports, die du immer machst, direkt mit dabei, wenn du zum Beispiel diese Env setzt.

Carl Friedrich

Deine sieben Lieblingsmodule.

Ja, das sind nur sieben.

Sieben?

Dominik

Finde ich ziemlich cool.

Dominik

Man kann dann lustige Sachen machen.

Dominik

Python Startup heißt das.

Dominik

Ja, sehr schön.

Dominik

Muss ich unbedingt für mein System auch bauen.

Jochen

Ja, aber genau, also auch ein großer Vorteil ist, glaube ich, auch jetzt, dass es, also es war vorher irgendwie direkt in C, glaube ich, geschrieben und jetzt ist es halt auch Pure Python sozusagen und ich glaube, da kann man jetzt auch einfach eine ganze Menge mehr an die Innereien rankommen und dann auch das Verhalten so ändern, dass man da eine ganze Menge lustige Dinge mit tun kann.

Jochen

Lukas Schlange hatte da auf der EuroPython auch einen Vortrag gehalten, wie man Live-Coding.

Jochen

Oder wie bei einer Performance performt.

Jochen

Live-Musik-Coding-Geschichten und da ist es natürlich praktisch, wenn man halt.

Dominik

Lustig war, dass der Tontechniker, der hat einen Eurorick dabei gehabt und hat irgendwie so einen hohen Ton auf seinem Synthesizer gespielt, hat der Tontechniker kurz Angst bekommen, dass seine anderen Geschrott geht, hat alles runtergedreht auf so 20% Lautstärke oder sowas.

Und auf einmal war es sehr leise.

Dominik

Und dann hat er fünf Minuten so gespielt und irgendwann ist jemand hat geklopft vom Tuchtechniker und hat dann überredet und gesagt, ja, Lukas, wird diese hohen Frequenzen jetzt nicht mehr spielen und dann durfte er wieder lauter drehen.

Carl Friedrich

Ja, ich glaube, das sieht man auch jetzt schon so ein bisschen.

Carl Friedrich

Es gibt halt einfach viel mehr Bugreports und Patches, was den neuen Rappl angeht.

Carl Friedrich

Es ist immer noch so, dass es schon so ein bisschen nervig ist, anzuarbeiten, weil wenn der Rappl kaputt ist, dann sieht man halt auch gleich nichts mehr.

Carl Friedrich

Also der Debugger geht nicht und es ist schon, die haben dann schon so ein bisschen eigene Debugging-Sachen eingebaut.

Carl Friedrich

Aber es ist schon noch so, es bleibt so ein bisschen frickelig.

Jochen

Aber ich glaube, man kann auch die alte wieder aktivieren irgendwie.

Jochen

Insofern hat man da vielleicht die Möglichkeit, auch mit der Umgebungsvariable dann wieder auf den alten Dings zu kommen.

Jochen

Aber ja, klar, ist natürlich, wenn man es kaputt macht, dann ein Problem.

Carl Friedrich

Wichtiges anderes neue Feature ist natürlich, dass man jetzt bei Exit keine Klammern mehr braucht.

Jochen

Oh ja.

Jochen

Ja, und ich glaube, Quit geht auch.

Carl Friedrich

Ja, echt ist das so.

Jochen

Ja, und Help geht auch irgendwie jetzt anders, aber ehrlich gesagt, keine Ahnung genau, wie.

Carl Friedrich

Ja, es gibt jetzt diesen Help-Mode, der eingemaut ist mit F1 und dann kann man quasi aus der Shell in so eine spezielle Help-Shell wechseln und von da dann, wenn man quasi die Namen von irgendwelchen Sachen, die man dokumentiert haben, möchte eingibt, dann kriegt man die direkt angezeigt.

Johannes

Aber bei Print braucht man schon noch Klammern, oder?

Carl Friedrich

Das möchte ich so möchten so etwas Python 2 wieder haben.

Johannes

Vielleicht das mal als Feature-Request.

Also das kannst

Jochen

du jetzt auf jeden Fall für deine Raffle kannst du das einbauen, dass sie sich dann wieder gegen Python 2.

Das mit dem

Carl Friedrich

Exit ist tatsächlich was, was halt Newbies sich relativ oft wünschen.

Q reicht, glaube ich, auch.

Jochen

Q reicht?

Jochen

Nee.

Dominik

Warum fehlt denn das da?

Jochen

Weiß ich.

Dominik

Ach, für den Head Mode.

Jochen

Ja, also Kütt geht, aber Q nicht.

Schade.

Dominik

Alias QQ, dann muss man ja direkt wieder in das Schrift reinschreiben.

Ja.

Jochen

Ja, aber so ist es auf jeden Fall toll.

Jochen

Also, ich finde das auch super, dass man da jetzt irgendwie echt eine ganz brauchbare Geschichte eingebaut hat.

Jochen

Und gut, klar, also iPython ist natürlich auch nicht schlecht oder wie Python oder so, aber

Carl Friedrich

dann daran angelehnt, wir haben jetzt Farben ja schon angesprochen, vielleicht können wir noch über die Tracebacks sprechen.

Carl Friedrich

In 3.11 gab es ja jetzt schon die Verbesserung, dass wir quasi in Tracebacks diese genaueren Positionen innerhalb von der Zeile kriegen.

Dominik

Wie sagt man Dächle, Johannes?

Carl Friedrich

Genau.

Johannes

Dechle, ja.

Johannes

Das ist da, wo ich herkomme, sagt man Dechle.

Johannes

Sind halt auch keine Dächer, sondern nur kleine Dechle.

Carl Friedrich

Also Ghost in the Guarded.

Carl Friedrich

Genau.

Carl Friedrich

Also es wird jetzt quasi nicht mehr nur gesagt, es ist halt in Zeile 5 der Fehler, sondern auch noch dieser Teil des Ausdrucks ist der Teil, der die Exception hervorgerufen hat.

Carl Friedrich

Und das wird jetzt halt auch noch, jetzt dann farbig irgendwie anders dargestellt als der Rest der Zeile.

Ja, auch sehr nützlich.

Dominik

Tatsächlich so ein bisschen readable und man muss sich erstmal gucken, wo ist denn jetzt der richtige Teil vom Traceback, sondern so.

Carl Friedrich

Mit den Positionen, da habe ich, das Feature habe ich quasi durch einen geschickten Tweet provoziert.

Carl Friedrich

Da habe ich nämlich einen Screenshot gefälscht, wo wir, also den hat es nie, das Feature hat es bei uns nicht gegeben, aber ich habe quasi einen fiktiven Traceback auf Twitter fingiert und das hat dann dazu geführt, dass C-Python das wirklich entwickelt hat.

Jochen

Das fand ich großartig.

Johannes

Feature Request durch Busartigkeit, das schaue.

Johannes

Also wir können es und ihr?

Und dann gelogen.

Carl Friedrich

Also ich hatte schon so einen Plan, wie ich das irgendwann mal, wir haben das ja dann auch irgendwann gekriegt, aber so C-Python hat uns dann halt einfach ganz schnell überholt und viel mehr Leute benutzen C-Python.

Ja.

Jochen

Genau, hier kann man es auch nochmal sehen.

Ja, jetzt natürlich nicht, wenn ihr zuhört, aber.

Jochen

Ich kann es jetzt sehen.

Jochen

Einziger Zelt.

Jochen

Ja, ja.

Jochen

Genau.

Jochen

Ja, auch schön, man kriegt jetzt irgendwie gesagt, wenn man halt ein Modul genauso genannt hat wie eins aus der Standardbibliothek oder von sonst wie Dingen, die man installiert hat.

Jochen

Glaube ich.

Jochen

Also es gibt so ein bisschen bessere.

Jochen

Oder wenn man halt irgendwie bei Keyword-Argumenten das irgendwie falsch übergeben hat, dann kriegt man jetzt auch, da gab es vorher einfach nur so sehr, sehr kryptische Fehlermeldungen, die halt Anfänger auch sehr verursichert haben.

Jochen

Das ist jetzt, glaube ich, auch besser.

Dominik

Der macht das Vorschlag, er versucht sich daran zu erinnern, was denn der Fehler schon sein könnte und versucht einen kleinen Hinweis dazu zu geben.

Carl Friedrich

Ich meine, das für das wird halt in jeder Version jetzt gerade so ein bisschen verbessert.

Carl Friedrich

Es ist schon so ein, jetzt über einige Versionen so ein festes Bestandteil von jedem C-Python-Release, dass sie halt sich echt Mühe geben, noch so ein paar der schlechten Fehlermeldungen zu verbessern.

Carl Friedrich

Und ich, also ich unterrichte halt Python-Anfänger jedes Semester.

Carl Friedrich

Das macht schon echt einen Unterschied, ob da dann irgendwie halt Abkürzungen vorkommen, die die noch nie gehört haben oder einfach nur Syntax-Error ohne irgendwas anders steht und so ein bisschen raten müssen, was das Problem gewesen sein könnte.

Carl Friedrich

Und das mit den Vorschlägen, also wenn man sich halt vertippt, wenn man irgendwie Namen vertippt, das ist jetzt schon seit ein, zwei Versionen, dass sie dann da dann Vorschläge machen könnten, was halt der existierende Name mit der kleinsten Edit-Distanz ist.

Carl Friedrich

Und jetzt haben sie es eben noch zusätzlich hinzugefügt, dass es auch bei Keyword-Argumenten geht.

Jochen

Ah, okay.

Jochen

Ja, also das ist auf jeden Fall vielleicht die größte User-Facing-Änderung, die man halt bekommt, wenn man jetzt Python 3.13 verwendet.

Ja.

Dominik

Ja, ich würde auch sagen, wenn die ganzen Bibliotheken umgezogen sind, die man sonst so nutzt, dann direkt kann nicht mehr so lange dauern.

Dominik

Wann zieht der denn immer um bei der 3.1 oder bei der Punkt 1 oder Punkt 2?

Jochen

Ich stelle eigentlich immer sobald, ich probiere es vorher schon aus, also einfach deswegen, um zu sehen, ob ich halt irgendwie bei den Paketen, die ich habe oder die ich mir enthält, ob da nicht dann Dinge kaputt gehen, weil um mir dann halt, damit ich den Ärger nicht nach der Release kriege, gucke ich das halt so.

Carl Friedrich

Du bist dann einer von denen, die dann die Bugreports machen, wenn was nicht gibt.

Jochen

Ja.

Jochen

Aber meistens ist das halt so abstrakt, dass ich da gar keine, gar nicht in Bugs reinlaufe.

Jochen

Also bisher, wo ich es probiert habe, hat es eigentlich immer funktioniert.

Jochen

Und dann wirklich updaten, das mache ich dann normalerweise, wenn es tatsächlich dann erscheint.

Dominik

Ja, aber der Rest der Software, den hast du ja noch nicht alles umgezogen.

Jochen

Ich habe noch nicht alles umgezogen.

Jochen

Ich habe auch bei einem Ding hat es nicht geklappt.

Jochen

Das war irgendwie bei meinem Fast-Deploy-Ding nicht updaten können auf 313, weil irgendwas mit Py-Test und Async und irgendwelchen Geschichten nicht mehr ging, dann, ich weiß es gar nicht mehr so genau.

Jochen

Da dachte ich, okay, da warte ich jetzt mal noch zwei Monate ab oder so und probiere es nochmal, mal gucken, vielleicht ist es dann gefixt.

Jochen

Aber genau.

Jochen

Aber da die Dinge, die ich angefasst habe, seitdem Python 313 raus ist, habe ich es umgestellt und es war bis jetzt auf das eine Ding kein Problem.

Dominik

Ja, die Data Science-Vacke sind immer so ein bisschen langsam, dann haben die immer diese SAP-Boundaries in ihren Versionen drin und das nervt immer so ein bisschen.

Jochen

Ja, ja gut, okay.

Jochen

Ich habe jetzt auch gerade nicht so viel Data Science in der Hand, daher ist mir das nicht so aufgefallen.

Carl Friedrich

Wobei ich auch da das Gefühl habe, dass eigentlich viele Bibliotheken sich da jetzt inzwischen echt Mühe geben und halt schon schon bei den Bitas und Release-Candidates halt gucken, ob es geht und dann schon.

Ja.

Carl Friedrich

Also es ist jetzt nicht mehr so, dass es ein halbes Jahr dauert oder so.

Dominik

Ja, ich bin gespannt, wie lange es diesmal dauert, tatsächlich, ja.

Jochen

Ja.

Ja.

Carl Friedrich

Wollen wir mit den großen Blöcken weitermachen oder willst du so ein paar der kleinen Sachen sammeln?

Jochen

Ich weiß nicht, jetzt hatten wir schon einen großen Block.

Ja, jetzt gibt es noch zwei Blöcke.

Jochen

Das war auch schon ein großer, ja.

Johannes

Ich habe eben noch hier die Dokumentation durchgeschaut und den History-Modus, den fand ich auch ziemlich gut.

Johannes

Mit F2 kann man seine History ansehen.

Dominik

Ist das noch persistent?

Johannes

Ja, die, also ich habe eben in mein History reingeguckt in meine Session, die ich gerade angemacht habe.

Johannes

Das geht sehr weit zurück.

Johannes

Ich war sehr überrascht, wie viel History da drin ist.

Dominik

Oh, da muss man jetzt halt aufpassen, was man

Carl Friedrich

noch print ohne Klammern.

Naja, das will ich jetzt nicht.

Johannes

Ohne Anwalt möchte ich diese Frage nicht beantworten.

Johannes

Nee, es ist schöne, sehr viele schöne Sachen, aber ich finde es sehr interessant, dass es 313 so ein Release ist mit einer riesigen Änderung im Frontend.

Johannes

Also jetzt diese Rappa-Sachen.

Johannes

Aber ja auch sehr große Änderungen im Backend, zu denen wir jetzt kommen.

Dominik

Du meinst ja Snoogel.

Ja, es

Johannes

gibt zwei Dicke.

Carl Friedrich

Da machen wir Töt.

Carl Friedrich

Da habe ich mir Notizen.

Jochen

Ja, super, okay.

Jochen

Alles klar.

Carl Friedrich

Also beides sind ja eigentlich Sachen, die sie eher so im Himmel.

Dominik

Vielleicht nochmal für alle Leute, die einsteigen, die noch gar keine Ahnung von Platz haben.

Dominik

Was ist denn das und warum ist das interessant und warum ist das wichtig?

Dominik

Vielleicht nochmal so einen kurzen Aufzug lang und dann.

Carl Friedrich

Also C Python ist ein Interpreter, also der Python-Code, den ausgeführt wird, der wird erst nach Bytecode übersetzt.

Carl Friedrich

Und der Bytecode wird aber dann von einem in C geschriebenen Interpreter ausgeführt und das gilt als nicht so schnell.

Carl Friedrich

Das ist einer der Gründe, warum Python den Ruf hat, nicht so super schnell zu sein.

Carl Friedrich

Und seit ein paar Versionen gibt es da einiges an Arbeiten vom Faster Python-Team, was zum guten Teil von Microsoft bezahlt wird, das zu verbessern.

Carl Friedrich

Und was die machen, ist immer noch auf dem Interpreter, aber dass sie verändern quasi die Bytecodes zur Laufzeit, in Abhängigkeit von den Typen, die in den Funktionen verwendet werden.

Carl Friedrich

Was dazu führt, dass wenn ich halt an irgendeiner Stelle vor allem Integers benutze, dass dann für Integers angepasster Bytecode verwendet wird, was die Ausführung schneller macht.

Carl Friedrich

Und das, also dieser Prozess, der hat in 3.11 angefangen und in jeder Version gibt es da eben so ein paar Verbesserungen.

Carl Friedrich

Und wenn man dann aber darüber noch hinaus will, dann muss man eben, oder was man dann eben machen kann, ist nochmal zu einer anderen Technik greifen, das ist der sogenannte Just-in-Time-Compiler.

Carl Friedrich

Und das ist eine Technik, die von allen schnellen JavaScript-Implementierungen oder auch von Java verwendet wird.

Carl Friedrich

Und da ist die Idee, dass man zur Laufzeit eben Maschinencode erzeugt für die Funktionen, die man gerade ausführen möchte.

Carl Friedrich

Und das hat den Vorteil, dass man, also der Grund, warum man das zur Laufzeit macht, ist, weil man erst zur Laufzeit die Typen weiß, die in der Python-Funktion gerade verwendet werden.

Carl Friedrich

Und dann kann man eben Code erzeugen, der dann speziell angepasst ist auf die Arten und Weisen, wie die Funktionen, die man gerade ausführt, eben verwendet werden.

Jochen

Und aber das kann ja auch sehr dynamisch sein, aber man muss dann wahrscheinlich ein paar Mal die so ausführen und dann gucken, was passiert und dann.

Jochen

Genau.

Carl Friedrich

Also das ist der grundsätzliche Ansatz.

Carl Friedrich

Man fängt eben an, das erstmal so mit dem Interpreter auszuführen und dabei macht man so ein bisschen Beobachtung, was für Typen eben konkret verwendet werden, führt so ein paar Statistiken mit.

Carl Friedrich

Und nur wenn die Funktion besonders oft ausgeführt wird und man dann eben mit der Zeit eben so ein paar Informationen zusammen hat, wie die Typen so sind.

Carl Friedrich

Dann fängt es sich an, quasi das so ein bisschen zu stabilisieren.

Carl Friedrich

Und das ist auch dann der Zeitpunkt, wo eben dann die Bytecodes umgeschrieben werden, quasi jetzt seit Version 3.11.

Carl Friedrich

Und jetzt, was jetzt neu ist in 3.13, ist, dass dann eben dieser zweite Schritt hinzukommt, wo man dann eben nicht nur Bytecodes umschreibt und für die Situation effizientere Bytecodes, sondern eben auch noch, und das ist komplett optional, also bisher in den Standard-Bilds ist das Feature nicht drin.

Carl Friedrich

Das ist eher so ein Feature-Outlook für zukünftige Versionen, dass man eben C-Python auch neu bauen kann mit so einem speziellen experimentellen Build-Time-Flag, was eben sagt, ich möchte jetzt gerne einen JIT-Compiler einbauen.

Carl Friedrich

Und dann wird eben zur Laufzeit dieser spezialisierte Bytecode genommen und daraus Maschinencode erzeugt.

Carl Friedrich

Und die Hoffnung ist, dass es dann eben noch schneller wird.

Carl Friedrich

In T13 ist es aber leider noch nicht der Fall.

Carl Friedrich

Also sie erzeugen quasi Maschinencode, aber der macht es halt nicht, das macht es trotzdem nicht schneller.

Carl Friedrich

Das ist so ein bisschen die schlechte Nachricht.

Carl Friedrich

Aber das ist trotzdem okay, weil das Ziel ist quasi, so die ganzen, die ganzen, das Fundament zu legen für Verbesserungen, die dann in den nächsten Versionen hoffentlich auch wirklich dazu führen, dass halt dann C-Python das Sachen schneller ausführen kann.

Jochen

Ja.

Jochen

Und das ist, glaube ich, eine spezielle Art von Justin-Time-Compiler oder so, die es auch noch gar nicht so lange gibt.

Jochen

Das geht irgendwie zurück auf so ein Paper für Lua irgendwie, für so Copy und Patch.

Jochen

Ich weiß nicht.

Carl Friedrich

Also so ganz kann man das nicht sagen.

Carl Friedrich

Also es gibt die Idee gibt es schon sehr lange.

Carl Friedrich

Also das ist ein sogenannter Template-Jit.

Carl Friedrich

Und da ist die Idee, dass man, also man hat ja dann diese spezialisierten Bytecodes, also sowas wie Add to Integers oder sowas.

Carl Friedrich

Und die Idee ist, dass man quasi für alle diese Bytecodes so ein bisschen Maschinencode vorbereitet, also zu dem Zeitpunkt, wo man CPython baut.

Carl Friedrich

Und das dann, den vorbereiteten Maschinencode, also diese Templates, die werden dann so zusammen kopiert.

Carl Friedrich

Und die Idee von einem Template-JIT, die ist relativ alt.

Carl Friedrich

Aber was jetzt neu ist, und das ist eben dieser Copy-and-Patch-Ansatz, ist die Art und Weise, wie diese Templates hergestellt werden.

Carl Friedrich

Und das ist eben die Einsicht von einem Copy-and-Patch-Ansatz.

Carl Friedrich

Das ist ein Doktorand in Kalifornien, glaube ich.

Carl Friedrich

Hau Rang Su.

Carl Friedrich

Und die Idee davon ist, dass man eben den C-Compiler benutzen kann, um diese Templates vorzubereiten.

Carl Friedrich

Das hat viele Vorteile.

Carl Friedrich

Also man benutzt einen C-Compiler, man hat so kleine Funktionen in C geschrieben, benutzt den C-Compiler, um die dann nach Maschinencode zu übersetzen.

Carl Friedrich

Und das bedeutet insbesondere, dass normalerweise, wenn man einen JIT schreibt, dann muss man halt anfangen, für verschiedene Maschinenarchitekturen so ein Backend quasi von Null auf erstmal zu bauen.

Carl Friedrich

Und das ist halt super aufwendig, gerade wenn man viele Architekturen unterstützen will, wie das ja bei C-Button der Fall ist.

Carl Friedrich

Und die Idee von dem Copy-and-Patch-Ansatz ist, man benutzt den C-Compiler, um sich den Maschinencode erzeugen zu lassen und kopiert den dann so mit Memcopy quasi an die richtige Stelle und patcht dann eben noch so ein paar Stellen, wo man dann irgendwelche Konstanten noch so in den erzeugten Maschinencode so reinpatchen kann.

Carl Friedrich

Und dazu benutzt man linker Informationen, das ist wirklich so ein relativ kreativer Ansatz, um halt mit vergleichsweise wenig Aufwand, also ohne so ein komplettes Backend schreiben zu müssen, trotzdem relativ schnell relativ guten Maschinencode erzeugen kann.

Jochen

Ja, ich glaube, das ist irgendwie LLVM oder sowas da benutzt.

Carl Friedrich

Genau, das ist auch so ein bisschen das Problem.

Carl Friedrich

Also man braucht dann genau die richtige LFM-Version.

Ah, okay.

Carl Friedrich

Wenn man die nicht installiert hat, dann bringt einem auch die Flagg nicht.

Carl Friedrich

Man kann es dann trotzdem nicht bauen.

Carl Friedrich

Ich habe es tatsächlich noch nicht geschafft, das zu bauen, weil ich irgendwie das richtige LVM noch nicht hatte oder was.

Carl Friedrich

Aber ich glaube, die arbeiten da jetzt, also ich glaube, auf dem C-Python Main-Branch ist das jetzt auch irgendwie gelöst.

Carl Friedrich

Da werden halt dann Sachen schon eingecheckt oder also man muss dann nicht mehr genau die richtige Point-Version von LVM installieren.

Carl Friedrich

Aber habe ich jetzt noch nicht ausprobiert.

Johannes

Hat LLVM nicht auch so eine IR, eine Intermediate Representation, die auch irgendwie so abstrahiert ist?

Ja.

Ich hätte sowas mal gelesen.

Carl Friedrich

Im Prinzip haben das die meisten optimierenden Compiler, die haben halt irgendwie so eine Zwischendarstellung, wo sie halt quasi diese benutzen, um Code zu optimieren.

Carl Friedrich

Und bei LVM ist die deswegen relativ sichtbar, weil sie halt gute Tools haben, um die dann in so eine ASCII-Syntax zu printen und da auch wieder zu parsen und weiter zu verarbeiten.

Carl Friedrich

Aber ja.

Johannes

Auch viele technische Bauteile immer noch, ja, ja klar.

Carl Friedrich

Ja, es ist schon, also es ist jetzt schon so ein bisschen der JIT in 3.13, das ist schon wirklich eher so, das sind so vorbereitende Arbeiten.

Carl Friedrich

Also die Hoffnung ist eben, dass das dann so in den nächsten Versionen.

Carl Friedrich

Also ich meine, bisher ist das relativ unbefriedigend.

Carl Friedrich

Also wir haben einen JIT, der erzeugt ganz tollen Maschinencode, aber es wird halt nicht schneller.

Carl Friedrich

Also und es ist ja cool, aber halt irgendwie auch nutzlos.

Carl Friedrich

Also warum sollte man es machen, wenn sich die Performance halt dadurch gar nicht ändert?

Carl Friedrich

Aber die Hoffnung ist eben, dass sie dann, wenn sie jetzt weitere Optimierungen einbauen und bei diesem Patching, da kann man noch so ein paar extra Instruktionen dann weg optimieren.

Carl Friedrich

Das haben sie, glaube ich, jetzt im Main-Repository auch schon gemacht.

Carl Friedrich

Und die Hoffnung ist, dass dann eben, wenn 3.14 dann da ist, dass das erstens eben dann, dass sie so ein paar Bugs gefixt haben, weil hoffentlich eben ein paar Leute trotzdem die den experimentellen JIT halt mal ausprobieren und dann vielleicht Bugreports schicken.

Carl Friedrich

Und dass sie dann halt in der nächsten Version dann auch die Performance noch so ein bisschen verbessern können.

Carl Friedrich

Und insgesamt finde ich den Ansatz halt cool, weil er in Anbetracht der Tatsache, dass das C-Preisen-Team halt jetzt nicht so groß ist, was bezahlte Entwickler angeht.

Carl Friedrich

Ich finde es halt einen relativ pragmatischen Ansatz, wo sie ohne jetzt irgendwie, also was ich, Google V8 hat halt irgendwie, weiß ich nicht, 80 Leute oder so.

Das fand

Jochen

ich auch überraschend, ja.

Carl Friedrich

Und also, dass sie halt quasi mit der kleinen Anzahl an Festangestellten halt trotzdem mit diesem Ansatz vielleicht irgendwie recht pragmatisch irgendwo hinkommen können.

Jochen

Ja, ich meine.

Nein, ich finde das auch cool.

Johannes

Ich finde es auch generell cool, ohne dass es jetzt direkt eine Geschwindigkeitsverbesserung bringt.

Johannes

Einfach, weil, wie du gesagt hast, das ist eine wichtige Grundlage, um dann irgendwann die Verbesserungen rausholen zu können.

Deshalb.

Richtige Richtung, meiner Meinung nach.

Jochen

Ja, ich meine, wenn man jetzt nicht so viele Ressourcen hat, muss man sich halt überlegen, wie man die ökonomisch einsetzt.

Jochen

Und wenn man jetzt sieht, was vielleicht V8 irgendwie macht oder so und das dann halt einfach später, wenn sich rausgestellt hat, was da gut funktioniert, halt, dann die wesentlichen Teile nimmt oder so.

Jochen

Das wäre schon.

Jochen

Wobei, ich weiß nicht genau, ob da hat, gibt es irgendwo quasi den gleichen Ansatz, der dann schon gut funktioniert.

Jochen

Weil V8 ist ja dann wahrscheinlich doch eher noch ein deutlich komplizierter oder so.

Carl Friedrich

Sehr viel komplizierter.

Carl Friedrich

Also V8 hat halt nicht nur einen JIT, sondern irgendwie drei oder so.

Carl Friedrich

Oder vier.

Carl Friedrich

Also halt dann erstmal einen, der quasi schlechten Code sehr schnell erzeugt und dann etwas besser optimiert, sehr gut optimiert, dann haben sie noch einen komplett getrennten JIT für WebAssembly.

Carl Friedrich

Also das ist schon, und dann natürlich auch wirklich dann quasi richtige Backends für ganz viele verschiedene Hardware-Architekturen.

Carl Friedrich

Also das ist schon ein Aufwand, den meiner Ansicht nach mit dem jetzigen Funding das C-Python-Team halt erstmal so nicht hinkriegen kann.

Also.

Jochen

Transpilen nach einfach Python transpilen nach JavaScript.

Johannes

Ja, oder nach WebAssembly.

Jochen

Stimmt, das ist ja tatsächlich eine unterstützte Plattform, ja, wo man.

Johannes

Genau, es ist eine Tier 2-Plattform.

Carl Friedrich

Ja, genau, das stimmt.

Carl Friedrich

Also das ist so ein kleines Ding.

Carl Friedrich

Es gibt drei neue Plattformen in 3.13.

Johannes

Super spannend.

Johannes

Also ich mache, ich lese mal hier vor.

Johannes

Also die erste, die Tier 2-Plattform heißt WASIM32Wasi, also eine WebAssembly-Plattform.

Johannes

CF, weißt du, was Tier 2, weißt du, was die Tiere bedeuten?

Carl Friedrich

Ich glaube, irgendwie, die machen Aussagen darüber, wie viele Bildboards sie haben und was sie so versprechen an die Versionen.

Carl Friedrich

Da gibt es irgendwie ein Pep dazu.

Johannes

Ja, okay, gut.

Johannes

Also das kann man nachlesen.

Auf jeden Fall Tier 2.

Jochen

Ist das eine höhere Zahl besser oder eine kleinere?

Carl Friedrich

Nee, ich glaube, also eins ist am besten.

Johannes

Die niedrigeren Zahlen sind besser, oder?

Johannes

Je näher du am Ziel bist an der Spitze, umso besser ist es.

Johannes

Also WebAssembly ist jetzt Tier 2-Supported-Plattformen mit vielen Bildbots und viel Stabilität über die Version.

Johannes

Und es gibt zwei neue Plattformen, die, da war ich sehr überrascht, dass es die gibt, nämlich Android und iOS.

Johannes

Das sind Tier 3 Officially Supported Plattformen.

Johannes

War ja früher ein Riesenthema, ja, wenn man Android, wenn man Python auf Android ausführen wollte, oder noch schlimmer Python auf iOS.

Jochen

Das ging auch schon sehr lange.

Jochen

Das ging auch schon sehr lange.

Jochen

Ich meine, es ist ja auch kein Problem, aber es halt einfach den Interpreter auch kopilieren und so.

Jochen

Und da ging auch NumPy und so, das ging alles.

Jochen

Und es gab da so ein schönes, so eine schöne App namens Pythonista.

Jochen

Womit man, aber die hat natürlich eigentlich schon gegen die App Store-Regeln verstoßen und so.

Johannes

Also mein Beowulf-Cluster aus iOS, aus iPhone ist, äh.

Carl Friedrich

Was ist genau die Regel?

Jochen

Also die App Store-Regel ist, ähm, du darfst da nur Dinge installieren.

Jochen

Also kompilierter Code, ja, aber auch irgendwie C<unk>, C, irgendwie Objective-C und was war es noch?

Jochen

Ich weiß nicht, vielleicht eine Handvoll Spiele.

Johannes

Wichtiger ist doch die Regel, dass du keinen dynamisch erzeugten Code nachladen kannst.

Jochen

Ja, das genau.

Johannes

Weil dann kann Apple ja nicht mehr prüfen, ob du nicht irgendwelche schlimmen Programme nachlädst.

Dominik

Ihre Sandbox-Tests oder was auch immer die dann davon machen.

Jochen

Ja, eigentlich geht, und du konntest halt einen Pythonester, da kannst du halt auch so einfach quasi Python-Code auf deinem Telefon ausführen und das geht natürlich eigentlich nicht.

Ja, ist klar.

Jochen

Aber es ging dann doch.

Ja, aber bei Android

Johannes

wäre das ja prinzipiell gegangen.

Johannes

Nur weil halt das Tooling bisher immer sehr umständlich.

Johannes

Also ich weiß, dass es B-Ware gibt und es gab auch Kiwi und viele andere Ansätze schon, aber die waren schon immer sehr umständlich.

Jochen

Ja.

Johannes

Und wenn es jetzt nicht mehr so ist,

Carl Friedrich

deswegen ist es schon auch schon noch wichtig, dass es jetzt halt quasi von den C-Python-Entwicklern halt mit versorgt wird.

Carl Friedrich

Ich habe jetzt nochmal nachgeschaut, was genau die Tires bedeuten.

Carl Friedrich

Also Teil 1 ist halt das richtig gute Zeug, also so mac OS, Windows, Linux.

Carl Friedrich

Teil 2 braucht man halt irgendwie Buildboards und mindestens zwei C-Python-Core-Developer, die eben die Plattform unterstützen.

Carl Friedrich

Und wenn es da Buildboard-Failures gibt, dann werden C-Python-Releases dadurch blockiert.

Carl Friedrich

Und Thail 3 heißt eben Buildboard einen Core-Entwickler, aber wenn es da Bugs gibt, dann kann man trotzdem, also dann kann C-Python trotzdem released werden.

Carl Friedrich

Also es ist quasi so ein, wir geben uns Mühe, aber wenn jetzt irgendwie nur noch irgendwie einen bekannten Bug auf Android gibt, dann releasen wir halt möglicherweise trotzdem.

Johannes

Und der Core-Developer, der für Android und iOS zuständig ist, ist übrigens Russell Keith.

Der macht das ja auch schon lange.

Johannes

Der, der auch BWare schon gemacht hat, der das schon lange macht, das jetzt offenbar eben reingekriegt.

Jochen

Der diesen tollen Vortrag, die sind gehalten, hat irgendwie Black Swan-Events für, oder ich weiß gar nicht, wie der Titel von dem Vortrag hat.

Jochen

Aber da ging es halt genau darum, was ist könnte, was ist eigentlich, das sind die bedrohlichsten Geschichten, die jetzt Python noch zustoßen können.

Jochen

Und eines Szenario war halt so, ja, was ist, wenn irgendwie künftige Generationen gar nicht mehr vor so riesigen Desktop-Dingern sitzen oder so, ich kann das gar nicht verstehen, ich finde das total toll.

Jochen

Aber eher vielleicht auf Tablets oder Telefone gucken und dann einfach in Vergessenheit gerät, dass es Python überhaupt noch gibt, weil man Python gibt es halt nicht auf iOS oder so.

Jochen

Und dagegen sollte man vielleicht was tun.

Jochen

Und dann, ja, jetzt ist halt was passiert und das sieht ja schon ganz gut aus.

Carl Friedrich

Ja, ich habe das vorbei schon Studenten echt.

Carl Friedrich

Also ich habe halt, also ich mache eine Python-Einführung für alle, also da sitzen dürfen Informatiker nicht hin.

Carl Friedrich

Und das heißt, ich habe auch wirklich Studierende aus allen Fächern und jetzt nicht viele, aber da gibt es halt dann immer wieder Teilnehmende, die dann halt einfach auch nur ein Tablet haben.

Tier 1?

Carl Friedrich

Ja, also da sind wir noch nicht.

Carl Friedrich

Wir haben kein Tier 1 Gerät, genau.

Jochen

Ja, aber Jupyter Notebook hat es.

Carl Friedrich

Die haben dann halt entweder die Möglichkeit, das irgendwie über Google Collab zu machen, also ich mache alles mit Jupyter Notebooks, aber das ist halt dann immer so ein bisschen nervig mit die Input-Dateien hochladen und so Zeug.

Carl Friedrich

Und dann können die sich ins Rechenzent umsetzen, da hast du es auch installiert, aber es ist natürlich auch total nervig.

Carl Friedrich

Du musst immer deine Übungsaufgaben dann machen.

Carl Friedrich

Und so einen richtig, also richtig guten Jupyter-Support auf so einem iPad, gibt es halt einfach auch noch nicht.

Carl Friedrich

Also es ist schon einfach im Vergleich zu installiert Anaconda, dann ist alles in Ordnung, ist es halt schon einfach sehr frickelig.

Ja.

Johannes

Ich muss noch dazu sagen, nicht, dass wir jetzt hier Personen übergehen.

Johannes

Es gibt noch zweite Maintainer für diese Plattformen, neben Russell Keith McGee.

Johannes

Für Android gibt es noch den Peter Viktorin oder Peter Victorin oder wie auch immer man das aussprechen mag.

Carl Friedrich

Einer von den anderen Developers und

Johannes

für iOS gibt es noch den Delhi.

Dominik

Also wieder so eine tolle Name-Coding machen.

Dominik

Da muss ich ja nochmal kurz zum Sammelkartenspiel zurückkommen, was euch kurz angeguckt hat.

Dominik

Weil ich ja auf dem

Johannes

Jahr die neuesten Einträge von ganz

Dominik

Langer, der ja in diesem tollen Raple irgendwie dann ein kurzes Befehlchen eingeben konnte, um das Bild von, ich dachte, es wäre John Romero gewesen, was eigentlich Pablo Kalender Sagato war.

Dominik

Und dann hatten wir kurz dieses Thema.

Dominik

Und ich finde das eigentlich eine coole Idee, dass man demnächst auf den Pycons so Sammelkartenspiele ruhig macht.

Dominik

Wir bringen die erste Edition mit, dann machen wir den Python-Podcast das dann Thema an.

Johannes

Ich finde, die sollten das selbst verteilen und nur die Leute, die bei den Vorträgen waren, kriegen ja auch so eine Karte.

Carl Friedrich

Also ich glaube, man kann die verkaufen.

Carl Friedrich

Also das ist, glaube ich, ich vermute, dass das wirklich die Art und Weise ist, wie man endlich mal gutes Funding für Zehnplaten findet.

Johannes

Ja, dann liebe Zuhörer, schreibt uns, ob das die Wahrheit ist und dann müssen wir das

Dominik

wohl machen.

Dominik

Damals als NFTs neu waren gab es ja auch so Sachen, die dann diese Bilder dann gemacht haben und das dann als NFT im Bau.

Jochen

Ja, aber das mit den NFTs ist immer noch die Zukunft.

Ich weiß nicht.

Carl Friedrich

Der einzige Vorteil von AI ist, dass sie die NFTs verdrängt haben.

Johannes

Für einen ganz kurzen Moment waren Grafikkarten wieder billig und dann hat die AI zugeschlagen.

Tja, so ist es.

Johannes

Okay, also es gibt zwei neue Plattformen, Android und iOS und es ist eine großartige Sache,

Carl Friedrich

finde ich.

Carl Friedrich

Und WebAssembly.

Johannes

Und WebAssembly, ja genau, WebAssembly ist quasi aufgestiegen da.

Jochen

Da müssen wir auch um den

Johannes

M-Skripten zu quasi.

Carl Friedrich

Wir müssen noch über den anderen JIT reden.

Jochen

Ja.

Carl Friedrich

Es gibt nämlich zwei Jits in 3.13.

Carl Friedrich

Und der eine ist der coole, der quasi das irgendwann mal schneller machen soll, der aber quasi standardmäßig gar nicht eingebaut ist.

Carl Friedrich

Und dann gibt es aber den anderen, der quasi standardmäßig eingebaut ist, aber von ganz anderen Zweck.

Carl Friedrich

Ich glaube, in einer der Core.pY-Folgen ist Pablo Galino Sagato, über den wir gerade auch schon geredet haben, sehr stolz drauf, dass er quasi den ersten C-Python-Jit gemt hat und geschrieben hat.

Carl Friedrich

Und das ist nämlich der JIT, der benutzt wird, um besseres Profiling machen zu können.

Carl Friedrich

Und das funktioniert mit dem Linux Perf-Profiler.

Carl Friedrich

Und das Problem, wenn man jetzt so einen, also der Perf-Profiler ist eigentlich so ein Profiler für C.

Carl Friedrich

Also man kann halt sehen, was macht der Kernel, was macht der Linux-Kernel oder was machen eben auch die C-Programme, die im User Space laufen und man kann eben sehen, die und die C-Funktionen werden jetzt gerade so und so oft ausgeführt.

Carl Friedrich

Das ist so ein Sampling-Profiler, also der Profiling-Overhead ist sehr gering.

Carl Friedrich

Das Problem ist jetzt aber, dass wenn man quasi Python-Programme profilet, dann sieht man natürlich jetzt gar nicht, welche Python-Funktionen wie viel Zeit verbrauchen, sondern man sieht dann die ganze Zeit nur, dass halt irgendwelche Interpreter-Funktionen ausgeführt werden.

Carl Friedrich

Und da gibt es jetzt eben dieses neue Feature, den Perf-JIT.

Carl Friedrich

Und da ist die Idee, dass man so eine ganz, ganz kleine, irgendwie ein paar wenige Maschinencode-Instruktionen lange Funktionen generiert zur Laufzeit.

Carl Friedrich

Und für jede Python-Funktion eben genau eine so eine Funktion.

Carl Friedrich

Und das hat dann den Vorteil, dass Perf eben die ganzen Python-Funktionen voneinander unterscheiden kann.

Carl Friedrich

Wenn man eben nicht nur eine interpretierte Python-Code-Funktion dann sieht in Perf, sondern man sieht dann eben diese neu generierten Mini-Funktionen.

Carl Friedrich

Und dann gibt es irgendwie so einen Rückübersetzungsschritt, wo man dann eben sagen kann, okay, diese neue, neu generierte Assembly-Funktion an Adresse sowieso, die entspricht eben der Python-Funktion F, wie auch immer.

Carl Friedrich

Und so kann man dann eben mit Perf sehen, in welcher Python-Funktion man lange Zeit verbraucht hat.

Johannes

Das hört sich nach einem sehr umständlichen Weg an.

Carl Friedrich

Es ist erstaunlich umständlich, aber Profiling ist auch echt einfach ultra kompliziert.

Ja, gut, klar.

Carl Friedrich

Also es gibt ja irgendwie so eine große Sammlung an Profilern für Python für andere Sprachen, aber C-Profile hat halt einfach ein riesen Overhead.

Carl Friedrich

Dann gibt es verschiedene Sampling-Profiler für Python.

Carl Friedrich

Wie heißt dieser PySpy oder so?

Carl Friedrich

Der funktioniert, glaube ich, ziemlich gut.

Carl Friedrich

Habt ihr den mal benutzt?

Jochen

Nee, ich weiß gar nicht.

Jochen

Ich habe wieder vergessen, was.

Jochen

Ich habe mal irgendwas benutzt, auch ein Sub-Bon,

Johannes

der Hotspot hast.

Carl Friedrich

Aber Hotspot ist, glaube ich, eine UI nur, oder?

Carl Friedrich

Wo da die Samples herkommen, weiß ich nicht so genau.

Carl Friedrich

Ja, und dann gibt es also unseren quasi VM Prof, der ist aber nicht mehr so richtig maintained.

Carl Friedrich

Also auf iPhone schon, aber Ziphython nicht so richtig.

Gibt es auch Sampling?

Carl Friedrich

Also Sampling heißt halt, dass man quasi nicht jeden Funktionsaufruf mitschreibt, was halt sehr, sehr hohen Overhead hat, sondern einfach nur so tausendmal pro Sekunde halt guckt, welche Funktionen gerade auf dem Stack sind.

Carl Friedrich

Und dann sagt so statistisch gesehen, sind das die Funktionen halt, die dann viel Zeit brauchen.

Carl Friedrich

Und Perf ist halt auch so einer.

Carl Friedrich

Und der Vorteil von diesem Sampling-Ansatz ist, dass man den Profiling-Overhead eben beliebig klein machen kann.

Carl Friedrich

Man kann halt die Anzahl der Samples immer kleiner machen.

Carl Friedrich

Und wenn es dann nur noch 10 Samples sind, dann ist es halt quasi genauso schnell, wie es vorher auch war.

Carl Friedrich

Man hat aber auch schlechtere Informationen dann sozusagen.

Carl Friedrich

Also man kann dann quasi die Abwägung zwischen Genauigkeit der Informationen, die man hat und Overhead beliebig ausbalancieren.

Carl Friedrich

Und Perf funktioniert halt sehr gut, wenn man da gute Informationen darüber kriegt, was auf dem C-Level funktioniert.

Carl Friedrich

Aber die Information, welche Python-Funktion da jetzt gerade involviert ist, die geht halt verloren.

Carl Friedrich

Und die kann man dann eben wieder zurückkriegen mit diesem neuen Perf-Integration-Feature, das jetzt in 3.13 released wurde.

Carl Friedrich

Aber ist auf jeden Fall frickelig.

Carl Friedrich

Also ich glaube, auf Mac ist es ja auch total schwierig, weil man braucht halt so ausführbare Blöcke von Maschinencode braucht.

Carl Friedrich

Und Apple hat da halt auch einiges an Security-Features.

Carl Friedrich

Man muss dann quasi sicherstellen, dass man so einen Codeblock eben so hin und her wechselt zwischen, ich kann den Code-Block schreiben und ich kann ihn ausführen.

Carl Friedrich

Also man kann ihn nie gleichzeitig schreibbar und ausführbar haben, um eben so Security-Exploits unwahrscheinlicher zu machen.

Carl Friedrich

Und bis man das ganz genau richtig hingekriegt hat, das ist tricky.

Carl Friedrich

Wobei Perf ist eigentlich nur ein Linux-Projekt.

Carl Friedrich

Insofern habe ich glaube ich gerade Quatsch gesagt.

Achso, das geht.

Jochen

Ja, ich will mit Mac OS, ich glaube, im letzten Copy-By-Episode war auch irgendwie drin, dass der Memory Profiler Memory, den Pablo, der hat auf macOS nicht funktioniert, weil irgendwie sie die Maloc-Funktion irgendwie, also nicht die Modern haben.

Carl Friedrich

Von einer MacPhone zur nächsten.

Jochen

Ja, kann man auch schon mal machen.

Jochen

Warum nicht?

Carl Friedrich

Ja, ich finde es cool, dass es Leute gibt, die sich dann wirklich mit den Linkern auf allen Plattformen rumschlagen, um dieses Problem zu lösen.

Jochen

Ja.

Jochen

Ja, ja, Profiling, tja.

Dominik

Ja, das ist so Low-Level, das ist, sinkt dann eigentlich der Tier, das ist dann Tier 0, oder?

Dominik

Sorry, couldn't resist.

Dominik

Das ist interessant.

Dominik

Aber was ist denn das nächste Thema auf unserer Liste?

Jochen

Ja, na gut, dann, was jetzt auch drin ist, das wurde auch viel diskutiert immer, ist halt, ja, es nennt sich jetzt Free Threading früher NoGill irgendwie, dass man halt optional den Gill ausschalten kann.

Jochen

Ist auch eine, muss man Compiler-Flex setzen und dann neu kompilieren oder halt sich entsprechendes Binary halt via, was auch immer, wie man halt so Python installiert, halt das damit installieren und dann kann man das benutzen.

Tja, also.

Dominik

Wie macht das denn überhaupt, der Gil?

Jochen

Oh.

Jochen

Ja, es sorgt eigentlich im Grunde dafür, dass halt der Python immer nur auf einer CPU läuft, wenn ich das jetzt mal ganz.

Johannes

Aber das ist ja nur eine Auswirkung, das ist ja nicht das Ding.

Jochen

Ich glaube, das ist tatsächlich das, was

Johannes

kann auf vielen CPUs laufen, nur halt immer nur auf einer gleichzeitig.

Jochen

Ja, immer nur auf einer gleichzeitig.

Jochen

Genau, genau, das möchte ich.

Jochen

Ja, ja, genau.

Johannes

Aber das ist ja nur eine Auswirkung, das ist ja nicht der Grund, warum man das macht.

Jochen

Der Grund, warum man das macht, ist, dass halt viele Operationen, ja, gerade was Memory Management angeht, halt man dadurch halt nicht, da muss man halt nicht locken, was man ansonsten halt müsste, weil wenn man den Reference-Counter von irgendeiner Datenstruktur erhöht oder.

Carl Friedrich

Also ganz allgemein, die ganzen Datenstrukturen sind halt erstmal nicht Thread-Safe.

Johannes

Und das bedeutet, dass wenn man die von mehreren Threads aus benutzt, wird alles kaputt, dass die dann kaputt gehen können.

Johannes

Insbesondere das Reference-Cock.

Jochen

Um das zu verändern, müsste man halt locken und wenn man lockt, dann wird alles so langsam, dass man keinen Vorteil mehr davon hat, dass man mehrere CPUs hat.

Jochen

Also ich glaube, die ersten Versuche, das war, dass das Projekt hieß irgendwie Galactomy oder so.

Noch ein älteres.

Carl Friedrich

Also so alle paar Jahre kommt mal jemand an locker.

Dominik

Doch bei 1.1 wieder nicht genau aufgepasst.

Carl Friedrich

Ja, genau, also es war wirklich so 1.6 oder irgendwie sowas ganz frühes, wo das dann.

Jochen

Ja, kann gut sein, aber da war das auch, also an den Versuch erinnere ich mich noch und da war es halt so, dass wenn man das einfach nur versucht hat zu locken und auch nicht irgendwie was Kompliziertes gemacht hat, sondern einfach mal probiert hat, es nicht ganz so langsam hinzukriegen, dann war irgendwie Performance so Faktor 40 weniger und ja, dann hat man es auch.

Carl Friedrich

Die Single Performance.

Jochen

Und dann hat man es runtergekriegt mit Tricks auf 20, äh Faktor 20 irgendwie schlechter, aber das ist halt immer weit noch sehr, sehr weit entfernt von irgendwie, man will das verwenden, weil wenn das so eine Auswirkung hat, dann lohnt sich das eher nicht.

Dominik

Aber was macht man denn dann mit den ganzen Objekten, die da irgendwo rumliegen?

Dominik

Wie räumt man die denn dann weg?

Was ich nicht mehr brauche.

Jochen

Du meinst Garbage Collector?

Dominik

Ja.

Jochen

Gut, das ist nochmal ein anderes, da weiß ich gar nicht, ob der.

Dominik

Aber der Reference-Count ist ja dafür da, oder?

Dominik

Dass man das wieder wegräumen kann, wenn es auf Nullfällt.

Carl Friedrich

Im Garbage Collector hatten die quasi bei diesen Galactomy und so versuchen, auch nichts geändert.

Carl Friedrich

Was sie gemacht haben, ist jedem Objekt einen Log zu geben.

Carl Friedrich

Und immer wenn ein Thread mit dem Objekt eben interagieren wollt, insbesondere wenn eben der Reference-Count verändert wird, musst du halt dir erstmal das Log holen für das Objekt.

Carl Friedrich

Und weil halt ständig, um irgendeine Operation mit dem Objekt machen zu können, du halt ständig an dem Reference-Count rum operierst, ja, musst du halt ständig auf das Log warten und das hat halt die bisherigen Versuche, den Gill zu entfernen, einfach sehr, sehr teuer gemacht.

Carl Friedrich

Also die Single Core Performance eben, äh, die Single-Thread-Performance eben komplett ruiniert.

Dominik

Und jetzt kann es doch dann eigentlich sein, dass so ein Objekt dann einfach weggeräumt wird, obwohl es noch einmal ist.

Carl Friedrich

Jetzt wird es super kompliziert.

Carl Friedrich

Also so, also wir haben jetzt, genau, es gibt den Gill, der Gill verhindert, dass mehr als ein Thread-Python-Code ausführen kann.

Carl Friedrich

Mehr als, also gleichzeitig auf einem Core.

Carl Friedrich

Jetzt kommt eben der nächste Versuch und das ist von Sam Gross bei Meta, über viele Jahre lang eben probiert worden.

Carl Friedrich

Und der hat einige sehr clevere neue Ideen da reingebracht, um zu versuchen, eben die Verlangsamung für Single-Thread-Performance, soweit es geht, zu minimieren.

Carl Friedrich

Und da gibt es eben so eine ganze Bandbreite an Optimierungen, womit er dann eben versucht, genau diese Probleme in den Griff zu kriegen.

Carl Friedrich

Und eine davon ist eben die Beobachtung, dass die allermeisten Objekte, die werden halt trotzdem nur von einem Thread benutzt.

Carl Friedrich

Also wenn ich halt eine Funktion habe, die irgendwie eine Liste erstellt und da was reinappendet und so weiter, selbst wenn auf ganz vielen anderen Threads halt noch Sachen laufen, kommt halt kein anderer Thread erstmal standardmäßig an diese Liste ran.

Carl Friedrich

Das heißt, die erste Optimierung ist zu sagen, für die ganzen lokalen Objekte, die ich also nur von einem Thread überhaupt jemals anfasse, muss ich für das Updaten der Reference Counts eben nicht locken.

Carl Friedrich

Also das ist quasi so die wichtigste Optimierung.

Carl Friedrich

Genau, das heißt Biased Reference Counting, weil quasi dafür gesorgt wird, dass man eben nicht gescherte Objekte, die nur von einem Thread eben erreichbar sind, dass man da eben das Locking quasi sein lassen kann.

Carl Friedrich

Jetzt gibt es aber natürlich eine ganze andere Klasse an Objekten, die werden halt von ganz vielen Objekten, von ganz vielen verschiedenen Threads angefasst.

Carl Friedrich

Also halt alles, was die ganzen Build-Ins, also None, die ganzen Typen.

Carl Friedrich

Und dafür gibt es dann also wieder einen ganz anderen Ansatz.

Carl Friedrich

Und da ist nämlich die Idee, dass man da halt sagt, diese Objekte, die können eh nicht sterben.

Carl Friedrich

Also sowas wie None.

Warum nicht wegräumen?

Carl Friedrich

None gibt es halt einfach immer.

Carl Friedrich

Und das gilt halt für ganz, ganz viele andere Arten von Objekten auch.

Carl Friedrich

Die meisten Typen gibt es halt immer und die werden dann so unsterblich gemacht.

Dominik

Ist das dann ein Singleton?

Carl Friedrich

Also None ist auch ein Singleton, ja, aber das ist nicht das einzige Kriterium.

Carl Friedrich

Man kann sich schon noch vorstellen, dass es Singletons gibt, die halt vielleicht auch sterben könnten, aber also die man vielleicht wegräumen will.

Carl Friedrich

Aber es gibt also die ganzen eingebauten Sachen, die werden einfach nie, also die werden halt nie garbage collected und deswegen kann man da eben auch sagen, da kriegt jetzt der Reference-Count irgendwie so einen speziellen Flag und dann erhöht und senkt man den Reference-Count eben auch nicht.

Carl Friedrich

Und dann muss man die auch wieder nicht locken.

Carl Friedrich

Und dann gibt es noch den dritten Ansatz und das ist das sogenannte Deferred Reference Counting und da verstehe ich die ganzen Details auch nicht komplett.

Carl Friedrich

Aber da ist die eben die Idee, dass man eben das Erhöhen und senken das Reference Count nicht mehr die ganze Zeit up to date macht, um eben zu ver.

Carl Friedrich

Also da geht es um Objekte, die so dazwischen sind, also die von einem mehr als einem Thread erreicht werden können.

Dominik

Also man erhöht, aber man reduziert das nicht oder beides nicht?

Carl Friedrich

Ich glaube beides nicht.

Carl Friedrich

Also, und dann, das sorgt aber dafür, dass wenn der Reference-Count null wird, dann kann man die auch nicht sofort einsammeln, sondern da muss man eben warten und dann warten, bis alle Threads zu irgendeinem wohldefinierten Punkt kommen und dann kann man schauen, ob es nicht noch irgendwelche References in den Stack-Frames gibt oder so, die dann noch dazugezählt werden müssen.

Carl Friedrich

Deswegen eben deferred.

Carl Friedrich

Und nur wenn man da dann eben überall nachschaut hat und feststellt, oh, okay, das Objekt, das ist jetzt wirklich auch von keinem Frame-Objekt mehr erreichbar, dann kann ich das wirklich wegräumen.

Carl Friedrich

Und das hat auch komplizierte Interaktionen mit dem Memory Allocator.

Carl Friedrich

Da wechselt nämlich die Free-Threading-Version auch zu Meme-Aloc, das ist so ein von Microsoft geschriebener C-Memory-Alocator, der eben auch besonders gut mit Multithreading interagiert und da wird auf eine für mich noch nicht ganz verständliche Art und Weise eben mit besonderen Meme-Maloc-Features dann erreicht, dass genau das Richtige passiert.

Carl Friedrich

Aber genau das Richtige passiert, das ist mal toll.

Jochen

Ja.

Johannes

Ja, aber das hört sich jetzt mal ein bisschen an wie so Eventual Consistency für den Reference Counter.

Carl Friedrich

Ich glaube, das ist genau.

Johannes

Im Endeffekt ist das ja, ist die Zahl, die in dem Reference Counter drinsteht, ja auch nur dann wichtig, wenn es eine Null ist.

Carl Friedrich

Also Vorbemerkung ist, das gilt alles nur für Objekte, die eben von mehr als einem Thread erreicht werden können.

Carl Friedrich

Ja, okay, klar.

Carl Friedrich

Aber für die hast du absolut recht, da ist eben da eine Zahl drin, die nicht unbedingt wirklich alle References von allen Threads dann widerspiegelt.

Carl Friedrich

Und um das Objekt dann wirklich wegräumen zu können, muss man dann halt nochmal nachschauen, ob das wirklich alles so gestimmt hat.

Johannes

Genau, aber für mich der Knackpunkt, an dem, dass das überhaupt funktionieren kann, ist, dass die Zahl, die tatsächlich in dem Reference-Count drinsteht, die meiste Zeit ja uninteressant ist.

Johannes

Solange die Zahl größer als 0 ist, ist der exakte Wert nicht wichtig.

Johannes

Sondern es wird erst dann wichtig, wenn der exakte Wert 0 erreicht.

Dominik

Also so ein bisschen so, als wenn du die Box aufmachst und guckst, ob die Katze noch lebt.

Johannes

Ja, aber du musst es ja nur aufmachen, wenn du es wirklich wissen willst.

Johannes

Solange es dich nicht interessiert, ob die Katze noch lebst, kannst du außen den Schalter drücken oder nicht drücken, so viel du willst.

Johannes

Und ich glaube, das macht, also das ist für mich in meinem Kopf so ein bisschen der Kern an der Sache, warum das überhaupt funktionieren kann.

Johannes

Weil wir nur zu sehr wenigen Zeitpunkten wirklich den exakten Wert wissen müssen, weil wir nur zu wenigen Zeitpunkten wirklich draufschauen müssen und sagen müssen, okay, jetzt muss ich wissen, ob die Zahl wirklich null ist oder nicht.

Carl Friedrich

Ich glaube, Eventual Consistency ist auf jeden Fall ein super Gedankenmodell, weil, also Eventual Consistency wird ja auch quasi aus den gleichen Gründen eingeführt.

Carl Friedrich

Also natürlich kann ich, will ich eigentlich, ist es besser, wenn meine Information halt die ganze Zeit consistent ist.

Carl Friedrich

Aber das hat halt im Datenbankbereich dann auch entsprechende Nachteile, Performance-Nachteile.

Johannes

Und gerade in verteilten Datenbanken.

Carl Friedrich

Genau.

Carl Friedrich

Und quasi aus den gleichen Gründen führe ich halt quasi im Fehl, also von einem ganz anderen Maßstab natürlich, aber werden die Deferred Reference Counts verwendet.

Ja, cool.

Johannes

Super coole Sache.

Carl Friedrich

Genau.

Carl Friedrich

Aber es ist halt, wie gesagt, auch bisher noch experimentell und standardmäßig nicht eingebaut.

Carl Friedrich

Da gibt es auch noch so ein paar Nachteile.

Carl Friedrich

Die Single-Thread-Performance ist auch quasi in der Free-Threading-Version schlechter im Moment.

Carl Friedrich

Ich glaube, vor allem, weil sie im Moment eben noch dieses Bytecode-Rerriting, wo wir vorhin in der Sektion drüber gesprochen haben, noch abschalten müssen.

Carl Friedrich

Eben aus dem Grund, dass, wenn ich quasi mehr ein Thread als ein Thread habe, der die gleiche Python-Version ausführt und alle wollen jetzt den Bytecode umschreiben, dann habe ich da eben auch wieder quasi Mutationen derselben Datenstruktur von einem Thread und da will ich das wirklich nicht immer locken und deswegen haben sie das bisher einfach abgeschaltet in der Free-Threading-Version.

Carl Friedrich

Und das sorgt dann eben für, weiß ich nicht, 10%, 20% Verschlechterung der Signal-Treading-Performance ist.

Carl Friedrich

Oder es gibt eben ein anderes Problem ist, dass es eben einfach ganz, ganz viel Python-Code, der so in der Welt ist, in irgendwelchen Bibliotheken, der einfach nicht Thread-Safe ist.

Carl Friedrich

Bisher konnte man sich halt so ein bisschen immer so durchmogeln mit der Tatsache, dass meistens man halt vom Girl geschützt ist.

Carl Friedrich

Und so viel Multithreaded Python-Code gibt es halt auch oft nicht.

Carl Friedrich

Und deswegen finden wir jetzt wahrscheinlich die nächsten zehn Jahre Locking-Bugs in allen PyPI-Bibliotheken.

Carl Friedrich

Und für die C-Extensions gilt das natürlich erst recht.

Johannes

Ja, aber die C-Extensions hatten ja vorher schon die Möglichkeit, den Tintkill freizugeben.

Johannes

Also NumPy zum Beispiel.

Carl Friedrich

Ja, sobald ich quasi was mache, was dann wirklich weit weg von jedem Python-Objekt.

Johannes

Genau, was aus dem Python Memory Management rausgeht, der

Dominik

kannst du schon mit den Food-Sticken gar nicht sprecher kaputt hauen.

Johannes

Ja, gut, okay, Footguns, ich meine.

Carl Friedrich

Also genau, die große Matrix-Multiplikation, die NumPy macht, die hat halt mit Python dann nichts mehr zu tun.

Carl Friedrich

Und die konnte halt dann auch schon auf dem extra Core dann den Lüfter heiß laufen lassen.

Carl Friedrich

Aber genau.

Johannes

Ja, das sind die wenigsten Operationen, das ist mir schon klein.

Johannes

Die prinzipielle Möglichkeit gab es vorher schon.

Johannes

Wenn ich mein eigenes Memory Management mache, brauche ich auch, bin ich nicht auf den Gelände.

Jochen

Ja, aber da hat man dann, da hat man sich dann ja auch wahrscheinlich dann schon Gedanken drüber gemacht, wie man das dann tut, ohne dass es kaputt geht.

Jochen

Oder wenn man es falsch gemacht hätte, wäre es schon aufgefallen.

Jochen

Aber ganz viel von dem, wo man sich keine Gedanken gemacht hat, das wird dann jetzt wahrscheinlich irgendwann auffallen, dass das nicht ganz richtig ist.

Carl Friedrich

Das auch in der Standardbibliothek gibt es einfach ganz viele solche Stellen.

Carl Friedrich

Also wir hatten heute so einen Bugreport.

Carl Friedrich

Also es gibt das Line-Cache-Modul, das kennt keiner, weil man das quasi selber nie benutzt.

Carl Friedrich

Das ist quasi dafür da, dass wenn ich Tracebacks kriege, dass die Source-Code-Zeilen halt quasi aus den Python-Dateien geladen werden zum Anzeigen.

Carl Friedrich

Und das wird gecached, damit ich nicht jedes Mal die Dateien eröffnen muss.

Carl Friedrich

Und wenn ich jetzt aber quasi Python-Code zu Laufzeit erzeugt mit Exec oder so, dann kann ich quasi auch da dann in Linecache so Sachen reinschreiben.

Carl Friedrich

Und die will ich aber vielleicht auch wieder löschen, damit eben der Cache nicht mehr und mehr Speicher verwendet.

Carl Friedrich

Und dann hatten wir einen Bug von Simpai oder so, die schreiben da eben so Sachen in den Linecache rein und löschen die dann auch wieder.

Carl Friedrich

Und dann stellt sich halt raus, dass der Lioncache nicht Thread-Safe ist.

Carl Friedrich

Also wenn ich das quasi von mehreren Threads mache, dann kriege ich halt irgendwelche komischen Exceptions von irgendwelchen internen Linecache-Funktionen, von denen ich noch nie gehört habe.

Carl Friedrich

Und ja, also wenn, klar, das ist jetzt alles schon extra ultra speziell, aber so Stellen wird es halt in der Standardbibliothek auch noch an anderen Plätzen geben, dass man halt dann feststellt, oh, okay, es gibt hier Python-Code.

Carl Friedrich

Da hat halt noch nie jemand drüber nachgedacht, was passiert eigentlich, wenn ich das auf vier Falls gleichzeitig ausführe.

Johannes

Ja, und eigentlich sollte man sich ja da auch keine Gedanken, beziehungsweise es ist ja der Ansatz, dass man sich keine Gedanken drüber machen soll.

Johannes

Viele andere Sprachen lösen das Problem halt auf eine andere Art und Weise, indem sie sagen, da muss jetzt halt selber explizit drüber nachdenken.

Carl Friedrich

Also man wird da der

Johannes

Ansatz, dass man Python nicht machen muss.

Carl Friedrich

Man wird da in Python schon drüber nachdenken müssen.

Carl Friedrich

Also wenn du halt sowas hast, wie du hast irgendein globales Dictionary und das wird jetzt von zwei Threads mutiert und ich habe aber in beiden eine Iteration darüber, dann sind halt wahrscheinlich die Invarianten der Schleife kaputt, egal ob die Datenstruktur jetzt also klar, die Datenstruktur soll nicht kaputt gehen, aber ich kann halt trotzdem dann plötzlich den Key verlieren, den ich erwarte, dass da noch in einem Dictionary drin ist.

Johannes

Ja, auch diese ganzen Probleme, die bei Multithreaded Programming auftreten, also allein wenn ich irgendeine Variable habe, die ich inkrementieren möchte, dann da muss ich ja schon irgendwie einen Mechanismus haben, der Multithreading ermöglicht, aber das ist ja nochmal eine ganz andere Ebene.

Carl Friedrich

Ja, ja, klar, und das ist auch, also solche Bugs haben wir definitiv auch schon gesehen.

Carl Friedrich

Also sowas wie

Johannes

sind ja auch leicht.

Johannes

Also ich meine, die hat man ja sofort.

Carl Friedrich

Ja, also sowas wie Self-Punkt-Counter plus gleich eins, das ist halt nicht Atomic in der Free-Threading-Version.

Carl Friedrich

Also wenn ich da mehrere Threads habe, die das machen, dann können halt komische Sachen passieren.

Dominik

Konnte doch.

Aber da gab es

Johannes

auch früher schon so gab es auch früher schon so Stolperfallen, wo manche Sachen in Python Atomic aussahen und es dann aber irgendwie

doch nicht.

Carl Friedrich

Genau, also viele von diesen Bugs, die sind quasi bisher auch schon, das sind jetzt quasi keine Bugs, die nur in Free Threading wirklich vorhanden sind.

Carl Friedrich

Das sind quasi latente Bugs, die es schon immer gibt, die auch quasi in der ganz normalen Girl-Version von Python Bugs sind und Crashes verursachen können.

Carl Friedrich

Nur bisher waren die quasi einfach viel Unwahrscheinlicher, dass man die wirklich dann auch trifft, diese Bugs.

Carl Friedrich

Aber dadurch, dass es jetzt eben mehr Leute versuchen werden, mit Multithreading in der Free-Threading-Version Programme dann schneller laufen zu lassen, wird die Wahrscheinlichkeit, dass man diese Bugs halt dann auch quasi in echt sieht, die geht halt hoch.

Carl Friedrich

Das heißt, also ja, ich meine das ernst.

Carl Friedrich

Wir werden jetzt wahrscheinlich zehn Jahre lang Bugs in allen Bibliotheken finden, die irgendwas mit Threading zu tun haben.

Johannes

Ja, und es gibt ja auch keine so richtigen atomaren Operationen in Python.

Johannes

Oder keine, denen das ansieht, dass sie atomar sind.

Genau, also das ist.

Johannes

Das macht das Reasoning so ein bisschen schwierig.

Carl Friedrich

Absolut.

Carl Friedrich

Und das ist ja auch eine der großen Schwierigkeiten des Free-Threading-Qu-Projekts.

Carl Friedrich

Dass sie sich quasi bei allen eingebauten Containern, so wie Listen und Dictionaries und so weiter, jetzt überlegen müssen, welche der Methoden wollen wir eigentlich als Atomar verstanden haben und welche halt dann auch nicht.

Wann erkennt man das?

Carl Friedrich

Das erkennt man nicht.

Carl Friedrich

Ich glaube, das wird dann implementiert dann.

Johannes

Ja, gut, klar, also das muss man nachlesen, aber ja.

Carl Friedrich

Aber die Entwickler, die quasi Free Thrilling implementieren, die müssen sich eben wirklich bei jeder Methode dann Gedanken drüber machen.

Carl Friedrich

Also List append ist halt Atomic, aber ListXtend bin ich mir schon mal nicht mehr so sicher.

Carl Friedrich

Wenn das, was ich dann als Argument von Xtend reinreiche, wenn das selber ein Iterator ist und da halt dann irgendwie mit einem Generator irgendwie Python-Code ausgeführt wird, dann kann das halt auch eine Weile dauern, bis ich dadurch bin.

Carl Friedrich

Und in der Zwischenzeit können natürlich andere Threads dann laufen und irgendwelchen Quatsch produzieren.

Johannes

Und jetzt machen wir uns auf einmal Gedanken über Transaktionen oder über Transaktionsmanagement.

Johannes

Und das ist natürlich auf Sprachebene was sehr Spezifisches.

Carl Friedrich

Um die Frage zu beantworten, was für einen Atoman-Counter ich benutzen kann, da gibt es irgendwie Eitertools.counter oder so, heißt es, glaube ich.

Carl Friedrich

Und das gilt wirklich als, also das ist die Threat-Safe-Variante, um einen Atoman-Counter in Python zu haben.

Johannes

Also hätte ich jetzt nicht gewusst.

Carl Friedrich

Ich auch nicht, aber wir hatten halt Bugreports, die gesagt haben, self.x geht es gleich eins, geht halt nicht.

Johannes

Ja, genau.

Johannes

Ich erinnere mich noch, das habe ich vor Jahren mal diese Meinung vertreten, dass das Global Interpreter Log mich davor schützt, dass ich X plus gleich 1 machen kann, so viel ich will.

Johannes

Und dann haben wir im Chaos of an einem Abend das einfach mal ausprobiert und es stellte sich als falsch raus, die Annahme, weil man eben sehr schnell falsche Zahlen rauskriegen kann.

Sorry, guck mal.

Johannes

Ja, das ist selbstverständlich.

Carl Friedrich

Okay, also das komplette, wie heißt das, Insider-Baseball.

Carl Friedrich

Also das hat sich geändert in den letzten Python-Versionen, also in den letzten C-Python-Versionen.

Carl Friedrich

Du hast absolut recht, dass quasi, also ursprünglich war die Regel, ein Bytecode ist Atomar.

Carl Friedrich

Und aber theoretisch kann ich nach jedem Bytecode eben einen Thread-Switch haben.

Carl Friedrich

Und sowas wie das erwähnte Beispiel Servung X plus gleich 1, das sind eben mehrere Bytecodes, das heißt, da kann ich dazwischen einen Thread-Switch haben und entsprechend ist das nicht atomar.

Carl Friedrich

In einer der letzten Versionen, ich weiß nicht, 3.12 vielleicht oder so, haben sie quasi in C-Python die Bytecodes, wo man Thread-Switches machen kann, also in der regulären Gill-Version, stark reduziert.

Carl Friedrich

Und es gibt jetzt eben nur noch ganz, ganz wenige Bytecodes, wo wirklich dann Switches stattfinden können.

Carl Friedrich

Das sorgt dafür, dass die quasi beobachtbare Atomarität zunimmt.

Carl Friedrich

Das heißt, plötzlich in 3.12 war dieses Counterbeispiel Atomar.

Carl Friedrich

Und das ist natürlich total schlecht, weil wenn man die Community darauf vorbereiten will, dass jetzt irgendwann mal der Guild entfernt wird und man quasi mit Thread-Switches an viel mehr Stellen rechnen muss, ist es halt schlecht, wenn man in der Version davor dafür sorgt, dass viel weniger Thread-Switches an viel vorhersagbaren Stellen, nämlich nur am Ende von der Schleife oder sowas, stattfinden kann.

Carl Friedrich

Also das finde ich, also ich meine, klar, dieses Reduzieren der Thread-Switches, das erhöht halt wieder die Single-Threading-Performance, das war der Grund, warum sie das gemacht haben.

Carl Friedrich

Aber ich finde es halt unstrategisch.

Carl Friedrich

Also ich glaube, wenn du in 3.12 das mit dem Counter nochmal ausprobieren würdest, dann würdest du, das wäre es quasi nicht mehr beobachtbar.

Carl Friedrich

Mach lieber gleich in der Three in der No-Gail-Version.

Johannes

Ja, gut, aber damit müsste es ja gehen.

Carl Friedrich

Damit müsstest du es kaputt kriegen können, ja, würde ich hoffen.

Johannes

Ja, gut, ja, kaputt kriegen.

Ja, also.

Johannes

Ich habe jetzt leider keine No-Gail-Version hier kompiliert, deshalb muss ich leider.

Carl Friedrich

Aber ich glaube, da gibt es auch zum Beispiel so, also es gibt Packages davon.

Jochen

Ja, ja.

Jochen

Also bei UV habe ich jetzt gesehen, gibt es das auf jeden Fall.

Jochen

Kannst du ein

Dominik

paar UV beisen in Zeit.

Carl Friedrich

Genau.

Carl Friedrich

Und in PyNF.

Carl Friedrich

In PyNF weiß ich nicht, aber in Ubuntu, in der, in der, in dem Dead Snake-PPA

gibt es das auch.

Jochen

Ja, aber ich meine, also ehrlich gesagt, ich weiß nicht, habt ihr jetzt alles schon einen Anwendungsfall, wo ihr unbedingt das mal ausprobieren wollt, ob da nicht alles viel schneller wird?

Jochen

Weil ehrlich gesagt, ich habe das dann nicht so wahnsinnig viele Dinge.

Carl Friedrich

Ja, das liegt aber halt vor allem auch daran, dass wir daran gewöhnt sind, das nicht zu brauchen.

Carl Friedrich

Ich glaube schon, dass es dann einiges gibt, wo das halt schon irgendwie auch klar, man muss dann sich irgendwie umgewöhnen und vielleicht gibt es auch ein paar schöne Bibliotheken, die das halt alles ein bisschen weniger gefährlich machen, dass man so ein paar schöne Abstraktionen auf den Threads hat.

Carl Friedrich

Aber ich denke schon, dass wir an einen Punkt kommen können, wo man dann eben sagen kann, ja, also früher hätten wir vielleicht Multiprocessing genommen und es wäre nervig und frickelig gewesen, das dann gut hinzukriegen und jetzt nimmt man halt Threads und es funktioniert gut.

Johannes

Ja, das ist halt auch, mit Threads programmieren ist halt auch was Gefährliches.

Johannes

Da gibt es ja, also ich meine, selbst wenn diese Operationen alle atomar sind und selbst wenn das so ist, dann gibt es ja immer noch diese ganzen Probleme und Deadlocks und Race Conditions und lauter Zeugs und das ist einfach eine schwierige Sache.

Johannes

Ich hab kurz, ich habe eben nachgeguckt, es gibt in PiEnv eine 3.13.0 Version und es gibt eine 3.13.0T Version.

Das ist ein Free-Threading.

Johannes

Und das werden die beiden unterschiedlichen sein.

Johannes

Gut, dann muss ich jetzt Boomer installieren.

Carl Friedrich

Genau, und dann muss man ein altes Skript vom Chaos drauf finden.

Johannes

Es war es war nicht so ein beeindruckendes Testharnes.

Johannes

Es war einfach nur zwei Threads, die eine Variable gleichzeitig erhöht haben.

Johannes

Also das kann man relativ leicht wieder rekonstruieren.

Carl Friedrich

Ja, ich sehe das auch so.

Carl Friedrich

Also jetzt, ich bin, ich habe so sehr gemischte Gefühle, was das Freethrin angeht.

Carl Friedrich

Einerseits ist es halt cool, weil endlich diese endlose Diskussion aufhört auf der einen Seite.

Carl Friedrich

Ja, ja, gut.

Carl Friedrich

Und wenn halt auch wirklich jemand mal Geld in die Hand genommen hat und das richtig gut macht.

Carl Friedrich

Also richtig gut, klar, da kann man dann auch Details kritisieren, aber so die Tatsache, dass jetzt eben irgendwie einige Leute von Meta dafür bezahlt werden, das halt wirklich zu machen und auch quasi in C-Py den Aufwand betreiben, das in C-Python reinzukriegen, was ja auch wirklich immer viele Diskussionen und viel Überzeugungsarbeit und viel Debugging und sehr, sehr viel Aufwand sind dafür nötig.

Carl Friedrich

Und ich finde es erstmal gut, dass das halt jetzt passiert und dass quasi auch die Community mitgenommen wird und irgendwie verschiedene, also es gibt ja jetzt wirklich auch schon einige an Bibliotheken, die jetzt mitziehen und gucken, dass sie halt auch Free-Threading-Versionen, dann Binaries auf Pipe PI releasen und so weiter.

Carl Friedrich

Und das ist schon wirklich gut.

Carl Friedrich

Klar, auf der anderen Seite sehe ich, dass, ich denke wirklich, das wird eine Riesenumstellung.

Carl Friedrich

Und das wird schon auch, was die Bugs angeht und was die Eingewöhnungszeit angeht und sowohl in den Bibliotheken als auch in der Sprache selbst.

Carl Friedrich

Also ich habe mal so einen, ewig habe ich mal einen Vortrag gehört von einem der Sun JVM-JIT-Entwickler, der auch an dem ganzen Laufzeitsystem und dem Multithreaded Garbage Parallel Garbage Collector und so gearbeitet hat und der meinte so, im Garbage Collector findet man halt zehn Jahre lang Multithreading-Bugs.

Carl Friedrich

Und die werden halt immer schwieriger, die zu finden.

Carl Friedrich

Und ich weiß halt nicht so genau, ob wir darauf so richtig gefasst sind.

Also das

Jochen

hat Python ein bisschen Zeit, noch populärer zu werden, dann steigt die Wahrscheinlichkeit, dass man die Bugs findet.

Jochen

Das ist doch gut.

Jochen

Dann kann man auch schwierige Bugs finden.

Johannes

Es ist jetzt schon auf dem Tio B-Index ganz oben.

Johannes

Also ich sehe es so ein bisschen, hat ein bisschen eine andere Perspektive.

Johannes

Ich glaube, dass dieses die Möglichkeit, Multithading zu machen, eröffnet eine ganz neue Klasse an Programmen, die man mit Python bisher nicht schreiben konnte.

Dominik

Spiele wollt man bauen.

Johannes

Ja, Spiele sind eine, ja, aber da hast du dann immer noch die Performance-Differenz.

Johannes

Aber gerade so verteilte Anwendungen.

Johannes

Das, was Meta macht, das, was halt die großen Anbieter machen, wenn man sich mal diese Erlangen-Sachen anguckt aus den 80ern, die einfach viele Dinge gleichzeitig über einen Computer laufen lassen müssen, weil es nicht anders geht, da sieht man diese Klasse von Anwendungen.

Johannes

Das ist die eine Seite.

Johannes

Die andere Seite ist halt, dass die wenigsten von uns diese Klasse von Anwendungen schreiben.

Johannes

So ein bisschen aus Henne- und Ei-Problemen raus.

Johannes

Weil wenn wir diese Klasse von Anwendungen schreiben müssten, dann müssten wir zwangsweise bisher eine andere Sprache als Python verwendet haben, weil das in Python eben nicht ging.

Johannes

Und deshalb sind wir Python-Entwickler nicht gewöhnt, diese Sorte Programme zu schreiben und auch nicht gewöhnt, diese Sorte Probleme zu lösen.

Johannes

Und dass so ein bisschen diese, ja, es bedingt sich so ein bisschen selber, ja.

Johannes

Das ist so ein Catch 22, der kannst du erst lösen, wenn du es gelöst hast und um es zu lösen, musst du es erst gelöst haben.

Jochen

Also ich glaube wirklich, dass das nicht so super häufig ist.

Jochen

Also ein Fall, den ich halt, ich habe dann irgendwann mal in den PEP auch geguckt, wo begründet wird, warum will man das eigentlich haben.

Jochen

Und da war zum Beispiel ein Beispiel, was ich dann auch einleuchten fand.

Jochen

Also es waren ein paar, aber eins ist mir jetzt noch in Erinnerung, die anderen nicht mehr.

Jochen

Da war es halt so, dass da irgendwie auch in Data Science-Umfälterfirmen gesagt haben, wir haben ein Problem.

Jochen

Und zwar haben wir hier irgendwie dicke Maschinen mit irgendwie jeder Menge GPUs drin.

Jochen

Und jetzt wollen wir die GPUs mit Bildern füttern oder sonst irgendwas.

Jochen

Und klar, irgendwie I.O.

Jochen

ist nicht so das Problem, da haben wir kein Problem mit dem GIL, aber wir müssen die jetzt auch noch so ein bisschen transformieren.

Jochen

Wir müssen irgendwie so ein bisschen das irgendwie mal irgendwie so drehen oder manchmal in Badges organisieren und keine Ahnung.

Jochen

Und das machen wir halt in Python.

Jochen

Und wir müssen das schnell genug machen können, um halt die ganzen GPUs ständig mit Daten versorgen zu können.

Jochen

Die Dinger sind sauerteuer, wenn wir da nur die Hälfte der GPUs verwenden können, dann lohnt sich das alles nicht mehr.

Jochen

Und jetzt haben wir ein Problem mit dem Gill, weil wir kriegen das nicht schnell genug, wir kriegen die GPUs nicht schnell genug mit den Daten gefüttert.

Jochen

Und eigentlich haben wir fast keine Alternative, als eine andere Programmiersprache zu nehmen, weil was sollen wir machen?

Jochen

Wir können es auch nicht auf Prozesse aufteilen oder das geht auch alles nicht, weil da haben wir das gleiche Problem, dass halt der Overhead uns irgendwie das zu verteilen, halt so viel Performance wegfrisst, dass wir dann die GPUs wieder nicht gefüttert kriegen.

Jochen

Also, ja, was sollen wir tun?

Jochen

Und da dachte ich, okay, das ist wirklich ein Anwendungsfall.

Jochen

Ja, da braucht man das wahrscheinlich.

Jochen

Aber ansonsten Ja,

Johannes

genau, aber das ist eben diese Klasse von Problemen, die ich meinte vorhin.

Johannes

Und früher waren es halt Telefonverteiler oder Netzwerkinterfaces oder.

Jochen

Ja, aber da würde ich sagen, damit bist du mit ASIN geschrieben.

Jochen

Ich weiß auch gar nicht, ob Erlang irgendwie das auch kann.

Jochen

Ich bin mir gar nicht so sicher.

Jochen

Also ich glaube, die haben dann ja, also wenn du halt irgendwie so ein Routine.

Jochen

Ja, genau.

Jochen

Die fahren auch eine Reihe von Prozessen hoch und haben dann halt eine schlaue Art, irgendwie, die miteinander kommunizieren kann.

Jochen

Und intern machen die halt.

Jochen

Und intern machen die halt, ja, aber das kannst du mit Falken ganz genauso machen.

Jochen

Startst du auch mehrere Prozesse und machst in jedem einzelnen Prozess dann irgendwie Coroutinen.

Jochen

Das kann man, das ist nur nicht so üblich, aber könnte man wahrscheinlich tun.

Jochen

Also ich meine, ja, diese, diese, diese.

Johannes

Async ist ja jetzt auch nicht gerade eine uralte Entwicklung.

Diese Probleme gibt es ja auch schon lange.

Und Async ist ja noch eine eine Version, das zu lesen.

Johannes

Auch mit Vor- und Nachteilen, muss man auch sagen.

Jochen

Ja.

Jochen

Ja, aber das ist auch ein bisschen.

Johannes

Ja, aber das ist das, was ich meine.

Johannes

Es gibt eben, das ist die Sicht, die ich habe.

Johannes

Vielleicht ist die auch falsch, ja, oder vielleicht ist die einfach nicht so weit verbreitet, aber meiner Meinung nach öffnet es eine Klasse von Programmen,

Jochen

die vorher

Johannes

nicht praktisch schreibbar waren.

Carl Friedrich

Und es ist ja jetzt auch so, dass wir schon eigentlich letztlich in einer sehr pragmatischen Situation sind.

Carl Friedrich

Also wir haben jetzt, das ist standardmäßig nicht an und wir gucken, wir haben jetzt Zeit als Community rauszufinden, gibt es Anwendungsfälle dafür, finden wir Anwendungsfälle dafür, wird es stabil genug?

Carl Friedrich

Ist die Single-Threading-Performance akzeptabel, schlechter und ziehen die ganzen Bibliotheken mit?

Carl Friedrich

Und im Moment ist das Risiko halt nicht so hoch.

Carl Friedrich

Also das quasi der absolute Worst Case, der passieren könnte, ist halt, wir finden in zwei Jahren raus, niemand benutzt es, das stürzt die ganze Zeit ab und Sam Gross hat keine Lust mehr.

Carl Friedrich

Und dann kann man es halt auch einfach wieder weglassen.

Carl Friedrich

Also würde ich nicht von ausgehen, aber also die Möglichkeit besteht halt sozusagen.

Jochen

Ja, und wahrscheinlich haben wir, also ich meine, das hat mich jetzt auch quasi, so eine andere Geschichte, diese ASIN-Geschichte hat eine gewisse Ähnlichkeit in der Hinsicht, als dass auch das halt ein tiefgreifender Eingriff war quasi und sich erst so über die Zeit entfaltet hat, was das alles für Probleme bringt und wo es überall reingreift und so.

Jochen

Und das ist da, bis heute ist das noch nicht so, sagen wir so, da ist immer noch Potenzial, also es ist schon viel, viel besser geworden, aber es ist immer noch so, dass da noch, das ist noch nicht ganz komplett fertig alles.

Jochen

Und das hat auch vor zehn Jahren oder so angefangen und ja, das hat ganz schön lange, ist schon ganz schön lange auf dem Weg.

Jochen

Und das wird wahrscheinlich da auch so sein, ja.

Carl Friedrich

Klar, auf jeden Fall.

Carl Friedrich

Es ist auf jeden Fall ein langfristiges Projekt.

Carl Friedrich

Das ist jetzt nichts, was wir jetzt in einer Version mal irgendwie so ein bisschen reinbasteln, dann ist das Problem gelöst.

Johannes

Ja, und selbst wenn das alles auf technischer Ebene einwandfrei funktioniert, dann ist halt Multithreaded Programming immer noch einfach auch eine schwierige Sache.

Johannes

Also die Dining Philosophers, die kann man sich gerne mal ansehen und versuchen, da eine Lösung zu schreiben.

Johannes

Das ist nicht so einfach.

Carl Friedrich

Klar.

Carl Friedrich

Und also ob es dann wird.

Carl Friedrich

Mal schauen, ob

Johannes

Dominik fragt, was das bedeutet.

Dominik

Ja, warte nur darauf, dass du es erklärt hast, ja.

Johannes

Die Dining Philosophers sind ein Gedankenexperiment, wo du fünf Menschen an einem Tisch sitzen hast und die wollen Spaghetti essen und zum Spaghetti essen braucht man zwei Gabeln.

Spaghetti ist.

Very Fine Dining.

Mit zwei Gabeln.

Johannes

Und auch geteilte Gabeln.

Johannes

Es gibt es nur in den nobelsten Restaurants, weil jeder von denen hat nur eine Gabel.

Also bei jedem Teller liegt eine, zwischen zwei Tellern liegt immer eine Gabel.

Johannes

Also ein Philosoph hat eine Gabel rechts von links und eine links von sich.

Johannes

Aber auf diese Gabel haben immer zwei Menschen Zugriff.

Johannes

Und jetzt wollen die alle Spaghetti essen und brauchen dafür zwei Gabeln.

Johannes

Offensichtlich können die nicht alle gleichzeitig Spaghetti essen.

Johannes

Weil es gibt nur fünf Gabeln, wenn jeder zwei Gabeln braucht, bräuchten sie zehn Gabeln.

Johannes

Es ist also so ein Ressourcenproblem.

Johannes

Das viel schlimmere Problem ist aber, dass man da ganz einfach diese ganzen Probleme visualisieren kann, die auftreten können.

Johannes

Selbst wenn dieses System auf einer technischen Ebene einwandfrei funktioniert.

Dominik

Also du meinst zum Beispiel, die haben alle eine große Schüsse Spaghetti und die haben gleichzeitig zwei Enden einer langen Spaghetti im Mund, weil die

das ist das Disney, die Disney-Variante, nee, die meine ich jetzt hier an der Stelle nicht, aber ja.

Johannes

Zum Beispiel, wenn man ganz naiv sagt, wenn ein Philosoph Spaghetti essen möchte, dann greift er zuerst mit seiner rechten Hand nach einer Gabel und dann mit der linken Hand nach einer Gabel und wenn da eine Gabel nicht liegt, dann wartet er halt in dem Zustand, in dem er gerade ist, bis die Gabeln verfügt.

Dominik

Also sitzen da irgendwelche Leute, die haben alle eine Gabel in der Hand und warten darauf, dass sie den zweiten bekommen.

Johannes

Genau, also im schlimmsten Fall greift jeder nach der rechten Gabel und wartet dann auf die linke Gabel, die aber durch den Philosoph zu seiner Linken schon belegt ist.

Johannes

Und die warten dann alle aufeinander und müssen für immer an diesem Tisch sitzen und verhungern, vor dem vor dem vollen Teller stellen.

Johannes

Und das ist ja eine extrem simple Situation, ja.

Johannes

Das ist ja eine extrem vereinfachte Situation.

Dominik

Du meinst mit einer Debut, mir mal eine Gabel.

Bitte.

Johannes

Ja, aber tatsächlich, Threads, die kommunizieren, sind ja auch was extrem Schwieriges, insbesondere wenn die gerade auf ein Lock warten.

Johannes

Weil üblicherweise, wenn so ein Thread auf den Lock wartet, kann er ja derweil nichts anderes machen.

Das ist dann blöd.

Hat der Mund schon voll.

Genau, das ist blöd.

Johannes

Und jetzt muss man eben anfangen, wie kriegt man das in den Griff?

Johannes

Wie kann man das im Allgemeinen lösen, dass die keine Deadloks machen.

Dominik

Mehr keine Parteien?

Johannes

Ja, das wäre eine Möglichkeit, aber normalerweise ist das schwierig.

Johannes

Also zum Beispiel in dem Modell von Jochen einfach mehr GPUs einbauen, ist prinzipiell eine Lösung.

Johannes

Ist nicht ganz billig.

Johannes

Und es sind halt goldene Gabeln, dass halt mehr Gabeln geht nicht.

Johannes

Ja, es ist einfach ein Gedankenmodell, um nachzuweisen, dass auf dieser ganz simplen Ebene schon Probleme auftreten, die ungeheuer schwierig zu lösen sind und ungeheuer schwierig in ihrer Allgemeinheit zu lösen sind.

Johannes

Und wenn du sagst, okay, dann habe ich eine Lösung gefunden für fünf, was ist, wenn du da sechs Philosophen sitzen hast oder tausend oder nur zwei?

Ja, geht deine Lösung dann immer noch.

Carl Friedrich

Also schon allein die Tatsache, dass quasi einer der schwierigsten Probleme bei verteilten Systemen ein Counter ist, das ist ja eigentlich auch schon relativ lustig.

Johannes

Eine Zahl hochzählen.

Genau, eine

Carl Friedrich

Zahl hochzählen.

Carl Friedrich

Aber so global, konsistent und so, das ist wirklich auch schon das ist nicht so einfach.

Dominik

Kennt ihr das, wenn irgendwie an so einem Festival-Eingang irgendwer stehen muss mit so einem Klicker, man drauf drücken muss, wenn man reinrennt, oder wenn man an der anderen Hand jemand rausrennt, also ich bin mir auch so sicher, der verdrückt sich die ganze Zeit irgendwann mal an, weiß gar nicht so genau, wie viele Leute denn eigentlich auf dem Gelände sind.

Dominik

Und ich weiß wahrscheinlich relativ, wenn das nicht jetzt

Carl Friedrich

18 Eingänge sind und dann bieten die dann raus.

Carl Friedrich

Jetzt sind gerade minus 10 Leute bei uns auf dem Festival.

Johannes

Das ist doch der klassische, die klassische mathematische Mengenlehre.

Wenn drei Leute reingehen und fünf rausgehen, müssen zwei wieder reingehen, damit es leer ist.

Dominik

Und der Kirchturm ist minus 30 Meter hoch.

Johannes

Ja, okay, also Thading ist

Carl Friedrich

eine Riesensorg.

Carl Friedrich

Man kann es ja mal positiv ausrüsten.

Carl Friedrich

Und die Hoffnung ist, dass es jetzt eben ganz, ganz tolle Abstraktionen geben wird, die dann auf der quasi Low-Level-Basis von Threads und Loks und was weiß ich, was es dann eben an Infrastruktur gibt oder geben wird, die das unwahrscheinlicher machen, dass wir Deadloks produzieren.

Carl Friedrich

Das ist die positive Sicht.

Johannes

Das wäre sehr schön.

Johannes

Und das kriegen wir bestimmt hin, weil die Python-Community ist großartig und die zeigt immer wieder, was ihr für geniale Lösungen findet.

Carl Friedrich

War das jetzt sarkastisch?

Nee, bleibt dran, aber das möchte ich in Folge 600 mitbrechen.

Johannes

Nee, es ist schon so.

Johannes

Also ich bin immer wieder überrascht.

Johannes

Ich meine, wir haben ja hier in dieser Runde immer wieder den Pick, wo wir auf Sachen zeigen, die in der Python-Welt passieren oder auch außerhalb, die einfach geniale Dinge sind, die keiner wusste.

Johannes

Ich mache auch gelegentlich Python-Schulungen für Anfänger.

Johannes

Und eine Sache, die wir da machen, ist einfach mal durch die Standardbibliothek scrollen und gucken, was es da so alles gibt.

Johannes

Und da findet man immer Sachen, die spannend sind und neu und interessant.

Johannes

Und ich finde, das gehört schon auch irgendwie so ein bisschen zur Python-Welt dazu, dass es immer mehr Dinge gibt und immer viele schöne neue Sachen und neue Bibliotheken, die Dinge tun, von denen man noch nicht mal wusste, dass man sie gebraucht hat bisher.

Dominik

Du wolltest gerade picken, hast du damit gesagt schon?

Johannes

Noch nicht.

Johannes

Vor allem, ich habe diese Woche oder dieses Mal gar keinen Python-Pick dabei, aber das macht ja nichts.

Dominik

Kein Python.

Johannes

Es ist einfach nur ein Hinweis darauf, dass es viele tolle Dinge gibt, die man nicht kennt.

Carl Friedrich

Ja, und wenn man jetzt von der Stahlbibliothek weggeht und sich mal die Top 100 PyPI anschaut oder so, dann wird es ja nochmal irgendwie.

Carl Friedrich

Also so die Bandbreite, was für verschiedene Themen es so gibt, ist schon immer wieder sehr beeindruckend.

Johannes

Ja, aber das ist versehentlich total gute Überleitung, weil in der 3.13 wurden ja auch Sachen entfernt aus Python.

Johannes

Und die Liste ist gar nicht so klein.

Carl Friedrich

Das ist übrigens auch da wieder so ein bisschen Geschichte.

Carl Friedrich

Das ist ein gefühlt jahrzehntelanges Projekt, so ein paar von diesen Sachen.

Carl Friedrich

Also das wurde mal auf einem C-Python-Core-Developer-Treffen in einem Vortrag empfohlen, der damals mit sehr gemischten Reaktionen aufgenommen wurde.

Carl Friedrich

Und es hat ewig gedauert, bis das jetzt wirklich passiert ist, dass da Bibliotheken jetzt entfernt wurden.

Carl Friedrich

Die Motivation ist, dass es halt quasi so ein bisschen Code in der Standardbibliothek gab, der einfach sehr veraltet ist und nicht mehr so richtig für aktuelle Probleme zu benutzen ist.

Carl Friedrich

Und die wurden dann eben zuerst deprecated und jetzt seit ein paar Versionen und jetzt eben wirklich wurden ein paar entfernt.

Ja, wir können

die Liste einfach mal, ich habe die Liste zufällig vor mir.

Rein zufällig.

Diese Anstrengung heißt Removing Dead Batteries.

Johannes

Und die entfernt folgende Module.

Johannes

AIFC, Audio Ob, Chunk, CGI, CGI TP, Crypt, Imageheader, Mailcap, MSI Lib, NIS, NETP-Lib, OSS Audio Dev, Pipes, Soundheader, SPWD, SunAU, Telnet Lib, UU, XDR Lib und Lib 223.

Dominik

Understand, weil euer Paket auf einmal weg ist, dann haltet ihr auch was mit dem Update.

Johannes

Genau, also wenn da jetzt was dabei war, was ihr gerne haben wollt.

Carl Friedrich

Ich glaube, die landen alle auf PyPI.

Ja, ja, die gibt es noch.

Carl Friedrich

Was C-Python ja nur erreichen will, ist, dass sie die nicht mehr maintainen.

Carl Friedrich

Nicht, dass die jetzt verboten sind und auf gar keinen Fall mehr von irgendjemandem.

Dominik

Ja, verboten.

Johannes

Ja, klar, es geht nur darum, dass man die nicht die ganze Zeit mitschleifen muss, weil das ist ja auch Aufwand, die in der neuen Version mitzunehmen.

Johannes

Aber bei einem Großteil dieser Bibliotheken weiß ich nicht, was die tun.

Carl Friedrich

Ja, man kann so ein bisschen raten, aber bei ein paar kann man noch nicht mal raten.

Johannes

Ja, bei manchen, ja, was, keine Ahnung, NNTP-Lib macht, okay, gut, das ist NNT-Lib.

Carl Friedrich

CGI macht, aber was jetzt auch noch, weil wir alt sind.

Ja, da sind wir.

Johannes

Aber wüsstest du jetzt den Unterschied zwischen CGI und CGI TP TP?

Carl Friedrich

Ich glaube, das eine ist der Tracebank.

Johannes

Ja, aber naja.

Turbo.

Turbo.

Johannes

SunAU ist so ein altes Audio-Format, oder?

Jochen

Ja, ich glaube auch.

Johannes

Oh, MSI-Lib für Microsoft Installer-Dateien.

Johannes

Ach, großartig.

Dominik

Kennt ihr die meisten untergeladenen Mail auf PiPI?

Jochen

Irgendwas mit Setup-Tools oder ich weiß nicht.

Jochen

Okay, keine Ahnung.

Also das ist auf jeden Fall das

Richtige, diese Sachen abzusammen.

Dominik

Also es gibt so eine Liste, die sagt Boto 3.

Jochen

Ah, oh, das liegt, ach ja, das ist klar, warum das liegt, die updaten irgendwie alle zwei Stunden.

Jochen

Und da das halt irgendwie eines der Hauptdinger ist, dass du halt brauchst, wenn du irgendwas mit AWS oder so machst.

Die drittbeste Boto Core.

Jochen

Ja, ja, das ist alles so.

Und Platz 2?

Johannes

Ja, besteht nicht der Grund, warum Pipei keine Statistiken mehr anzeigt.

Jochen

Naja.

Und das macht natürlich.

Jochen

Also da könnte man jetzt denken, das wäre irgendwie wichtig, aber das ist halt,

Carl Friedrich

warum zeigen die keine Statistiken mehr an?

Johannes

Weil die nicht trennen können, ob das jetzt ein Mirror ist oder ein automatisches Update oder jemand, der die Bibliothek tatsächlich in einem Projekt installieren möchte und deshalb sind diese Zahlen völlig versehen.

Carl Friedrich

Ich würde sagen, weil Counter halt so schwierig sind.

Ja, genau.

Nicht nur in der

Johannes

Benutzung, sondern auch in der Interpretation.

Dominik

Ja, ich meine, die Zahl der Downloads ist auch irgendwie so ein bisschen weird.

Dominik

1,5 Milliarden.

Jochen

Die Zahl, die da rauskommt, ist halt, wie oft es geupdatet wird, ist auf jeden Fall ein Faktor, mit dem da multipliziert wird.

Jochen

Und ja, ich meine, aber das ist ja jetzt nicht irgendwie eine gute Sache, wenn da irgendwie alle paar Minuten Pakete irgendwie die Version hochzählt.

Jochen

Aber wenn das dann irgendwie in den CIs quasi in so Continuous Integration Pipelines verwendet wird, dann wird das halt gnadenlos noch runtergeladen, wenn sich da irgendwas ändert.

Jochen

Also ja, naja.

Jochen

Ja, wahrscheinlich braucht man irgendein anderes Metrik-KPI für irgendwie, ist das jetzt irgendwie interessant oder nicht?

Jochen

Aber ich weiß auch nicht welche.

Mit Tabsterne.

Jochen

Auch schwierig.

Metriken, KPIs.

Jochen

Ja.

Jochen

Es wurde schon mal in einem Podcast erwähnt.

Dominik

Vielleicht sollten wir da sowas auch so eine Quartett-Serie von machen.

Jochen

Ja.

Von den PyPI-Bibliotheken.

Dominik

Ja, also genau, hast du ein Quartett mit vier, die die besten PyPI-Blieten oder irgendwas mit den KPIs.

Dominik

Kannst du die ganzen Module da reinbauen, dann kannst du dich gegeneinander.

Dominik

Kennt ihr, könnt ihr das?

Also meins hat 1,5 Milliarden Downloads in diesem Wetter.

Aha, 798 Megabyte.

Dominik

Mehr Kilobyte, genau.

Carl Friedrich

Und Anzahl der Releases wäre doch auch ein gutes.

Jochen

Ja.

Dominik

Offene Issues.

Heißt das besser, wenn es höher ist oder

wenn es.

Carl Friedrich

Aber um auf die Dead Batteries zurückzukommen, also ich verstehe jetzt auch, dass es gut ist, wenn die entfernt werden.

Ja, absolut.

Aber es wird da sicherlich die Leute geben, die sagen, nein, wie soll ich sonst je meine?

Jochen

Ja, aber die hätten ja jetzt auch schon.

Jochen

Ja, aber die hatten ja jetzt auch schon eine ganze Zeit, lang Zeit irgendwie da was und ich glaube auch nicht mehr so über den.

Jochen

Ja, genau.

Jochen

Da ist auch nichts sonst passiert.

Jochen

Ja, ich weiß nicht, haben wir vielleicht nur so kleinere Dinge oder ich weiß es nicht genau.

Jochen

Gab es noch irgendwas Interessantes?

Jochen

Typing immer, ja.

Dominik

Ein Typing Simple Namespace, wolltest du sagen?

Das kannte ich noch gar nicht.

Dominik

Ich weiß gar nicht, auf welcher Version das war.

Jochen

Ja, du kannst es auch nicht.

Jochen

Okay.

Jochen

Ja, ich kann es auch nicht.

Dominik

Typing, Simple Namespace ist ein Dikt, dass man wie Attribute dann die Keys benutzen kann.

Dominik

So ein bisschen so ein Nametuppe.

Dominik

Und da hat CF gesagt, oh, das ist aber ganz schwierig, weil da ständig irgendwas kaputt geht.

Dominik

Und hat dann auch Enum in den Raum geworfen.

Dominik

Das würde ich gerne nochmal kurz hören und verstehen, warum das so blöd ist.

Carl Friedrich

Ich habe es auch schon gesagt, dass ich das zensieren will.

Carl Friedrich

Nee, wir haben so ein bisschen darüber geredet, welche Standardbibliotheks Module uns als Piper-Entwicklern irgendwie besonders oft Probleme bereiten.

Carl Friedrich

Und Inam ist da immer mal wieder so ein, wie heißt es?

Dominik

Eine eierlegende Wollmilchsau.

Problembär.

Carl Friedrich

Also INAM benutzt einfach ganz, ganz viele Tricks des Python-Datenmodells und Metaklassen und irgendwie schafft es immer wieder Randfälle zu erwischen, die wir dann doch nicht so ganz korrekt implementiert haben und da müssen wir erstmal, wenn wir, was weiß ich, zu einer neuen C-Python-Version die Standardbibliothek dann übernehmen, müssen wir erstmal irgendwelche Python-Datenmodell-Core-Features fixen, bevor ihr dann halt auch nur importiert oder so.

Carl Friedrich

Genau.

Carl Friedrich

Und Nametuple ist da auch ein Problem, nicht so richtig, weil das irgendwie einen Bugs hat, sondern weil das oft Performance-Bugs hat.

Dominik

Name Tupeln langsam, das war mir auch neu.

Carl Friedrich

Ja, Nametuple benutzt halt quasi, wenn man so einen neuen Nametuple-Typ anlegt, dann wird halt auch mit Exec dann irgendwie, so mit Strings, irgendwelche Python-Code generiert und das mag Dagit halt nicht.

Carl Friedrich

Weil der Jit, der geht halt davon aus, dass ich die gleichen Funktionen oft aufrufe und nicht ganz, ganz viele neue Funktionen ständig mache, die dann eben neu zum Maschinencode übersetzt werden müssen.

Carl Friedrich

Und das sorgt eben dafür, dass bei Nametuple die Performance oft wirklich sehr, sehr schlecht war in Pipe.

Carl Friedrich

Und inzwischen ist das gefixt, aber so über so ein paar Versionen hatten wir mit Nametuple immer mal wieder Probleme.

Carl Friedrich

Mit Data Classes am Anfang übrigens auch, aber es ist inzwischen auch, glaube ich, ganz gut repariert.

Carl Friedrich

Aber das sind auf jeden Fall so ein paar, also es gibt Bibliotheken, die wir einfach eins zu eins übernehmen können, gerade wenn die in Python geschrieben sind, ist überhaupt kein Problem.

Carl Friedrich

Und es gibt welche, wo wir halt dann eben sehr, sehr viele Piper-spezifische Patches haben.

Carl Friedrich

Und Nametuple ist definitiv eins von denen, wo es eher mehr als weniger Patches gibt.

Carl Friedrich

Das habe ich jetzt geschafft, ohne jemanden zu beleidigen.

Jochen

Genau.

Jochen

Ja, Typing waren auch noch so ein paar Dinge.

Carl Friedrich

Nicht so der Typ-User, ja.

Carl Friedrich

Die Features sind schon viel zu advanced für mich.

Jochen

Ups.

Jochen

Ja, aber ich weiß nicht.

Jochen

Das ist auch read-only, ja, okay.

Jochen

Hast du das gerade vor dir?

Jochen

Kannst du das?

Ja, die

Johannes

Beschreibung ist sehr kurz, aber es geht wohl darum, dass man Locals bearbeiten kann.

Johannes

Und das war bisher nicht so genau definiert, was da passiert.

Johannes

Und jetzt kann man das machen.

Carl Friedrich

Also vorher.

Johannes

Ist nur für Debugger wichtig.

Johannes

Hier steht, ist für Debugger wichtig.

Carl Friedrich

Ich glaube, der Trick ist, also das Wichtige daran ist wirklich, dass jetzt einfach mal genau aufgeschrieben wurde, was genau passiert, wenn man Locals aufruft.

Was können sie erwarten?

Carl Friedrich

Was können Sie erwarten?

Carl Friedrich

Und manchmal ist es eben so, dass das Dictionary, was Locals, also bei Globals ist ja so, das Dictionary, wenn ich da Keys reinschreibe, dann, das ist das wirklich das richtige Globals Dictionary.

Carl Friedrich

Und dann, wenn ich danach das entsprechende Global nachschaue, dann sehe ich auch die Änderung.

Carl Friedrich

Und bei Locals halt.

Johannes

Und das macht sehr schöne, sehr schöne Tricks ermöglichen.

Carl Friedrich

Das macht sehr schöne Tricks möglich.

Carl Friedrich

Bei Locals ist es nicht so.

Carl Friedrich

Bei Locals war es eben manchmal so, dass wenn ich Locals verändere, dass sich dann sich die Locals wirklich ändern und manchmal eben halt auch nicht.

Carl Friedrich

Und genau in welchen Fällen welche Variante dann galt, das war so ein bisschen immer ein bisschen schwierig vorherzusehen und verschiedene Python-Versionen haben das auch irgendwie, äh, nee, verschiedene Python-Implementierungen haben das auch verschieden dann angegangen.

Carl Friedrich

Also quasi zwischen Funktionen, Global Scopes, Generatoren, Coroutinen, Comprehensions, Glass Scope, also es gibt da da schon so einiges, achso, Code, der von Exec oder EWAL ausgeführt wird, da gab es eben schon so einiges an Fällen, wo es halt dann so immer so leicht unterschiedliches Verhalten gab.

Carl Friedrich

Das wurde jetzt eben fest definiert und ich glaube, es ist so, dass Locals weniger oft, also dass man Mutationen bei Locals weniger oft zu Veränderungen in den echten Locals führen.

Carl Friedrich

Aber auf der anderen Seite ist es eben so, dass in den Debuggern, wenn man da sich so ein Frame-Objekt geben lässt und da das Attribut f-Locals mutiert, dass das eben zu vorhersagbaren Veränderungen an den echten Werten der Locals führt.

Carl Friedrich

Und das im Debugger ist eben wichtig, wenn ich im Debugger dann sagen möchte, ich führe jetzt die Funktion aus und die lokale Variable A hat den Wert 17.

Carl Friedrich

Ich will jetzt aber einfach mal im Debugger, um rauszufinden, was da genau passiert, das auf 19 setzen.

Carl Friedrich

Und wenn das dann nicht geht, weil eben das Verändern der Locals im Debugger nicht so richtig implementiert ist oder nicht immer geht oder nicht in Generatoren geht, ist es halt so ein bisschen frustrierend.

Carl Friedrich

Und da ist es eben gut, wenn man jetzt ein klar definiertes Verhalten hat, auf das man sich verlassen kann.

Johannes

Ja, und die vielen Debugger-Autoren unter unseren Zuhörern haben sich gerade eben sehr gefreut.

Carl Friedrich

Naja, also die Debugger-Autoren sind ja einen, aber die Leute, die halt den Debugger dann benutzen, zu denen gehören wir ja dann doch meistens die Frage.

Jochen

Leider auch doch tatsächlich.

Einfach Print-Debugging.

Carl Friedrich

Wir alle, die noch nicht sofort beim ersten Mal perfekten Code schreiben können, die

Johannes

Print-Debugging mehr braucht keinen Menschen.

Jochen

Kennt ihr diese, diese, das kann ich auch noch nicht, aber ich fand diese Analogie sehr schön.

Jochen

Das, ähm, ich glaube auch aus der letzten Copy-Episode, wo jemand meint hat, ja, so Print, da gab es wohl irgendeinen Vortrag vor langer Zeit, wo jemand gesagt hat, na, also sei kein, sei kein Bond-Vilaine beim Debuggen, zum Beispiel.

Jochen

Also Bond-Wilain ist lieber alle.

Jochen

Die machen, ja, die machen aber alle irgendwie blöde Fehler, dass sie zum Beispiel irgendwie verständlich erklären, was ihr Plan ist oder dass sie halt nicht irgendwie mit der großen Weltraumlaserkanone schießen, sondern mit einer kleinen Pistole irgendwie sich eine Schießerei mit Bond liefern und das ist halt eine dumme Idee, weil da ist er halt einfach besser drin und das hätte lieber den Weltraumlaser nehmen sollen.

Jochen

Und die Idee ist sozusagen, wenn du lieberst, nimm den Weltraumlaser direkt.

Jochen

Fang nicht irgendwie an mit Printf mit der blöden kleinen Pistole, sondern nimm das mächtigste Tool, was du irgendwie hast, weil das ist doch Zeitverschwendung.

Jochen

Wenn du irgendwie zuerst mit Printf anfängst, dann nimmst das nächste, das geht auch nicht, dann nimmst du das nächste.

Jochen

Wir fangen lieber gleich mit dem großen Ding an.

Jochen

Dem großen Hammer nehmen und draufhauen.

Carl Friedrich

Du kannst nicht dein alle Erzählungen

Johannes

wegnehmen mit dem Weltraumlaser.

Jochen

Ja, aber also ich, die Idee fand ich schon, ja, hatte was.

Jochen

Also muss man, ja.

Carl Friedrich

Aber da gibt es auch einfach sehr, das ist einfach sehr individuell.

Carl Friedrich

Also ich kenne auch Leute, die leben nur im Debugger.

Carl Friedrich

Also da ist halt einfach der erste Schritt, ich mache eine Funktion, die ist leer und habe die Argumente reingereicht und dann schreibe ich halt, mache ich erstmal einen Debugger an.

Carl Friedrich

Gucke halt, was für Argumente finden das jetzt hier und wie müsste denn der Code aussehen, dann schreibe ich zwei Zeilen mehr und mache wieder einen Debugger rein.

Carl Friedrich

Also ich ja, also in manchen Sprachen ist es ja auch noch viel mehr so, dass man das dann auch, dass du die IDI das auch unterstützt und man dann quasi die Funktion restarten kann an der Stelle, wo man halt gerade war, dann schreibt man ein bisschen mehr Code, restarte die wieder.

Carl Friedrich

Also die Smarthock-Leute machen das besonders gern, die, die es noch gibt.

Carl Friedrich

Aber ja, also ich kenne auf jeden Fall auch in Python-Leute, die halt sich das so angewöhnt haben, dass sie halt im Test schreiben, die Bagger anmachen und dann kann man halt erstmal so gucken, was hat man denn eigentlich für Objekte, was haben die für Methoden und wie, ja, was macht man denn da eigentlich?

Dominik

NBDF so ein bisschen so.

Jochen

Ich habe auch versucht mal einen zu überzeugen von Jupyter-Notebooks und so, habe ich begeistert davon erzählt.

Jochen

Nee, benutze ich nie, finde ich blöd.

Jochen

Und dann so, ja, und dann habe ich gesehen, wie der entwickelt.

Jochen

Und der tatsächlich hat quasi das, was ich in Jupyter-Notebooks mache, macht der im Debugger.

Jochen

Ja, das kann man tun, das geht schon.

Jochen

Aber es ist halt okay.

Johannes

Wenn man jetzt noch einen Debugger hätte, der vorwärts und rückwärts steppen kann und wo man zwischendurch den Code verarbeiten

Carl Friedrich

würde, dann schon.

Carl Friedrich

Aber ich glaube, PDB ist eine der Sachen, wo ich das Gefühl habe, dass das auch so ein bisschen revitalisiert ist.

Carl Friedrich

Also dass es da jetzt Core Lefts gibt, die sich dafür interessieren und eben hoffen, da in den nächsten Versionen auch ein paar neue Features reinzukriegen.

Carl Friedrich

Ich glaube auch in 3.13 ist schon die ersten Version.

Carl Friedrich

Zum Beispiel, dass wenn man so ein Breakpoint macht, dass dann dass man dann nicht erst in der nächsten Zeile dann wirklich anhält im Debugger, sondern schon in der Zeile selber, wo der Breakpoint ist.

Jochen

Ah ja, genau, genau.

Jochen

Ja, da war auch irgendwie so eine Seltsamkeit, dass wenn man das vor einem Return gemacht hat, dass man dann halt irgendwie

Carl Friedrich

im Caller erst den Breakpoint geblieben hat.

Jochen

Ja, also da sind schon einige Dinge hier, ja.

Johannes

Um jetzt meinen Einwurf noch kurz zu retten, das war eine Präsentation von einem Spieleentwickler, die sich selber so ein System gebaut haben.

Jochen, du hattest die, glaube ich,

Tomorrow Corporation.

Jochen

Das war eine super, dass wir das gemacht haben.

Johannes

Die haben sich genau so eine Debugger gebaut, der vorwärts und rückwärts steppen kann und wo ich zwischendurch Code verändern kann und dann trotzdem die Auswirkungen alle sehe.

Johannes

Und das war schon sehr beeindruckend, weil das halt tatsächlich so ein Debugging ermöglicht, am offenen Herzen, ohne Angst haben zu müssen, dass der Patient jetzt abstürzt.

Das ist schon sehr beeindruckend.

Jochen

Ja, und es war auch noch irgendwie da, dass es ein Spiel ist.

Jochen

Man hat halt unten quasi beim Debugger so ein Schieber und das Spiel geht halt mit.

Jochen

Und man schiebt ihn so da und das Spiel läuft rückwärts.

Jochen

Und man sagt er so ganz trocken so zu, ja, das sind jetzt nicht irgendwie Screenshots oder so.

Jochen

Nee, das ist das echtes Spiel, was wirklich irgendwie neu gerendert, wenn man dann diesen Titel ist.

Ich bleibe hier mal die Funktion ein kleines bisschen um und lasse

das mal wieder laufen von hier aus.

Und jetzt ist auch dieser Fitness.

Jochen

Ja, kann ich auch in den Shownotes mal verlängen.

Carl Friedrich

Aber das, also ich hatte, ich glaube, die Free-Threading-Leute, die müssen solche Tools auch benutzen, weil es ansonsten einfach echt so schwierig ist.

Carl Friedrich

Und da gibt es halt auch für C so Back-in-Time-Debugger, der, wie heißt er nochmal?

Carl Friedrich

Anfang des Jahres war ich zum ersten Mal in der Situation, dass ich mich genötigt gesehen habe, auch so einen zu benutzen, weil wir so einen nur sehr selten stattfindenden Garbage Collector Bug hatten.

Carl Friedrich

Und mit so einem Back-in-Time-Debugger kann man halt dann solche Probleme auch richtig gut lösen.

Carl Friedrich

Also weil da kann man dann, also das ist quasi so ein Tracing-Debugger, der macht so eine Aufzeichnung der gesamten Prozesausführung.

Carl Friedrich

Das kann man einfach hundertmal machen, bis der Crash stattfindet.

Carl Friedrich

Und dann kann man sich die Ausführung beliebig oft wieder anschauen.

Carl Friedrich

Und das Interface ist quasi so wie so ein normaler Debugger.

Carl Friedrich

Ich kann halt Next machen und Sachen printen.

Carl Friedrich

Aber der Prozess wird nicht wirklich neu ausgeführt, sondern das ist quasi in nur ein Replay von dem, was eben bei der crashenden Ausführung wirklich passiert ist.

Carl Friedrich

Und da kann ich, also da kann ich dann wirklich auch einen Backword-Next machen und dann bin ich wieder eine Zeile davor.

Carl Friedrich

Oder ein Backwards Finish und dann bin ich eben am Anfang der Funktion nicht gerade ausführend.

Carl Friedrich

Oder halt auch so Sachen wie, ich mache einen Hardware Watchpoint, also das war wirklich Memory Corruption, die ich da debuggt habe.

Carl Friedrich

Und wenn du halt einen kaputten Speicher hast, dann kannst du dir so einen Watchpoint setzen, wo du sagst, wer hat als wer hat diesen Speicher, also wenn dieser Speicher verändert wird, dann halt an.

Carl Friedrich

Und dann kann man quasi vom Crash sagen, man macht so einen Watchpoint für den kaputten Speicher und dann lässt man rückwärts laufen.

Carl Friedrich

Weil dann findet man quasi, wenn man rückwärts läuft, findet man den Code, der den Speicher wirklich kaputt geschrieben hat.

Carl Friedrich

Und das war wirklich richtig gut.

Carl Friedrich

Aber das war wirklich auch.

Carl Friedrich

Es funktioniert übrigens auch nicht, also technisch ist das nicht so implementiert, dass es wirklich rückwärts läuft.

Carl Friedrich

Weil es ist ja Maschinencode, es geht für beliebigen Code.

Carl Friedrich

Stattdessen macht er nur Snapshots.

Carl Friedrich

Der geht dann zum letzten Snapshot und läuft von da vorwärts.

Carl Friedrich

Aber es fühlt sich halt trotzdem so an.

Gut genug.

Johannes

Okay, okay, ich habe hier noch den wichtigsten.

Johannes

Ich habe ja noch den wichtigsten, die wichtigste Änderung in Python 3.13.

Johannes

Bei Doc Strings werden jetzt die führenden Leerzeichen entfernt.

Oh ja, es hat mir auch krass davon.

Dominik

Das hatten wir uns schon angeguckt im REPL tatsächlich.

Dominik

Wie viel Prozent bei Kurz ist weniger?

Dominik

Oder der Byte?

Johannes

5%.

8% weniger.

Bei SQL.

Johannes

Aber also einfach weil es korrekt ist, oder?

Carl Friedrich

Wir brauchen

Johannes

niemals den Doc-String mit der Einrückung.

Carl Friedrich

Naja, 5% finde ich ganz schön krass.

Carl Friedrich

Also 5% sind Leerzeichen von eingerückten Docstrings in unseren PYC-Dateien.

Carl Friedrich

Das ist irgendwie würde man jetzt erstmal so nicht erwarten.

Dominik

Green Development danach.

Green Development.

Johannes

Das liegt halt daran, dass wir alle so viele gute und ausführliche Dog-Strings schreiben und ganz viel.

Jochen

Nee, vor allen Dingen aus Leerzeichen bestehen.

Jochen

Ja, ich weiß nicht.

Jochen schreibt keine Docstrings.

Carl Friedrich

Naja gut, wenn ich halt Klassen habe, bei mir ist Methoden-Doc-Strings, dann sind die ja schon immer acht Bytes eingerückt für Teile Doc-Strings.

Jochen

Ja, richtig.

Johannes

Und das müssten ja eigentlich 10% sein, weil wir gehen ja nur bis 80 Zeichen pro Teil.

Dominik

Das ist nicht 79?

Jochen

Ja, streng genommen müssen es 79 ist.

Jochen

Ja, oder okay.

Dominik

Ja, 79, 79.

Johannes

Was habt ihr denn für moderne Displays?

Johannes

80 mal 25, so?

Carl Friedrich

Wenn du Pipe-Modus auf deinem Papierrecht schreibst.

Dominik

Es gibt Leute, die müssen auf eurem Handy entwickeln.

Carl Friedrich

Ich habe PyPy auf meinem Handy.

Jochen

Okay, wie geht das

denn hin?

Carl Friedrich

Ja, in PyPy ist tatsächlich ein Paket auf Thermux.

Carl Friedrich

Also Thermux.

Carl Friedrich

PyPy hat eine ARM-Version und dann kann man das einfach laufen lassen.

Carl Friedrich

Manchmal ist es auch nett, dann kann ich in der Bahn irgendwie.

Carl Friedrich

Das ist halt so ein bisschen nervig zu tippen, aber man kann auch den JIT laufen lassen, man kann sich dann auch auf dem Handy anzeigen lassen, welchen Maschinencode der PyPy-JIT jetzt gerade auf den Python-Code, den man auf dem Handy laufen ließ, erzeugt wurde.

Carl Friedrich

Also, wenn man die richtigen Umgebungsvariablen weiß.

Dominik

Aber Thermox kann das leider noch nicht, dass man mit dem Daumen hoch und runter machen kann mit dem interaktiven Neuen.

Dominik

Nein, nein, aber das ist das Scrolling und ich mal jetzt durch die einzelnen Zeilen durch vom Editor, vom History Edit.

Carl Friedrich

Ich glaube, achso, du meinst so in der Konsole?

Carl Friedrich

Nee, habe ich nicht.

Dominik

Schade.

Carl Friedrich

Da habe ich also jedenfalls zu dem Thermox, habe ich auch eine, weiß ich, wie lustig die für andere ist.

Carl Friedrich

Ich fand die lustig.

Carl Friedrich

Ist mir was auf einer Konferenz im Sommer passiert?

Carl Friedrich

Ich war auf so einer akademischen Programmiersprachenkonferenz mit Forschern und Forscherinnen, die sich mit Compilern und Optimierungen und Programmiersprachen und so auseinandersetzten.

Carl Friedrich

Und da war ich dann mit einem relativ bekannten C-Compiler, Prof, John Reggae heißt der, auf so einem Boot in Kopenhagen Bier trinken.

Carl Friedrich

Also das Burg lag am Hafen, man konnte auf Deck Bier trinken und habe ihm dann auf dem Handy so eine Optimierung gezeigt, die wir in PyPy machen.

Carl Friedrich

Und er hat also mit PyPy noch nie irgendwas zu tun gehabt und schaut sich das an, so in ganz, ganz kleinem Font und meinte so, warum ist denn da diese extra Operation?

Carl Friedrich

Die brauchst du doch gar nicht.

Carl Friedrich

Und das war absolut richtig.

Carl Friedrich

Und der Grund war, dass die Division in C und in Python halt sich unterschiedlich verhalten, wenn die Zahlen negativ sind.

Carl Friedrich

Und dafür braucht man halt in Python so ein extra XOR.

Carl Friedrich

Aber die Tatsache, dass er das quasi so mit dem 8-Punkt-Font über einem Bier, so auf dem Handy, mal eben so gesehen hat, quasi in einem ASCII-Format, was er noch nie gesehen hatte, das fand ich dann doch relativ krass.

Tja, so Leute gibt's.

Dominik

Ich würde sogar fast sagen, das ist fast der Schluss von Thema.

Jochen

Ja, ich glaube, wir sind mit dem Thema eigentlich mehr oder weniger durch.

Jochen

Dann können wir eigentlich nochmal zu einem welchen Teil wechseln.

Jochen

Wir konnten zum Beispiel ein bisschen Metageschichten machen.

Metageschichten, Mietergeschichten.

Jochen

Ja, zum Beispiel hatten wir Anfragen nach.

Dominik

Ach, das also eins als Metageschichten.

Jochen

Ja, also wie sieht das eigentlich aus?

Jochen

Wollt ihr nicht mal ein Hörertreffen machen?

Dominik

Ja, wollen wir das?

Jochen

Und genau, das hängt, würde ich meinen, davon ab, ob es Hörer gibt, die das auch gerne machen wollen würden, weil ansonsten sitzen wir da alleine rum irgendwo.

Jochen

Das wäre ja auch irgendwie.

Jochen

Also ich würde einfach mal eine Idee, jetzt können wir das natürlich auch machen, aber wenn, wenn, sagen wir mal so, man kann einfach eine Mail an hallo.podcast.de schreiben zum Beispiel, und wenn da jetzt fünf Mails kommen, dass man sich irgendwo Köln, Düsseldorfer Raum oder so treffen wollen würde, dann machen wir das einfach mal.

Genau.

Jochen

Und genau, das ist eine Geschichte.

Jochen

Dann gab es eine Nachfrage nach wie viel.

Ah, ich würde das gerne noch erweitern.

Johannes

Also falls da fünf Mails kommen, die sich im Stuttgarter

Jochen

raus treffen wollen.

Jochen

Genau, dann.

Jochen

Oh, oh ne, vielleicht müssen wir uns in der Mitte treffen, irgendwo in Frankfurt oder so.

Johannes

Ah, in Frankfurt, nee.

Das ist Bimodal, oder?

Johannes

Das ist Düsseldorf oder Stuttgart

und dann kann man das hin.

Jochen

Alles klar, Frankfurt, da müssen halt Marburg dazu.

Jochen

Da, wo sich mehr melden, da müssen wir dann hin.

Johannes

Da ist zuerst.

Jochen

Aha.

Jochen

Da ist zuerst.

Jochen

Okay, mal schauen.

Jochen

Ich bin mal gespannt, ob sich da jemand meldet.

Jochen

Das ist das könnten wir machen.

Jochen

Genau.

Jochen

Ja, dann hat sich immer noch ein.

Dominik

T-Shirts machen, Jochen.

Jochen

T-Shirts.

Jochen

Ja, ja, könnten wir einfach machen.

Jochen

Hat sich da gerade jemand freiwillig gemacht?

Jochen

Müssen wir mal schauen.

Jochen

Genau, eine andere Anfrage war von jemandem, der irgendwie altere Episoden durchhört, dass wir wohl irgendwann mal gesagt haben, oh, wir machen mal einen Discord-Server oder so.

Jochen

Und dann kam die Frage, haben wir das denn mal gemacht dann?

Jochen

Ja.

Jochen

Und die Antwort ist ja.

Jochen

Aber wir haben nie drüber geredet und vielleicht machen wir das jetzt auch mal und packen einen Link zu dem Discord-Server einfach irgendwie auch in die Shownotes oder so.

Jochen

Und da kann man auch einfach dann mal drauf gucken, weil tatsächlich haben wir das.

Jochen

Und ja, wir haben das aber nie kommuniziert, dass wir das haben.

Jochen

Daher ist er auch wenig los.

Jochen

Genau.

Dominik

Wie ist eigentlich mit den tollen Transkripten von unserem Podcast, lieber Johan?

Jochen

Ja, da habe ich jetzt am Wochenende gab es den PiDDF-Farbsprint und da habe ich angefangen, mich mal damit zu beschäftigen, weil ich dachte so, also ich meine, klar, dass man da kann man nicht, also in zwei Tagen kriege ich das nicht hin, aber ich habe zumindest angefangen und man kann jetzt auch, wenn man im Webplayer auf, da ist so ein zusätzlicher Button bei den Episoden, wo es Transkripte gibt.

Dominik

Also falls ihr Taubzeiten uns trotzdem hören wollt, könnt ihr uns jetzt auch also lesen.

Jochen

Ja, genau.

Jochen

Das sieht aus wie so ein Dokumente-Icon.

Jochen

Wenn man da drauf drückt, dann erscheint da irgendwie so ein Transkript-Tab drunter.

Jochen

Und das läuft auch mit, wenn man dann den Player mit dem Player das abspielt.

Jochen

Und das geht schon.

Jochen

Aber das ist nur ein Teil von den Sachen, die man implementieren muss, wenn man Transkripte haben will.

Jochen

Da kommen noch diverse andere Geschichten dazu, mit denen ich noch nicht fertig bin.

Jochen

Aber das geht auf jeden Fall.

Jochen

Dabei ist mir dann auch eine Geschichte aufgefallen, die halt blöd ist.

Jochen

Ich dachte, ah, das ist voll super, wir haben ja auch die Spuren noch.

Jochen

Das heißt, die Sprechererkennung brauchen wir gar nicht in einem Machine Learning-Modell machen, sondern das weiß man ja schon.

Jochen

Ich hau einfach die Spuren getrennt durch Whisper durch oder so.

Jochen

Und dann kann ich auch sagen, wer das gesagt hat.

Jochen

Und dann habe ich gesagt, die Original-Dohen Spuren vor Auphonic sind halt von den Zeiten her anders, als das, was nachher rausfällt, weil halt manchmal Stille rausgeschnitten wird oder manchmal wird das halt also ein bisschen transformiert und dann passen die ganzen Zeitstempel nicht mehr.

Dominik

Die haben die nicht aufgehoben, die eins.

Jochen

Und ich habe die, ja, man kriegt von der Auphonic kriegt man auch die einzelnen Spuren zurück.

Jochen

Nach dem Mastering sozusagen, aber die habe ich nicht aufgehoben und die werden nach irgendwie zwei Wochen oder 20 Tagen irgendwie gelöscht.

Jochen

Das heißt, ich muss entweder alles nochmal durch Auphonic schieben.

Oh no.

Jochen

Oder irgendwie, es gibt für die alten Folgen dann halt jetzt nur die Transkripte ohne Namen dran.

Jochen

Vielleicht ist das auch schon okay.

Jochen

Genau.

Jochen

Und dann für die zukünftige mache ich das dann halt so, dass man dann auch die Namen an den Sprechern hat.

Jochen

Ja, aber es gibt Transkripte, da tut sich was, das kommt jetzt.

Dominik

Wir hatten das ja irgendwann schon mal so ein bisschen probiert, das war relativ wächterlich, aber so ist eigentlich relativ cool.

Jochen

Ja.

Jochen

Genau.

Dominik

Ja, wir wollten auch picken, oder?

Dominik

Picken wir nicht immer?

Jochen

Genau.

Jochen

Picks, genau, genau, genau.

Dominik

Ich muss ja wieder irgendwas völlig Triviales picken, dann fange ich mal damit an, weil ich ja immer irgendwas anderes denke.

Dominik

Und wieder hat nichts mit unserer Folge zu tun, aber ich habe ab und zu mehr Geld bezahlt tatsächlich irgendwie für ordentliche Freistellung von Bildern.

Dominik

Keine Ahnung mehr warum, aber das war schon ein bisschen länger her.

Dominik

Es gibt ein tolles Paket, das ich entdeckt, das heißt RAM BG oder sowas.

Dominik

Das macht einfach den Background weg als Kommandozeilentool von irgendwelchen Bildern.

Wenn man das will.

Super praktisch.

Falls man sowas braucht.

Das war's.

Jetzt auf die vernünftige Sachen.

Johannes

Ich mach mal weiter mit den unvernünftigen Sachen, die auch überhaupt nichts mit der Episode zu tun haben, aber mit der Zeit, in der wir leben.

Johannes

Und zwar ist kürzlich die neueste größte Primzahl gefunden worden.

Ah, ja.

Johannes

Das ist eine Mersenne-Primzahl, die heißt M136279841.

Johannes

Also 2 hoch 136.279.841 minus 1, ist eine Primzahl.

Johannes

Waren sehr viele GPUs beteiligt an der Überprüfung und das ist die erste seit 28 Jahren.

Johannes

Die erste große Primzahl nach 28 Jahren.

Johannes

Diese Primzahl hat 41.24.320 Stellen.

Johannes

Und das allein ist schon eine schöne Sache.

Johannes

Aber das Schöne, was ich gefunden habe, was heute mein Pick ist, ist eine Initiative, die versucht, diese Zahl zu sagen, bevor die nächste größte Primzahl gefunden wird.

Und zwar als verteilter Prozess.

Johannes

Da gibt es eine Webseite, die heißt sayheprime.com.

Johannes

Da kann man sich 419 Stellen geben lassen.

Johannes

Die nimmt man dann als Video auf, lädt das Ganze auf YouTube hoch, schickt den Link ein und die machen dann eine ganz, ganz, ganz, ganz, ganz große Playlist draus, die hoffentlich diese Primzahl insgesamt sagt.

Johannes

Und das Ziel dieser Initiative ist es, diese Primzahl einmal zu sagen, bevor die nächste größere Primzahl gefunden wird.

Dominik

Wahrscheinlich kann man sie einfach mit selber multiplizieren und nochmal wieder eins abziehen, da hat man das schon.

Ja, diese Zahlen zu rechnen, ist nicht so schwierig, aber das beweisen, dass es eine Primzahl ist.

Carl Friedrich

Was ist die Schätzung, wie lang diese Playlist, wie viele Jahre die es machen?

Carl Friedrich

Ja, gut.

Dominik

Wie lange braucht man eine Tat?

Johannes

Sie sagen vor, dass man ungefähr 120 mit 120 ppm spricht.

Johannes

Das heißt, es wären zwei Ziffern pro Sekunde.

Oh, da bin ich nicht runtergehen.

Johannes

Das heißt, es wären ungefähr 20 Millionen Sekunden.

Jochen

Das ist gar nicht so viel.

Jochen

20 Millionen Sekunden, eine Millionen Sekunden ist ungefähr eine Woche oder so.

Jetzt müssen wir es mal ausrechnen, wie viel das tatsächlich.

Johannes

Ja, warte mal, das sind 41 Millionen Sekunden.

Achso, dann

Carl Friedrich

sind 230 Tage.

Tja.

Johannes

243 Tage, ja.

Dreivierteljahr.

Tja.

Darum geht es ja gar nicht.

Johannes

Es geht gar nicht darum, dass es jemand sich dann anhört, sondern es geht darum, dass es einmal gesagt würde.

Dominik

Wir können ja jedes Mal jetzt an einer Episode so eine kleine Episode von dieser Primzahl mit.

Johannes

Einfach im Hintergrund laufen.

Johannes

Jeder, wer möchte, kann daran teilnehmen.

Johannes

Es gibt ein sehr schönes Video von Matt Parker, wo er die Zahl einmal anzeigt in seinem Video.

Johannes

Also er hat dann in jedem Frame zeigt er, glaube ich, 1000 Ziffern an und das geht dann eben über so und so viele Sekunden.

Johannes

Oder vielleicht zeigt er 10.000 Ziffern an jedem Frame.

Johannes

Auf jeden Fall irgendwie dreieinhalb Minuten lang zeigt er diese Zahl an und spricht über die Zahl.

Johannes

Und das ist quasi das Audio-Äquivalent und jeder kann damit mithelfen und ich finde, jeder von uns sollte das tun.

Johannes

Das ist mein Pick für diese Woche.

Johannes

Saytheprime.com.

Carl Friedrich

Ich habe tatsächlich auch über die Friebzahl nachgedacht, weil es ist nämlich relativ, ich finde es relativ lustig, dass man die in Python problemlos ausrechnen kann.

Carl Friedrich

Also es ist überhaupt kein Problem, einfach mal zwei hoch 136 Millionen zu rechnen.

Carl Friedrich

Das dauert quasi keine bemerkbare Zeit.

Carl Friedrich

Das sind da so 16 Megabyte Zahl ungefähr.

Carl Friedrich

Vielleicht ein bisschen ineffizienter dargestellt, aber ja, aber die zu printen, ist komplett unmöglich.

Carl Friedrich

Weil also im Zweier-System ist es halt eine sehr einfache Zahl, es sind lauter Einsen.

Carl Friedrich

Aber im 10er-System, das 10er-System umzuwandeln, das ist halt nicht linear zu machen, sondern das ist irgendwie N-log N oder so.

Carl Friedrich

Und ja, das, also es ist ja eh inzwischen standardmäßig so, dass man große Zahlen nicht mehr printen kann.

Carl Friedrich

Standardmäßig gibt es dieses Limit.

Jochen

Das war auch ein Security-Problem, also ein Deni-of-Service-Problem.

Carl Friedrich

Aber selbst wenn man das Feature ausschaltet, dann dauert es halt einfach zu lang.

Also das.

Johannes

Zum Glück kann man die Zahl runterladen.

Gibt es auf mersen.org gibt es eine ZIP-Datei 18 Megabyte.

Johannes

Falls man die braucht für irgendwas.

Jochen

Kann man den Leuten statt X schicken, statt den X-Sourcen.

Johannes

Gut, das ist mein völlig unkorrelierter Pick, aber es passt irgendwie in unsere Zeit rein.

Und das ist alles relativ neu.

Johannes

Also es ist vom 21.

Johannes

Oktober, als die Bestätigung kam.

Ja, oder CF, ich meine, keine Ahnung.

Jochen

Ja, ich würde ja ungern die Reihenfolge an völlig absolut nichts mit dem Thema zu tun haben, den Picks unterbrechen.

Jochen

Daher habe ich auch einen, der gar nichts mit dem eigentlichen Thema jetzt dieser Episode zu tun hat oder auch nicht mit Python oder sonst irgendwas.

Jochen

Und zwar, ich war jetzt letztens auf so einer Podcaster-Konferenz auf der Subscribe-Ilf in Berlin.

Dominik

Die Subscribe 10 ist übrigens schon vier Jahre her

oder so.

Jochen

Fünf, die waren 2019.

Ja, okay, fünf.

Jochen

Da waren wir auch und dann dachten wir, ja, da gehen wir zur nächsten auch und dann nichts war jetzt gerade fünf Jahre später.

Jochen

Da war so zwischendurch irgendwie waren da so leichte Pandemieschwankungen irgendwie am Start und das hat halt.

Dominik

Vor der Pandemie irgendwie schon egal.

Jochen

Es war auch kleiner, als also es waren deutlich weniger Leute da als jetzt vor fünf Jahren und das lag vor allen Dingen daran, dass inzwischen so Infrastruktur auch weggebrochen ist, die vorher ganz gut funktioniert hatte, nämlich Social Media.

Jochen

Also das war so ein Ding, alle, die man traf, ja, also klar, früher konnte man sowas, aber heute geht das ja nicht mehr, weil Social Media ist ja tot, da kann man das nicht mehr machen.

Jochen

Also man kann zum Beispiel für so eine Konferenz auch nicht mehr gut Werbung machen, weil man kann den Leuten nicht mehr davon erzählen, weil, ja, wo will man es den Leuten denn noch erzählen?

Jochen

Es gibt ja irgendwie nichts mehr.

Jochen

Und dann war halt so die Frage, okay, was kann man denn jetzt tun, wenn es das nicht mehr gibt?

Jochen

Und da war eine der Antworten halt, ah, naja, wir haben ja doch irgendwie ein Medium gerade so, wir haben da, baden da gerade unsere Hände sozusagen drin.

Jochen

Warum sagen wir nicht irgendwie in unseren Podcasts quasi, dass es solche Sachen gibt?

Jochen

Und dann war auch die Idee, dass man da so ein bisschen Werbematerial oder so schon mal fertig macht, dass man das eigentlich direkt verwenden kann, das ist dann noch nicht passiert, aber ich dachte, das kann ich jetzt mal nutzen, um das zu sagen, dass es sowas gibt.

Jochen

Und wenn man irgendwie da Interesse dran hat, kann man da auch hingehen.

Jochen

Da auch als Hörer, da waren zum Beispiel.

Dominik

Du meinst in der nächsten fünf Jahren?

Jochen

Nee, die nächste ist schon in einem halben Jahr.

Jochen

Die Frequenz so ein bisschen erhöhen und die nächste ist daher schon im Frühjahr, nächsten Jahres.

Jochen

Und es gab am Anfang so eine Vorstellungsrunde, wo alle gesagt haben, was sie so tun.

Jochen

Und da waren tatsächlich ein paar Leute dabei.

Jochen

Eine, eine Person hier auch aus Düsseldorf, die bezeichnet sich als Extremhörerin.

Jochen

Also es waren auch viele Hörer da.

Jochen

Es war sehr schön.

Jochen

Schöne Veranstaltung und weißt du, wo die nächste ist?

Auch Berlin.

Jochen

Ah, okay.

Jochen

Gleicher Location, also Weißen See.

Jochen

Und im Mai.

Carl Friedrich

Vielen Stunden ist man Extremhörerin.

Pro Tag?

Jochen

Ja, viele, viele pro Tag.

Dominik

20 oder so.

Jochen

Und sie meinte, ich war mit dir dann auf einem Hörertreffen am Samstagabend von einem anderen Podcast.

Jochen

Und da ist halt so, ja, also ja, es ist immer schwer zu sagen, wie viele Stunden Podcast ich denn jetzt so höre, weil ich höre immer auf irgendwie so zweieinhalbfache Geschwindigkeit, worauf alle am Tisch so zweieinhalbfach.

Jochen

Da muss man sich langsam rantasten.

Da fängt man nicht mit an.

Jochen

Man fängt zuerst an mit so 1,2 und dann 1,5 und dann geht das immer langsamer.

Ja, jetzt 1,5 ist schon.

Jochen

Ja, aber inzwischen kann ich das halt auch gar nicht mehr auf einfache Geschwindigkeit hören, weil da denke ich mir so, was ist.

Dominik

Ja, bei meisten kostet das mir auch nicht, das geht nicht.

Carl Friedrich

Ich finde es ja total lustig.

Carl Friedrich

Also man gewöhnt sich hatte wirklich total dran.

Carl Friedrich

Also ich bin nicht so extrem, ich höre vielleicht 1,2 oder 1,5 oder so.

Carl Friedrich

Und an das Sprechen gewöhnt man sich total.

Carl Friedrich

Aber wenn man so eine Zeit lang irgendwas mit normaler Geschwindigkeit und dann erhöht gehört hat, die Jingle klingt immer falsch.

Carl Friedrich

Also selbst Jahre, ich höre jetzt, was weiß ich, wie heißt der Microsoft C-Sharp-Typ?

Carl Friedrich

Hunzel Minutes.

Carl Friedrich

Höre ich seit Jahren, 20% schneller, die Jingle klingt immer noch falsch.

Jochen

Ja, es gibt

Dominik

gute Jingles, die hören sich auf unterschiedlichen Geschwindigkeiten ähnlich interessant an.

Carl Friedrich

Ich habe einen Python-Pick.

Carl Friedrich

Es gab eine super kleine Studie von Erit Katril, das ist eine C-Python Core-Entwicklerin, die eine Studie darüber gemacht hat, wie viele PyPI-Pakete Return, Break- oder Continue-Anweisungen in Finally-Blöcken machen.

Carl Friedrich

Weil es gab nämlich so eine kleine Diskussion darüber, ob man vielleicht, also Accept-Doppelpunkt, also ohne Angabe eines Exception-Typ abschaffen sollte, irgendwann in einer der nächsten Versionen.

Carl Friedrich

Da gab es total viel Gegenmeinung und dann haben sie das Vorhaben auch wieder aufgegeben.

Carl Friedrich

Aber eine der Ergebnisse von der Diskussion war eben einfach mal zu gucken, wie sieht das denn mit Finally aus?

Carl Friedrich

Und Return, Break und Continue, Finally haben wir so ein bisschen so komische Effekte.

Carl Friedrich

Wenn man einen Return macht, dann wird die Exception geschluckt.

Carl Friedrich

Also wenn ich quasi try-finely habe und the code worked an exception and in the finally block machine Return, then return dann returne ich halt einfach from the function and the exception verschwinded.

Carl Friedrich

And deswegen hat Irit eben gesagt sie schaut mal wie das in hier steht irgendwo wie viele Pakete sie angeschaut hat, here should go what the packets he had.

Carl Friedrich

The 8000 beliebtesten PyPI packets analyzed.

Carl Friedrich

Even a script geschrieben, was die abstrakten Syntax bäume durchgeht und schaut, ob eben das Finally Blöcke mit Break Continue and Return drin vorkommen und dann von Hand analysiert, wie viele von denen quasi wirklich so sein sollen und wie viele von denen ein Bugs sind.

Carl Friedrich

Also es waren 120 Millionen Zeilen Python und darin waren 200 Fälle von Kontrollflussinstruktionen in Finely-Blöcken.

Carl Friedrich

Davon waren 46 korrekt, aber diese 46 waren lauter Tests in irgendwelchen Lintern, die eben sicherstellen wollten, dass der Linter sagt, bitte verwende kein Return in Finele.

Carl Friedrich

Acht Fälle waren wirklich korrekt, also wirklich, wo das quasi gewollt ist, dass die Exception dann geschluckt wird.

Carl Friedrich

Und 149 waren dann eben Bugs, die Katrina dann auch immer bei den entsprechenden GitHub-Repositories gemeldet hat und die meisten dieser Bugs werden jetzt gefixt.

Carl Friedrich

Also so sieht schon so ein bisschen aus, als wäre das jetzt nicht so das wichtige Feature und auch ein Feature, was vielleicht eher zu Missanwendungen als zu korrekten Anwendungen führt.

Sehr schön.

Ja.

Carl Friedrich

Und wenn ihr wollt, habe ich noch ein mega nerdy Pick.

Carl Friedrich

Oh ja.

Carl Friedrich

Es gibt ein Paper, was einen C-Compiler für eine sehr kleine Timage von C nach Shell übersetzt.

Oh!

Carl Friedrich

Das ist vollständig genug, dass der C-Compiler sich dann, wenn er sich selbst nach Shell übersetzen kann.

Carl Friedrich

Und dann kann ich quasi, wenn ich nur irgendeine beliebige Unix-Shell habe, kann ich einen sehr kleinen C-Compiler-Bootstrappen.

Carl Friedrich

Und also die haben auch Gründe, das sind irgendwelche Forscher, die gute Gründe dafür haben, machen sie das machen.

Carl Friedrich

Nee, die haben so Trusting-Trust-Günde.

Carl Friedrich

Also es gibt, also damit kann man halt sicherstellen, dass man keine langlebigen Backdoors in Compilern hat.

Carl Friedrich

Aber die Kunde sind mir egal, warum ich das toll finde, ist, es gibt ja immer diese Argumente, C ist eine schnelle Sprache, weil die ist compiled und Python ist eine langsame Sprache, die ist interpretiert.

Carl Friedrich

Und das von solchen Argumenten hatte ich gar nichts, weil das ist halt eine Eigenschaft der Implementierung, ob was compiled oder interpretiert ist.

Carl Friedrich

Ich kann halt kompilierte Python-Implementierung haben und interpretiert.

Carl Friedrich

Und das sagt jetzt, also es ist keine inhärente Eigenschaft der Sprache.

Carl Friedrich

Und das ist einfach so ein schönes Gegenbeispiel, dass ich quasi eine kompilierte Version von C habe, die halt trotzdem ultra langsam ist.

Dominik

Okay, sehr schön.

Jochen

Ja, sehr schön.

Dominik

Ja, ich würde sagen, das war ein passendes Schlusswort.

Dominik

Jetzt könnt ihr ja auch wieder runterdrehen, eure Geschwindigkeit beim Hören.

Dominik

Und wünschen euch einen wunderschönen Tag, wunderschöne Nacht, wunderschönen Morgen, wunderschönen Aufdehnt.

Dominik

Bleibt uns gewogen, hallo at pythonpodcast.de für alles Feedback und so weiter.

Bis bald.

Jo.

Jochen

Tschüss.

Tschüss.

Ciao.