初學者學習Rust容易碰到的問題 - tim
對許多人來說,學習 Rust 感覺很難。更重要的是,人們推遲學習 Rust 是因為認為它可能太難了。
人們經常爭辯說,Rust 的所有權和生命週期概念很新穎,因此很困難。我想知道這是否完全正確。所有程式語言都有困難的概念。我懷疑學習 Rust 的困難部分是由核心語言之外的因素造成的。
學好 Rust 涉及學習駕馭充滿行話和隱含文化規範的社會文化、景觀。
下面是初學者容易碰到的問題:
String和&str之間的區別是什麼?
如果Rust社群找到一種方法來快速回答這個問題--這恰好是Stack Overflow上rustlang標籤中評分最高的問題--給那些剛接觸Rust的人,那麼它作為一種通用的程式語言就會成功。
如果沒有一個簡潔的答案,Rust對很多人來說仍然是神秘的。
理解String vs &str意味著對所有權系統的理解,這意味著對生命週期系統的理解。
這可能意味著你已經接觸到了指標、引用,甚至可能是別名。
這裡通常會交織著關於可變性的討論。
獲得對錶示文字的資料型別的直覺得益於對編碼的理解,而編碼則得益於對CPU執行方式的理解。
我還沒有為完全的初學者找到一個pass的心理方法。但是我知道另一種系統程式語言的學習者在這裡有明顯的優勢。
常見的策略是告訴使用者:他們應該 "暫時使用String"。
每個人都知道,這只是一個半答案。一個旨在給學習者一些時間的答案。但這甚至不是一個半答案。
不用多久,他們就會遇到一個以&str(或者更糟糕的是AsRef<str>)為引數的函式的引數。
難以找到的預設值
每當你在使用者面前放置一個需要他做決定的決策點,你就會引入認知負荷。
認知負荷對於初學者來說尤其昂貴,他們需要在工作記憶中保留大量的細節,以便在編寫程式碼時取得進展。
Rust社群重視精確性。我們關心我們的價值觀是如何在記憶體中佈局的。
我們希望給開發者提供強大的型別安全,這樣他們就能寫出健壯的程式。
不幸的是,對於Rust的新使用者來說,往往有多種選擇,而這些選擇看起來應該是沒有的。
- 哪種數字型別是 "正確的"?
- 什麼時候應該使用&str、String、Cow、T: Display、T: AsRef<str>、T: Into<string>或其他任何選項?
- HashMap vs BTreeMap用於對映鍵和值
- 很難理解幾個聽起來相似的特性之間有什麼區別,例如ToString vs ToOwned vs Into<string>和Debug vs Display。
- 為什麼有這麼多轉換型別的方法?什麼時候應該使用 as 關鍵字?.into()、T::from()和.try_into()怎麼樣。
我們應該在給予指導方面做得更好。
難以知道該使用哪個crate
Rust有一個由crates.io支援的豐富的crate生態系統,它提供了語義版本和不可變的版本。這使得庫的作者可以在可靠性的支援下進行快速而強大的創新。這個生態系統也有它的弊端。
crates.io的無名稱空間政策很容易導致名字被盜用,而通常由一個作者編寫的單個庫則很容易受到側面攻擊。
我認為,可能會有另一個crate註冊中心的空間,它提供精心策劃的板塊集合,可能在保留的名稱空間內。(如果我有幾百萬美元,這將是我的創業想法!)。
這種情況是難以駕馭的,特別是對於初學者。我們的crate有可愛的名字,而不是描述性的名字。
需要一些經驗才能知道parking_lot是優秀的同步基元的crate。
也許解決這個問題的方法之一是提供精心策劃的crate集合。
相關文章
- 初學APEX碰到的問題記錄
- Java基礎:初學者容易混淆的幾個問題(轉)Java
- 初學者問題一
- 初學者Jpetstore問題?
- 在學習play framework中碰到的問題Framework
- 初學者在學習Python語言時,要注意哪些問題?Python
- Java初學者容易犯哪些錯誤?Java
- Oracle初學者問題9(轉)Oracle
- Oracle初學者問題8(轉)Oracle
- Oracle初學者問題7(轉)Oracle
- Oracle初學者問題6(轉)Oracle
- Oracle初學者問題5(轉)Oracle
- Oracle初學者問題4(轉)Oracle
- Oracle初學者問題3(轉)Oracle
- Oracle初學者問題1(轉)Oracle
- Oracle初學者問題2(轉)Oracle
- Java初學者有問題求教Java
- Java初學者容易犯的程式碼錯誤Java
- Python 初學者容易踩的 5 個坑Python
- Laravel 初學者學習點滴Laravel
- 初學者學習程式設計的方法程式設計
- 初學者想問一個RMI問題
- PHP初學者常見問題集PHP
- 模仿例子出現問題--初學者
- GIT初學者詳細指令學習Git
- LINUX初學者(學習資料)Linux
- CCNA初學者學習經驗!(轉)
- Python初學者需要注意的問題Python
- 初學者請教Jivejon3的問題
- C語言初學者最常問的幾個問題C語言
- 初學者學Java常遇到的問題,我都給你回答了!Java
- oracle初學者如何有效推進與提升自己的學習與解決問題的能力呢?Oracle
- 初學者的小疑問
- webpack碰到的問題Web
- java初學者最關心的五個問題Java
- Python適合初學者學習嗎?Python
- SAP 幾款容易令初學者混淆的 HANA 解決方案
- VC++初學者常見問題解惑 (轉)C++