Rust 是一门最近比较热的语言,有很多人问过我对 Rust 的看法。由于我本人是一个语言专家,实现过几乎所有的语言特性,所以我不认为任何一种语言是新的。任何“新语言”对我来说,不过是把早已存在的语言特性(或者毛病),挑一些出来放在一起。所以一般情况下我都不会去评论别人设计的语言,甚至懒得看一眼,除非它历史悠久(比如像 C 或者 C++),或者它在工作中惹恼了我(像 Go 和 JavaScript 那样)。这就是为什么这些人问我 Rust 的问题,我一般都没有回复,或者一笔带过。
不过最近有点闲,我想既然有人这么热衷于这种新语言,那我还是稍微凑下热闹,顺便分享一下我对某些常见的设计思路的看法。所以这篇文章虽然是在评论 Rust 的设计,它却不只是针对 Rust。它是针对某些语言特性,而不只是针对某一种语言。
由于我这人性格很难闭门造车,所以现在我只是把这篇文章的开头发布出来,边写边更新。所以你要明白,这只是一个开端,我会按自己理解的进度对这篇文章进行更新。你看了之后,可以隔一段时间再回来看新的内容。如果有特别疑惑的问题,也可以发信来问,我会汇总之后把看法发布在这里。
变量声明语法Rust 的变量声明跟 Scala 和 Swift 的很像。你用
let x = 8; 这样的构造来声明一个新的变量。大部分时候 Rust 可以推导出变量的类型,所以你不一定需要写明它的类型。如果你真的要指明变量类型,需要这样写:
let x: i32 = 8; 在我看来这是丑陋的语法。本来语义是把变量 x 绑定到值 8,可是 x 和 8 之间却隔着一个“i32”,看起来像是把 8 赋值给了 i32……
变量缺省都是不可变的,也就是不可赋值。你必须用一种特殊的构造
let mut x = 8; 来声明可变变量。这跟 Swift/Scala 的 let 和 var 的区别是一样的,只是形式不大一样。
变量可以重复绑定
不过最近有点闲,我想既然有人这么热衷于这种新语言,那我还是稍微凑下热闹,顺便分享一下我对某些常见的设计思路的看法。所以这篇文章虽然是在评论 Rust 的设计,它却不只是针对 Rust。它是针对某些语言特性,而不只是针对某一种语言。
由于我这人性格很难闭门造车,所以现在我只是把这篇文章的开头发布出来,边写边更新。所以你要明白,这只是一个开端,我会按自己理解的进度对这篇文章进行更新。你看了之后,可以隔一段时间再回来看新的内容。如果有特别疑惑的问题,也可以发信来问,我会汇总之后把看法发布在这里。
变量声明语法Rust 的变量声明跟 Scala 和 Swift 的很像。你用
let x = 8; 这样的构造来声明一个新的变量。大部分时候 Rust 可以推导出变量的类型,所以你不一定需要写明它的类型。如果你真的要指明变量类型,需要这样写:
let x: i32 = 8; 在我看来这是丑陋的语法。本来语义是把变量 x 绑定到值 8,可是 x 和 8 之间却隔着一个“i32”,看起来像是把 8 赋值给了 i32……
变量缺省都是不可变的,也就是不可赋值。你必须用一种特殊的构造
let mut x = 8; 来声明可变变量。这跟 Swift/Scala 的 let 和 var 的区别是一样的,只是形式不大一样。
变量可以重复绑定