欢迎大家和我一起入坑Rust,以后我就是坑主,我主要负责在前面挖坑,各位可以在上面看,有手痒的也可以和我一起挖。这个坑到底有多深?我也不知道,我是抱着有多深就挖多深的心态来的,下面我先跳了,各位请随意。

Rust简介

众所周知,在编程语言中,更易读的高级语言和控制底层资源的低级语言是一对矛盾体。Rust想要挑战这一现状,它尝试为开发者提供更好的体验的同时给予开发者控制底层细节的权限(比如内存使用)。

低级语言在开发过程中很容易出现各种细微的错误,它们难以发现但是可能影响巨大。其他大部分低级语言只能靠覆盖面更广的测试用例和经验丰富的开发者来解决这些问题。而Rust则依靠严格的编译器来杜绝这些问题。

Ps:以后会见识到Rust编译器的「厉害」

Rust的一些工具:

  • Cargo,依赖包的管理和构建工具,可以帮你减轻添加、编译和管理依赖包的痛苦
  • Rustfmt,用于保证开发者代码风格的一致性
  • Rust语言服务器支持集成IDE(我用的是IDEA)

安装Rust

如果你的操作系统是Linux或macOS,在终端执行命令

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

安装过程中的选项使用默认就好(一路回车),直到出现以下信息时,表示安装成功。

Rust is installed now. Great!

安装脚本会自动把Rust添加到环境变量PATH中,可以重启终端或者手动执行命令使添加生效。

$ source $HOME/.cargo/env

当然也可以添加到你的.bash_profile文件中:

$ export PATH="$HOME/.cargo/bin:$PATH"

最后,执行以下命令来检查Rust是否安装成功

$ rustc --version

另外,当你尝试编译Rust代码,但报了linker不可执行的错误时,你需要手动安装一个linker,C编译器通常会包含正确的linker。Rust的一些公共包也会依赖C语言代码和编译器。所以最好现在安装一个。

IDEA集成Rust

IDEA中集成Rust也很简单,只需要在Preference->Plugins中搜索Rust,安装Rust插件后重启IDEA就可以了。

Hello World

又到了经典的Hello World时间,这次我不想直接一个简单的print就结束了,我们一开始提到了Cargo是Rust依赖包的管理工具,所以我想体验一下Cargo的用法。

首先新建一个项目,可以直接用在IDEA中new project,也可以使用Cargo命令

cargo new hello-world
cd hello-world

新建好项目以后,它的结构长这样子

其中

  • main.rs是我们代码的入口文件
  • Cargo.toml是记录Rust元数据的文件,包括依赖。
  • Cargo.lock是记录增加依赖log的文件,不能手动修改。

接着我们在Cargo.toml文件中添加我们需要的依赖

[dependencies]
ferris-says = "0.1"

这时IDEA会自动安装依赖包,如果没有安装,也可以手动执行命令来安装

cargo build

依赖安装好以后,就可以开始写代码了:

use ferris_says::say;
use std::io::{stdout, BufWriter}; fn main() {
let stdout = stdout();
let out = b"Hello World!";
let width = 12; let mut writer = BufWriter::new(stdout.lock());
say(out, width, &mut writer).unwrap();
}

执行结果

