Die Entwickler der Programmiersprache Mojo haben mit der Überführung der Projektentwicklungen in die Kategorie Open Source begonnen. Zunächst wurde der Code der Standardbibliothek veröffentlicht, der jetzt unter der Lizenz Apache 2.0 mit Ausnahmen des LLVM-Projekts verfügbar ist, die eine Mischung mit Code unter der GPLv2-Lizenz erlauben. Neben der Veröffentlichung des Codes hat sich der Entwicklungsprozess in Richtung Offenheit und der Möglichkeit zur Einreichung von externen Änderungen durch Pull-Requests auf GitHub verlagert. Der Quellcode des Compilers soll nach Abschluss der Planung der internen Architektur veröffentlicht werden.
Im Repository wurden zwei Branches mit dem Code der Standardbibliothek Mojo erstellt: der Branch main, der mit der letzten stabilen Version von Mojo synchronisiert ist, und der Branch nightly, der den aktuellen Entwicklungsprozess widerspiegelt und mit den nächtlichen Builds von Mojo synchronisiert ist. Es wird empfohlen, den nightly-Branch von Teilnehmern zu nutzen, die an der Entwicklung teilnehmen und ihre Änderungen teilen möchten. Einige Module der Bibliothek sind jedoch vorerst nicht öffentlich zugänglich, aber es ist geplant, auch den verbleibenden, geschlossenen Code zu einem späteren Zeitpunkt in das öffentliche Repository zu verschieben. Im Wesentlichen bleibt der Code schnell entwickelnder Module, die zusätzliche Stabilisierungen benötigen, sowie Module, für die eine Überarbeitung geplant ist und die zusätzliche Überprüfung und Überarbeitung aufgrund von Verbindungen zu proprietären Projekten benötigen, weiterhin geschlossen.
Gleichzeitig wurde die Version 24.2 des Mojo SDK-Toolkits veröffentlicht, mit der Projekte auf dem lokalen System kompiliert werden können, sowie die Version 24.2 des MAX Engine, die eine Plattform für Entwicklungen im Bereich des maschinellen Lernens bietet. Das Mojo SDK umfasst alle notwendigen Komponenten zur Entwicklung von Anwendungen in der Programmiersprache Mojo, einschließlich Compiler, Runtime, einer interaktiven REPL-Shell zum Erstellen und Ausführen von Programmen, einem Debugger, einer Erweiterung für den Visual Studio Code-Editor (VS Code), die die Eingabeautovervollständigung, Codeformatierung und Syntaxhervorhebung unterstützt, sowie einem Modul zur Integration mit Jupyter zur Erstellung und Ausführung von Mojo-Notebooks. MAX Engine ergänzt das SDK mit Mitteln zur Entwicklung und Fehlerbehebung von Anwendungen, die Modelle des maschinellen Lernens in verschiedenen Formaten (TensorFlow, PyTorch, ONNX usw.) nutzen. Die Versionen des Mojo SDK und des MAX Engine wurden für die Plattformen Linux und macOS vorbereitet.
Zu den auffälligsten Änderungen in Mojo 24.2 gehören:
- Strukturen und andere nominale Typen können jetzt implizit mit Typklassen übereinstimmen. Zum Beispiel entspricht jede Struktur, für die die Methode __str__() implementiert ist, implizit der Typklasse Stringable und kann mit der Funktion str() verwendet werden.
- In den Mitteln zur Gewährleistung der Kompatibilität mit Python-Code wurde die Unterstützung für die Übergabe von Schlüsselwort-Argumenten in Python-Funktionen hinzugefügt. Zum Beispiel: «plt.plot((5, 10), (10, 15), color=»red»)»
- Die Unterstützung für die Übergabe einer variablen Anzahl von Argumenten, die durch Schlüsselwortzuweisungen festgelegt werden, wurde hinzugefügt. Zum Beispiel: «print_nicely(a=7, y=8)».
- Der Typ DynamicVector wurde in List umbenannt und in das Modul collections.list verschoben. Es wurde die Möglichkeit hinzugefügt, eine Liste aus einer beliebigen Anzahl von Werten zu erstellen, zum Beispiel: «var numbers = List[Int](1, 2, 3)».
- Der Funktion print() wurden die benannten Parameter sep und end hinzugefügt, über die die Werte für Trennzeichen und abschließende Ausgabe festgelegt werden können. Zum Beispiel führt der Befehl print(«Hello», «Mojo», sep=», «, end=»!!!\n») zu der Ausgabe «prints Hello, Mojo!!!».
Das Mojo-Projekt wird von Chris Lattner, dem Gründer und Chefarchitekten des LLVM-Projekts sowie dem Schöpfer der Programmiersprache Swift, geleitet. Die Syntax von Mojo basiert auf Python, während das Typsystem an C/C++ angelehnt ist. Das Projekt wird als eine universelle Sprache präsentiert, die die Möglichkeiten von Python mit systemprogrammierenden Fähigkeiten erweitert. Sie eignet sich für eine Vielzahl von Anwendungen und vereint die Benutzerfreundlichkeit für Forschungsentwicklungen und schnelles Prototyping mit der Eignung zur Erstellung von hochperformanten Endprodukten.
Die Einfachheit wird durch die Verwendung der vertrauten Syntax der Programmiersprache Python erreicht. Die Entwicklung von Endprodukten wird durch die Möglichkeit zur Kompilierung in Maschinencode, sichere Speicherverwaltungsmechanismen und die Verwendung von Hardwarebeschleunigung für Berechnungen unterstützt. Um hohe Leistung zu erzielen, wird eine Parallelisierung der Berechnungen unter Einbeziehung aller verfügbaren Hardware-Ressourcen in heterogenen Systemen wie GPUs, spezialisierten Beschleunigern für maschinelles Lernen und vektoriellen Prozessorinstruktionen (SIMD) unterstützt. Bei intensiven Berechnungen ermöglicht die Parallelisierung und Nutzung aller Rechenressourcen eine Leistungsfähigkeit, die über der von C/C++-Anwendungen liegt.
Die Sprache unterstützt statische Typisierung und bietet Möglichkeiten für sichere, low-level Speicherverwaltung, ähnlich wie die Funktionen von Rust, einschließlich Referenzlebensdauer-Tracking und das Überprüfen von Variablenleihgaben (Borrow Checker). Gleichzeitig sind im Sprachumfang auch Optionen für die low-level Arbeit verfügbar, wie der direkte Zugriff auf den Speicher im unsafe Modus über den Typ Pointer, das Ausführen spezifischer SIMD-Instruktionen und der Zugriff auf Hardware-Erweiterungen wie TensorCores und AMX.
Mojo kann sowohl im Interpretationsmodus mit JIT als auch zur Kompilierung in ausführbare Dateien (AOT, ahead-of-time) verwendet werden. Der Compiler ist mit modernen Technologien zur automatischen Optimierung, Caching und verteilten Kompilierung ausgestattet. Der Quellcode in Python wird in niedrigstufigen Zwischencode MLIR (Multi-Level Intermediate Representation) umgewandelt, das im Rahmen des LLVM-Projekts entwickelt wird. Der Compiler ermöglicht die Verwendung verschiedener Backends, die MLIR unterstützen, um Maschinencode zu generieren.
Quelle: opennet.ru
