ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΏΠ΅ΡΠ²ΡΠΉ Π±Π΅ΡΠ° Π²ΡΠΏΡΡΠΊ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Mojo 1.0, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ·Π½Π°ΠΌΠ΅Π½ΠΎΠ²Π°Π» ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ ΡΠ·ΡΠΊΠ° ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΡΠ΅Ρ Π±Π°Π·ΠΎΠ²ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ. ΠΡΠΏΡΡΠΊ ΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΡΡΠΈ Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΊ ΠΏΠΎΠ²ΡΠ΅ΠΌΠ΅ΡΡΠ½ΠΎΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. Π€ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠ΅Π»ΠΈΠ· Mojo 1.0 ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ Π² Π½Π°ΡΠ°Π»Π΅ ΠΎΡΠ΅Π½ΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΉ Π²Π΅ΡΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π°ΡΠ°ΡΡ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΊΡΡΠΏΠ½ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ, Π½Π΅ ΠΎΠΏΠ°ΡΠ°ΡΡΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π² ΡΠ·ΡΠΊΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π½Π°ΡΡΡΠ°ΡΡΠΈΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ.
Π ΡΠΎΡΡΠ°Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΡΠ·ΡΠΊΠ΅ Mojo, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, runtime, ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ REPL-ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ, Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΡ ΠΊΠΎΠ΄Π° Visual Studio Code (VS Code) Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Π°Π²ΡΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²Π²ΠΎΠ΄Π°, ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°, ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ Jupyter Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ Π·Π°ΠΏΡΡΠΊΠ° Mojo notebook. ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Mojo ΠΎΡΠΊΡΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0 c ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° LLVM, Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΠΈΠΌΠΈ ΡΠΌΠ΅ΡΠΈΠ²Π°Π½ΠΈΠ΅ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ GPLv2. ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΏΠ»Π°Π½ΠΈΡΡΡΡ ΠΎΡΠΊΡΡΡΡ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ.
Die Sprache Mojo wird unter der Leitung von Chris Lattner entwickelt, dem GrΓΌnder und Chefarchitekten des LLVM-Projekts und Erfinder der Programmiersprache Swift. Die Syntax von Mojo basiert auf der Sprache Python und das Typsystem Γ€hnelt C/C++. Das Projekt wird als Allzwecksprache prΓ€sentiert, die die FΓ€higkeiten der Python-Sprache um Systemprogrammiertools erweitert, fΓΌr eine breite Palette von Aufgaben geeignet ist und Benutzerfreundlichkeit fΓΌr Forschung und Entwicklung sowie schnelles Prototyping mit der Eignung fΓΌr die Herstellung leistungsstarker Endprodukte kombiniert.
Einfachheit wird durch die Verwendung der vertrauten Python-Syntax erreicht und die Entwicklung von Endprodukten wird durch die MΓΆglichkeit zur Kompilierung in Maschinencode, speichersichere Mechanismen und den Einsatz von Hardwarebeschleunigungstools erleichtert. Um eine hohe Leistung zu erreichen, wird die Parallelisierung von Berechnungen unter Verwendung aller im System verfΓΌgbaren Hardwareressourcen heterogener Systeme unterstΓΌtzt, wie z. B. GPUs, spezialisierte Beschleuniger fΓΌr maschinelles Lernen und Vektorprozessoranweisungen (SIMD). Bei intensiven Berechnungen ermΓΆglicht die Parallelisierung und Nutzung aller Rechenressourcen eine hΓΆhere Leistung als bei C/C++-Anwendungen.
Die Sprache unterstΓΌtzt statische Typisierung und speichersichere Low-Level-Funktionen, die an Rust erinnern, wie z. B. die Nachverfolgung der Referenzlebensdauer und die AusleihprΓΌfung. Gleichzeitig bietet die Sprache auch MΓΆglichkeiten fΓΌr Low-Level-Arbeiten, so ist es beispielsweise mΓΆglich, ΓΌber den Pointer-Typ im unsicheren Modus direkt auf den Speicher zuzugreifen, einzelne SIMD-Anweisungen aufzurufen oder auf Hardware-Erweiterungen wie TensorCores und AMX zuzugreifen.
Mojo kann sowohl im Interpretationsmodus mit JIT als auch zur Kompilierung in ausfΓΌhrbare Dateien (AOT, Ahead-of-Time) verwendet werden. Der Compiler verfΓΌgt ΓΌber integrierte moderne Technologien fΓΌr automatische Optimierung, Caching und verteilte Kompilierung. Der Quellcode in der Mojo-Sprache wird in den vom LLVM-Projekt entwickelten Low-Level-Zwischencode MLIR (Multi-Level Intermediate Representation) konvertiert. Mit dem Compiler kΓΆnnen Sie verschiedene Backends verwenden, die MLIR unterstΓΌtzen, um Maschinencode zu generieren.
Π‘ΡΠ΅Π΄ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Mojo 1.0.0b1:
- ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ Β«fnΒ» ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΎ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌ β Π΄Π»Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ Β«defΒ» (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Β«fnΒ» ΠΈ Β«defΒ» ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Ρ, ΠΈ Π² Β«defΒ» ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ° Β«fnΒ» Π±Π΅Π· Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ).
- Π£Π½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ (closure). ΠΠ΅ ΡΡΠΈΡΡΠ²Π°ΡΡΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ (stateless closure) ΡΠ΅ΠΏΠ΅ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ callback-Π²ΡΠ·ΠΎΠ²Ρ Π² FFI (Foreign Function Interface). ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π·Π°Ρ Π²Π°ΡΠ° ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ (ref capture). ΠΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΡΠΈΠ·Π½Π°ΠΊ Β«thinΒ» Π΄Π»Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π±Π΅Π· Π·Π°Ρ Π²Π°ΡΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ.
- Π£ΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Ρ ΡΠΈΠΏΠΎΠΌ UnsafePointer ΡΠ΅ΠΏΠ΅ΡΡ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ null ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ null-ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Β«Optional[UnsafePointer[β¦]]Β», ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ null-ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² FFI.
- ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΠΊΠΎΠ΄Π΅ Π΄Π»Ρ CPU Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΡ Π³ΡΠ°Π½ΠΈΡ (Π½Π° GPU ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΡΠΊΠ»ΡΡΠ΅Π½Π° Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ Ρ Β«mojo build -D ASSERT=allΒ»). ΠΡΠ΅ΠΊΡΠ°ΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ (Π·Π°ΠΏΡΠ΅ΡΠ΅Π½ΠΎ Β«x[-1]Β», Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Β«x[len(x)-1]Β»).
- ΠΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΡΠ΄Π°Π»ΡΠ½ ΡΠΈΠΏ NDBuffer, Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ TileTensor.
- Π Π°ΡΡΠΈΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°Π±ΠΎΡΡ Ρ GPU ΡΠ΅ΡΠ΅Π· Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ API Metal Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Apple (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° print() ΠΈ ΠΌΠ°ΡΡΠΈΡΠ½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ M5). ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΡΠΊΠΎΡΠΈΡΠ΅Π»Π΅ΠΉ AMD MI250X ΠΈ NVIDIA B300.
- ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ² GPU (ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈ Π±Π»ΠΎΠΊΠΎΠ²) ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Ρ Π½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Int Π²ΠΌΠ΅ΡΡΠΎ UInt.
- ΠΠΎΠ½ΡΠ΅ΠΊΡΡ CPU (βDeviceContext(api=Β»cpuΒ»)β) ΡΡΠ°Π» ΠΏΠΎΡΠΎΠΊΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΡΠΌ (stream-ordered). ΠΠ»Ρ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ enqueue_cpu_function() ΠΈ enqueue_cpu_range().
- Π ΡΠΈΠΏΠ°Ρ String ΠΈ StringSlice Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π³ΡΠ°ΡΠ΅ΠΌΠ½ΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ² (Unicode UAX #29), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ Π²ΡΡΠΈΡΠ»ΡΡΡ Π΄Π»ΠΈΠ½Ρ ΠΈ ΠΎΠ±ΡΠ΅Π·Π°ΡΡ ΡΡΡΠΎΠΊΠΈ Ρ emoji ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². ΠΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ graphemes() ΠΈ count_graphemes(), Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠ»Π°ΠΉΡΠΎΠ² Β«[grapheme=β¦]Β».
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΡΡΠΎΡΠ½Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ² (Type Refinement) Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΡΠΆΠ΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² Π²Π½ΡΡΡΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Β«whereΒ», Β«ifΒ» ΠΈ Β«assertΒ» (ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ Π±Π΅Π· ΡΠ²Π½ΠΎΠ³ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΈΡ trait_downcast).
- ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ ΡΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ API ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π° Π½ΠΎΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ reflect[T](), Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠ°Ρ Reflected[T] ΠΈ Π·Π°ΠΌΠ΅Π½ΡΡΡΠ°Ρ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ struct_field_* ΠΈ ΡΡΠ°ΡΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ get_type_name().
ΠΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ Π²ΡΠΏΡΡΠΊ Π΄Π²ΠΈΠΆΠΊΠ° MAX Framework 26.3, ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡΠ΅Π³ΠΎ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΎΠΊ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ. MAX Framework Π΄ΠΎΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Mojo ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ
ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΡΠΎΡΠΌΠ°ΡΠ°Ρ
(TensorFlow, PyTorch, ONNX ΠΈ Ρ.ΠΏ.). Π Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ MAX Framework Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π²ΠΈΠ΄Π΅ΠΎ, ΡΠ°ΡΡΠΈΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°Π±ΠΎΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
GPU, Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ²ΡΡΠ΅Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° (Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ°Π»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π±ΡΡΡΡΠ΅Π΅ Π² 10-20 ΡΠ°Π·).
Source: opennet.ru
