首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Rust 编程语言入门(1)

Rust 编程语言入门(1)

Rust 及其家谱首先,让我们快速了解一下它的发展历史。相对于前辈产品(最重要的是 C,它比 Rust 早了 38 年),Rust                是一种较新的语言,但它的血统造就了它的多模式方法。Rust 被视为一种类似 C                    的语言,但它包含的其他特性带来了相较其前辈产品的优势(参见 )。
首先,Rust 受到了 Cyclone(C 的一种安全方言,一种命令式语言)的重大影响,包含来自                C++ 的面向对象特性的一些方面。但是,它也包含来自 Haskell 和 OCaml                等语言的函数特性。结果,我们获得了一种支持多模式编程(命令、函数和面向对象)的类似 C 的语言。
图 1. Rust 及其家谱Rust 中的关键概念Rust 有许多特性,这些特性让它变得很有用,但开发人员及他们的需求各不相同。我将介绍让 Rust 值得学习的 5 个关键概念,并在 Rust                源代码中展示这些概念。
首先,为了感受一下 Rust 的代码,让我们看看仅向用户发出一条消息的最简洁的“Hello World”程序(参见 )。
清单 1. Rust 中的“Hello                World”
1
2
3
4
fn main()
{
   println!( "Hello World.");
}




类似于 C,这个简单程序定义了一个 main 函数,该函数是该程序的指定入口点(而且每个程序都有一个)。该函数使用                fn 关键字后跟括号 (()) 中的一组可选参数来定义。花括号                ({}) 标示该函数的边界,这个函数包含对 println!                宏的一次调用,根据该字符串参数的定义,这会向控制台发出格式化的文本 (stdout)。
Rust                包含各种各样的特性,这使它变得很重要,值得投入精力来学习。您会发现诸如可重用模块、内存安全和保证(安全的操作与不安全的操作)、不可恢复和可恢复的错误处理特性,并发性支持,以及复杂的数据类型(称为集合)等概念。
通过模块实现可重用的代码Rust                允许通过一种方便重用的方式来组织代码。可以使用模块实现此组织结构,模块包含您可以设置为公有(即对模块的用户公开)或私有(即仅在模块内使用,无法被模块用户使用                - 至少无法直接使用)的函数、结构,甚至其他模块。模块将代码组织为其他模块可以使用的包。
可以使用 3 个关键字来创建模块,使用模块,并修改模块中的元素的可视性。
  • mod 关键字创建一个新模块
  • use 关键字允许您使用模块(在要使用这些定义的范围内公开它们)
  • pub 关键字将模块的元素设置为公有(否则它们是私有的)。
  提供了一个简单示例。该示例首先创建一个名为 bits                的新模块,其中包含 3 个函数。第一个函数名为 pos,是一个私有函数,它接受一个 u32                参数并返回一个 u32(由 -> 箭头指示),这是一个左移了                bit 次的 1 值。请注意,这里不需要 return 关键字。该值通过两个公有函数调用(请注意                pub 关键字):decimal 和 hex。这些函数调用私有的                pos 函数并以十进制或十六进制格式输出 bit 位置的值(请注意,这里使用了 :x                来表示十六进制格式)。最后,它声明一个 main 函数来调用 bits                模块的两个公有函数,输出以注解形式显示在清单 2 的末尾处。
清单 2. Rust                中的简单模块示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mod bits {
   fn pos(bit: u32) -> u32 {
      1 << bit
   }

   pub fn decimal(bit: u32) {
      println!("Bits decimal {}", pos(bit));
   }

   pub fn hex(bit: u32) {
      println!("Bits decimal 0x{:x}", pos(bit));
   }
}

fn main( ) {
   bits::decimal(8);
   bits::hex(8);
}

// Bits decimal 256
// Bits decimal 0x100




模块使您能以公有或私有方式收集功能,但也可以使用 impl 关键字将方法与对象相关联。
执行安全检查来获得更干净的代码Rust 编译器执行内存安全保证和其他检查,让该编程语言变得很安全(不同于可能不安全的 C)。所以,在 Rust                中,永远不必担心悬空指针,或者担心在释放对象后使用它。这些是核心 Rust                语言的一部分。但是,在嵌入式开发等领域中,执行一些操作很重要,比如在一个地址上放入一个结构来表示一组硬件寄存器。
Rust 包含一个 unsafe 关键字,您可以通过它禁用通常会导致编译错误的检查。如  所示,可以使用 unsafe                关键字来声明一个不安全的代码块。在这个示例中,我声明了一个不可变的变量 x,然后声明了一个指向该变量的名为                raw 的指针。然后,为了取消引用 raw(它在本例中会向控制台输出 1),我使用                unsafe 关键字来允许执行此操作,否则此操作会在编译时标记出来。
清单 3. Rust                中的不安全操作
1
2
3
4
5
6
7
8
fn main() {
   let a = 1;
   let rawp = &a as *const i32;

   unsafe {
      println!("rawp is {}", *rawp);
   }
}




可以向函数以及一个 Rust 函数中的代码块应用 unsafe 关键字。该关键字在编写与非 Rust                函数的绑定时最常见。此特性使得 Rust 对操作系统开发或嵌入式(裸机)编程等领域很有用。
返回列表