比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads

開發者說:為什么我選擇 Rust?_HTT

Author:

Time:1900/1/1 0:00:00

作者:DmitriyKashitsyn@Parity?Technologies

翻譯:孫元超@CdotNetwork

來源:https://www.parity.io/why-rust/

WhyRust?

編程很難。

不是因為我們人體本身構造復雜,而是因為我們都只是人類。我們的注意力持續時間有限,記憶也不是永久的——換句話說,我們往往會犯錯。電腦和軟件無處不在:在太空中,天上,地面,佩戴在身上,甚至在我們的身體里。每天都有越來越多的系統實現自動化,越來越多的生命依賴于軟件及其質量,航空電子設備,自動駕駛汽車,核電站,交通控制系統,植入式心臟起搏器。這些系統中的bug幾乎總是危及人類的生命。

“程序正確性是通過測試來檢驗的”和“程序正確性是經過邏輯驗證的”之間存在著巨大的差異。不幸的是,即使我們對代碼的每一行都進行了測試,我們仍然不能確保它是正確的。然而,擁有一個形式系統來證明我們的代碼是正確的(至少在某些方面是正確的)則是另一回事了。

Rust的方式

「Rust作為一種編程語言」的不同之處,不是因為它的花哨語法或受歡迎的社區,而是因為人們在使用它編寫程序時能獲得信心。Rust非常嚴格并且追究細節的編譯器會檢查你使用的每個變量和引用的每個內存地址。它可能看起來會妨礙你編寫高效且富有表現力的代碼,但令人驚訝的是,恰恰相反:編寫一個有效且地道的Rust程序實際上比編寫一個有潛在危險的程序更容易。在后一種情況下,你將與編譯器發生沖突,因為你嘗試的幾乎所有操作都會導致內存安全問題。

Optimism開發者karl.floersch.eth將接任OP Labs CEO一職:金色財經報道,OP Labs發推表示,Optimism Collective開發者karl.floersch.eth將接任OP Labs的首席執行官一職,liam.eth將不再擔任該職。[2023/4/29 14:34:27]

上圖右側部分顯示了并發性和內存安全相關的問題,這些問題根源上不可能發生在常規Rust代碼中。所以只需要換成Rust,他們就可以杜絕這段時間內大約一半的bug。同時,緩沖區溢出是其中最危險的bug,因為它們常常導致「密鑰泄露」、拒絕服務和遠程代碼執行漏洞。

上圖還表明,“一個人只需要知道如何編寫C”和“只需要把底層的東西留給專業人士”這樣的想法是不夠的。Linux內核是由行業中最優秀的5%的人編寫的,然而,內存bug這位老朋友一年又一年的給我們貢獻著CVE。

當然,與kernel中數百萬行正常工作的代碼相比,這50個bug根本算不了什么。但是之前說過的生死攸關的問題,還記得嗎?當我們談到關鍵系統時,即使是最小的錯誤也可能導致災難性的后果。還沒提及這50個只是被發現了的bug。誰知道還有多少沒被發現呢?如果使用Rust,我們會事先知道這些問題。

Axelar Network即將支持開發者在BNBChain上構建跨鏈應用:5月28日消息,通用互操作性平臺Axelar Network發推稱,開發者即將可以在BNBChain上構建跨鏈應用。另外,根據Axelar Network更新的路線圖,目前正在支持更多資產和區塊鏈,將通用信息傳遞功能擴展到Cosmos,以及支持更多的跨鏈應用。5月初,Axelar Network在主網上啟用通用消息傳遞(Genera lMessage Passing)功能,該功能可實現跨所有鏈的多對多通信,允許用戶在多鏈間轉移代幣、NFT以及在多個DApp間執行多鏈調用。[2022/5/28 3:47:19]

Rust有多快?

