從實踐者的角度看 Rust
編程語言相關的討論,幾乎是技術社區永恆的熱點話題。在即將於 10 月 17~19 日召開的 QCon 上海 2017 上,我們也專門設置了《編程語言》專題。屆時,PingCAP 首席架構師唐劉將分享《Futures and gRPC in Rust》。
我們先來了解下他。
唐劉,PingCAP 首席架構師,典型技術極客一枚,在分散式,高性能,高可用上面有豐富的開發經驗,現正從事下一代分散式資料庫 TiDB 以及分散式存儲 TiKV 的開發,致力於在基礎架構資料庫領域,提供一套完備的 HTAP 解決方案,解放生產力。開源愛好者,知名開源軟體 LedisDB,go-mysql 等系統的作者。工作之餘,喜歡閱讀和寫作,希望自己不斷精進。
QCon 在會前採訪了唐劉老師,交流了編程語言方面的一些問題。
在談到對編程語言的態度時,他說:
我個人並不是一個語言愛好者,也不會刻意的去研究不同的編程語言,但我會的語言倒是蠻多的。我自認為應該是一個工程實踐派,也就是要解決這個問題,哪種語言好,就用哪種。
我個人最喜歡的還是 Go 語言,無論從開發效率還是運行性能上考慮,Go 都是非常不錯的選擇。當然,如果現在要過於關注性能以及跟操作系統打交道,我會使用 Rust。
在工作中,我們主要使用 Rust 和 Go,畢竟整個 TiDB 都是基於這兩門語言打造的。
QCon:TiKV 選擇用 Rust 實現,具體應用中感覺 Rust 有哪些地方體驗比較好?
使用 Rust 的好處在於只要你挨過了最初學習的陣痛期,寫代碼會非常的高效,寫完只要通過編譯了,幾乎不用擔心 data race,dead lock,dangling pointer 等問題。
另外,Rust 的包管理也做得很不錯,在 crate 上面可以找到非常多的高質量第三方組件,我們團隊也貢獻了幾個。
如果使用了 clippy,在編譯的時候,Rust 還會告訴你這樣寫代碼雖然是正確的,但最好改成這個樣子,所以你看大家的 Rust 代碼整體風格會非常的一致,簡潔美觀。
QCon:是不是遇到過什麼坑呢?
相比 Go,Rust 在 profile 上面的工具其實比較缺,雖然有 perf,systemtap 這些外部工具可以用,但也會給使用者帶來新的學習負擔。
Rust 對於網路程序的編寫並不友好,之前就只有一個可憐的 mio,要實現個高效 RPC,幾乎自己要做非常多的工作。譬如我們就自己基於 C gRPC 做了一個 Rust 版本的。
不過後面 tokio 這套生態起來了,情況可能會好一點。
QCon:Rust 也在不斷發展,你們會一直跟進新的版本嗎?
是的,我們在 TiKV 裡面一直用的是 Rust 的 nightly 版本,然後會定期升級到最新的 nightly,我們在這個上面的策略還是比較激進的。QCon:團隊是不是也對 Rust 的發展貢獻了自己的想法?對 Rust 的未來發展有什麼期待?
之前跟 Rust 團隊提到過讓 Rust 能跟 C++ 很好的整合,但現在看起來難度還是很大,我們還是只能通過 C。
對於 Rust 的未來,我們希望能提供更加完善的 profile 工具,譬如 memory profile 這些。
再就是希望在網路編程方面能夠更方便些,這樣大家就能更好的用 Rust 進行高性能伺服器開發了。
另外,希望能有更多的人參與到 Rust 社區裡面,一起把這門語言發展壯大起來。
QCon:Rust 學習曲線比較陡峭,可以分享下學習 Rust 的經驗嗎?
對於 Rust 學習,我覺得還是要動手實踐。就看看語法,看看書啥的不管用,實際中一寫代碼就編譯報錯了。大家可以參與一些知名的開源 Rust 項目,譬如我們的 TiKV,rust gRPC 這些,也可以自己寫一些小的 library 放到 crate 上面供大家使用。
在我們團隊裡面,大家也並不是立刻能快速上手 Rust 的,畢竟這門語言學習曲線太陡峭,大家也都是一邊開發,一邊學習,通常都經過了 1 個月的磨合期,才慢慢熟練的。
期待唐劉老師在 QCon 上海 2017 分享的《Futures and gRPC in Rust》。


※當技術為組織所累時怎麼辦?將你的組織架構旋轉90度!
※月活超美國人口十分之一,各大科技巨頭紛紛布局,智能音箱背後有何門道?
※運維:你好,給你介紹一下新浪微博被拖垮這件事兒
※如何理解Serverless?
※落地機器學習前,我們應該思考清楚的幾個問題
TAG:InfoQ |