欢迎大家和我一起入坑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. shell中日期循环的方式

    第一种 # 这里的例子以周为循环 !/bin/bash begin_date="20160907" end_date="20170226" while [ &q ...

  2. 解决rac错误 ORA-01102: cannot mount database in EXCLUSIVE mode

    启动 Oracle  11g RAC数据库时出现以下错误.只能启动其中一个节点(rac01),另一个节点启动不了(rac02).可能是以前修改cluster_database这个参数引起的.在Orac ...

  3. 关于git使用的几点理解

    1.git为分布式的版本控制系统,有远程仓库和本地仓库,远程仓库和本地仓库之间建立关联关系后,可将本地仓库的更新push(相当于是内容同步)到远程仓库进行保存,远程仓库的作用相当于一个最终代码备份的地 ...

  4. Java,哈希码以及equals和==的区别

    从开始学习Java,哈希码以及equals和==的区别就一直困扰着我. 要想明白equals和==的区别首先应该了解什么是哈希码,因为在jdk的类库中不管是object实现的equals()方法还是S ...

  5. 8 分钟入门 K8s | 详解容器基本概念

    作者| 阿里巴巴高级开发工程师 傅伟 一.容器与镜像 什么是容器? 在介绍容器的具体概念之前,先简单回顾一下操作系统是如何管理进程的. 首先,当我们登录到操作系统之后,可以通过 ps 等操作看到各式各 ...

  6. flume learning---Flume 集群搭建

    在flume搭建集群模式时,首先需要进入conf目录, 1.cp flume-env.sh.template flume-env.sh 2.cp flume-conf.properties.templ ...

  7. Appium+python自动化(三十七)- 士兵突击许三多 - 多个appium服务启动,多个设备启动,多进程并发启动设备-并发测试 - 下(超详解)

    简介 接着上一篇继续看一下如何并发测试以及并发测试的过程中,可能遇到的问题,在这里宏哥把宏哥遇到的和小伙伴或者童鞋们,一起分享一下. Appium端口检测 问题思考 经过前面学习,我们已经能够使用py ...

  8. 多线程——Thread类

    进程(Process):“正在执行的程序”,程序进入内存运行就变成了一个进程.一个进程会产生多个线程. 多线程(Multithread):一个进程中同时存在几个执行体.单线程是按照函数的顺序执行,多线 ...

  9. SpringCloud学习笔记(7):使用Spring Cloud Config配置中心

    简介 Spring Cloud Config为分布式系统中的外部化配置提供了服务器端和客户端支持,服务器端统一管理所有配置文件,客户端在启动时从服务端获取配置信息.服务器端有多种配置方式,如将配置文件 ...

  10. 实践APP安全性检测(一):APK反编译

    1.概述 APP安全性一般可以从以下几方面进行考量: 以及其他一些杂项(或者通用并不局限于APP的安全项): 本文讨论反编译问题. 2.APK反编译 安卓开发的APP,如果不做任何处理是很容易被反编译 ...