你可能會想:當然,Rust可能提供了這么多東西來杜絕這些隱患,但是要花多少代價呢?通常,在現代編程語言中的內存安全需要負擔垃圾回收器的開銷。并發問題通常通過使用特殊的同步原語鎖定所有受影響的數據結構和執行路徑來解決。

但對于Rust就不是這樣了。它的強大來自于巧妙的類型系統,可以在編譯時就解決所有這些問題。「TypeSystem的設計」同時防止了內存問題和數據競爭問題。

就像在C++中一樣,你可以只使用你需要的東西。例如,在Rust中,你只在絕對需要時才使用互斥鎖。而且,Rust編譯器會需要的位置迫使你使用它,所以永遠不會忘記。所有這些基本上都是零成本的。由于大多數檢查都是在編譯時執行的,因此編譯后的程序集與C或C++編譯器生成的程序集沒有太大區別。

YFI核心開發者:MakerDAO預言機的gas成本已達3069萬美元:YFI核心開發者banteg發推稱:“我查看了MakerDAO預言機的gas成本。目前運行的預言機已經在gas上花費了3069萬美元,排名前14位的喂價分別支付了193萬至214萬美元。將無利可圖的抵押品轉移出去時需要考慮這一成本。”[2021/8/28 22:43:39]

由于這個原因,Rust現在在「嵌入式電子」、「物聯網」,甚至「操作系統開發」領域都非常有前景,而這些領域以前都是由C語言主導的,因為需要很高的控制要求、資源和性能也有嚴格的限制。

Rust的最新版本甚至在用戶空間引入了SIMD支持。以前,由于API穩定性的限制,它只能在nightly版本中使用。現在,你可以通過直接使用向量指令或使用「便捷的包裝庫」來釋放硬件的全部潛力。而且,即使你不打算這樣做,編譯器仍然會在可能的情況下自動向量化循環語句和其他東西,在許多情況下,可以達到手工編寫向量指令代碼的性能水平。

我們為什么使用Rust

ParityTechnologies使用Rust也是出于同樣的原因。因為它讓我們可以毫無畏懼地編寫復雜而且高性能的軟件。我們可以自由地進行實驗,因為我們確信Rust將為我們提供支撐。無論是實現一個簡單的命令行實用程序還是一個多線程龐然大物,它都沒有什么區別。Rust確保我們的程序不存在未定義的行為、數據競爭或任何內存安全問題。更不用說,Rust「非常快」,編寫起來很有趣,易于閱讀,而且幾乎沒有運行時。

動態 | 美國當局逮捕以太坊開發者Virgil Griffith,指控其協助朝鮮逃避制裁:金色財經報道,紐約南區美國檢察官辦公室和聯邦調查局今天宣布,已逮捕并指控以太坊開發者Virgil Griffith違反美國制裁法,他前往朝鮮就使用加密貨幣和區塊鏈技術逃避制裁發表了演講及提供技術咨詢。美國律師Geoffrey S. Berman在一份聲明中說,據稱,Griffith向朝鮮提供了高度技術性的信息,他知道這些信息可能被用來幫助朝鮮洗錢和逃避制裁。Griffith危及了國會和總統已頒布的可對朝鮮的危險政權施加最大壓力的制裁措施。根據Griffith的LinkedIn個人資料,他是以太坊基金會的研究科學家。[2019/11/30]

內存bug之所以難以發現,是因為你不能輕松地編寫測試來捕獲它。如果你在beta測試期間沒有發現bug,那么它可能會在代碼中存在數年,就像定時炸彈等待著爆炸的那一刻。當然,也有像「Valgrind」這樣的工具可以幫助捕獲這些bug。但即使是Valgrind,如果問題發生時不是執行在調試模式下,或者執行時沒有表現為內存方面的問題,它也不會捕獲到bug。

因此,通過使用Rust,我們消除了最復雜、最不可預測的一類錯誤。

測試的作用

