網際網路的發展怎樣改變了程式語言的進化方向? |
送交者: Greensky 2015年09月07日14:03:02 於 [靈機一動] 發送悄悄話 |
註:原文來自 Wired,虎嗅編譯。
計算機程式語言未來的發展是怎樣的?這是一個充滿爭議的永恆話題。
FACEBOOK
的工程師路易斯 (Louis Brandy) 和他的同事們在過去兩年裡重新打造了垃圾信息清除系統, 這個系統可以從全球最大的社交媒體中移除掉惡意的、有攻擊性的或是其他不受歡迎的信 息。這可不是一個小工程——全球有超過 15 億用戶在FACEBOOK
上發布信息——為了搞定這個問題,路易斯和團隊做出了一個不尋常的選擇:他們使用了一 種被稱為 Haskell 的程式語言。
Haskell
90 年代初,由學術人員組成的某個委員會發明了 Haskell,將其作為一種語言設計上的試 驗,許多年之後,Haskell 仍舊處在主流程式語言之外的狀態。在網際網路最大的軟體代碼平 台之一 GitHub 上面,Haskell 位列最受歡迎程式語言的第 23 位。即便如此 Facebook仍舊選擇這種語言用來設計其龐大複雜的反垃圾信息系統。 筆者在 Facebook位於加州 Menlo Park 的總部採訪了路易斯,試圖理解這個技術選擇從整體來看對於程序語 言的發展意味著什麼。
可能這個問題看上去很幼稚,但是針對一種程序語言某些優點優於另一種語言的直接討論, 都不可避免地會讓人感覺有那麼一點點尖刻,尤其是還會涉及到一個更廣泛的軟體開發者社 區。程式設計師決定使用某個程式語言基於一系列的技術原因,但是同樣也有個人因素在內 ——兩種原因又互相聯繫。如果筆者的採訪對象過於稱讚 Haskell ——或是過分批評——那 麼有許多人會叫喊這不公平。他們很可能無論如何都會這麼做。
路易斯是這麼說的,他認為 Haskell 非常適合處理FACEBOOK上的垃圾信息,因為這種語言在同時處理許多不同的任務時,非常高效——而且能夠讓工程 師可以隨時對這些計算任務進行編程FACEBOOK這個社交網絡實在是龐大了,垃圾消息的發送者變幻方法的速度很快 Facebook的反垃圾引擎需要一邊設計完善,一邊能夠正常咦鰨乙臁!稈輿t是最關鍵的,我們 希望能夠馬上阻止垃圾消息的攻擊,」他說道,「我們希望在最短的時間裡做更多的檢查, Haskell 在這一點上很有幫助。」
前瞻
如果我們認為 Facebook、Google 和 Amazon 的發展方向代表了整個網際網路行業的話——也就是說,隨著網際網 路的不斷發展,許多其他在線服務也將會遇到這幾家公司現在遇到的問題——Facebook 的 Haskell 項目無疑為整個程序開發領域指出了一個方向。這並不意味著 Haskell 在未來幾年會 大量普及,因為 Haskell 和傳統程式語言相比差異太大,經常有程式設計師用起來有問題; 毫無疑問,這一點將會阻礙廣泛普及。但是 Facebook 的工作標誌著,其他程式語言將會向 Haskell 的大方向上靠攏。
一些新的程序語言已經在這樣做了。Google Go 和 Mozilla 的 Rust 能夠讓開發者設計大規 模並行代碼,迅速搭建項目。一些編程項目也在為其他語言設計類似 Haskell 的軟體庫,比 如「反應式」(reactive) 的編程項目 RxJava。
對於一些程式設計師來說,像 Go 和 Rust 這樣的程式語言並不像 Haskell 那麼高效,但是它 們更容易學習。而且 Go 和 Rust 至少也在貫徹 Haskell 社區過去 25 年來始終堅持的理念。 「Haskell 推進了許多程序語言的發展,」資深程式設計師 Mathias Biilmann 這樣認為, 「我想未來也會繼續如此。」
純函數式 (purely functional)
Biilmann 在舊金山一家創業公司工作,為網站設計軟體。有一次,他在設計一個能夠讓用戶 打開網站時自動調整圖像大小的工具,發現 Haskell 是最理想的程式語言,很大程度上是因 為在並發噝諧絛虻臅r候效率非常高。在一個網際網路站點為如此多用戶完成如此多不同任 務的世界,Haskell 的這個特性非常有價值。「你會收到特別多的圖像縮放請求,」 Biilmann 介紹說,「必需要能夠處理許多並發連結才行。」
Haskell 之所以能做到這一點,是因為它是一種「純函數式程序語言」。從本質上來講,開發 者基於一系列函數功能設計程序,每一個函數都能夠獨立於其他來噝小R簿褪欽f,你能夠 用任何需要的方式執行計算,而不需要依序噝諧絛頡Ⅻ/span>
這樣做會改進速度,也能幫助開發者想清楚他們在幹什麼。「大部分程式語言是,你要寫: 『首先,做這個。之後,再做那個,』」他解釋說,「一旦你用上百個線程同時來做這件事 的時候,人類就很難弄清楚到底在發生什麼,程序執行的先後順序又是什麼。」
隨時編碼
這些基本的語言特性正是 Haskell 吸引FACEBOOK
的地方,後者需要一種程序語言來幫助工程師編寫「規則」,判斷網站上的垃圾信息。判斷 垃圾信息需要從來自FACEBOOK
龐大計算中心中的大量機器提取數據,Haskell 提供了一種快速實現的方式。「在 Haskell 里,同時噝袃蓚函數是很安全的,你知道不會有任何副作用。可對於大部分程序語言來說 就不行了,」路易斯說,「Haskell 能夠讓你將看起來依序排列的代碼提出,同時噝興麄儭!更/span>
不僅如此,Facebook 的工程師還可以在不必擔心代碼將如何噝械那闆r下去編寫「規則」。「我們希望從並發的狀態中抽象出來,」Haskell 大師 Simon Marlow 介紹說,「儘管並行處理對於效率很重要,我們卻不希望寫反垃圾系統的工程師去擔心這一點。Haskell 很 擅長抽象化。」
Instagram 也使用FACEBOOK
的系統處理垃圾信息,該公司的工程師介紹,在遭受垃圾信息攻擊的時候會隨時編寫規則, 「如果我們使用的是純函數式的程式語言,完全沒有副作用,那麼就能更快做出行動。」
對於更大範圍的程序世界來說,這一點也很重要。現代網際網路服務一定要快速進化,不僅 是為了服務不斷擴大、變化的用戶群,而且要保持競爭狀態。
「不是壞事」
現狀是:Biilmann 已經不再用 Haskell 了。Haskell 並非完全實用。使用該程式語言的人不 夠多,而且很難改變這一點。「Haskell 就像一個來自未來的程序語言,但這是一個永遠不會 到來的未來,」Biilmann 說道,「它解決了所有聲稱要解決的問題。但是它太過與眾不同, 不可能成為通用語言。」
如今,在設計需要並發性能的服務時,Biilmann 更傾向於使用 Go 或者 Rust。他說這兩種語 言不如 Haskell 強大,但是發展方向是對的。而且對於主流程式設計師來說更適合。「如果 今天我要重寫圖像縮放器的話,很可能會用 Go,」他這樣說,「Go 解決了 80% 的問題, 而且基本上沒有學習曲線。」
在FACEBOOK
,路易斯承認 Haskell 的並行計算風格並不適用於所有任務,而且對於一些程式設計師來 說,學起來很困難。但是他很有信心,未來幾年這項技術會變得更加重要。「這種技術肯定 有潛力,」他說,「每家公司基本上都在寫類似的代碼。你必須這麼做。你會看到許多程序 語言出現,感覺和它一樣,在底層機制上。」
那麼 Haskell 呢?從長遠來看,它是否能發展成一個更普遍的程序語言呢?程式設計師群體 又是否能更大程度地接受它呢?「我不知道,」路易斯這樣說,「不過我不認為那是件壞 事。」
|
|
|
|
實用資訊 | |