Rust惑点启示系列(六):如何下手编写一个函数
编写一个函数是Rust中再普通不过的事情了,但是Rust里的函数在编写的时候确始终感觉不像是其他语言中那么丝滑,有的时候甚至会有一些手足无措的感觉,不知道该如何下手。本文尝试从大部分函数常见的处理流程出发,对编写一个Rust函数的过程和可能遇到的问题做一个简单的讨论。
编写一个函数是Rust中再普通不过的事情了,但是Rust里的函数在编写的时候确始终感觉不像是其他语言中那么丝滑,有的时候甚至会有一些手足无措的感觉,不知道该如何下手。本文尝试从大部分函数常见的处理流程出发,对编写一个Rust函数的过程和可能遇到的问题做一个简单的讨论。
从函数中返回一个值,看起来是非常简单的一个事情,不过在Rust里,就总是感觉不是那么简单。沿袭自其他语言的习惯,可能我们并没有意识到在一个函数里我们究竟返回了什么内容。但是在Rust这种“手动档”语言里,还就得认真的把它搞清楚。
函数是Rust的顶级成员,也是实现程序逻辑复用的主要工具之一。因为Rust中所有权和生命期机制的存在,使得Rust中的函数在编写的时候,其参数和返回值的类型和标注变得时而简单时而复杂。简单的时候,Rust中的函数与其他语言中的函数无异,但是复杂的时候,繁琐的包装类型和生命期标注能让人看的眼花缭乱。本文尝试从日常编程中取得的经验出发,记录处理Rust函数和返回值的一些经验。
在根据Rust的所有权系统使用变量的时候,值通常会发生移动来改变其拥有者,这通常总是适用于Rust自有类型,但是Rust中的借用类型的表现就不一样了,因为在这些类型中存放的实际上是另一个内存区域的地址,而借用类型的变量一般并不拥有它所指向的那一片内存区域。这种行为上的区别,就构成了Rust中两种不同的类型:自有类型和借用类型。
可能是比较智能的高级语言用的习惯了,在突然接触到Rust中比较底层的概念和用法的时候,就十分的不适应,分分钟感觉自己的基础知识已经完全的不知道被自己丢哪儿去了。而且看着Rust中一个泛型套一个泛型的去使用一段内存,把一段内存传来传去,真的是不断的感慨那些“省心”的高级语言帮我们私底下办了多少的事情。但是最令人恼火的是,自以为按照Rust的行为准则编写的程序,被编译器报了无数的错误,而且还一时半会儿想不出来自己到底哪儿错了。
在感慨了一段时间以后,我决定把Rust中这些繁琐的东西,集中记录一下,也为自己以后的那些程序铺铺路。
Rust是一门新颖的系统编程语言,与传统的C/C++不同的是,Rust提供了更加完善和安全的内存管理机制。这也是Rust语言被熟知的天然内存安全和可靠并发的特征。Rust在实现这一系列特征的基础就在于其基于所有权(Ownership)、转移(Move)和借用(Borrow)机制打造的类型系统。但是这套机制系统的引入,却被很多人认为极大的提升了Rust的学习曲线。