Rust编程基础

时光总嘲笑我的痴心妄想 提交于 2020-02-26 11:14:51

编者注

由于需要一个编写库的语言,要求执行速度非常快,能够完整跨平台使用。由于商业项目对稳定性要求高,则尽量增加稳定性。其中的主要选择为C++20与Rust语言,但是由于C++20的语言特性并未在主流编译器上完整实现,且VC与Gcc等割裂也不是一天两天。则确认学习Rust语言。作为学习重点。至于为什么不选择Go,主要问题是Go的Gc无法控制,导致作为第三方库的运行失控。Dart由于无法创建动态连接库,落选。

Rust

Rust介绍

https://www.rust-lang.org/
Rust:一个赋予有所构建可靠有效软件的开发语言。

为什么使用Rust?

  1. 性能 - Rust具有非常快的内存效能:没有运行时和垃圾回收,能够为关键性能服务提供支持,能够运行在嵌入式设备,能够轻松和其他语言集成
  2. 可靠 - Rust的丰富类型系统和所有权模型保证了内存安全性和线程安全性,并使您能够在编译时消除许多类的错误
  3. 生产 - Rust拥有出色的文档,友好的编译器和有用的错误消息,以及一流的工具-集成的软件包管理器和构建工具,具有自动完成和类型检查的智能多编辑器支持,自动格式化程序等

Rust构建

在2018年,Rust社区决定改善一些不同领域的编程体验(请参见2018路线图)。对于这些,您可以找到许多高质量的板条箱和一些很棒的入门指南。

  1. Command Line - 借助Rust强大的生态系统,快速启动CLI工具。 Rust帮助您放心地维护应用程序并轻松分发它
  2. WebAssembly - 可以一次增加一个模块来增强JavaScript。发布到npm,与webpack捆绑在一起,您就可以参加比赛了
  3. Networking - 可预测的性能。微小的资源占用。坚如磐石的可靠性。 Rust非常适合网络服务
  4. Embedded - 针对低资源设备?是否需要在不放弃高级便利的情况下进行低级控制?Rust覆盖需求

Rust安装

Install Rust

Mac安装

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

编者选择了默认安装

IDE

IDEA

比Clion多一步去pulgin下载。无法使用IDEA选择Cargo.toml载入项目,只能够选择项目文件夹。

Clion

Clion在安装时,请选择安装rust插件。当新建项目时,能够看到如下信息

Location: project path
Toolchain location: 如果默认会自动填入
Toolchain version: 自动计算
Standard library: 没有将会下载,点击即可
Project template: Binary Library

选择好类型,点击创建即可

Rust项目结构

.
├── Cargo.lock
├── Cargo.toml
├── LICENSE
├── README.md
├── src
│   └── main.rs
└── target
    └── debug
        ├── rust-lesson
        ├── rust-lesson.d
        └── rust-lesson.dSYM ->
  1. Cargo.lock - 自动生成不要手动改,也无需上传
  2. Cargo.toml - maven/gradle相似,项目名称版本引用
  3. src - 代码
  4. target - 编译后的内容生成在此处
  5. target/debug/{project_name} - 生成可执行文件

源代码运行

main.rs

fn main() {
    println!("Hello, world!");
}

Cargo.toml

[package]
name = "rust-lesson"
version = "0.1.0"
authors = ["ZhanPeng <xxx@xxx.com>"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

结果

/Users/zhanpeng/.cargo/bin/cargo run --color=always --package rust-lesson --bin rust-lesson
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/rust-lesson`
Hello, world!

Process finished with exit code 0

动态连接库

rust项目动态连接库的构建必须创建lib.rs文件,exe与lib能够共存

lib.rs

#[cfg(test)]
mod tests {
    #[test]
    fn it_works() {
        assert_eq!(2 + 2, 4);
    }
}

Cargo.toml

注意:lib的name必须使用下划线,不能使用-字符

[package]
name = "rust-lesson"
version = "0.1.0"
authors = ["ZhanPeng <xxx@xxx.com>"]
edition = "2018"

[lib]
name = "rust_lesson"
crate-type = ["cdylib"]

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

结果

能够查看到mac版本的动态连接库生成

└── target
    └── debug
        ├── librust_lesson.dylib
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!