如今,越來越多的Ruby on Rails開發(fā)人員都在轉(zhuǎn)向Rust,Rust極有可能成為下一代基礎(chǔ)架構(gòu)語言。為什么Rust可以如此迅速普及?在時下最流行的Dev/Ops中,Rust又發(fā)揮著什么作用呢?本文Mesosphere公司首席執(zhí)行官Florian Leibert和Rust社區(qū)專家Steve Klabnik就這些問題進行了深度探討。
Steve目前在Rust工作,致力于開發(fā)實用、內(nèi)容豐富且易于理解的高質(zhì)量文檔是Steve的主要工作。他在獲得計算機科學(xué)學(xué)位時就意識到了編程和文檔結(jié)合的重要性,他編寫一些Ruby on Rails和Rust的教程和文檔被開發(fā)者奉為圭臬,其中Rust for Rubyists文檔成為了The Rust Programming Language的官方教程。
▲Steve Klabnik
Rust的快速普及要歸功于文檔和教程
Florian Leibert(FL):我認(rèn)為文檔的價值被遠遠低估了,其實文檔是一個加速器。當(dāng)你遇到一個問題時,如果官方文檔中給出了解決方案,那么一分鐘甚至更短的時間內(nèi)就可以解決這個問題,但是如果沒有的話,那么時間就可能延長到幾個小時,甚至更長。
Steve Klabnik(SK):這是顯而易見的。我們每年都會做一次Rust用戶調(diào)查,我們會問很具體的問題,例如“你如何選擇生態(tài)系統(tǒng)中的包?”我們最希望聽到的回答就是通過文檔我們可以選擇到最合適的包。我認(rèn)為語言和其他一切都一樣,如果你不知道怎么使用某些東西,如果有一個指導(dǎo)文檔就再好不過了。
FL:你從什么時候開始認(rèn)為Ruby on Rails會脫穎而出?
SK:其實我對Ruby on Rails的認(rèn)可并不是源自它首次發(fā)布,而是我的老上司。最開始,他使用Java Framework創(chuàng)建了一個新的Web應(yīng)用程序,大概花費了一個星期的時間來做項目開始前的準(zhǔn)備工作。然后,他跑了一遍Rails的教程,大概花了5分鐘就完成了之前一個星期的工作,從那一刻開始,他就不回頭的走上了Ralis的道路。
我認(rèn)為Rails之所有脫穎而出的原因就是使得現(xiàn)狀有了明顯的改善,有趣的是,這也讓我開始覺得Ralis不再是高冷之花。
積極社區(qū)互動驅(qū)動的Rust
FL:第一次和Rust合作的時候,是什么吸引你了?
SK:其實真正吸引我的是人,我與Rust社區(qū)的第一次接觸是加入IRC頻道,當(dāng)時,我在做一些關(guān)于“Hello,World!”的內(nèi)容,當(dāng)時聯(lián)系到Rust的時候,他們沒有說“你只做這個內(nèi)容嗎,是不是有點膚淺”,而是說“你對Rust感興趣實在是太好啦,我們很樂意回答你的所有問題。”而且,之后他們配合的也很好。
我學(xué)習(xí)開源也很多年了,知道社區(qū)是開源很重要的一個組成部分,所以特別想嘗試在好的社區(qū)中工作,而Rust就是一個特別優(yōu)秀的社區(qū)。
在之前的時間里,我一直在做Rails和更底層的編程。我認(rèn)為自己在Ruby世界中實現(xiàn)了自己的所有理想,這種新語言對底層任務(wù)的支持很好,我認(rèn)為這是我返回底層的好機會。當(dāng)然,事實也證明,Rust是一個方便而安全的底層編程方式。
高效+易于調(diào)試=操作簡單
FL:你認(rèn)為Rust最適合哪種類型的項目?
SK:當(dāng)你對runtime有特別的要求時,Rust是非常有用的。例如,你需要加速是,Rust非常低的開銷和非常低的內(nèi)存使用量,在這些用例中是有益的。
Rust的另一個用途是應(yīng)用在需要保持100%準(zhǔn)確率的代碼中。雖然在實際生產(chǎn)中,很多項目是允許有失誤的,但是有些程序必須保證100%的正確率,而Rust在強制你寫出正確代碼方面做得很好。
當(dāng)然,沒有人會聲稱自己的Rust程序是完美的,但事實上他們進行調(diào)試的時間是非常少的。雖然Rust支持底層編程,但是其涵蓋的許多高級特性,讓其看起來更像中級語言。我們在Python和JavaScript社區(qū)中發(fā)現(xiàn)很多人,他們都樂于編寫更高性能的Rust代碼,也樂于做一些比之前更底層的工作。Rust正在成長為一個中等程度的應(yīng)用空間。
沙漠地帶——Rust庫
FL:既然Rust有這么多的用途,那么你能告訴我們,你認(rèn)為最有用的3個Rust庫嗎?
SK:這是一個很好的問題,我們在Cargo包上花費了大量的精力。Rust標(biāo)準(zhǔn)庫沒有太多內(nèi)容,所以軟件包和軟件包生態(tài)系統(tǒng)對于擴展功能是必不可少的。因此,這里有很多很棒的軟件包。
我最喜歡的軟件包就是正則表達式,甚至我還有一個Perl ML紋身。因為我們的Regex規(guī)范是非??斓?,所以正則表達式是非常有用的工具。
第二個是CLAP,它是Command-Line Argument Parser的簡稱。最后一個,我不能說它是最有用的,但它是最有趣的,它是一個名為x86的包,是可以讓用戶綁定到x86平臺的低級處理器功能。
Runtime-Less Rust Rocks
FL:你對Spark或TensorFlow之類的東西是否熟悉?
SK: Y Combinator資助了一家名為Autumn.AI的創(chuàng)業(yè)公司,他們本打算利用Rust來建立一個TensorFlow競爭對手。不幸的是,最終倒閉了。當(dāng)然這并不是因為Rust,而是因為業(yè)務(wù)。
我認(rèn)為在Rust編寫的代碼沒什么特別,但是它有一個優(yōu)點就可以看成和C一樣。由于Rust沒有運行時,與其他語言的接口是一個巨大的發(fā)展領(lǐng)域。Rust的第一個生產(chǎn)用途實際上是擴展Rails版圖。Rust沒有runtime,意味著它可以假裝成C,如何可以與C打交道的都可以與Rust交流。大家知道TensorFlow綁定,Rust甚至可以和TensorFlow一起工作,進行交互。這是非常令人興奮和想象空間的地方,但它仍然處于早期階段。
Rust在DevOps中的角色
FL: Rust如何進入系統(tǒng)自動化,容器管理和容器編排?Rust在DevOps中的作用是什么?
SK:在這些領(lǐng)域也有很多Rust的用武之地,但是每個領(lǐng)域又有些不同。Oracle在Rust開發(fā)了一個完整的容器運行時,這是他們第一個使用該語言的開源項目,在Rust中開發(fā)容器運行時是非常有趣的一次嘗試。還有一個是CoreOS。
Coursera是一個非常有趣的例子。雖然他們沒有在Rust中構(gòu)建容器,但是他們使用Rust和Docker來為他們的教育平臺提供支持。學(xué)生編寫作業(yè)的例子或練習(xí),然后運行Docker容器中的代碼并對其進行評分。他們在Docker容器中使用Rust代碼來處理權(quán)限和其他安全設(shè)置。
Chef有一個叫做Habitat的新項目,其整個部署策略不是通過一個特定類型的集中地方來管理基礎(chǔ)設(shè)施,而是在你部署應(yīng)用程序的時候把應(yīng)用程序打包到基礎(chǔ)設(shè)施上。這個新項目從頭開始就是寫在Rust上,這是Rust在DevOps中非常有趣的例子。
Buoyant 正在為Rust投入大量的資金,不僅在Rust寫了一些項目,而且還在Rust開源生態(tài)系統(tǒng)上投入巨資。他們剛剛聘用了幾個在Rust領(lǐng)域中鼎鼎有名的人才,致力于開發(fā)Linkerd的開源軟件。他們能夠參與到Rust項目中,我非常高興,這意味著他們將會Rust社區(qū)做出更多偉大的貢獻。