rust语言特色及基础配置

Rust是mozilla推出的一款系统级的编程语言,其两大特色在于零开销抽象和安全性。
在大学里时候,就开始注意到rust语言的动态了。
当时,我在啃一本大块头的C++书籍《C++ Primer》,以为rust到处针对到了C++的痛处。
学习rust,即可以让你用不输于C++的特性编程,而又不用花费太多的精力在语法的各类特例和各类细枝末节的坑中。html

优秀的程序员都须要掌握多语言以学习不一样的思惟方式。对于系统级语言,rust是至关优秀的,
最近趁着有点时间,得好好学习一下这门我垂诞已久的语言了。java

<!--more-->git

rust的特色

在大学里时候,就开始注意到rust语言的动态了。当时,我在啃一本大块头的C++书籍《C++ Primer》。程序员

C++是至关难学,其中是由于其由于历史遗留缘由及与C的兼容性,致使语法正交性、统一性差,
要学习的语法点及要避免的踩坑点至关之多,乃至于一部分同窗都是“C++从入门到放弃”了。(我也是
而剩下一部分说用C++的同窗,其实是C with class,不敢用过高级的特性,怕hold不住。。。github

拥有做为系统级语言C++的优点

相似于C++,Rust的定位是一款系统级语言,所以,它具备C++做为系统级语言的全部特色:编程

  1. 零开销抽象 。抽象不会引入额外的开销,编译器会编译出很是高性能的机器代码。
  2. 没有gc 。系统级语言须要应用于实时性要求高的场景,不能用gc。也用于编写底层基础设施,没有必要用gc。
  3. 内存模型没有高度封装。和C++同样,你便可以将对象分配到栈上,也能够将对象分配到堆上。
    对于系统级的语言须要这些的细粒度控制力,而不是像java之类的高级语言,只须要知道引用的概念便可使用java了,无需关心内存分配问题。

拥有更强的静态类型检查和现代语言特性

除此以外,除了拥有C++优势外,它还有:安全

  1. 语法干净正交,没有C++那么繁琐。
  2. 安全性。Rust语法引入全部权和生命期概念,在编译期就能检查出一部份内存管理错误,
    这是rust的一个杀手锏的特性。
  3. 现代语言特性。语言特性吸取了现代语言的大量优秀特性,支持多范式。

没有C++的历史遗留问题

从我了解到的信息来看,还有如下几种对标C++的特色,对于一个初学者,目前感觉还不是很大:bash

  1. 现代化的模块系统,比C++那种古老的继承C语言的方式(利用#include预编译和编译单元的概念)要好用不少。
  2. 更好用的泛型。比C++的模板更容易使用。

rust开发环境的搭建

第一步,安装rust工具链:
官方网站推荐的方式是:curl

curl https://sh.rustup.rs -sSf | sh

这样,会将rust工具链安装到~/.cargo/bin目录下,包括rustc、cargo 及 rustup。编程语言

推荐爬墙下载,我选择proxychains:

proxychains curl https://sh.rustup.rs -sSf > tmp.sh
sh tmp.sh

第二步:安装IDE。
我推荐使用jetbrains推出的rust插件。找一个jetbrains的IDE安装就好了。
做为一名java码农,我选择idea。与把大象放入冰箱同样轻松,只需简单三步:

  1. 打开intellij idea。
  2. Settings -> Plugins,安装rust插件。
  3. Settings -> Languages & Framworks -> Rust 配置标准库路径和其余选项。

好了,新建一个项目,你会发现多了一个rust选择项。

做为初学者,不要花费过多精力在工具链上,首先应该快速搞起一个环境,而后上手语法写几个demo。

第一个rust程序

做为第一个rust程序,首先来个选择排序压压惊:

fn selection_sort(nums: &mut Vec<i32>) {
    for i in 0.. nums.len() {
        let mut min = i;
        for j in i.. nums.len() {
            if nums[j] < nums[min] {
                min = j;
            }
        }
        nums.swap(i, min);
    }
}

rust中的语法不是C系语法,因此熟悉rust的语法须要多多编写代码练习。上面代码涉及到的语法有:

  1. 首先,使用关键字let声明变量,rust鼓励使用自动类型推导。
  2. 默认来讲,变量默认不可变。若是须要使得变量可变,则须要显式的声明为mut。rust鼓励使用不可变变量。
    也能够指定类型,可是和C系语法不一样,是标注在变量后面。对于习惯C系语法(C,java,js)的人来讲,好不习惯。。。
  3. C系语法不须要定义函数的关键字,开头就是返回类型。于此不一样,rust使用fn做为定义函数的关键字。
  4. rust中也有while循环和for循环。和C系语法不一样,for循环是用来迭代列表。若是是须要迭代一个数字区间,
    则可使用(1..10),它实际上建立了一个Range<i32>类型的对象并迭代。

接下来是将Vector转字符串的辅助函数:

fn vector_to_string(nums: &Vec<i32>) -> String {
    let mut s = String::new();
    for i in nums.iter() {
        s += &(i.to_string() + " ");
    }
    return s;
}
  1. String::new暗示出,rust中没有构造函数和new运算符。怎么建立对象?用静态工厂函数。
    这个设计省了不少麻烦,首先,即便给你构造函数,工程实践上也会再封装一层各类工厂。
    其次,你不会弄出一个初始化一半的对象。如java中的this引用泄漏。
  2. String对象支持+=操做,这代表Rust支持运算符重载。

最后,main函数:

fn main() {
    let mut v = vec![9, 2, 5, 4, 8, 12, 1];
    selection_sort(&mut v);
    println!("{}", vector_to_string(&v));
}
  1. vec!其实是一个宏,rust支持强大的宏,强大到相似lisp的那种。
  2. &是引用符,涉及到全部权和借用的概念。

学习方法与资料

对于有着必定基础的程序员,学习一门语言,我的以为,最有效率的方式是:

  1. 结合现成的示例程序,学习语法教程。
  2. 写总结,按照本身的理解总结语法,写笔记。
  3. 写demo、造轮子。找几个典型的主题,写小demo、轮子试试手。

最后,有一些值得学习的资料:

  1. rust官方文档:https://www.rust-lang.org/zh-...
    学习rust的主要资料。
  2. 《经过例子学习Rust》 https://rustcc.github.io/rust...
    弥补Rust官方文档的不足,对于语法搭配一部分例子来参考。
  3. rust的awesome系列。https://github.com/rust-unoff...

最后

对于编程语言的理解,每一个人有着不一样的观点。

就我我的而言,我更赞同《代码大全》中的隐喻,即编程语言是程序员工具箱中的一把趁手的工具,整体而言,它尽可能使用良好的设计避免给程序员形成额外的负担,又具有强大的特性使得程序员能够优雅实现各种需求。包括统一正交的语法、优秀的类型系统、不破坏统一性的适当的语法糖等。

相关文章
相关标签/搜索