----------------
| Hello World! |
----------------
\
\
_~^~^~_
\) / o o \ (/
'_ - _'
/ '-----' \

没错,这是一个小螃蟹,至于它是谁,来看看官方解释

Ferris is the unofficial mascot of the Rust Community. Many Rust programmers call themselves “Rustaceans,” a play on the word “crustacean.” We refer to Ferris with the pronouns “they,” “them,” etc., rather than with gendered pronouns.

Ferris is a name playing off of the adjective, “ferrous,” meaning of or pertaining to iron. Since Rust often forms on iron, it seemed like a fun origin for our mascot’s name!

You can find more images of Ferris on http://rustacean.net/.

关于toml文件可能有些读者不太熟悉(其实我自己也不太熟),这里简单介绍一下吧,它的全称是「Tom's Obvious, Minimal Language」,是一种配置文件格式。它的语义是比较明显的,因此易于阅读。同时格式可以明确的映射到hash表,所以也可以被多种语言轻松解析。

GitHub地址是:https://github.com/toml-lang/toml

有兴趣的同学可以做更深入的了解。

后记

至此,我确信自己已经跳进来了,有想跟进的朋友记得关注我哦。

Rust入坑指南:坑主驾到的更多相关文章

  1. JavaScript 跳坑指南

    JavaScript 跳坑指南 坑0-String replace string的replace方法我们经常用,替换string中的某些字符,语法像这样子 string.replace(subStr/ ...

  2. Python 装饰器填坑指南 | 最常见的报错信息、原因和解决方案

    本文为霍格沃兹测试学院学员学习笔记. Python 装饰器简介 装饰器(Decorator)是 Python 非常实用的一个语法糖功能.装饰器本质是一种返回值也是函数的函数,可以称之为“函数的函数”. ...

  3. Rust入坑指南:齐头并进(上)

    我们知道,如今CPU的计算能力已经非常强大,其速度比内存要高出许多个数量级.为了充分利用CPU资源,多数编程语言都提供了并发编程的能力,Rust也不例外. 聊到并发,就离不开多进程和多线程这两个概念. ...

  4. Rust入坑指南:核心概念

    如果说前面的坑我们一直在用小铲子挖的话,那么今天的坑就是用挖掘机挖的. 今天要介绍的是Rust的一个核心概念:Ownership.全文将分为什么是Ownership以及Ownership的传递类型两部 ...

  5. Rust入坑指南:鳞次栉比

    很久没有挖Rust的坑啦,今天来挖一些排列整齐的坑.没错,就是要介绍一些集合类型的数据类型."鳞次栉比"这个标题是不是显得很有文化? 在Rust入坑指南:常规套路一文中我们已经介绍 ...

  6. Rust入坑指南:亡羊补牢

    如果你已经开始学习Rust,相信你已经体会过Rust编译器的强大.它可以帮助你避免程序中的大部分错误,但是编译器也不是万能的,如果程序写的不恰当,还是会发生错误,让程序崩溃.所以今天我们就来聊一聊Ru ...

  7. Rust入坑指南:朝生暮死

    今天想和大家一起把我们之前挖的坑再刨深一些.在Java中,一个对象能存活多久全靠JVM来决定,程序员并不需要去关心对象的生命周期,但是在Rust中就大不相同,一个对象从生到死我们都需要掌握的很清楚. ...

  8. Rust入坑指南:千人千构

    坑越来越深了,在坑里的同学让我看到你们的双手! 前面我们聊过了Rust最基本的几种数据类型.不知道你还记不记得,如果不记得可以先复习一下.上一个坑挖好以后,有同学私信我说坑太深了,下来的时候差点崴了脚 ...

  9. ElasticSearch入坑指南之概述及安装

    ---恢复内容开始--- ElasticSearch入坑指南之概述及安装 了解ElasticSearch ElasticSearch(简称ES)基于Lucene的分布式全文检索引擎.使用ES可以实现近 ...

  10. electron入坑指南

    electron入坑指南 简介 electron 实际集成chrome浏览器和node环境, 运行你写的网页 app 基本目录结构 index.html 名称可以不是index, 这个文件与普通网页的 ...

随机推荐

  1. 洛谷 P1666 前缀单词 题解

    题意:给n个单词,如果单词a为单词b的前缀则a,b不能共存,问能共存的集合数(包括空集) 一道dp题,排序后判断,f[i][j]表示i和j是否能共存,f[i][j]=1表示能共存,初始化dp[i]=1 ...

  2. Go语言基础之文件操作

    本文主要介绍了Go语言中文件读写的相关操作. 文件是什么? 计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件. 打开和关闭文件 os.Open()函数能够打开一个 ...

  3. java多线程之ThreadPoolExecutor

    ThreadPoolExecutor类 简介   java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类,因此如果要透彻地了解Java中的线程池,必须 ...

  4. Spring Cloud官方文档中文版-服务发现:Eureka客户端

    官方文档地址为:http://cloud.spring.io/spring-cloud-static/Dalston.SR2/#_spring_cloud_netflix 文中例子我做了一些测试在:h ...

  5. 浅谈独立特征(independent features)、潜在特征(underlying features)提取、以及它们在网络安全中的应用

    1. 关于特征提取 0x1:什么是特征提取 特征提取研究的主要问题是,如何在数据集未明确表示结果的前提下,从中提取出重要的潜在特征来.和无监督聚类一样,特征提取算法的目的不是为了预测,而是要尝试对数据 ...

  6. 在nginx日志access log可以记录POST请求的参数值

    1)      在nginx日志access log可以记录POST请求的参数值 实现程度:日志中可以显示POST请求所提交的参数值 问题: 日志中文显示十六进制(在配置文件中配置中文也无效) 没有对 ...

  7. Python中使用高德API实现经纬度转地名

    场景 高德API提供给开发者们一些常用功能的接口,其中有一种叫地理/逆地理编码能实现 地名查询经纬度和经纬度查地名. 实现 高德API平台: https://lbs.amap.com/ 注册并登陆 找 ...

  8. scala函数式编程(二) scala基础语法介绍

    上次我们介绍了函数式编程的好处,并使用scala写了一个小小的例子帮助大家理解,从这里开始我将真正开始介绍scala编程的一些内容. 这里会先重点介绍scala的一些语法.当然,这里是假设你有一些ja ...

  9. 百度脑图-离线版(支持Linux、Mac、Win)

    免费好用的思维导图软件(在线版) 离线版:桌面版脑图是基于百度脑图的本地化版本,帮助你在没有互联网环境的情况下,依然可以使用脑图工具. 百度脑图帮助你进行思维导图,可以运用于学习.写作.沟通.演讲.管 ...

  10. [Design Patterns] 03. Behavioral Patterns - Observer Pattern

    前言 参考资源 Ref: 史上最全设计模式导学目录(完整版) 观察者模式-Observer Pattern[学习难度:★★★☆☆,使用频率:★★★★★] 对象间的联动——观察者模式(一):多人联机对战 ...