From e67f6af823ad374f48451dd2acce51e90fac4778 Mon Sep 17 00:00:00 2001 From: naupio_zy_huang Date: Wed, 6 Apr 2016 18:02:28 +0800 Subject: [PATCH 1/3] fix #160 --- 12-ownership-system/12-01-ownership.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/12-ownership-system/12-01-ownership.md b/12-ownership-system/12-01-ownership.md index 1855cd0..3b6922d 100644 --- a/12-ownership-system/12-01-ownership.md +++ b/12-ownership-system/12-01-ownership.md @@ -28,7 +28,7 @@ int* foo() { 上面定义了一个i32类型的标识符a,如果你直接println,你会收到一个error报错: > error: use of possibly uninitialized variable: `a` -这是**因为Rust并不会像其他语言一样可以为变量默认初始化值,Rust明确规定变量的初始值必须有程序员自己决定**。 +这是**因为Rust并不会像其他语言一样可以为变量默认初始化值,Rust明确规定变量的初始值必须由程序员自己决定**。 正确的做法: ```rust From 49b9806c7d02f17aaa3c88733882e487c50b28e7 Mon Sep 17 00:00:00 2001 From: Naupio Date: Thu, 7 Apr 2016 00:40:42 +0800 Subject: [PATCH 2/3] rewrite 04 chapter: add 04-00-rust-travel --- .../04-00-rust-travel.md | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 04-quickstart-rewrite-WIP/04-00-rust-travel.md diff --git a/04-quickstart-rewrite-WIP/04-00-rust-travel.md b/04-quickstart-rewrite-WIP/04-00-rust-travel.md new file mode 100644 index 0000000..25f700e --- /dev/null +++ b/04-quickstart-rewrite-WIP/04-00-rust-travel.md @@ -0,0 +1,112 @@ +# Rust旅程 + +## HelloWorld +按照编程语言的传统,学习第一门编程语言的第一个程序都是打印 Hello World! +下面根据我们的步骤创建 Rust 的 Hello World!程序: + +**下面的命令操作,如果没有特别说明,都是在shell下运行。本文为了简单统一,所有例子都在 win10 的 powershell 下运行,所有命令都运行在`ps:`标识符之后** + +- 创建一个 Doing 目录和 helloworld.rs 文件 + +> ps: mkdir ~/Doing + +> ps: cd ~/Doing + +> ps: notepad helloworld.rs # 作者偏向于使用 sublime 作为编辑器 + +> ps: subl helloworld.rs # 本章以后使用 subl 代替 notepad + +注意这里用的后缀名是.rs,一般编程语言的代码文件都有惯用的后缀名,比如: + C语言是.c,java是.java,python是.py等等,**请务必记住Rust语言的惯用后缀名是.rs**(虽然用别的后缀名也能通过rustc的编译)。 + +- 在 helloworld.rs 文件中输入 Rust 代码 + +```rust +fn main() { + println!("Hello World!"); +} +``` + +- 编译 helloworld.rs 文件 + +> ps: rustc helloworld.rs + +> ps: rustc helloworld.rs -O # 也可以选择优化编译 + +- 运行程序 + +> ps: ./helloworld.exe # windows 平台下需要加 .exe 后缀 + +> Hello World! + +没有`ps:`前缀的表示为控制台打印输出。 + +我们已经用rust编写第一个可执行程序,打印出了'hello world!',很酷,对吧! +但是这段代码到底是什么意思呢,作为新手的你一定云里雾里吧,让我们先看一下这个程序: + +1. 第一行中 fn 表示定义一个**函数**,main是这个函数的名字,花括号{}里的语句则表示这个函数的内容。 +2. 名字叫做**main**的函数有特殊的用途,那就是作为程序的入口,也就是说程序每次都从这个函数开始运行。 +3. 函数中只有一句 ```println!("Hello World!");```,这里```println!```是一个Rust语言自带的**宏**, +这个宏的功能就是打印文本(结尾会换行),而"Hello World!"这个用引号包起来的东西是一个**字符串**,就是我们要打印的文本。 +4. 你一定注意到了```;```吧, 在Rust语言中,分号```;```用来把语句分隔开,也就是说语句的末尾一般用分号做为结束标志。 + +## HelloRust + +- 创建项目 hellorust + +> ps: cargo new hellorust --bin + +- 查看目录结构 + +> ps: tree # win10 powershell 自带有 tree 查看文件目录结构的功能 + +> └─hellorust + +> ----└─src + +这里显示的目录结构,在hellorust目录下有 src 文件夹和 Cargo.toml 文件,同时这个目录会初始化为 git 项目 + +- 查看Cargo.toml文件 + +> ps: cat Cargo.toml + +> [package] +name = "hellorust" +version = "0.1." +authors = ["YourName "] + +> [dependencies] + +- 编辑src目录下的main.rs文件 + +> ps: subl ./src/main.rs + +cargo 创建的项目,在src目录下会有一个初始化的main.rs文件,内容为: +```rust +fn main() { + println!("Hello, world!"); +} +``` +现在我们编辑这个文件,改为: +```rust +fn main() { + let rust = "Rust"; + println!("Hello, {}!", rust); +} +``` +这里的 `let rust = "Rust"` 是把 rust 变量绑定为 "Rust" , +`println!("Hello, {}!", rust);`里把 rust 变量的值代入到`"Hello, {}!"`中的`{}`。 + +- 编译和运行 + +> ps: cargo build + +> ps: cargo build --release # 这个属于优化编译 + +> ps: ./target/debug/hellorust.exe + +> ps: ./target/release/hellorust.exe # 如果前面是优化编译,则这样运行 + +> ps: cargo run # 编译和运行合在一起 + +> ps: cargo run --release # 同上,区别是是优化编译的 \ No newline at end of file From 4da4df545367c8384aa8c67249962cb4fcc066d0 Mon Sep 17 00:00:00 2001 From: naupio_zy_huang Date: Fri, 8 Apr 2016 10:48:07 +0800 Subject: [PATCH 3/3] fix #163 --- 12-ownership-system/12-01-ownership.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/12-ownership-system/12-01-ownership.md b/12-ownership-system/12-01-ownership.md index 3b6922d..9651fc8 100644 --- a/12-ownership-system/12-01-ownership.md +++ b/12-ownership-system/12-01-ownership.md @@ -261,7 +261,8 @@ fn main() { } ``` >结果: x=100, y=102 - + +注意: 例子1是比较特别的,使不使用 move 对结果都没什么影响,因为环境变量 x 是 i32 类型,属于 primitive type,实现了 Copy trait,在闭包使用 move 的时候,是先 clone 了一份 x ,在 move 的时候是 move 了这份 clone 的 x,所以后面的 println!引用 x 的时候没有报错。 **例子2:** ```rust fn main() {