Die Entwickler der Programmiersprache Mojo haben begonnen, die Ergebnisse des Projekts in den Bereich der Open-Source-Software zu übertragen. Zunächst wurde der Code der Standardbibliothek veröffentlicht, der nun unter der Lizenz Apache 2.0 mit Ausnahmeregelungen des LLVM-Projekts verfügbar ist, die eine Vermischung mit GPLv2-lizenziertem Code zulassen. Neben der Veröffentlichung des Codes hat sich der Entwicklungsprozess in Richtung Offenheit verschoben, wobei es nun möglich ist, externe Änderungen über das Einreichen von Pull-Requests auf GitHub zu übermitteln. Die Quelltexte des Compilers sollen nach Abschluss der Planung der internen Architektur veröffentlicht werden.
Im Repository wurden zwei Branches mit dem Code der Standardbibliothek Mojo angelegt: 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. Der nightly-Branch wird den Teilnehmern empfohlen, die an der Entwicklung teilnehmen und ihre Änderungen teilen möchten. Dabei sind einige Module der Bibliothek derzeit noch nicht öffentlich, aber nach einiger Zeit ist auch geplant, den verbleibenden geschlossenen Code in das öffentliche Repository zu übertragen. In der Regel bleibt der Code schnelllebiger Module, die zusätzliche Stabilisierung erfordern, Module, für die Refactoring geplant ist, sowie Module, die wegen ihrer Verbindung zu proprietären Projekten zusätzliche Überprüfung und Überarbeitung benötigen, weiterhin geschlossen.
Gleichzeitig wurde die Version 24.2 des Mojo SDK veröffentlicht, die es ermöglicht, Projekte auf lokalen Systemen zu kompilieren, sowie die Version 24.2 der MAX Engine, die eine Plattform für Entwicklungen im Bereich des maschinellen Lernens bietet. Das Mojo SDK umfasst die notwendigen Komponenten zur Entwicklung von Anwendungen in der Sprache Mojo, einschließlich Compiler, Runtime, einer interaktiven REPL-Shell zum Erstellen und Ausführen von Programmen, einem Debugger, ein Plugin für den Visual Studio Code (VS Code) mit Unterstützung für Autovervollständigung, Codeformatierung und Syntaxhervorhebung sowie ein Modul zur Integration mit Jupyter zum Erstellen und Ausführen von Mojo-Notebooks. Die MAX Engine ergänzt das SDK um Tools zur Entwicklung und Fehlerbehebung von Anwendungen, die Modelle des maschinellen Lernens in verschiedenen Formaten (TensorFlow, PyTorch, ONNX usw.) verwenden. Die Versionen des Mojo SDK und der MAX Engine wurden für die Plattformen Linux und macOS vorbereitet.
Zu den bemerkenswertesten Änderungen in Mojo 24.2 gehören:
- Strukturen und andere nominale Typen können jetzt implizit Typen entsprechen. Zum Beispiel entspricht jede Struktur, für die die Methode __str__() implementiert ist, implizit dem Typ Stringable und kann mit der Funktion str() verwendet werden.
- In den Tools zur Gewährleistung der Kompatibilität mit Python-Code wurde die Unterstützung für die Übergabe von argumentbasierten Schlüsselwörtern an 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 die Zuweisung von Schlüsselwörtern 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)“.
- Die Funktion print() erhielt die benannten Parameter sep und end, über die Werte für den Trenner und die abschließende Ausgabe festgelegt werden können. Zum Beispiel, die Ausführung von print(„Hello“, „Mojo“, sep=„, “, end=„!!!\n“) führt zur Ausgabe „prints Hello, Mojo!!!“.
Das Projekt Mojo entwickelt sich unter der Leitung von Chris Lattner, dem Gründer und Chief Architect des LLVM-Projekts und dem Schöpfer der Programmiersprache Swift. Die Syntax von Mojo basiert auf Python, und das Typsystem ist ähnlich wie in C/C++. Das Projekt wird als eine allgemeine Programmiersprache präsentiert, die die Möglichkeiten von Python mit systemnaher Programmierung erweitert, geeignet für eine Vielzahl von Aufgaben und kombiniert die Benutzerfreundlichkeit für Forschung und schnelle Prototypenerstellung mit der Eignung zur Erstellung leistungsstarker Endprodukte.
Die Einfachheit wird durch die Verwendung der vertrauten Syntax der Programmiersprache Python erreicht, während die Entwicklung von Endprodukten durch die Möglichkeit der Kompilierung in Maschinencode, Mechanismen für eine sichere Speicherverwaltung und die Nutzung von Mitteln zur Hardwarebeschleunigung von Berechnungen unterstützt wird. Um eine hohe Leistung zu erzielen, wird die Parallelisierung von Berechnungen unter Einbeziehung aller in heterogenen Systemen vorhandenen Hardware-Ressourcen, wie GPUs, spezialisierten Beschleunigern für maschinelles Lernen und Vektorprozessoranweisungen (SIMD), unterstützt. Bei intensiven Berechnungen ermöglicht die Parallelisierung und Nutzung aller Rechenressourcen eine Leistung, die Anwendungen in C/C++ übertrifft.
Die Sprache unterstützt statische Typisierung und Mittel für sichere, niedrigstufige Speicheroperationen, die an die Möglichkeiten der Sprache Rust erinnern, wie z. B. die Verfolgung der Lebensdauer von Referenzen und die Überprüfung der Variablenentleihung (borrow checker). Gleichzeitig sind in der Sprache auch Funktionen für die niedrigstufige Arbeit verfügbar, z. B. das direkte Zugreifen auf den Speicher im unsafe-Modus mit dem Typ Pointer, der Aufruf einzelner SIMD-Anweisungen oder der Zugriff auf Hardwareerweiterungen 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 integriert moderne Technologien zur automatischen Optimierung, Caching und verteilten Kompilierung. Der Quellcode in Mojo wird in einen niedrigstufigen Zwischencode MLIR (Multi-Level Intermediate Representation) umgewandelt, der im LLVM-Projekt entwickelt wird. Der Compiler ermöglicht die Verwendung verschiedener Backends, die MLIR unterstützen, zur Generierung von Maschinencode.
Quelle: opennet.ru
