天天看點

LLVM&Swift之父推出全新AI開發語言Mojo,快Python 35k+倍!

作者:進階前端進階

大家好,很高興又見面了,我是"進階前端進階",由我帶着大家一起關注前端前沿、深入前端底層技術,大家一起進步,也歡迎大家關注、點贊、收藏、轉發!

LLVM&Swift之父推出全新AI開發語言Mojo,快Python 35k+倍!

進階前端進階

今天給大家帶來的主題是适用于所有 AI 開發人員的新程式設計語言-Mojo,話不多說,直接開始!

1.什麼是 Mojo

Mojo Lang 是一種革命性的程式設計語言,其是 Python 語言的超集,提供了利用整個 Python 庫生态的能力,目标是提供比 Python 更高的執行速度和效率,一些基準測試顯示它的速度最高可達 Python 的 35,000 倍。

LLVM&Swift之父推出全新AI開發語言Mojo,快Python 35k+倍!

同時,Mojo 提供了比 Python 和 Ruby 等其他語言更好的記憶體管理和執行速度,可用于各種應用程式,包括但不限于以下場景:

  • Web 開發:Mojo 有一個内置的 Web 伺服器,并為開發 Web 應用程式提供了簡單直覺的文法,可用于建構基于 Web 的應用程式和 API。
  • 科學計算:Mojo 對複雜計算和數值運算的強大支援使其成為科學計算的絕佳選擇,可用于開發模拟、資料分析工具和數學模型。
  • 系統程式設計:Mojo 的底層功能和對系統級程式設計的支援使其非常适合開發作業系統、裝置驅動程式和其他系統級應用程式。
  • 遊戲開發:Mojo 的高性能功能以及對圖形和聲音的支援使其成為遊戲開發的絕佳選擇。
  • 網絡程式設計:Mojo 對異步 I/O 和并發的支援使其非常适合開發網絡應用程式,例如伺服器和用戶端
  • AI 人工智能:Mojo 的快速執行速度和對複雜計算的支援使其成為開發機器學習、自然語言處理和計算機視覺等 AI 應用程式的絕佳選擇。

總體來看,Mojo 語言專為在 GPU、運作 CUDA(Compute Unified Device Architecture,顯示卡廠商 NVIDIA 推出的運算平台) 和其他加速器等 AI 硬體上進行程式設計而設計。借助内置的自動調整功能,Mojo Lang 可以針對目标硬體優化代碼,確定最佳性能。

2.關于 Mojo Lang 的五件事

起源和建立者

Mojo 語言來自 Chris Lattner 創立的公司,Apple 工作期間他建立了 Swift 程式設計語言和 LLVM(Low Level Virtual Machine) 編譯器工具鍊(LLVM 是一組編譯器和工具鍊技術,可用于開發任何程式設計語言的前端和任何指令集架構的後端)。

Mojo 是一種面向 AI 開發人員的程式設計語言,旨在将 Python 的可用性以及與 Python 生态系統的完全相容性與 C 性能相結合。 底層系統程式設計和進階編譯功能通過 MLIR(Multi-Level Intermediate Representation,多級中間表示編譯器架構)實作。

Mojo 于 5 月 2 日面世,旨在彌合研究與生産之間的差距,利用 Python 文法以及系統程式設計和編譯時元程式設計。 Modular(AI 基礎設施公司) 讓 Mojo 比 C++ 更快,比 Nvidia 的 CUDA 更容易破解,并且和 Rust 一樣安全。

Python 的超集

Mojo Lang 是 Python 的超集,這意味着開發者無需學習一門全新的語言即可利用它的優勢。 如果已經精通 Python,則可以輕松過渡到 Mojo Lang。

def your_function():
    let x: Int = 42
    let y: F64 = 17.0

    let z: F32
    if x != 0:
        z = 1.0
    else:
        z = foo()
    print(z)

def foo() -> F32:
    return 3.14

your_function()
           

強類型檢查

Mojo 語言添加了強類型檢查,這對于記憶體管理的優化性能和錯誤檢查至關重要。 此功能允許開發人員編寫更安全、更高效的代碼。

struct Array[T: AnyType]:
    fn __getitem__(self, idx: Int) -> T: ...
    fn __getitem__(self, idx: Range) -> ArraySlice: ...           

盡管開發者仍然可以像在 Python 中那樣使用靈活的類型,但 Mojo 允許使用嚴格的類型檢查。類型檢查可以使代碼更可預測、更易于管理和更安全。使用強類型檢查的主要方法之一是使用 Mojo 的 struct 類型,如上面的示例。

所有權系統和借用檢查器

Mojo Lang 包括類似于 Rust 的所有權系統和借用檢查器,并支援使用指針的手動記憶體管理,如 C++。 這為開發人員提供了對記憶體使用的更多控制,進而優化了代碼。

// 定義記憶體管理函數
lit_memset_opt(ptr: DTypePointer[ui8], value: scalar<ui8>, count: Int)
memcmp[type: DType](s1: DTypePointer[type], s2: DTypePointer[type], n: Int) -> Int
memcpy[type: AnyType](dest: Pointer[type], src: Pointer[type], count: Int)           

未來開源版本

雖然 Mojo Lang 目前還沒有對外開放,但會在未來開源。 這将使開發人員能夠為語言的發展做出更多貢獻,并從社群的集體知識中受益。

