TOP
0
0
魅麗。花火原創小說66折起
Rust編程之道(簡體書)
滿額折

Rust編程之道(簡體書)

人民幣定價:128 元
定  價:NT$ 768 元
優惠價:87668
領券後再享89折
無庫存,下單後進貨(採購期約45個工作天)
可得紅利積點:20 點
相關商品
商品簡介
作者簡介
目次

商品簡介

Rust 是一門利用現代化的類型系統,有機地融合了內存管理、所有權語義和混合編程範式的編程語言。它不僅能科學地保證程序的正確性,還能保證內存安全和線程安全。同時,還有能與C/C++語言媲美的性能,以及能和動態語言媲美的開發效率。本書並非對語法內容進行簡單羅列講解,而是從四個維度深入全面且通透地介紹了Rust 語言。從設計哲學出發,探索Rust 語言的內在一致性;從源碼分析入手,探索Rust 地道的編程風格;從工程角度著手,探索Rust 對健壯性的支持;從底層原理開始,探索Rust 內存安全的本質。本書涵蓋了Rust 2018 的特性,適合有一定編程經驗且想要學習Rust 的初學者,以及對Rust 有一定的瞭解,想要繼續深入學習的進階者。

作者簡介

張漢東,80後,資深軟件工程師、企業獨立諮詢師、技術作者譯者。愛好讀書、寫作,喜歡研究技術、學習之道,以及心智和認知開發模式。曾在互聯網行業沉浮十餘載,先後效力于電商、社交遊戲、廣告和眾籌領域。作為企業獨立諮詢師,先後為思科、平安科技和閃迪等公司提供諮詢服務。目前在心智教育及創客領域開疆拓土。是《Ruby原理剖析》一書的譯者。喜歡Rust語言,為Rust語言提交了三次編譯器Bug,並協助修復其中之一。為官方Rust 2018 Guide做過貢獻,並數次提出改進意見。參與了國內Rust社區的管理和運營,在2018年打造了《Rust每日新聞》頻道,深受Rustacean們的喜愛。為初學者精心打造了Rust必學第一課:知乎Live《如何系統地學習Rust語言》,獲得五星好評。


