1、let mut x = 10i; 用学术的话来说,let代表文法级别的名字绑定(到value对象)
println!是宏,第一眼看到它时还以为是学习Ruby,!代表函数有副作用呢
destructuring let:解构绑定这个概念来自于LISP/Erlang?
2、表达式语言:if是表达式;加上分号就变成语句;return x;等同于直接的一个x
还有,它的if/for/while的条件判断不用加()圆括号,这跟Swift是一致的(就是感觉有点别扭)
3、函数原型:fn f(x: int, y: &str) -> () { ... }
这里使用的语法风格跟C++ 11、Scala似乎都差不多。
4、String是utf-8编码的Unicode字符序列(k,居然强制编码了)
string.as_slice() == "Hello" 对比 string == "Hello".to_string() 这里的概念有点怪异,需要好好想一想(语言设计者到底想表达什么意思?)
5、Tuple,Struct,Tuple Struct——这3者的区分倒是蛮有意思的,Tuple这个概念应该是来自于Python?对应C++ STL里的pair模板
6、Vector(数组)
let nums = [1i, ..20]; // Shorthand for an array of 20 elements all initialized to 1
7、标准输入:
let input = std::io::stdin().read_line().ok().expect("Failed to read line"); //IoResult<T> ?
8、Cargo包管理器的配置文件后缀名 .toml 取得不大好,感觉有点怪异
9、rand::random::<int>(); 见鬼,这里函数模板实例化的语法也很怪异
作者到底有没有在用心设计语言???
10、crates(独立编译单位?)与模块
mod hello {靠
pub fn print_hello() {
println!("Hello, world!");
}
}
11、集成的单元测试支持?
#[test]
这里的属性标注为什么一定要加一个#呢?防止语法解析误解析为Vector?但是#已经在许多脚本语言中用作行注释了,这个设计不大好
(1)引用:let y = &x; 可以直接引用字面量常量
let mut x = 5i;
let y = &mut x;
(2)拥有关系、借用与生命周期
(3)装箱(把原语封装为堆对象?)
(4)Rc与Arc:(自动)引用计数,不能有循环引用!
13、模式匹配
let mut x = 5i;14、闭包
match x {
ref mut x => println!("Got a mutable reference to {}", x),
}
let add_one = |x| { 1i + x };15、proc(这个概念应该是来自于Ruby,不过现在coroutine这么流行,proc没准过时了?)
16、迭代器
for num in nums.iter() { ... }非得加个.iter()吗?
17、消费者(略)
18、再次学习Scala/C#/Haskell:
let x: Option<int> = Some(5i);
19、Traits(暂略)
20、任务Tasks:这个地方倒是跟Python/Go等有的一拼
21、Unsafe(~C#):用于跟外部数值计算模块连接?
来源:http://doc.rust-lang.org/guide.html