Mojo 1.0 程式語言的首個 Beta 版本已發布,標誌著該語言的穩定性以及所有核心功能的實現。此版本被認為已接近廣泛使用。 Mojo 1.0 的正式版預計將於初秋發售。使用此分支版本,您可以開始開發大型項目,而無需擔心語言相容性變更帶來的問題。
該平台包含使用 Mojo 語言開發應用程式所需的所有元件,包括編譯器、執行時間環境、用於建置和執行程式的互動式 REPL shell、偵錯器、帶有輸入自動補全、程式碼格式化和語法高亮功能的 Visual Studio Code (VS Code) 編輯器插件,以及用於建置和運行 Mojo notebook 的 Jupyter 整合式模組。 Mojo 標準函式庫以 Apache 2.0 授權開源,並包含一個 LLVM 專案例外,允許與 GPLv2 授權的程式碼混合使用。編譯器計畫在內部架構穩定後開源。
Mojo 語言是在 LLVM 專案的創始人兼首席架構師、Swift 程式語言的創建者 Chris Lattner 的領導下開發的。 Mojo的語法是基於Python語言,型別系統接近C/C++。該專案是一種通用語言,它透過系統程式設計工具擴展了 Python 語言的功能,適用於廣泛的任務,並結合了易於研發和快速成型的特點以及適合形成高效能最終產品的特點。
透過使用熟悉的 Python 語法實現了簡單性,並且透過編譯為機器碼的能力、記憶體安全機制以及使用硬體加速工具來促進最終產品的開發。為了實現高效能,使用系統中可用的異質系統的所有硬體資源(例如 GPU、機器學習專用加速器和向量處理器指令 (SIMD))支援運算並行化。對於密集運算,並行化和利用所有運算資源可以實現優於 C/C++ 應用程式的效能。
該語言支援靜態類型和類似 Rust 的低階記憶體安全功能,例如引用生命週期追蹤和借用檢查器。同時,語言也提供了低階工作的機會,例如可以使用Pointer類型在不安全模式下直接存取內存,呼叫單獨的SIMD指令,或存取TensorCores和AMX等硬體擴充。
Mojo 既可以在使用 JIT 的解釋模式下使用,也可以編譯為可執行檔(AOT,提前)。該編譯器內建了自動最佳化、快取和分散式編譯的現代技術。 Mojo 語言的原始程式碼轉換為由 LLVM 專案開發的低階中間程式碼 MLIR(多層中間表示)。編譯器可讓您使用支援 MLIR 的各種後端來產生機器碼。
Mojo 1.0.0b1 的更新內容包括:
- 「fn」關鍵字已被棄用-應使用「def」關鍵字來聲明函數(「fn」和「def」的特性已合併,「def」實現了「fn」的語義,而不會拋出例外)。
- 閉包的實現已統一。無狀態閉包現在會自動轉換為頂層函數,並可用作外部函數介面 (FFI) 中的回呼函數。新增了對引用捕獲的支援。函數聲明中新增了“thin”標誌,用於聲明不帶狀態捕獲的簡單函數指標類型。
- 現在,預設情況下,UnsafePointer 指針不會為空,必須使用「Optional[UnsafePointer[…]]」來處理空指針,從而消除處理空指針的開銷,同時仍然可以安全地在 FFI 中使用。
- 預設情況下,CPU 程式碼中的集合會啟用邊界檢查(在 GPU 上,為了提高效能,邊界檢查會被停用,但可以透過使用「mojo build -D ASSERT=all」進行建置來啟用)。已停止支援在索引中指定負值(“x[-1]”被禁止,但允許“x[len(x)-1]”)。
- NDBuffer 類型已從標準庫中移除;應改用 TileTensor。
- 已擴充對 Apple 系統上透過 Metal 圖形 API 使用 GPU 的支援(例如,現在支援 print() 和 M5 矩陣指令)。新增對 AMD MI250X 和 NVIDIA B300 加速器的支援。
- GPU 原語識別碼(執行緒和區塊索引)已改為傳回 Int 而不是 UInt。
- CPU 上下文(「DeviceContext(api="cpu")」)已改為串流排序。新增了 enqueue_cpu_function() 和 enqueue_cpu_range() 函數,以確保任務依序執行。
- String 和 StringSlice 類型現在支援字形簇(Unicode UAX #29),因此可以正確計算包含表情符號和組合字元的字串的長度並進行截斷。新增了 graphemes() 和 count_graphemes() 方法,以及 "[grapheme=…]" 切片語法。
- 實作了編譯時類型細化,以自動縮小「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
