Betaversjon 1.0 av Mojo-programmeringssprΓ₯ket

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π΅Ρ‚Π° выпуск языка программирования 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-sprΓ₯ket utvikles under ledelse av Chris Lattner, grunnlegger og sjefsarkitekt for LLVM-prosjektet og skaperen av programmeringssprΓ₯ket Swift. Mojos syntaks er basert pΓ₯ Python-sprΓ₯ket, og typesystemet er nΓ¦r C/C++. Prosjektet er utpekt som et allmennbrukssprΓ₯k som utvider mulighetene til Python med systemprogrammeringsevner, er egnet for et bredt spekter av oppgaver, og kombinerer brukervennlighet for forskningsutvikling og rask prototyping med egnethet for sluttprodukter med hΓΈy ytelse.

Enkelhet oppnΓ₯s gjennom bruk av kjent Python-syntaks, og utviklingen av sluttprodukter tilrettelegges av muligheten til Γ₯ kompilere til maskinkode, minnesikre mekanismer og bruk av maskinvareakselerasjonsverktΓΈy. For Γ₯ oppnΓ₯ hΓΈy ytelse stΓΈttes parallellisering av beregninger ved Γ₯ bruke alle maskinvareressursene til heterogene systemer tilgjengelig i systemet, slik som GPUer, spesialiserte akseleratorer for maskinlΓ¦ring og vektorprosessorinstruksjoner (SIMD). For intensive beregninger gjΓΈr parallellisering og utnyttelse av alle dataressurser det mulig Γ₯ oppnΓ₯ ytelse som er overlegen C/C++-applikasjoner.

SprΓ₯ket stΓΈtter statisk skriving og minnesikre funksjoner pΓ₯ lavt nivΓ₯ som minner om Rust, for eksempel sporing av referanselevetid og lΓ₯nekontroll. Samtidig gir sprΓ₯ket ogsΓ₯ muligheter for arbeid pΓ₯ lavt nivΓ₯, for eksempel er det mulig Γ₯ fΓ₯ direkte tilgang til minnet i usikker modus ved Γ₯ bruke Pointer-typen, ringe individuelle SIMD-instruksjoner, eller tilgang til maskinvareutvidelser som TensorCores og AMX.

Mojo kan brukes bΓ₯de i tolkningsmodus ved bruk av JIT, og for kompilering til kjΓΈrbare filer (AOT, pΓ₯ forhΓ₯nd). Kompilatoren har innebygd moderne teknologi for automatisk optimalisering, caching og distribuert kompilering. Kildekode pΓ₯ Mojo-sprΓ₯ket konverteres til lavnivΓ₯ mellomkode MLIR (Multi-Level Intermediate Representation), utviklet av LLVM-prosjektet. Kompilatoren lar deg bruke ulike backends som stΓΈtter MLIR for Γ₯ generere maskinkode.

Π‘Ρ€Π΅Π΄ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² 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 Ρ€Π°Π·).

Kilde: opennet.ru