自 5 月 2 日首次亮相以來(lái),Modular 公司的 Mojo 編程語(yǔ)言引起了開(kāi)發(fā)人員的極大興趣,已經(jīng)有超 12 萬(wàn)開(kāi)發(fā)人員注冊(cè)使用 Mojo Playground,19 萬(wàn)開(kāi)發(fā)者熱情參與 Discord 與 GitHub 討論。Fast.ai 聯(lián)合創(chuàng)始人、數(shù)據(jù)科學(xué)家 Jeremy Howard 更是表示,“Mojo 可能是近幾十年來(lái)最大的編程語(yǔ)言進(jìn)步?!?br>
Mojo 能夠切實(shí)滿足開(kāi)發(fā)者需求,引導(dǎo)大家逐步采用新功能,從而在必要時(shí)獲得高性能體驗(yàn)。具體來(lái)說(shuō),Mojo 可以為開(kāi)發(fā)者帶來(lái)的主要收益:
- 一種語(yǔ)言編寫(xiě)所有內(nèi)容:Mojo 能夠隨時(shí)隨地服務(wù)于 AI 開(kāi)發(fā)者,將 Python 的可用性與以往強(qiáng)制開(kāi)發(fā)者使用 C、C++ 或 CUDA 的系統(tǒng)編程功能結(jié)合起來(lái)。 開(kāi)發(fā)者可以在公共代碼庫(kù)上工作,從而簡(jiǎn)化從研究到生產(chǎn)的整個(gè)工作流程。
- 突破 Python 性能極限:時(shí)至今日,Python 已經(jīng)無(wú)處不在。但對(duì)于需要更高性能或特殊硬件的任務(wù),Python 的表現(xiàn)往往不那么理想。Mojo 能夠發(fā)揮 CPU 的性能潛力,并可良好支持 GPU 和 ASIC 等外部加速器,提供與 C++ 和 CUDA 相當(dāng)?shù)淖吭叫阅堋?/li>
- 對(duì)接完整 Python 生態(tài)系統(tǒng):Mojo 提供與 Python 生態(tài)系統(tǒng)間的全面互操作性,使其能夠無(wú)縫利用 Python 庫(kù)資源,同時(shí)發(fā)揮 Mojo 自身的功能與性能優(yōu)勢(shì)。例如,開(kāi)發(fā)者可以將 NumPy 和 Matpotlib 同自己的 Mojo 代碼無(wú)縫混合起來(lái)。
- 升級(jí) AI 工作負(fù)載:Mojo 緊密集成有模塊化 AI 引擎,允許開(kāi)發(fā)者通過(guò)自定義操作輕松擴(kuò)展自己的 AI 工作負(fù)載,包括預(yù)處理、后處理操作和高性能數(shù)學(xué)算法。開(kāi)發(fā)者還可以引入內(nèi)核融合、圖重寫(xiě)、sharp 函數(shù)等。
通過(guò)對(duì)現(xiàn)有 Python 代碼做一點(diǎn)簡(jiǎn)單變更,開(kāi)發(fā)者就可以使用 Mojo 對(duì)高計(jì)算強(qiáng)度工作負(fù)載進(jìn)行顯著加速(最高可提速 6.8 萬(wàn)倍)。目前,Mojo 的實(shí)際應(yīng)用案例包括:
- 知名博主 Maxim Zaks 已經(jīng)用 Mojo 實(shí)現(xiàn)了多個(gè)樹(shù)數(shù)據(jù)結(jié)構(gòu),并發(fā)布了相關(guān)博文(https://pub.aimind.so/a-high-level-introduction-to-fibytree-bd7f8775d815)和一些初步基準(zhǔn)測(cè)試結(jié)果(https://pub.aimind.so/fibytree-vs-set-and-sortedset-7b4e6b56cac8)。
- GitHub 用戶 MadAlex1997 在 Mojo 中構(gòu)建了 N 維數(shù)組的實(shí)現(xiàn)(https://github.com/MadAlex1997/Mojo-Arrays)。
Mojo 號(hào)稱將動(dòng)態(tài)和靜態(tài)語(yǔ)言的優(yōu)點(diǎn)結(jié)合在一起,性能可達(dá)到目前 Python 的 68,000 倍,還提供與 Python 生態(tài)系統(tǒng)的完全互操作性,從而可以無(wú)縫使用 Python 庫(kù)。
以下為使用 Mojo 計(jì)算歐幾里得距離的代碼:
$ mojo Welcome to Mojo! ?? Expressions are delimited by a blank line. Type `:mojo help` for further assistance. 1> %%python 2. import numpy as np 3. n = 10000000 4. anp = np.random.rand(n) 5. bnp = np.random.rand(n) 6> from tensor import Tensor 7. let n: Int = 10000000 8. var a = Tensor[DType.float64](n) 9. var b = Tensor[DType.float64](n) 10. for i in range(n): 11. a[i] = anp[i].to_float64() 12. b[i] = bnp[i].to_float64() 13> from math import sqrt 14. def mojo_naive_dist(a: Tensor[DType.float64], b: Tensor[DType.float64]) -> Float64: 15. var s: Float64 = 0.0 16. n = a.num_elements() 17. for i in range(n): 18. dist = a[i] - b[i] 19. s += dist*dist 20. return sqrt(s) 23> fn mojo_fn_dist(a: Tensor[DType.float64], b: Tensor[DType.float64]) -> Float64: 24. var s: Float64 = 0.0 25. let n = a.num_elements() 26. for i in range(n): 27. let dist = a[i] - b[i] 28. s += dist*dist 29. return sqrt(s) 30. 31> let naive_dist = mojo_naive_dist(a, b) 32. let fn_dist = mojo_fn_dist(a, b) 33. print(fn_dist) 34. 1290.821425092235 35. print(naive_dist) 36. 1290.8521425092235
此外,Mojo 允許開(kāi)發(fā)者構(gòu)建靜態(tài)編譯的可執(zhí)行文件,可以在沒(méi)有任何依賴項(xiàng)的情況下進(jìn)行部署,例如:
$ mojo build hello.?? $ ./hello Hello Mojo ??! 9 6 3 $ ls -lGtranh hello* -rw-r--r-- 1 0 817 Sep 3 23:59 hello.?? -rwxr-xr-x 1 0 22K Sep 3 23:59 hello
Mojo 還擁有 Visual Studio Marketplace 的官方擴(kuò)展,支持語(yǔ)法高亮、語(yǔ)句診斷、格式化、補(bǔ)全建議等。
在即將發(fā)布的新版本中,團(tuán)隊(duì)將在 VS Code 中添加通過(guò) LLDB 命令行界面實(shí)現(xiàn)的交互式調(diào)試體驗(yàn)。不僅如此,Mojo 的調(diào)試程序能夠在同一調(diào)試會(huì)話中無(wú)縫對(duì) Mojo/C/C++ 混合代碼進(jìn)行操作,進(jìn)一步增強(qiáng)開(kāi)發(fā)者在處理高度專業(yè)化代碼時(shí)的能力。