結論先行:從語法上說,Rust 基本無敵。
1. ++ 和 --
語言有無 ++、-- 語法C/C++/C#/Java有Go只支持放變量後,不支持放變量前Python/Rust/Scala無
++、-- 一般是 +=、-= 的特例(除了 C++ 的迭代器),沒有必要單獨支持,新語言傾向於語法的單一性。
Python 的情況比較有意思,放後面是語法錯誤,放前面其實就是正負號,+ 寫兩次還是原來的數,- 寫兩次是負負得正,也還是原來的數。
2. 三目運算符(?:)
語言有無 ?: 語法C/C++/C#/Java/Swift有Go/Python/Rust/Scala無
Rust 的 let = if else 就有 C 語言 ?: 的功能,即判斷語句的子語句塊可以有返回值。
3. 條件無需括號
語言條件需不需要括號C/C++/Java/Scala需要Go/Python/Rust/Swift不需要
字符是能少打一個是一個,有效預防鼠標手。另外,Go 和 Rust 的語句塊必須包含於 {}。
4. 異常處理
語言異常處理機制C/C++編譯器擴展 __try...__except...__finally, __leaveC++/C#/Java/Scala/Swiftthrow, try...catch...finallyPythonraise, try...except...else, try...finallyGo/Rust無
5. 換行符(;)
語言換行符C/C++/C#/Java必須JavaScript/Scala/Swift可選,有少數必須的情況Python/Go無Rust有是有,無是無(return),兩者含義不同
Rust 有分號的是語句(statement),返回值是 (),即沒有返回值。而沒分號的是表達式(expression),返回值就是自身的值。
其實想說的是:有的 return 被簡化掉了。省略 ; 就是省略 return,真香。但是,由於隱含 return,所以只能用於語句塊的最後一行。
6. case 隱含 break
語言case 是否隱含 breakC/C++/C#/Java必須顯式 breakGo/Rust/Swift隱含 break
Rust 優秀在用 match 代替 switch,明確告訴大家這是新語法,而 Go/Swift 用 switch,卻改變 case 行為,還多出一個 fallthrough 關鍵字,容易引起鯨神魂裂。
閱讀更多 量子邪穌 的文章