Versione Beta 1.0 di u Linguaghju di Programmazione Mojo

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π΅Ρ‚Π° выпуск языка программирования Mojo 1.0, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ·Π½Π°ΠΌΠ΅Π½ΠΎΠ²Π°Π» ΡΡ‚Π°Π±ΠΈΠ»ΠΈΠ·Π°Ρ†ΠΈΡŽ языка ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ всСх Π±Π°Π·ΠΎΠ²Ρ‹Ρ… возмоТностСй. Выпуск оцСниваСтся ΠΊΠ°ΠΊ ΠΏΠΎΡ‡Ρ‚ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊ повсСмСстному использованию. Π€ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ· Mojo 1.0 оТидаСтся Π² Π½Π°Ρ‡Π°Π»Π΅ осСни. ИспользованиС Π΄Π°Π½Π½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, Π½Π΅ опасаясь появлСния Π² языкС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‰ΠΈΡ… ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ.

Π’ состав ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС Mojo, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ компилятор, runtime, ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ REPL-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ для сборки ΠΈ запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ, Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρƒ ΠΊΠΎΠ΄Π° Visual Studio Code (VS Code) с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ автодополнСния Π²Π²ΠΎΠ΄Π°, форматирования ΠΊΠΎΠ΄Π° ΠΈ подсвСтки синтаксиса, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с Jupyter для сборки ΠΈ запуска Mojo notebook. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Mojo ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0 c ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° LLVM, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΠΌΠΈ смСшиваниС с ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ GPLv2. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ компилятора ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ стабилизации Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹.

A lingua Mojo hè sviluppata sottu a guida di Chris Lattner, fundatore è architettu capu di u prughjettu LLVM è creatore di a lingua di prugrammazione Swift. A sintassi di Mojo hè basatu annantu à a lingua Python, è u sistema di tipu hè vicinu à C/C++. U prugettu hè presentatu cum'è una lingua di scopu generale chì estende e capacità di Python cù capacità di prugrammazione di sistemi, hè adattatu per una larga gamma di compiti, è unisce a facilità d'utilizazione per u sviluppu di ricerca è a prototipazione rapida cù l'adattabilità per i prudutti finali d'altu rendiment.

A simplicità hè ottenuta per mezu di l'usu di a sintassi familiare di Python, è u sviluppu di i prudutti finali hè facilitatu da a capacità di cumpilà à codice macchina, meccanismi sicuri di memoria, è l'usu di strumenti di accelerazione hardware. Per ottene un rendimentu altu, a parallelizazione di i calculi hè supportata utilizendu tutte e risorse hardware di sistemi eterogenei dispunibuli in u sistema, cum'è GPU, acceleratori specializati per l'apprendimentu di machine è istruzzioni di processore vettoriale (SIMD). Per i calculi intensivi, a parallelizazione è l'utilizazione di tutte e risorse di l'informatica permette di ottene un rendimentu superiore à l'applicazioni C/C++.

A lingua accumpagna a tipografia statica è e funzioni di salvezza di memoria di pocu livellu chì ricordanu Rust, cum'è u seguimentu di a vita di riferimentu è u verificatore di prestitu. À u stessu tempu, a lingua furnisce ancu opportunità per u travagliu di livellu bassu, per esempiu, hè pussibule accede direttamente à a memoria in modu inseguru cù u tipu Pointer, chjamate struzzioni SIMD individuali, o accessu à estensioni hardware cum'è TensorCores è AMX.

Mojo pò esse usatu sia in u modu di interpretazione cù JIT, sia per a compilazione in i fugliali eseguibili (AOT, prima di u tempu). U compilatore hà tecnulugii muderni integrati per ottimisazione automatica, caching è compilazione distribuita. U codice sorgente in a lingua Mojo hè cunvertitu in codice intermediu bassu MLIR (Multi-Level Intermediate Representation), sviluppatu da u prughjettu LLVM. U compilatore permette di utilizà diversi backends chì supportanu MLIR per generà codice macchina.

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