Skip to content

Commit b59e05b

Browse files
author
wayslog
committed
for molisa tucao
1 parent b65d462 commit b59e05b

17 files changed

Lines changed: 33 additions & 30 deletions

File tree

01-1st-glance/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Rust 是一门系统级编程语言,被设计为保证内存和线程安全,并防止段错误。作为系统级编程语言,它的基本理念是 “零开销抽象”。理论上来说,它的速度与 C / C++ 同级。
22

3-
Rust 可以被归为通用的、多泛式、编译型的编程语言,类似 C 或者 C++。与这两门编程语言不同的是,Rust 被设计为线程安全的。它支持纯函数式、命令过程式、面向对象的编码风格。
3+
Rust 可以被归为通用的、多泛式、编译型的编程语言,类似 C 或者 C++。与这两门编程语言不同的是,Rust 被设计为线程安全的
44

55
Rust 编程语言的目标是,创建一个高度安全和并发的软件系统。它强调安全性、并发和内存控制。尽管 Rust 借用了 C 和 C++ 的语法,它不允许空指针和悬挂指针,二者是 C 和 C++ 中系统崩溃、内存泄露和不安全代码的根源。
66

08-function/08-02-return_value.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ fn diverging() -> ! {
7777
panic!("This function will never return");
7878
}
7979
```
80-
由于发散函数不会返回,所以就算其后再有其他语句也是不会执行的。倘若其后还有其他语句,会出现如下编译警告:![error](../image/08-02-img1.png)
80+
由于发散函数不会返回,所以就算其后再有其他语句也是不会执行的。倘若其后还有其他语句,会出现如下编译警告:![error](../image/08-02-img1.png)。当然了,我们要知道的是不发散的函数也是可以不返回的,比如无限循环之类的。
8181
发散函数一般都以`panic!`宏调用或其他调用其他发散函数结束,所以,调用发散函数会导致当前线程崩溃。[Rust Reference 6.1.3.2 Diverging functions][ref]中的描述如下:
8282
> We call such functions "diverging" because they never return a value to the caller. Every control path in a diverging function must end with a panic!() or a call to another diverging function on every control path. The ! annotation does not denote a type.
8383

11-generics/11-01-generics.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,15 @@ fn main() {
3030

3131
概念
3232
-------------
33-
泛型程序设计是程序设计语言的一种风格或范式。允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时(instantiate)作为参数指明这些类型。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。Ada, Delphi, Eiffel, Java, C#, F#, Swift, and Visual Basic .NET称之为泛型(generics);ML, Scala and Haskell称之为参数多态(parametric polymorphism);C++与D称之为模板。具有广泛影响的1994年版的《Design Patterns》一书称之为参数化类型(parameterized type)。
33+
泛型程序设计是程序设计语言的一种风格或范式。允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时(instantiate)作为参数指明这些类型(在Rust中,有的时候类型还可以被编译器推倒出来)。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。Ada, Delphi, Eiffel, Java, C#, F#, Swift, and Visual Basic .NET称之为泛型(generics);ML, Scala and Haskell称之为参数多态(parametric polymorphism);C++与D称之为模板。具有广泛影响的1994年版的《Design Patterns》一书称之为参数化类型(parameterized type)。
3434
>提示:
3535
>以上概念摘自[《维基百科-泛型》](https://zh.wikipedia.org/wiki/%E6%B3%9B%E5%9E%8B)
3636
37-
Rust中,也称为泛型,通俗的讲,泛型就是好比坦克的炮管,既可以发射普通弹药,也可以发射制导炮弹(导弹),也可以发射贫铀穿甲弹,甚至发射子母弹,大家都不想为每一种炮弹都在坦克上分别安装一个专用炮管,即使生产商愿意,炮手也不愿意,累死人啊。所以在编程开发中,我们也需要这样“通用的炮管”,这个“通用的炮管”就是泛型。
38-
泛型主要目的是为程序员提供了编程的便利,减少代码的臃肿,同时极大丰富了语言本身的表达能力。想想,一个函数,代替了几十个,甚至数百个函数,是一件多么让人兴奋的事情。
37+
在编程的时候,我们经常利用多态。通俗的讲,多态就是好比坦克的炮管,既可以发射普通弹药,也可以发射制导炮弹(导弹),也可以发射贫铀穿甲弹,甚至发射子母弹,大家都不想为每一种炮弹都在坦克上分别安装一个专用炮管,即使生产商愿意,炮手也不愿意,累死人啊。所以在编程开发中,我们也需要这样“通用的炮管”,这个“通用的炮管”就是多态。
38+
39+
需要知道的是,泛型就是一种多态。
40+
41+
泛型主要目的是为程序员提供了编程的便利,减少代码的臃肿,同时极大丰富了语言本身的表达能力, 为程序员提供了一个合适的炮管。想想,一个函数,代替了几十个,甚至数百个函数,是一件多么让人兴奋的事情。
3942
泛型,可以理解为具有某些功能共性的集合类型,如i8、i16、u8、f32等都可以支持add,甚至两个struct Point类型也可以add形成一个新的Point。
4043

4144
先让我们来看看标准库中常见的泛型Option<T>,它的原型定义:
@@ -169,4 +172,4 @@ Point { x: 3, y: 3 }
169172
```let p1 = Point{x: 1.1f32, y: 1.1f32};```时,Point的T推导为f32类型,这样Point的x和y属性均成了f32类型。因为p1.x+p2.x,所以T类型必须支持Add trait。
170173

171174
### 总结
172-
上面区区几十行的代码,却实现了非泛型语言百行甚至千行代码才能达到的效果,足见rust泛型的强大(泛型都很强大,不应该特指某种语言:D,但rust并没有像go那样粗暴砍掉泛型还是非常让人欣慰的)
175+
上面区区几十行的代码,却实现了非泛型语言百行甚至千行代码才能达到的效果,足见rust泛型的强大(泛型都很强大,不应该特指某种语言:D)
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)