av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

Rust、Zig,能夠干翻Java、C?

撰稿 | 云昭

公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出浮山免費做網(wǎng)站回饋大家。

出品 | 技術(shù)棧(微信號:blog51cto)

眾所周知,由于其根源于 Mozilla,Rust 在歷史上與系統(tǒng)編程聯(lián)系在一起,它對安全性、速度和并發(fā)性的承諾,使其在基礎(chǔ)設(shè)施層面得到了廣泛采用。這種地位的上升引發(fā)了一個有趣的問題:Rust 在傳統(tǒng)上由動態(tài)語言主導(dǎo)的領(lǐng)域是否擁有更高的地位?

近日,一場匯聚了新興語言的主要開發(fā)者的會議P99 CONF ,為我們帶來了Rust與Zig如何相互借鑒,并讓與會者們參與了挑戰(zhàn)C++、Go甚至Java等主流語言的探討。且讓我們一探Rust與Zig的未來。

一、Zig可以借鑒Rust,反之亦然

世界上偉大的事物往往是完全開放,既可以和而不同,又可以相互借鑒。Zig與Rust之所以快速成為全球編程社區(qū)的“寵兒”,也是做到了開放與借鑒。

1.Zig學(xué)習(xí)Rust哪些?

Bun的創(chuàng)建者Jarred認為,Zig可以Rust那里引進“有限的編譯時概念”,比如在各種類似作用域的情況下的一些借用檢查器。此外,Zig安全方面還比較欠缺,兩個明顯的例子就是,還可以返回指向堆棧內(nèi)存的指針,例如堆棧分配的緩存區(qū),這都是不應(yīng)該做的。

Zig語言還非常新,但誕生之初就懂得借鑒。比如向Go借鑒了延遲(defer),即延遲鍵盤和語言。與Go實現(xiàn)的區(qū)別在于,它是針對每個作用域的,而不是針對每個函數(shù)的。在 Go 中,defer 會將其附加到函數(shù)的末尾,而對于 Zig 來說,它位于作用域的末尾。這通常就是開發(fā)者進行資源清理的方式。

但Zig的延遲做的還不夠好, 至少有某種形式的析構(gòu)函數(shù),因為它很容易被忘記?!坝袝r我確實希望有構(gòu)造函數(shù)和析構(gòu)函數(shù)……但我的心情很復(fù)雜?!?/p>

2.Rust羨慕Zig什么? 

Rust主要開發(fā)者Carl,則表示了Rust對于Zig編譯速度的羨慕?!癦ig 的編譯速度肯定要快得多。Rust 肯定會從中受益?!?/p>

Rust目前的一個痛點就是:一旦你擺脫借用檢查器而使用 Rust 進入不安全代碼,它就很不符合人體工程學(xué),而事實上,在編寫nice的不安全代碼方面,Rust其實有許多地方可以改進。Carl表示:我們編寫的不安全代碼比典型的應(yīng)用程序開發(fā)人員多得多,因為我們正在構(gòu)建這些類型的原語。Zig在這方面可以給Rust以靈感。

P99 CONF 的長期支持者Glauber,認為 Zig 有兩件事可以讓 Rust 受益匪淺。第一個是comptime。comptime 是Zig一個非常好的特性,即在編譯期引入自身作為膠水語言來生成代碼的能力,甚至被Glauber稱為天才之舉,“我希望每種語言都有這樣的功能。

C++中的模板系統(tǒng)與 comptime 相比……根本不在同一個級別。”

可能很多人不太熟悉comptime, 簡單來說,它允許開發(fā)者在編譯時評估任意代碼。許多語言都有類似模板的語法,然后還有一些其他變體,一些其他方式來具有編譯時標志、功能和參數(shù)。這也是類型系統(tǒng)的工作原理。例如,標準庫中的 ArrayList 類型接收 comptime 類型參數(shù),然后就有一個該類型的切片。這有點像編譯時的duck-typing類型。

舉例來說,Zig用它來生成用于源映射解析的查找表。sourcemaps 使用這種編碼 VLQ。“如果我們生成此查找表,則源映射編碼速度將比以前快 18%。最初,我們是在運行時執(zhí)行的?!盳ig 使其變得非常簡單,因為只需傳遞關(guān)鍵字即可。頂級作用域中的任何內(nèi)容都是 comptime,否則,就可以將其傳遞到作用域中的關(guān)鍵字 comptime 中。

第二個,是 Rust交叉編譯到不同的平臺,是一個非常痛苦的事情。這方面Go 做得非常好, Zig 也比 Rust 做得更好。

交叉編譯方面,Carl還透露了Zig的情況?!艾F(xiàn)在在 Bun CI 中,我們在 Linux 機器上為所有不同的平臺、每個 Zig 部分構(gòu)建每個目標文件。因為每臺機器都有大量內(nèi)存以使其編譯速度更快。因此,我們在 Linux 上構(gòu)建所有 Zig 代碼,即使它是針對 Mac OS 的。”

