Die Welt der Python-Typüberprüfung erlebt einen spannenden Wandel durch zwei aufstrebende Tools namens Pyrefly und Ty, die beide in Rust entwickelt wurden und vielversprechende Neuerungen für Entwicklergemeinschaften bieten. Der Python-Typcheck-Markt wurde lange Zeit von mypy und pyright dominiert. Mit dem Aufkommen dieser zwei neuen Rust-basierten Typprüfer zeichnet sich eine zukünftige Veränderung in der Landschaft ab, die Geschwindigkeit, Usability und Präzision der Typüberprüfung neu definieren könnte. Beide Werkzeuge sind noch in der frühen Alpha-Phase, doch dank verschiedener Präsentationen, Benchmarks und persönlicher Gespräche mit den Teams hinter den Projekten lässt sich bereits ein detailliertes Bild zeichnen. Pyrefly wurde von Meta entwickelt und verfolgt ehrgeizige Ziele, um den Vorgänger Pyre, der in OCaml geschrieben wurde, abzulösen.
Pyrefly soll deutlich schneller, portabler und leistungsfähiger sein. Zudem hat das Pyrefly-Team klar kommuniziert, dass es sich um ein echtes Open-Source-Projekt handelt, das auf Kooperation mit der Community setzt. Dies hebt es deutlich von ihrem früheren Ansatz ab, bei dem das Quellcodeangebot mehr aus Eigenbedürfnissen entstand und weniger auf umfangreiche offene Zusammenarbeit abzielte. Ty hingegen ist ein Produkt von Astral, bekannt durch Projekte wie uv und ruff, und wurde ursprünglich unter dem Namen Red-Knot entwickelt. Im Vergleich zu Meta hat Astral bisher eher eine zurückhaltende Position in der Ankündigung und Kommunikation eingenommen.
Ty wurde mit dem klaren Ziel entworfen, eine inkrementelle und präzise Typen-Analyse anzubieten, die sich stark an der sogenannten „gradual guarantee“ orientiert. Diese besagt, dass ein korrekt laufendes Programm bei Entfernen von Typannotationen keine neuen Typfehler verursachen sollte. Damit möchte Ty ein besonders benutzerfreundliches Verhalten garantieren, das sich nahtlos in Entwicklungsabläufe einfügt. Technisch basieren beide Ansätze auf Rust und setzen für die abstrakte Syntaxbaum-Verarbeitung auf Ruff. Bei der inkrementellen Verarbeitung unterscheiden sie sich jedoch: Während Pyrefly modulbasiert agiert und eine Änderung im Modul eine erneute Analyse des gesamten Moduls erfordert, setzt Ty auf das feinere „Salsa“-Framework, das nur betroffene Funktionen und abhängige Bereiche neu analysiert, was potenziell flexibler und ressourcenschonender ist.
Im Bereich der Geschwindigkeit zeichnen sich beide Tools durch deutliche Verbesserungen gegenüber etablierten Typprüfern aus. Pyrefly betont eine enorme Steigerung – 35-mal schneller als Pyre und bis zu 14-mal schneller als mypy oder pyright mit einer Leistungsfähigkeit von bis zu 1,8 Millionen Zeilen Code pro Sekunde. Benchmarks anhand großer Projekte wie PyTorch oder Django zeigen, dass Ty zwar insgesamt etwas schneller ist als Pyrefly, doch beide liegen deutlich vor den klassischen Typprüfern. Allerdings ist die noch unfertige Alpha-Phase zu beachten, welche die Ergebnisse beeinflussen kann. Inhaltlich verfolgen Pyrefly und Ty unterschiedliche Philosophien und Schwerpunkte.
Pyrefly agiert eher aggressiv, indem es versucht, möglichst viele Typen auch ohne explizite Annotationen zu ermitteln. Dieses Verhalten kann dazu führen, dass potenzielle Fehler frühzeitig erkannt werden, es kann aber auch zu einem strengerem Verhalten mit mehr Fehlermeldungen führen. Ty hingegen setzt auf die „gradual guarantee“ und behandelt Typen zu Beginn eher konservativ mit zusätzlichen Unbekannt-Typen, um das Auftreten von unnötigen Fehlern zu minimieren und das Arbeiten mit dynamisch typisiertem Code zu erleichtern. Dies zeigt sich beispielhaft in Situationen, in denen Pyrefly und andere traditionelle Typprüfer einen Typfehler melden, Ty diesen jedoch ausblendet und somit mehr Anpassungsfähigkeit bietet. Betrachtet man die Fähigkeiten bei der impliziten Typinferenz, punktet Pyrefly vor allem mit seiner Präzision beim Ableiten komplexeren Typsignaturen – beispielsweise bei Rückgabetypen von Funktionen oder der Typisierung von verschachtelten Datenstrukturen.
Ty unterstützt zwar ebenfalls die Inferenz, bleibt aus Gründen der Nutzerfreundlichkeit oft zurückhaltender und klassifiziert Typen mit „Unknown“, um Flexibilität zu gewährleisten. Wichtig ist an dieser Stelle, dass Ty noch an der Verbesserung seiner Typinferenz arbeitet und einige der identifizierten Verhaltensweisen nicht endgültig sind. Generische Typen, also die Fähigkeit, Typparameter zu verarbeiten, sind ebenfalls ein Unterschiedspunkt. Pyrefly hat hier einen robusten Ansatz und löst auch komplexere generische Szenarien mit hoher Genauigkeit auf. Ty zeigt zwar Grundfunktionalitäten, bleibt bei komplexeren generischen Strukturen teilweise hinter Pyrefly zurück und produziert häufig „Unknown“ als Typ.
Beide Werkzeuge zeigen noch Schwierigkeiten mit Variance-Eigenschaften (Ko- und Kontravarianz), was jedoch auch aktuelle etablierte Typprüfer betrifft. Besonders beeindruckend sind die von Ty eingeführten Typkonstrukte wie Schnittmengen- und Negationstypen. Während andere Prüfer bei Filterungslogiken oder Bedingungen oft mit Regelausnahmen leben müssen, kann Ty auf diese Typen zurückgreifen, um sehr präzise Typzustände abzubilden. Beispielsweise ist Ty in der Lage, in einer Bedingung, die bestimmten Typ ausschließt, genau diesen Typ als Negation zu berücksichtigen – eine Fähigkeit, die neue Paradigmen in die statische Analyse von Python bringen kann. Ty używa tych mechanizmów również demonstracyjnie do „rozwiązywania” równań Diophantusa na poziome typów, pokazując kreatywność i nowe możliwości modelowania problemów matematycznych za pomocą systemu typów.
Im Bereich der Fehlermeldungen bemüht sich vor allem Ty um klare und verständliche Meldungen, die den Entwicklern den Einstieg erleichtern und Missverständnisse vermeiden helfen. Dies ist ein wichtiger Faktor für die Akzeptanz eines jeden Typprüfers. Pyrefly und die anderen bestehenden Tools erzeugen meist eher technische und kompakte Fehlermeldungen, die mitunter schwieriger zu interpretieren sind. Beide Projekte stecken noch in der Anfangsphase ihrer Entwicklung, was bedeutet, dass es aktuell noch zu fehlenden Features, Bugs oder unbehandelten Situationen kommen kann. Dennoch sind ihre Fortschritte und Ansätze vielversprechend und könnten langfristig wesentlichen Einfluss auf die Python-Entwicklung haben.
Insgesamt zeigen Pyrefly und Ty zwei unterschiedliche, aber gleichermaßen spannende Wege auf, wie Python-Typüberprüfung zukünftig funktionieren kann. Pyrefly steht für aggressive Typinferenz und offene Community-Zusammenarbeit, während Ty vor allem für Eingliederungskomfort durch die „gradual guarantee“ und innovative Typkonstrukte steht. Die Wahl zwischen beiden wird daher maßgeblich von individuellen Projektanforderungen und Präferenzen abhängen. Für Entwickler bedeutet das eine spannende Zeit mit neuen Werkzeugen, die sowohl die Geschwindigkeit als auch die Präzision der statischen Typisierung weiter verbessern können. Es bleibt abzuwarten, wie sich beide Projekte weiterentwickeln und ob sie sich langfristig ergänzen oder einer den anderen verdrängen wird.
Bis dahin sind neugierige Entwickler eingeladen, die experimentellen Versionen von Pyrefly und Ty auszuprobieren, ihre Erfahrungen zu teilen und am Wachstum der Python-Typprüferlandschaft teilzuhaben. Zudem gibt es Gerüchte, dass auch andere große Unternehmen wie Google an eigenen, leistungsstarken Python-Typprüfern arbeiten, was die Attraktivität und Innovationskraft dieses Bereichs weiter steigert. Die Zukunft der Python-Typüberprüfung verspricht folglich spannend, schnell und vielfältig zu werden.