當我2015 年開始學習Rust 的時候,我絕對沒有想過要寫一本Rust 編程的書。
緣起
當時我剛剛翻譯完《Ruby 原理剖析》一書,開始對底層開發產生了一點點興趣。從2006年入行以來,我就一直和動態語言打交道。雖然自己也想學習底層開發,但能選擇的語言幾乎只有C++。我在學校裡淺淺地學過C++這門語言,也許是第一印象作怪,總難以提起對C++的興趣。
當Rust 1.0 發佈時,我去官方網站瞭解了一下Rust 語言,發現它的主要特點有以下幾方面:
? 系統級語言
? 無GC
? 基於LLVM
? 內存安全
? 強類型+靜態類型
? 混合編程範式
? 零成本抽象
? 線程安全
我一下子就被這些鮮明的特性“擊中”了,從此開始了Rust 的學習。
再一次愛上編程
第一次愛上編程是在上小學時。父親給我買回來一台金字塔學習機,這台學習機有兩種功能,一種是學習Logo 語言,另一種是玩卡帶遊戲。編寫Logo 語言就是用小海龜畫圖,也許是因為太早了,也許是因為沒有人引導,那時的我選擇了痛快地玩遊戲。總想著先玩遊戲,再去學怎麼編程,然後還幻想著能不能用Logo 語言編寫一個遊戲。其實這時候的我對編程更多的是一種憧憬,並沒有在學習編程上付出更多的實際行動。
第二次愛上編程是在大學初次學習C 語言的時候。我本可以選擇計算機科學專業,但是最後還是選了電子信息科學與技術專業。這樣選是因為我想把軟硬件都學了。想法是好的,可惜實施起來並不容易。最後的結果就是,軟硬件都沒學好。
第三次愛上編程是在遇到Ruby 語言的時候。當時我在用Java,並且已經完全陷入了Java語言和Web 框架紛繁複雜的細節中,痛苦不堪。Ruby on Rails 框架的橫空出世,把我從這種狀態中解救了出來。Ruby 語言的優雅和自由,以及“讓程序員更快樂”的口號深深地吸引了我。這一次我是真正愛上了編程,並且積極付諸行動去學習和提升自己。此時也恰逢互聯網創業大潮的開始,Ruby 語言的開發效率讓它迅速成為創業公司的寵兒,因此,我也借著Ruby
這門語言參與到了這股創業洪流中。
第四次愛上編程是在遇到Rust 的時候。此時,創業洪流已經退潮。技術圈有句話,叫“十年一輪回”。當年喜歡Ruby 給開發過程帶來的快樂,但是隨著時代的變革和業務規模的增長,我不禁開始重新思考一個問題:何謂快樂?真正的快樂不僅僅是寫代碼時的“酸爽”,更應該是代碼部署到生產環境之後的“安穩”。Rust 恰恰可以給我帶來這種“雙重快樂”體驗。
為什麼是Rust
社區中有人模仿阿西莫夫的機器人三大定律,總結了程序的三大定律:
? 程序必須正確。
? 程序必須可維護,但不能違反第一條定律。
? 程序必須高效,但不能違反前兩條定律。
程序的正確性,一方面可以理解為該程序滿足了實際的問題需求,另一方面是指滿足了它自身的程序規約。那麼如何保證程序的正確性呢?首先,可以通過對程序的各種測試、斷言和錯誤處理機制,來保證其滿足實際的問題需求。其次,在數學和計算機科學已經融合的今天,通過較為成熟的類型理論即可保證程序自身的規約正確。
以我最熟悉的Ruby 語言為例,程序的正確性必須依賴于開發者的水平,並需要大量的測試代碼來保證正確性。即便在100%測試覆蓋率的條件下,也經常會遇到NilError 之類的空指針問題。也就是說,Ruby 程序自身的正確性還沒有得到保證。以此類推,C、C++、Python、Java、JavaScript 等語言都有同樣的問題。
而函數式編程語言在這方面要好很多,尤其是號稱純函數式的Haskell 語言,它具有融合了範疇理論的類型系統,利用了範疇理論自身的代數性質和定律保證了程序自身的正確性。然而,Haskell 也有比較明顯的缺點,比如它不滿足上述第三條定律,運行效率不高。
反觀Rust 語言,對程序的三定律支持得恰到好處。它借鑒了Haskell 的類型系統,保證了程序的正確性。但還不止於此,在類型系統的基礎上,Rust 借鑒了現代C++的內存管理機制,建立了所有權系統。不僅保證了類型安全,還保證了內存安全。同時,也解決了多線程併發編程中的數據競爭問題,默認線程安全。再來看代碼的可維護性,Rust 代碼的可讀性和抽象能力都是一流的。不僅擁有高的開發效率,還擁有可以和C/C++媲美的性能。當然,沒有銀彈,但Rust 就是我目前想要的語言。
目前Rust 被陸續應用在區塊鏈、遊戲、WebAssembly 技術、機器學習、分布式數據庫、網絡服務基礎設施、Web 框架、操作系統和嵌入式等領域。時代在變化,未來的互聯網需要的是安全和性能並重的語言,Rust 必然會在其中大放異彩。
學習Rust 帶來了什麼收穫
Rust 是一門現代化的語言,融合了多種語言特性,而且Rust 語言可以應用的領域範圍非常廣泛。在學習Rust 的過程中,我發現自己的編程能力在很多方面存在短板。突破這些短板的過程實際上就是一次自我提升的過程。
Rust 是一門成長中的新語言,學習Rust,跟隨Rust 一起成長,可以體驗並參與到一門真正工業化語言的發展進程中,感覺就像在創造歷史。雖然我並未給Rust 語言提交過PR,但也為Rust 語言和社區多次提交過Bug,以及文檔和工具的改進意見。
Rust 自身作為一個開源項目,算得上是開源社區中的“明星”項目了。學習Rust 的過程加深了我對開源社區的認識,也開拓了我的眼界。
為什麼要寫這本書
在學習Rust 一年之後,我寫下了《如何學習一門新語言》一文,其中記錄了我學習Rust的心得,這篇文章頗受好評。也正因為這篇文章,電子工業出版社的劉恩惠編輯找到了我,並詢問是否可以出一本Rust 編程的書籍。我當時也正想通過一本書來完整地表達自己的學習心得,再加上中文社區中沒有較全面系統的Rust 書籍,於是,一拍即合。
寫書的過程可以形容為痛並快樂著。Rust 語言正值成長期,很多語言特性還在不斷地完善。舉一個極端的例子,比如寫下某段代碼示例並成功編譯後,過了三天卻發現它無法編譯通過了。於是,我再一次跟進Rust 的RFC、源碼、ChangeLog 去看它們的變更情況,然後再重新修訂代碼示例。這個過程雖然痛苦,但改完之後會發現Rust 的這個改進確實是有必要的。
在這個過程中,我看到了Rust 的成長,以及Rust 團隊為保證語言一致性和開發者的開發體驗所付出的努力,讓我感覺自己花再多時間和精力去修改本書的內容都是值得的。
話說回來,任何人做事都是有動機或目的的,我也不例外。我寫這本書的目的主要有以下三個。
? 為Rust 中文社區帶來一本真正可以全面系統地學習Rust 的書。
? 以教為學。在寫作的過程中,讓自己所學的知識進一步內化。
? 傳播一種自學方法。本書內容以Rust 語言的設計哲學為出發點,按照從整體到細節的思路逐個闡述每個語言特性,希望讀者可以產生共鳴。
結語
我自己作為本書的第一位讀者,目前對這本書是非常滿意的。衷心希望每一位讀者都能從本書中收穫新知。當然,我也知道不可能讓每一位讀者都滿意。在我看來,寫書不僅是在傳播知識和思想,更是一種交流和溝通。所以,當你不滿意的時候,可以來找我交流,提出更多建設性意見,幫助我成長。我爭取在寫下一本書的時候,讓更多的人滿意。而且,如果你的建議確實中肯,讓我得到了成長,我也為你準備了不錯的小禮物。


