据说,Rust语言语法的高门槛是劝退很多人上手的主要原因。
确实,Rust语言希望解决 C/C++ 手工管理内存的问题,但是又不想引入类似golang,java的GC机制。
因此,为了能让编译器能够在编译阶段检查出潜在的内存问题,Rust的语法上就多了一些其他语言所没有的规则,这些规则让上手Rust的难度提高了不少。
我是觉得,学习一门编程语言,不一定要弄懂其中的所有概念才能开始写代码,就像我们学习外语,掌握了基本几句话之后其实就可以开始对话练习。
这篇极简教程的目的,其实不只是针对Rust,任何编程语言都可以有这么一个极简教程,让大家可以尽快用这种编程语言先把代码写起来,边写边学,不断加深对语言的理解。
因为是极简教程,大纲也很简单,主要3部分:
《C程序设计语言》中有一句很经典话:程序 = 数据结构 + 算法
上面的【变量定义】其实就是数据结构,【流程控制】就是算法,有了这2部分其实就可以编写各种功能。
最后加了【工程管理】这部分,一方面是因为Rust的管理工具Cargo是它的重要特色之一;另一方面,良好的代码组织是完成复杂功能的基础,毕竟我们学习Rust,最后是希望用它去完成实际的业务功能的。
通过 cargo 创建 Rust项目,可以更好的管理项目的依赖,打包和升级等等。
所以,尽管是极简教程,还是希望能用 cargo 来管理项目。
Rust项目一般有两种类型,可执行文件和库。
我们一般做的软件或者工具最终都会发布成可执行文件,给用户使用。
而库不能单独运行,一般是对重要的功能进行封装,然后作为其他软件的一部分来使用。
cargo new rust-examples
tree . # 工程结构如下
.
├── Cargo.toml # 这里是工程的配置
└── src
└── main.rs
其中 main.rs 是启动文件,学习Rust各种语法的时候,可以将代码写在 main.ts 中进行测试。
cargo new --lib rust-lib
tree .
.
├── Cargo.toml # 这里是工程的配置
└── src
└── lib.rs
这里的 lib.rs 和 main.rs 不同,它是不能直接运行的,需要通过里面的测试代码来运行相应的功能。
Rust的基本类型和其他语言大同小异,熟悉其他语言(C/C++, golang等)的话,很容易理解。
这里我们构造一个简单的学生成绩管理系统,通过定义学生信息,演示下Rust中基本类型以及枚举和结构体的使用。
cargo new stu_manager
在 src/main.rs 中定义并打印学生信息。
#[derive(Debug)]
enum Sex {
Boy,
Girl,
}
struct Student {
name: String, // 姓名
age: u16, // 年龄
sex: Sex, // 性别
score: f32, // 成绩
}
fn main() {
let students: [Student; 2] = [
Student {
name: String::from("boy01"),
age: 18,
sex: Sex::Boy,
score: 61.5,
},
Student {
name: String::from("girl01"),
age: 16,
sex: Sex::Girl,
score: 91.5,
},
];
display(&students[0]);
display(&students[1]);
}
fn display(stu: &Student) {
println!(
"name: {}, age: {}, sex:{:?}, score: {}",
stu.name, stu.age, stu.sex, stu.score
);
}
说明:
#[derive(Debug)]这个是为了打印enum,否则enum类型是不能直接打印的。struct Student这个结构体中定义了常用的基本类型的使用方式。let students: [Student; 2]Rust数组的定义方式。与其他语言相比,Rust变量的一个新的概念就是所有权和借用规则,我的另一篇博客中有介绍,这里不在赘述。
Rust所有权和借用规则示例
除此之外,使用的方式和其他语言区别不大,上面示例中,创建了2个学生信息,并且分别打印出其中各个字段的信息。
$ cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target/debug/stu_manager`
name: boy01, age: 18, sex:Boy, score: 61.5
name: girl01, age: 16, sex:Girl, score: 91.5
掌握了变量定义,可以组织我们的数据,再掌握Rust中的流程控制方法,那么,就能实现实际的业务功能了。
流程控制主要两种:分支和循环。
Rust的分支语法有 if和match两种方式。
继续完善上面的例子,我们增加一个根据成绩区分优良中差的函数,用 if的方式来判断分支。
fn check_score(stu: &Student) {
if stu.score >= 90.0 {
println!("学员:{}, 成绩优秀", stu.name);
} else if stu.score < 90.0 && stu.score >= 75.0 {
println!("学员:{}, 成绩良好", stu.name);
} else if stu.score < 75.0 && stu.score >= 60.0 {
println!("学员:{}, 成绩中等", stu.name);
} else {
println!("学员:{}, 成绩不合格!!!", stu.name);
}
}
再增加一个判断性别的函数,用match的方式来判断分支。
fn check_sex(stu: &Student) {
match stu.sex {
Sex::Boy => println!("学员: {} 是男生", stu.name),
Sex::Girl => println!("学员: {} 是女生", stu.name),
}
}
Rust 循环主要有3种方式:
下面用3种循环方式分别打印学生信息,学生成绩信息以及学生性别信息。
// loop 循环示例
let mut count = 0;
loop {
if count == students.len() {
break;
}
display(&students[count]);
count += 1;
}
// while 循环示例
count = 0;
while count < students.len() {
check_score(&students[count]);
count += 1;
}
// for 循环示例
for stu in students {
check_sex(&stu);
}
3种循环中,还是 for循环最为见解,这也是我们使用最多的循环方式。
这里可以看出,只要会任何一种编程语言,几乎不需要太多Rust特有的知识,我们也可以用Rust来编写代码。
当然,Rust的优势,比如内存安全和高性能,这里并没有体现。
这篇博客的目的是希望能够尽快将Rust用起来,用起来之后,遇到问题解决问题,在用的过程中逐步理解Rust的高阶概念和语法,一步一步成为Rust高手。
完整的示例如下:
#[derive(Debug)]
enum Sex {
Boy,
Girl,
}
struct Student {
name: String, // 姓名
age: u16, // 年龄
sex: Sex, // 性别
score: f32, // 成绩
}
fn main() {
let students: [Student; 2] = [
Student {
name: String::from("boy01"),
age: 18,
sex: Sex::Boy,
score: 61.5,
},
Student {
name: String::from("girl01"),
age: 16,
sex: Sex::Girl,
score: 91.5,
},
];
// loop 循环示例
let mut count = 0;
loop {
if count == students.len() {
break;
}
display(&students[count]);
count += 1;
}
// while 循环示例
count = 0;
while count < students.len() {
check_score(&students[count]);
count += 1;
}
// for 循环示例
for stu in students {
check_sex(&stu);
}
}
fn display(stu: &Student) {
println!(
"name: {}, age: {}, sex:{:?}, score: {}",
stu.name, stu.age, stu.sex, stu.score
);
}
fn check_score(stu: &Student) {
if stu.score > 100.0 {
println!("学员:{}, 成绩错误", stu.name);
} else if stu.score <= 100.0 && stu.score >= 90.0 {
println!("学员:{}, 成绩优秀", stu.name);
} else if stu.score < 90.0 && stu.score >= 75.0 {
println!("学员:{}, 成绩良好", stu.name);
} else if stu.score < 75.0 && stu.score >= 60.0 {
println!("学员:{}, 成绩中等", stu.name);
} else {
println!("学员:{}, 成绩不合格!!!", stu.name);
}
}
fn check_sex(stu: &Student) {
match stu.sex {
Sex::Boy => println!("学员: {} 是男生", stu.name),
Sex::Girl => println!("学员: {} 是女生", stu.name),
}
}
$ cargo run
Compiling stu_manager v0.1.0 (/home/wangyubin/projects/rust/stu_manager)
Finished dev [unoptimized + debuginfo] target(s) in 0.60s
Running `target/debug/stu_manager`
name: boy01, age: 18, sex:Boy, score: 61.5
name: girl01, age: 16, sex:Girl, score: 91.5
学员:boy01, 成绩中等
学员:girl01, 成绩优秀
学员: boy01 是男生
学员: girl01 是女生
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模
我是Ruby新手,并被要求在我们的新项目中使用它。我们还被要求使用Padrino(Sinatra)作为后端/框架。我们被要求使用Rspec进行测试。我一直在寻找可以指导在Padrino上使用RspecforRuby的教程。我得到的主要是引用RoR。但是,我需要RubyonPadrino。请在任何入门/指南/引用/讨论等方面指导我。如有不妥之处请指正。可能是我没有针对我的问题搜索正确的词/短语组合。我正在使用Ruby1.9.3和Padrinov.0.10.6。注意:我还提到了SOquestion,但它没有帮助。 最佳答案 我没用过Pa
文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:FlashMessagesinPartials(Rails3)我正在做MichaelHartl的Railstutorial和listing7.26将flash消息添加到应用程序布局:...">...这很好用。但是,我试图通过在我的部分文件夹中创建一个_flash.html.erb来清理这段代码...">-->...并且比使用......在我的应用程序布局中,我的所有Rspec测试开始失败,每个测试都显示以下消息:Failure/Error:before{visitsignup_path}ActionView:
我正在使用SublimeText2,同时遵循MichaelHartl的RubyonRails教程。可以在http://ruby.railstutorial.org/book/ruby-on-rails-tutorial找到我所指的教程的具体部分。(ctrl+F“list5.26”)。我能够创建规范/支持文件。但是,在尝试创建spec/support/utilities.rb文件时,我收到消息“无法保存~/rails_projects/sample_app/spec/support/utilities.rb”。有人知道为什么会这样吗?SublimeText论坛上有人似乎遇到了完全相同的问
目录一、安装包链接二、安装详细步骤1.安装Wireshark和WinPcap2.安装OracleVMVirtualBox3.安装ensp三、安装后注册四、启动路由器出现40错误怎么解决一、安装包链接二、安装详细步骤链接:https://pan.baidu.com/s/1QbUUYMOMIV2oeIKHWP1SpA?pwd=xftx提取码:xftx1.安装Wireshark和WinPcap找到Wireshark安装包所在文件夹,双击它,按照以下步骤安装。2.安装OracleVMVirtualBox找到OracleVMVirtualBox安装包所在文件夹,双击它,按照以下步骤安装。注:可自定义安装
【适用平台】私有云 说明:完成私有云部分是需要两台虚拟机的,分别为controller、compute两个节点,但我们只需配置一台,然后克隆就方便多啦!需要用到的映射文件:关于vm的安装我就不介绍的,毕竟挺简单的,下面让我们看看基于私有云模块中,虚拟机的搭建吧。1、创建新的虚拟机,这里一般我会选择自定义,毕竟后面的配置都要根据私有云相关来进行搭建,会比较复杂。(如果是基础的可以选择典型,典型的满足一般虚拟机的配置) 2、选择稍后安装操作系统会比较方便后续的选择,这里你也可以自己选择自己的映像文件(但不建议) 3、我们是基于Linux下操作的,所以选择Linux客户机操作系统,版本选择自己
听说PostgreSQL的可以用Ruby写存储过程但我一直没能找到更多关于它的信息,教人们如何实际去做。有人可以为此推荐好的资源。谢谢 最佳答案 显然,您需要安装PL/Ruby。之后,你可以写:CREATEFUNCTIONruby_max(int4,int4)RETURNSint4AS'ifargs[0].to_i>args[1].to_ireturnargs[0]elsereturnargs[1]end'LANGUAGE'plruby';查看其GitHubrepository安装说明。