Beta-Version der Programmiersprache Mojo 1.0

Die erste Beta-Version der Programmiersprache Mojo 1.0 wurde vorgestellt, die die Stabilisierung der Sprache und die Implementierung aller grundlegenden Funktionen markiert. Die Version wird als nahezu bereit für den umfassenden Einsatz bewertet. Der endgültige Release von Mojo 1.0 wird Anfang Herbst erwartet. Die Nutzung dieses Zweigs ermöglicht es Entwicklern, große Projekte zu starten, ohne befürchten zu müssen, dass Abänderungen an der Sprache die Kompatibilität beeinträchtigen.

Die Plattform umfasst die notwendigen Komponenten für die Anwendungsentwicklung in der Sprache Mojo, darunter einen Compiler, eine Runtime, eine interaktive REPL-Umgebung zum Erstellen und Ausführen von Programmen, einen Debugger sowie ein Add-on für den Visual Studio Code (VS Code) Editor, das Unterstützung für die Autovervollständigung, Codeformatierung und Syntaxhervorhebung bietet. Darüber hinaus gibt es ein Modul zur Integration mit Jupyter zur Erstellung und Ausführung von Mojo-Notebooks. Der Quellcode der Standardbibliothek von Mojo ist unter der Lizenz Apache 2.0 mit Ausnahmen aus dem LLVM-Projekt veröffentlicht, die eine Vermischung mit Code unter der GPLv2-Lizenz erlauben. Der Quellcode des Compilers soll nach Abschluss der Stabilisierung der internen Architektur veröffentlicht werden.

Die Mojo-Sprache entwickelt sich unter der Leitung von Chris Lattner, dem Gründer und Chefarchitekten des LLVM-Projekts und dem Erfinder der Programmiersprache Swift. Die Syntax von Mojo basiert auf Python, während das Typsystem den Sprachen C/C++ ähnelt. Das Projekt wird als eine universelle Sprache präsentiert, die die Möglichkeiten von Python durch systemnahe Programmierung erweitert. Sie ist für eine Vielzahl von Aufgaben geeignet und vereint die Anwendungsfreundlichkeit für Forschungsentwicklungen und schnelles Prototyping mit der Eignung zur Schaffung hochleistungsfähiger Endprodukte.

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.

Zu den Neuerungen in Mojo 1.0.0b1 gehören:

  • Das Schlüsselwort „fn“ ist veraltet – zur Deklaration von Funktionen sollte das Schlüsselwort „def“ verwendet werden (die Funktionen „fn“ und „def“ sind vereinheitlicht, und die Semantik von „fn“ ist in „def“ implementiert, ohne Ausnahmen zu generieren).
  • Die Implementierung von Closures wurde vereinheitlicht. Context-unabhängige Closures (stateless closures) werden jetzt automatisch in Top-Level-Funktionen umgewandelt und können als Callback-Aufrufe im FFI (Foreign Function Interface) verwendet werden. Die Unterstützung für Referenzauffang (ref capture) wurde hinzugefügt. Bei der Deklaration von Funktionen wurde das Attribut „thin“ hinzugefügt, um einen einfachen Funktionszeiger ohne Zustandsauffang zu deklarieren.
  • Zeiger des Typs UnsafePointer können jetzt standardmäßig keinen Nullwert mehr annehmen, und für den Umgang mit Nullzeigern muss „Optional[UnsafePointer[…]]“ verwendet werden, was es ermöglicht, die Kosten beim Arbeiten mit Nullzeigern zu minimieren und die sichere Anwendung im FFI zu gewährleisten.
  • In der Standardkonfiguration wird für die CPU in Sammlungen die Überprüfung der zulässigen Grenzen aktiviert (bei der GPU ist die Überprüfung deaktiviert, um die Leistung zu steigern, kann aber beim Bauen mit „mojo build -D ASSERT=all“ aktiviert werden). Die Unterstützung für negative Indizes wurde eingestellt („x[-1]“ ist nicht erlaubt, aber „x[len(x)-1]“ kann verwendet werden).
  • Der Typ NDBuffer wurde aus der Standardbibliothek entfernt. Stattdessen sollte TileTensor verwendet werden.
  • Die Unterstützung für die GPU-Nutzung über die Grafik-API Metal auf Apple-Systemen wurde erweitert (z. B. Unterstützung für print() und Matrizenbefehle M5). Die Beschleuniger AMD MI250X und NVIDIA B300 werden unterstützt.
  • Die Identifikatoren für GPU-Primitiven (Thread- und Block-Indizes) geben jetzt den Typ Int anstelle von UInt zurück.
  • Der CPU-Kontext (‘DeviceContext(api=„cpu“)’) ist nun stream-abhängig (stream-ordered). Für die geordnete Ausführung von Aufgaben wurden die Funktionen enqueue_cpu_function() und enqueue_cpu_range() hinzugefügt.
  • In den Typen String und StringSlice wurde die Unterstützung für grafemische Cluster (Unicode UAX #29) hinzugefügt, um die Länge korrekt zu berechnen und Strings mit Emojis und kombinierten Zeichen zu kürzen. Methoden wie graphemes() und count_graphemes() sowie der Syntax für Slices „[grapheme=…]“ wurden hinzugefügt.
  • Es wurde eine Typverfeinerung (Type Refinement) während der Kompilierung implementiert, um Typen innerhalb der Ausdrücke „where“, „if“ und „assert“ automatisch zu verfeinern (dies ermöglicht das Vermeiden einer expliziten Angabe von trait_downcast).
  • Ein einheitliches Reflexions-API wurde vorgeschlagen, das die neue Funktion reflect[T]() enthält, die Reflected[T] zurückgibt und die Funktionen struct_field_* sowie die alten Methoden get_type_name() ersetzt.

Gleichzeitig wurde die Veröffentlichung der MAX Framework 26.3 Engine angekündigt, die eine Plattform für Entwicklungen im Bereich des maschinellen Lernens bietet. MAX Framework ergänzt das Mojo-Toolkit mit Ressourcen zur Entwicklung und Fehlerbehebung von Anwendungen, die Modelle für maschinelles Lernen in verschiedenen Formaten (TensorFlow, PyTorch, ONNX usw.) verwenden. In der neuen Version von MAX Framework wurde die Möglichkeit zur Videogenerierung hinzugefügt, die Unterstützung für mehrere GPUs erweitert, und die Leistung des Interpreters erheblich gesteigert (einige Operationen sind nun 10-20 mal schneller).

Quelle: opennet.ru

Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы 🔥 Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы | ProHoster