當然,內存安全問題只是所有問題的一部分。例如,我們可以編寫一個函數對它的整型參數求和,但是它只隨意返回了一個常數。或者我們寫了一個隨機數生成器卻生成的是可預測的值。這種行為并沒有違反Rust的內存安全保證,但顯然是不正確的。

聲音 | Go-Ethereum核心開發者 Gary Rong:以太坊輕節點的流量控制:金色財經現場報道,6月29日在2019以太坊技術及應用大會上,Go-Ethereum核心開發者 Gary Rong說明以太坊輕節點可以幫助用戶所做的事,包括:交易轉接(下載與這筆交易對應的收據)、狀態查詢、在本地進行智能合約的調用、事件搜索。Gary解釋了節點的流量控制模型,并表明服務器端有客戶端(client)的鏡像令牌筒,若其數量不滿足請求服務所需要的限度,則服務器端會斷開或凍結客戶端,不為其提供數據。服務器端優先處理擁有更多令牌的client,同樣,client優先選擇擁有更多令牌的服務器端。[2019/6/29]

這就是測試的用武之地。測試允許我們檢查編譯器無法理解的不變量因素。基本上,我們需要確保相應的測試覆蓋了返回的每個結果和程序中做出決策的每個點。在上面的例子中,測試必須檢查函數是否確實返回其參數的和,還有產生的隨機數是否足夠隨機。

在某種意義上,邏輯錯誤更容易處理。從定義上講,它們與程序員編寫程序時考慮的領域是相同的(而內存bug則不在其中)。

幸運的是,我們知道如何處理這些bug。在過去的幾十年里,程序員和計算機科學家創造了一套方法和工具,通過使用這些方法和工具,我們可以減少邏輯錯誤的數量,并將它們保持在最小。

數學的力量

在最嚴格和復雜的途徑中,程序正確性是被驗證出的,而不是通過檢驗。像「Iris」和「Coq」這樣的語言可以用來證明整個程序的正確性。不是像測試一樣檢查一些輸入的有效性,而是把它被當作一個數學定理一樣證明,一次和所有可能的輸入和每個可能的場景。只有通過構造這樣的證明,你才能獲得程序是正確的信心(只要你的規范和理解是正確的)。

基本上,Rust做的是相同的事情,但是只針對一些限定的特殊問題,比如并發性和內存安全性。實際上,它使用邏輯來證明你的程序在這些方面是正確的。想想看,僅僅通過編寫常規的Rust代碼,你就可能擁有與每次編譯項目時讓一組數學家研究某個定理相同的信心水平。

不幸的是,證明系統的每個部分都是如此是十分復雜和耗時的,以至于通常只對軟件的最關鍵部分進行驗證,比如操作系統內核、密碼算法,在某些情況下,還有語言的標準庫。

在很長一段時間內,像Haskell這樣的函數式編程語言的一個殺手級特性就是可以形式證明代碼,而傳統的命令式編程語言由于廣泛使用了共享可變性、不安全的指針運算和無法控制的副作用,仍然無法應用形式證明。但是Rust可以改變這一點,盡管它是一種命令式語言,但它已然「在進行形式化證明的路上」。

「來自RustBelt項目的RalfJung等人」已經發表了一些「論文」,證明了Rust語言聲明的基本不變量確實包含在標準庫的一些重要原語中。

問題是,出于性能原因,Rust標準庫包含許多潛在的unsafe代碼和raw指針運算。

為了證明標準庫的正確性,RalfJung和同事設計了一個叫做λrust的方法可以不收安全約束的使用分離的邏輯和他們自己的演算過程。通過這種演算,他們試圖證明標準庫原語和容器的工作方式符合預期,并且它們沒有違反Rust的基本不變量。作為副產品,他們甚至在同步原語,比如「MutexGuard」和「Arc」中發現了一些bug。

但這項工作遠未完成。正如作者所指出的:

