Rust是否過度限制了程序員的能力發揮呢?

我們都愛想念熊


Rust 是否限制了程序員的能力發揮? 答案是肯定的。

Rust限制了程序員寫出不安全代碼的能力。

程序員水平不一, 讓他們隨意發揮不知道能寫出什麼代碼來. 你可能覺得這種寫法沒有問題, 但是編譯器不這樣認為。

Rust 語法限制很多,但大多數都是為了阻止程序員寫出不安全的代碼。如果用C++完成某一功能有10條路可以走,那麼用Rust完成同樣的功能可能只有2條路可 以走。Rust通過語法限制配合Rust runtime,把那些可能出現data race、dangling reference、double free等問題的不安全道路堵死了。

比如,大多編程語言對於引用的使用都沒有限制,而Rust則通過對引用施加一些規則,避免了data race的問題:Rust中,一個變量的引用分為可變引用和不可變引用,前者可以讀寫變量值,後者只能讀變量值。對於同一作用域內的同一變量,該變量的引 用必須滿足下述規則之一:

  1. 該變量只有一個可變引用
  2. 該變量有多個可變引用,且每個引用的作用域不相交
  3. 該變量只有若干個不可變引用
  4. 該變量既有可變引用又有不可變引用,且每個引用的作用域不相交

如果代碼不滿足上面任何一個規則,那麼代碼就有潛在的data race風險,將不能通過編譯。下面這段代碼不滿足上面的規則,編譯時會出錯。

// 這段代碼定義了一個可變引用r1,和不可變引用r2,

// 但二者作用域相交,將無法通過編譯

fnmain() {

let mut s = Stringfrom("Hello World!");

let r1 = &mut s;

let r2 = &s;

println!("value of s: {}\


分享到:


相關文章: