Π‘Π΅Ρ‚Π°-выпуск языка программирования Mojo 1.0

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π΅Ρ‚Π° выпуск языка программирования 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