我們離證明libstd中的所有東西還差很遠。那將需要比我們能召集的更多的人力。相反,我們關注的是那些看起來最有趣和對類型系統最有壓力的libstd原語。這主要是圍繞內部的可變性。因此,我們已經驗證了Cell、RefCell、Rc、Mutex、RwLock、Arc以及本文博客文章中(https://www.ralfj.de/blog/2017/07/08/rustbelt.html)。

我們希望有一天我們能夠為ParityTechnologies編寫的代碼帶來同樣級別的正確性證明。結合它的控制水平、捕獲內存問題和并發問題的能力,Rust正在成為最先進的主流通用語言之一,可以成功地用于編寫健壯、安全和高效的程序。

Rust作為一種編程語言:https://www.rust-lang.org/en-US/

密鑰泄露:http://heartbleed.com/

TypeSystem:https://blog.rust-lang.org/2015/04/10/Fearless-Concurrency.html

嵌入式電子:http://blog.japaric.io/

物聯網:https://www.tockos.org/

操作系統開發:https://wiki.osdev.org/Rust

庫:https://github.com/AdamNiederer/faster

Faster:https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/rust.html

Iris:http://iris-project.org

Coq:https://coq.inria.fr

Formalizing:https://www.ralfj.de/blog/2015/10/12/formalizing-rust.html

RalfJung:http://plv.mpi-sws.org/rustbelt/)

RalfJung相關論文:https://people.mpi-sws.org/~dreyer/papers/rustbelt/paper.pdf

MutexGuard:https://www.ralfj.de/blog/2017/06/09/mutexguard-sync.html

Arc:https://www.ralfj.de/blog/2018/07/13/arc-synchronization.html

Tags:USTHTTTPSRALtrustwallet錢包最新版本下載https://etherscan.iotps幣圈coral幣總流通

fil幣價格今日行情
孟巖:數字資產是數字經濟升級的核心,其八大優勢促進數字經濟升級并蓬勃發展_數字資產

原文:零壹財經 數字資產與區塊鏈的發展緊密相關,為了加強區塊鏈領域的研究,促進區塊鏈的學術、技術和應用的發展,中國投資協會與數字資產研究院聯合成立“中國投資協會數字資產研究中心”.

1900/1/1 0:00:00
朱嘉明:華爾街、硅谷、WTO和IMF正在衰落,硬科技發展成直接推手_WTO

12月20日,在2020數字科技年會暨零壹財經新金融年會上,數字資產研究院院長、經濟學家朱嘉明以《華爾街、硅谷、WTO、IMF的衰落與啟示》為題進行了演講。以下為演講內容精編,由巴比特整理發布.

1900/1/1 0:00:00
不用失去控制權和所有權,也能在區塊鏈中通過數據共享獲得獎勵?_TOKEN

作者/李然輝 出品/區塊鏈大本營 截止到今年,區塊鏈行業在不斷地深入發展,也有一些新的發現與應用場景.

1900/1/1 0:00:00
巴比特專欄 | 市場上缺一個穩定收益穩定幣_USDT

USDT當穩定幣老大已經很多年了,幣圈各路人馬一直看空,一直讓大家失望了。USDT現在總供應量達到了41億美元之多。而排名第二的穩定幣USDC總供應為4.6億.

1900/1/1 0:00:00
巴比特專欄 | 區塊鏈創業,必須知道哪個文件?_區塊鏈

距離2019年1月10日快一年了,當日國家互聯網信息辦公室發布《區塊鏈信息服務管理規定》,并于今年2月15日起施行.

1900/1/1 0:00:00
兩院院士談區塊鏈助推高效節水:通過數字水權,促進節水變革_Curve

來源:上證報 編者注:原標題為《兩院院士談區塊鏈助推高效節水》上證報中國證券網訊近日召開的“首屆中國節水論壇”可謂大咖云集,參會嘉賓們用演講和對話的方式為節水事業“出點子、支良招”.

1900/1/1 0:00:00
ads