二、用C的人為什么討厭Rust,喜歡Zig

Rust 一直是注重性能的 P99 CONF 社區(qū)的寵兒。即使我們以 C++、Go 甚至 Java 的令人印象深刻的性能成就案例研究為特色,討論也不可避免地轉(zhuǎn)向“但為什么不是 Rust?”

很多人習(xí)慣于C,將C用于高效工作,因為C語言確實讓你的移動速度快得令人難以置信(直到出現(xiàn)錯誤)。他們選擇Rust,嘗試像C一樣編寫Rust,最終都會遇到Rc>,unsafe{...}等。

這種大量的錯誤報告和“調(diào)試地獄”會帶來非常強烈的負面反應(yīng)。

但這并不意味著Rust太難了,其實有能力用C編寫生產(chǎn)軟件,就絕對有能力使用Rust。更多地在于,“當(dāng)C方式對我很有幫助時,我不愿意學(xué)習(xí)Rust方式?!?/p>

這反而是Zig的利基市場。

如果您已經(jīng)了解 C,您可以在幾天內(nèi)學(xué)習(xí) Zig,并且比 C 更有效率。在我看來,這就是 Zig 的價值主張。它與 C 非常相似,您的大多數(shù)模式和根深蒂固的經(jīng)驗都可以利用。你學(xué)習(xí)了 Zig 的 comptime,然后,你就掌握了帶泛型的 C 語言。您可以毫無障礙地依賴現(xiàn)有的 C 項目和庫。Zig 是“我在 C 語言中很有生產(chǎn)力,但想要更好的功能”語言。

三、Java開發(fā)者不妨考慮學(xué)Rust

“Rust并不是太困難。我是一個巨菜的菜鳥,連我都可以在大約一個月內(nèi)寫出一些不錯的Rust。”

雖然舊版 Java 很簡單,但大部分時間都花在學(xué)習(xí)庫、構(gòu)建系統(tǒng)或非常復(fù)雜的應(yīng)用程序服務(wù)器上。這3個部分非常復(fù)雜。編寫 Spring MVC Web 應(yīng)用程序非常復(fù)雜。

“我們公司遷移到 Rust,花了大約 1 個月的時間才適應(yīng) Rust,無需處理 C 指針、內(nèi)存映射等低級內(nèi)容。”

部署 Rust Web 應(yīng)用程序比處理 Java 應(yīng)用程序服務(wù)器和 WAR 容易得多。為什么Java應(yīng)用服務(wù)器有這么多bug?

20 多年過去,它們?nèi)匀粺o法獲得諸如重新加載而不泄漏或數(shù)據(jù)庫連接池可靠而不掛起連接之類的東西。

“JDBC 的編寫方式使得池?zé)o法強制關(guān)閉卡住的連接;卡住的連接會隨著時間的推移而累積,直到服務(wù)器掛起?!?/p>

這表明Java J2EE應(yīng)用服務(wù)器的整個概念是錯誤的。每個曾經(jīng)使用過websphere的人,web logic都會把他們折磨到“地獄”。即使是最小化的 Tomcat 也遠未消除錯誤。JVM 本身正在崩潰?!拔疫€沒有看到任何 Java 應(yīng)用程序后端或 GUI 不會因為內(nèi)部 JVM 錯誤而崩潰?!?/p>

Rust 需要的內(nèi)存比 Java 少 10 倍,速度比 Java 快 4 到 10 倍,編譯失敗很快就會得到修復(fù)。不需要應(yīng)用程序服務(wù)器和巴洛克式構(gòu)建工具(變形的工具)。Rust 就可以,無需開始用 Java 編寫新的應(yīng)用程序。

Rust 有相當(dāng)高級的庫,如 Rocket.rs (rust) 和微型 Web 框架,如 scalatra.org (scala),這兩種類型都非常容易上手。而且使用起來也要容易得多:所有內(nèi)容均已鍵入,并且類型信息也可用作文檔。

四、Rust在后端項目的軟肋

也有一種觀點認為,Rust不適合大型項目。因為Rust 項目是 AOT 編譯的二進制文件,需要不斷維護才能使其不斷變化的包保持最新。此外,項目越大,linting 越慢,分析器越慢,構(gòu)建時間也越慢。

也就是說,Rust 的借用檢查器并不是大型項目中真正令人頭疼的問題。然而,你需要學(xué)習(xí)如何移動、復(fù)制或借用內(nèi)存的各種方法以及不自然的生命周期語法需要很長時間才能深入理解這些背后的真相。


文章標題:Rust、Zig,能夠干翻Java、C?
URL鏈接:http://uogjgqi.cn/article/cdisepc.html
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流