// HEISE ONLINE — FINANZA
Mojo 1: Sieht aus wie Python – ist aber mehr Rust
Nach gut drei Jahren räumt Anbieter Qualcomm beim Python-Ableger Mojo auf. Die Sprache wird einheitlicher, schlanker, aber auch strenger.
Das zu Qualcomm gehörende Unternehmen Modular hat die stabile Version 1.0 der Programmiersprache Mojo veröffentlicht. Die an Python angelehnte Sprache ist schlanker und einheitlicher geworden: Früher gab es oft mehrere Wege für dieselbe Sache, jetzt lassen sich Variablen beispielsweise einheitlich mit var deklarieren. Der Anbieter hat zudem Closures vereinheitlicht und die vormals getrennten Typen Pointer und UnsafePointer zu einem Pointer verschmolzen, bei dem die riskanten Operationen ein unsafe_ im Namen tragen müssen.
Version 1 ist zusammen mit Version 26.5 der hauseigenen KI-Plattform MAX erschienen, beide im selben GitHub-Release. MAX zählt Versionen kalendarisch nach Jahr und laufender Ausgabe, Mojo wechselt mit dem ersten stabilen Release dagegen auf semantische Versionierung und markiert erstmals einen Teil seiner Schnittstellen ausdrücklich als stabil.
Die tiefgreifendste Neuerung betrifft die Funktionsdefinition. Mojo kannte lange def für Python-ähnliche und fn für strenger geprüfte Funktionen. Auf dem Weg zu Version 1 hat Modular fn gestrichen: Seit der Beta 2 quittiert der Compiler das Schlüsselwort nicht mehr mit einer Warnung, sondern mit einem harten Fehler:
Verschwunden ist dabei nur das Schlüsselwort, nicht sein Verhalten: Die strengeren fn-Regeln gelten jetzt für def, das ohne ausdrückliches raises keine Ausnahmen mehr auslöst. Ein Umbenennen von fn zu def genügt daher meist, umgekehrt kann alter def-Code an den neuen Regeln scheitern.
Ebenfalls neu ist eine Lambda-Syntax für kurze anonyme Funktionen. Modular bewirbt sie als „Python-style“, verlangt aber Klammern und Typangaben: lambda (x: Int) -> Int: x * 2 statt Pythons lambda x: x * 2.
Über die Typprüfung hinaus erkennt der Compiler nun ungültig gewordene Referenzen. Wächst eine Liste über ihren reservierten Platz hinaus, zieht sie an eine größere Stelle im Speicher um, und ein Verweis auf die alte Stelle zeigt danach ins Leere. In C++ ist das ein klassischer Weg zu Absturz oder Sicherheitslücke. Mojo lehnt das jetzt schon beim Übersetzen ab:
ref first ist ein Verweis auf das erste Listenelement, keine Kopie. Die Typangabe List[Int] ist nötig, weil [1, 2, 3] in Mojo 1.0 sonst einen Array fester Länge ohne append erzeugt. Der Compiler benennt präzise, wo die Referenz ihre Gültigkeit verlor:
Zieht man print(first) vor das append, läuft dasselbe Programm anstandslos. Ergänzend hat Modular nach eigenen Angaben den Language Server stabilisiert.
Warum eine weitere Programmiersprache? – Python dominiert die KI-Entwicklung, ist in der verbreiteten CPython-Implementierung aber langsam; die Rechenarbeit übernehmen deshalb Bibliotheken in C, C++ oder CUDA. Dieses Zwei-Sprachen-Problem will Mojo auflösen. Die Sprache ist übersetzt und bringt statische Typprüfung, ein Ownership-Modell ohne Garbage Collector und direkte Hardwarekontrolle mit. Damit steht Mojo trotz vertrauter Python-Optik näher bei C++ und Rust als bei Python. Modular selbst nutzt Mojo als Grundlage von MAX und der Modular Cloud.