编者注
由于需要一个编写库的语言,要求执行速度非常快,能够完整跨平台使用。由于商业项目对稳定性要求高,则尽量增加稳定性。其中的主要选择为C++20与Rust语言,但是由于C++20的语言特性并未在主流编译器上完整实现,且VC与Gcc等割裂也不是一天两天。则确认学习Rust语言。作为学习重点。至于为什么不选择Go,主要问题是Go的Gc无法控制,导致作为第三方库的运行失控。Dart由于无法创建动态连接库,落选。
Rust
Rust介绍
https://www.rust-lang.org/
Rust:一个赋予有所构建可靠有效软件的开发语言。
为什么使用Rust?
- 性能 - Rust具有非常快的内存效能:没有运行时和垃圾回收,能够为关键性能服务提供支持,能够运行在嵌入式设备,能够轻松和其他语言集成
- 可靠 - Rust的丰富类型系统和所有权模型保证了内存安全性和线程安全性,并使您能够在编译时消除许多类的错误
- 生产 - Rust拥有出色的文档,友好的编译器和有用的错误消息,以及一流的工具-集成的软件包管理器和构建工具,具有自动完成和类型检查的智能多编辑器支持,自动格式化程序等
Rust构建
在2018年,Rust社区决定改善一些不同领域的编程体验(请参见2018路线图)。对于这些,您可以找到许多高质量的板条箱和一些很棒的入门指南。
- Command Line - 借助Rust强大的生态系统,快速启动CLI工具。 Rust帮助您放心地维护应用程序并轻松分发它
- WebAssembly - 可以一次增加一个模块来增强JavaScript。发布到npm,与webpack捆绑在一起,您就可以参加比赛了
- Networking - 可预测的性能。微小的资源占用。坚如磐石的可靠性。 Rust非常适合网络服务
- Embedded - 针对低资源设备?是否需要在不放弃高级便利的情况下进行低级控制?Rust覆盖需求
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 ->
- Cargo.lock - 自动生成不要手动改,也无需上传
- Cargo.toml - maven/gradle相似,项目名称版本引用
- src - 代码
- target - 编译后的内容生成在此处
- 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
来源:oschina
链接:https://my.oschina.net/hava/blog/3160061