自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

吊打Python!Mojo語言首探!

譯文 精選
開發(fā) 前端
Mojo顯然是為了提供該用例的默認快速版本,在該版本中,不必通過外部庫來快速實現(xiàn)。Mojo的目標(biāo)不是Python更廣泛的用例集:web后端、流程自動化等等,至少在早期不是這樣。這可能會在Mojo更完整、擁有更好的第三方庫時出現(xiàn),但這顯然不是首要任務(wù)。

點擊參加51CTO網(wǎng)站內(nèi)容調(diào)查問卷

作者 | Serdar Yegulalp

策劃 | 云昭

Mojo很狂!它的目標(biāo)非常有野心:“與Python一樣易于使用,但與Rust一樣強大和快速?!?/p>

新推出的Mojo語言,被宣傳為多個領(lǐng)域中最好的:Python的易用性和清晰的語法,以及Rust的速度和內(nèi)存安全。這些多少有些夸大其詞。由于Mojo仍處于開發(fā)的早期階段,用戶還需要一段時間才能親眼看到這種語言是如何達到他們的要求的。

Mojo的創(chuàng)建者,一家名為Modular的公司,提供了一個早期的在線運行環(huán)境:一個Jupyter Notebook環(huán)境,用戶可以在這里運行Mojo代碼并了解該語言的功能和行為。

因為Mojo還沒有作為最終用戶下載,所以我們首先關(guān)注的是Mojo作為一種語言是什么樣子的。我們將研究它與Python的相似之處,它的不同之處,以及它能為熟悉Python或其他語言的程序員提供什么。

1、Mojo:Python的超集

Mojo可以被描述為Python的“超集”。用Python編寫的程序是有效的Mojo程序,盡管有些Python行為尚未實現(xiàn)。目前在Python中找不到的Python行為的一些示例包括,函數(shù)的關(guān)鍵字參數(shù)、global關(guān)鍵字以及l(fā)ist和dict理解。也可以使用實際的Python運行時來處理現(xiàn)有的Python模塊,盡管這會帶來性能成本。

當(dāng)Mojo引入新語法時,它用于系統(tǒng)級編程功能,主要是手動內(nèi)存處理。換句話說,可以為隨意的用例編寫Python代碼(或幾乎完全類似的代碼),然后將Mojo用于更高級、性能密集型的編程場景。在這兩種情況下,都可以利用現(xiàn)有的Python庫,但性能成本更高。

Mojo與Python的另一大區(qū)別是,Mojo不像Python那樣通過運行時進行解釋。Mojo是提前編譯的,使用LLVM工具鏈來加工本地代碼。為此,最好的性能來自于使用Mojo特有的功能。Python功能很可能是以模仿Python的動態(tài)行為為代價的,這些動態(tài)行為本質(zhì)上很慢,或者僅僅通過使用Python運行時來實現(xiàn)。

2、Mojo vs. Python 語法

Mojo的許多母語特征有兩個作用。它們要么是Python中根本沒有的全新功能,要么是Python功能的擴展,使其更具性能,盡管Python的動態(tài)性較低。

Mojo的許多母語特征有兩個作用。它們要么是Python中根本沒有的全新功能,要么是Python功能的擴展,使其更具性能(盡管Python的動態(tài)性較低)。

例如,在Python中,沒有辦法在運行時正式聲明變量引用不可變,盡管類型提示和其他機制可以在編輯時模仿這一點。在Mojo中,則可以使用關(guān)鍵字let和var來聲明Mojo特定的變量,這與在Rust中使用的方法非常相似。let關(guān)鍵字表示變量是不可變的;var表示它是可變的。這些限制是在編譯時強制執(zhí)行的,所以試圖變異不可變引用的程序甚至不會編譯。

圖片

Mojo的語法與Python非常相似,但提供了新的關(guān)鍵字來啟用Mojo特定的功能,如可變行為。

Mojo還有自己的struct關(guān)鍵字,與Python的class形成對比。類只是Python類,具有所期望的所有動態(tài)行為。不過,struct類型更像它們的C/C++和Rust對應(yīng)類型,在編譯時確定了固定的布局,但針對機器本機速度進行了優(yōu)化。另一個旨在區(qū)分Mojo的行為和Python的行為的Mojo關(guān)鍵字是fn。如果你使用def來定義一個函數(shù),那么就會得到了一個Python函數(shù),以及與這些函數(shù)相關(guān)聯(lián)的所有動態(tài)。fn關(guān)鍵字也定義了一個函數(shù),但定義為Mojo函數(shù)。這意味著參數(shù)在默認情況下是不可變的,并且必須顯式類型化,并且必須聲明所有局部變量(除其他外)。