3.Mojo 與其他語言比較

以下是 Mojo 程式設計語言與其他語言的一些比較.

C++ 與 Mojo

Mojo 是一種進階語言,具有比 C++ 更簡單的文法和更好的記憶體管理。 C++ 更成熟,有更多可用的庫和資源。

Mojo 有一個垃圾收集器,可以更容易地管理記憶體,而 C++ 需要手動記憶體管理。 C++ 更适合系統程式設計和遊戲開發,而 Mojo 更适合 Web 開發和科學計算。

Java 與 Mojo

Mojo 比 Java 更快,記憶體效率更高。 Java 更适合跨平台開發,并且擁有更大的社群。 Java 的虛拟機允許它在任何平台上運作,而 Mojo 是針對特定平台編譯的。 Mojo 對并發性和并行性的支援比 Java 更好。 Java 更适合企業開發,而 Mojo 更适合 Web 開發和科學計算。

Python 與 Mojo

對于複雜的計算,Mojo 比 Python 更快更好。

但 Python 擁有更大的社群、更多的資源,并且更容易學習。 Python 有許多庫和架構,可以輕松開發應用程式。 而 Mojo 更适合科學計算、Web 開發和系統程式設計, Python 則更适合機器學習和資料分析。

Rust 與 Mojo

Mojo 的文法比 Rust 更簡單,更容易學習,而 Rust 提供了更多的記憶體安全保證,并擁有更成熟的庫和架構。 Rust 更适合系統程式設計、遊戲開發和以安全為中心的應用程式,而 Mojo 更适合 Web 開發、科學計算和系統程式設計。

Go 與 Mojo

Mojo 對面向對象程式設計提供了更好的支援并且文法更簡單,而 Go 對并發和并行性的支援更好并且擁有更大的社群。 Go 更适合網絡程式設計和分布式系統,而 Mojo 更适合 Web 開發、科學計算和系統程式設計。

JavaScript 與 Mojo

Mojo 是一種編譯語言,在某些類型的應用程式中比 JavaScript 表現更好。

JavaScript 擁有更大的社群,更适合前端 Web 開發。 Mojo 比 JavaScript 對并發和并行性有更好的支援。 JavaScript 更适合 web 開發,而 Mojo 更适合 web 開發和科學計算。

Ruby 與 Mojo

Mojo 比 Ruby 更快,記憶體效率更高,但 Ruby 擁有更大的社群,更适合快速應用程式開發。

Ruby 有許多庫和架構,可以輕松開發應用程式。 Mojo 更适合 Web 開發和科學計算,而 Ruby 更适合 Web 開發和快速原型制作。

PHP 與 Mojo

Mojo 比 PHP 更快且可擴充性更強,但 PHP 擁有更大的社群并且更适合 Web 開發。

PHP 有許多庫和架構,可以輕松開發 Web 應用程式。 Mojo 更适合網絡開發和科學計算。

Swift vs Mojo

Mojo 是一種跨平台語言,可用于移動和桌面開發,而 Swift 主要用于 iOS 和 macOS 開發。

Swift 更适合開發原生移動應用程式,而 Mojo 更适合 Web 開發、科學計算和系統程式設計。

Kotlin vs Mojo

Mojo 是一種比 Kotlin 更簡單的語言,學習曲線更小,而 Kotlin 更通用,對 Android 開發有更好的支援。

Kotlin 對函數式程式設計支援較好,而 Mojo 支援面向對象程式設計。 Kotlin 更适合開發 Android 應用程式,而 Mojo 更适合 Web 開發和科學計算。

4.使用 Mojo Lang 優化代碼

Mojo Lang 提供了多種功能來幫助開發人員優化代碼以獲得最佳性能。

  • 導入 Python 代碼:隻需将 Python 代碼導入 Mojo,無需修改即可将其執行速度提高 14 倍。
  • 使用 struct 關鍵字添加類型:使用 Mojo 的内置 struct 關鍵字将類型內建到 Python 實作中可将性能提高 500 倍。
  • 查詢向量寬度:在内部循環中調整向量寬度可獲得 1000 倍的性能增益。
  • 内置并行化功能:利用 Mojo 的内置并行化功能可以将速度提高 2000 倍。
  • 用于高效緩存的平鋪實用程式:Mojo 的平鋪實用程式使開發人員能夠更有效地緩存和重用資料,與原始 Python 代碼相比,執行速度提高了 4000 多倍。

5.結論

Mojo 語言已經顯示出颠覆 Python 和 C++ 市場的巨大潛力。憑借其驚人的速度、優化能力以及對 Python 開發人員的易于內建,Mojo Lang 有望成為人工智能和高性能計算領域的領先程式設計語言。

參考資料

https://medium.com/@napsaga/mojo-lang-a-fast-futuristic-python-alternative-cf090e6db344

https://www.codeavail.com/blog/mojo-programming-language/

https://www.fast.ai/posts/2023-05-03-mojo-launch.html

https://www.reddit.com/r/rust/comments/1380uk0/the_mojo_programming_language_a_python_superset/

https://developers.slashdot.org/story/23/05/07/0544230/swift-creators-company-builds-new-programming-language-mojo---a-python-superset

https://en.wikipedia.org/wiki/LLVM

https://www.infoworld.com/article/3695588/mojo-language-marries-python-and-mlir-for-ai-development.html

https://docs.modular.com/