ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΏΠ΅ΡΠ²ΡΠΉ Π±Π΅ΡΠ° Π²ΡΠΏΡΡΠΊ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Mojo 1.0, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ·Π½Π°ΠΌΠ΅Π½ΠΎΠ²Π°Π» ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ ΡΠ·ΡΠΊΠ° ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΡΠ΅Ρ Π±Π°Π·ΠΎΠ²ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ. ΠΡΠΏΡΡΠΊ ΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΡΡΠΈ Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΊ ΠΏΠΎΠ²ΡΠ΅ΠΌΠ΅ΡΡΠ½ΠΎΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. Π€ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠ΅Π»ΠΈΠ· Mojo 1.0 ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ Π² Π½Π°ΡΠ°Π»Π΅ ΠΎΡΠ΅Π½ΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΉ Π²Π΅ΡΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π°ΡΠ°ΡΡ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΊΡΡΠΏΠ½ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ, Π½Π΅ ΠΎΠΏΠ°ΡΠ°ΡΡΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π² ΡΠ·ΡΠΊΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π½Π°ΡΡΡΠ°ΡΡΠΈΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ.
Π ΡΠΎΡΡΠ°Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΡΠ·ΡΠΊΠ΅ Mojo, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, runtime, ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ REPL-ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ, Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΡ ΠΊΠΎΠ΄Π° Visual Studio Code (VS Code) Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Π°Π²ΡΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²Π²ΠΎΠ΄Π°, ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°, ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ Jupyter Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ Π·Π°ΠΏΡΡΠΊΠ° Mojo notebook. ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Mojo ΠΎΡΠΊΡΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0 c ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° LLVM, Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΠΈΠΌΠΈ ΡΠΌΠ΅ΡΠΈΠ²Π°Π½ΠΈΠ΅ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ GPLv2. ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΏΠ»Π°Π½ΠΈΡΡΡΡ ΠΎΡΠΊΡΡΡΡ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ.
Π―Π·ΡΠΊ Mojo ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ΄ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΠΌ ΠΡΠΈΡΠ° ΠΠ°ΡΠ½Π΅ΡΠ° (Chris Lattner), ΠΎΡΠ½ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΠΎΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ° LLVM ΠΈ ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Swift. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Mojo ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΡΠ·ΡΠΊΠ΅ Python, Π° ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΈΠΏΠΎΠ² Π±Π»ΠΈΠ·ΠΊΠ° ΠΊ C/C++. ΠΡΠΎΠ΅ΠΊΡ ΠΏΡΠ΅ΠΏΠΎΠ΄Π½ΠΎΡΠΈΡΡΡ ΠΊΠ°ΠΊ ΡΠ·ΡΠΊ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠ°ΡΡΠΈΡΡΡΡΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ·ΡΠΊΠ° Python ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ Π΄Π»Ρ ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΠΊΡΡΠ³Π° Π·Π°Π΄Π°Ρ ΠΈ ΡΠΎΡΠ΅ΡΠ°ΡΡΠΈΠΉ ΠΏΡΠΎΡΡΠΎΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π»Ρ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΎΠΊ ΠΈ Π±ΡΡΡΡΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΎΠ² Ρ ΠΏΡΠΈΠ³ΠΎΠ΄Π½ΠΎΡΡΡΡ Π΄Π»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ².
ΠΡΠΎΡΡΠΎΡΠ° Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ²ΡΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΡΠ·ΡΠΊΠ° Python, Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ² ΡΠΏΠΎΡΠΎΠ±ΡΡΠ²ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ ΠΈ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ² Π΄Π»Ρ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ. ΠΠ»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ Π²ΡΡΠΎΠΊΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Ρ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅Ρ ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π³Π΅ΡΠ΅ΡΠΎΠ³Π΅Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ GPU, ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΠΊΠΎΡΠΈΡΠ΅Π»ΠΈ Π΄Π»Ρ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΈ Π²Π΅ΠΊΡΠΎΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ (SIMD). ΠΡΠΈ ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΡ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅Ρ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΏΡΠ΅Π²ΠΎΡΡ ΠΎΠ΄ΡΡΠ΅ΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° C/C++.
Π―Π·ΡΠΊ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ, Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ·ΡΠΊΠ° Rust, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ ΡΡΡΠ»ΠΎΠΊ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π°ΠΈΠΌΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ (borrow checker). ΠΡΠΈ ΡΡΠΎΠΌ Π² ΡΠ·ΡΠΊΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΡΠΌΠΎΠ΅ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ°ΠΌΡΡΠΈ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ unsafe Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠ° Pointer, Π²ΡΠ·ΠΎΠ² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ SIMD-ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΈΠ»ΠΈ Π΄ΠΎΡΡΡΠΏ ΠΊ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌ, ΡΠ°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ TensorCores ΠΈ AMX.
Mojo ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ JIT, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ (AOT, ahead-of-time). Π ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΡΡΠΎΠ΅Π½Ρ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° ΡΠ·ΡΠΊΠ΅ Mojo ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΡΡ Π² Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΠΊΠΎΠ΄ MLIR (Multi-Level Intermediate Representation), ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ LLVM. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π±ΡΠΊΠ΅Π½Π΄Ρ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠ΅ MLIR.
Π‘ΡΠ΅Π΄ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² 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 ΡΠ°Π·).
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