3、Modular Playground

如果想知道用Mojo有多爽,現(xiàn)在還需要取號排隊。Modular通過Modular Playground提供了對Mojo的早期訪問,這是一個基于網(wǎng)絡(luò)的Jupyter Notebook環(huán)境,運行在Modular的服務(wù)器上。目前,Mojo還沒有可在自己的系統(tǒng)上下載的運行時。從好的方面來說,這意味著你可以通過任何帶有網(wǎng)絡(luò)瀏覽器的計算機運行Mojo。

Mojo在線環(huán)境附帶了一些notebook示例,以及關(guān)于在某些任務(wù)中使用Mojo的詳細內(nèi)聯(lián)注釋。其中一個例子是一個常見的程序員演示,繪制了Mandelbrot集算法。乍一看,代碼與Python非常相似。即使是新的特定于Mojo的關(guān)鍵字也能很好地與現(xiàn)有的Python語法集成,因此可以仔細查看代碼并大致了解發(fā)生了什么。

圖片

Mojo游樂場在行動,運行Mandelbrot情節(jié)演示。用于生成此演示的代碼是本地Mojo代碼和Python庫的混合,通過Mojo的Python運行時接口調(diào)用。

notebook 演示還舉例說明了如何通過并行、向量化和“平鋪”(增加操作的緩存位置)來加速Mojo代碼。其中一個演示是128x128矩陣乘法演示,通過簡單地按原樣運行而無需特別修改,它的速度據(jù)稱是Python的17倍(使用Mojo游樂場中的Python運行時)。

Mojo通過添加類型注釋增加了1866x的加速,通過添加矢量化操作增加了8500x的加速和通過添加并行化增加了15000x的加速。

同樣,驗證這些聲明的最佳方法是讓Mojo在本地可用,但值得在同一代碼中同時試驗Python運行時和Mojo編譯器,看看會發(fā)生什么。

4、Mojo能取代Python嗎?

Mojo的第一次公開演講就證明了它是數(shù)據(jù)科學(xué)和機器學(xué)習(xí)的一種語言。這兩個主題構(gòu)成了Python現(xiàn)代用例的很大一部分,這并不是因為Python本身很快,而是因為它為難以使用的快速事物提供了一個方便的編程接口。

Mojo顯然是為了提供該用例的默認快速版本,在該版本中,不必通過外部庫來快速實現(xiàn)。Mojo的目標(biāo)不是Python更廣泛的用例集:web后端、流程自動化等等,至少在早期不是這樣。這可能會在Mojo更完整、擁有更好的第三方庫時出現(xiàn),但這顯然不是首要任務(wù)。

即使默認情況下Mojo更快,也很難取代Python在機器學(xué)習(xí)和數(shù)據(jù)科學(xué)中的地位。Python的用戶社區(qū)、現(xiàn)有的軟件文化和便利性都使其成為這些領(lǐng)域的支柱。Mojo必須做的不僅僅是快速地取代Python來完成這項工作。盡管如此,看看Mojo如何繼續(xù)沿著其Python兼容和快速用例的路徑,進行開發(fā)還是很有趣的。

責(zé)任編輯:武曉燕 來源: 51CTO技術(shù)棧
相關(guān)推薦

2023-09-08 15:05:51

Mojo編程語言

2023-09-09 06:54:02

AI編程語言Mojo

2023-05-10 15:07:00

Mojo開發(fā)選項

2024-05-24 14:16:11

2023-09-12 13:29:46

AI訓(xùn)練

2023-09-12 17:23:23

C語言Mojo模型

2024-03-12 09:22:30

2013-08-20 16:44:33

2023-05-04 15:32:51

編程開發(fā)

2021-06-28 10:51:58

PyechartsPython繪圖庫

2021-02-26 07:17:47

MySQLMariaDB

2020-08-24 12:15:51

TomcatUndertow容器

2023-09-12 12:14:05

Python程序矢量化

2023-09-08 18:55:50

PythonNumpyAI

2011-07-20 10:43:54

2013-12-04 19:03:43

微軟TechEd2013

2010-12-01 11:41:52

Wireshark網(wǎng)絡(luò)包分析捕獲網(wǎng)絡(luò)包

2012-08-29 16:24:15

2021-01-18 11:49:26

面試事務(wù)隔離

2021-01-08 09:23:56

Redis緩存面試
點贊
收藏

51CTO技術(shù)棧公眾號