前言
在我剛開始學習Rust 的時候,在社區裡聽到最多的聲音就是“Rust 學習曲線陡”。已經有一定編程經驗的人在學習一門新語言時,都喜歡直接上手寫代碼,因為這樣可以快速體驗這門語言的特色。對於大多數語言來說,這樣確實可以達到一定的學習目的。但是當他們在初次學習Rust 的時候,就很難通過直接上手來體驗這種快感。
我第一次學習Rust 時就遇到了這樣的情況。我按以往的編程經驗直接寫下了代碼,但是編譯無法通過;可是有時候簡單調換兩行代碼的順序,程序就能順利編譯成功了,這讓我非常困惑。我想這也是大多數人感覺“Rust 學習曲線陡”的原因吧。經過和Rust 編譯器的多次“鬥爭”之後,我不得不重新反思自己的學習方法。看樣子,Rust 編譯器暗含了某種規則,只要程序員違反了這些規則,它就會檢查出來並阻止你。這就意味著,作為程序員,你必須主動理解並遵守這些規則,編譯器才能和你“化敵為友”。
所以,我就開始了對Rust 的第二輪學習,忘掉自己以往的所學,抱著初學者的心態,從零開始系統地學習Rust。然而,事情並沒有這麼簡單。
Rust 官方雖然提供了Rust Book,但是內容的組織非常不友好,基本就是對知識點的羅列,系統性比較差。後來官方也意識到了這個問題,推出了第2 版的Rust Book,內容組織方面改善了很多,對學習者也非常友好,但系統性還是差了點。後來又看了國內Rust 社區組織群友們合著的Rust Primer,以及國外的Programming Rust,我才對Rust 建立了基本的認知體系。
直到此時,我才意識到一個重要的問題:Rust 學習曲線陡的根本原因在於Rust 語言融合了多種語言特性和多種編程範式。這就意味著,Rust 涉及的知識範圍非常廣泛,涵蓋了面向對象、函數式、泛型、底層內存管理、類型系統、設計模式等知識。從底層到上層抽象,從模式到工程化健壯性,無所不包。可以說,Rust 是編程語言發展至今的集大成者。對於大多數Rust 語言的初學者來說,他掌握的知識體系範圍是小於Rust 所包含的知識量的,所以在學習Rust 的過程中會遇到無法理解的內容。
我在學習Rust 之前,所掌握的編程語言知識體系大多是和擁有GC 的動態語言相關的,對於底層內存管理知之甚少。所以在我學習Rust 所有權的時候,就很難理解這種機制對於內存安全的意義所在;而我所認識的一些擁有C 語言編程經驗的朋友,在學習Rust 時面臨的問題是,難以理解Rust 支持的上層抽象,對他們來說,

目次

第1 章 新時代的語言 .................................................................................................. 1
1.1 緣起 ........................................................................................................................... 1
1.2 設計哲學 ................................................................................................................... 3
1.2.1 內存安全....................................................................................................... 3
1.2.2 零成本抽象 ................................................................................................... 4
1.2.3 實用性 .......................................................................................................... 5
1.3 現狀與未來 ............................................................................................................... 7
1.3.1 語言架構....................................................................................................... 8
1.3.2 開源社區....................................................................................................... 9
1.3.3 發展前景....................................................................................................... 9
1.4 Rust 代碼如何執行 ................................................................................................ 10
1.5 小結 ......................................................................................................................... 10
第2 章 語言精要 ........................................................................................................ 11
2.1 Rust 語言的基本構成 ............................................................................................. 11
2.1.1 語言規範..................................................................................................... 11
2.1.2 編譯器 ........................................................................................................ 12
2.1.3 核心庫 ........................................................................................................ 12
2.1.4 標準庫 ........................................................................................................ 12
2.1.5 包管理器..................................................................................................... 13
2.2 語句與表達式 ......................................................................................................... 13
2.3 變量與綁定 ............................................................................................................. 14
2.3.1 位置表達式和值表達式 ............................................................................. 15
2.3.2 不可變綁定與可變綁定 ............................................................................. 15
2.3.3 所有權與引用 ............................................................................................. 16
2.4 函數與閉包 ............................................................................................................. 17
2.4.1 函數定義..................................................................................................... 17
2.4.2 作用域與生命週期 ..................................................................................... 18
2.4.3 函數指針..................................................................................................... 19
2.4.5 CTFE 機制 .................................................................................................. 20
2.4.6 閉包 ............................................................................................................ 20
2.5 流程控制 ................................................................................................................. 22
2.5.1 條件表達式 ................................................................................................. 22
2.5.2 循環表達式 ................................................................................................. 23
2.5.3 match 表達式與模式匹配 .......................................................................... 24
2.5.4 if let 和while let 表達式 ............................................................................ 25
2.6 基本數據類型 .........................

您曾經瀏覽過的商品

購物須知

大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。

特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。

無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。

為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。

若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。

優惠價:87 668
無庫存,下單後進貨
(採購期約45個工作天)

暢銷榜

客服中心

收藏

會員專區