共享网站的建设与规划,杭州免费网站制作,外链发布平台大全,织梦手机网站模板下载Rust
Rust是一门注重安全#xff08;safety#xff09;、速度#xff08;speed#xff09;和并发#xff08;concurrency#xff09;的现代系统编程语言。Rust 通过内存安全来实现以上目标#xff0c;但不使用垃圾回收机制#xff08;garbage collection, GC#xff…Rust
Rust是一门注重安全safety、速度speed和并发concurrency的现代系统编程语言。Rust 通过内存安全来实现以上目标但不使用垃圾回收机制garbage collection, GC。
《通过例子学 Rust》Rust By Example, RBE内容由一系列可运行的实例组成通过这些例子阐明了各种 Rust 的概念和基本库。想获取这些例子外的更多内容不要忘了安装 Rust 到本地并查阅。另外为了满足您的好奇心。
现在让我们开始学习吧
Hello World 这是传统的 Hello World 程序的源码。 fn main() {// 调用编译生成的可执行文件时这里的语句将被运行。// 将文本打印到控制台println!(Hello World!);} println! 是一个宏macros可以将文本输出到控制台console。
使用 Rust 的编译器 rustc 可以从源程序生成可执行文件
$ rustc hello.rs
使用 rustc 编译后将得到可执行文件 hello。
$ ./hello Hello World! Cargo 教程
cargo
Rusts package managerUsage: cargo [toolchain] [OPTIONS] [COMMAND]cargo [toolchain] [OPTIONS] -Zscript MANIFEST_RS [ARGS]...Options:-V, --version Print version info and exit--list List installed commands--explain CODE Provide a detailed explanation of a rustc error message -v, --verbose... Use verbose output (-vv very verbose/build.rs output) -q, --quiet Do not print cargo log messages--color WHEN Coloring: auto, always, never-C DIRECTORY Change to DIRECTORY before doing anything (nightly-only)--locked Assert that Cargo.lock will remain unchanged--offline Run without accessing the network--frozen Equivalent to specifying both --locked and --offline--config KEYVALUE|PATH Override a configuration value-Z FLAG Unstable (nightly-only) flags to Cargo, see cargo -Z help for details-h, --help Print helpCommands:build, b Compile the current packagecheck, c Analyze the current package and report errors, but dont build object filesclean Remove the target directorydoc, d Build this packages and its dependencies documentationnew Create a new cargo packageinit Create a new cargo package in an existing directoryadd Add dependencies to a manifest fileremove Remove dependencies from a manifest filerun, r Run a binary or example of the local packagetest, t Run the testsbench Run the benchmarksupdate Update dependencies listed in Cargo.locksearch Search registry for cratespublish Package and upload this package to the registryinstall Install a Rust binaryuninstall Uninstall a Rust binary... See all commands with --listSee cargo help command for more information on a specific command. 在 Rust 开发中几乎所有的项目都是使用 Cargo 来进行管理和构建的因为它提供了便捷的工作流程和强大的功能使得 Rust 开发变得更加高效和可靠。
Cargo 是什么
Cargo 是 Rust 的官方构建系统和包管理器。它主要有两个作用
主要有两个作用 项目管理Cargo 用于创建、构建和管理 Rust 项目。通过 Cargo你可以轻松地创建新项目管理项目的依赖关系并执行项目的构建、运行和测试等操作。 包管理器Cargo 还充当了 Rust 的包管理器。它允许开发者在项目中引入和管理依赖项如第三方库并确保这些依赖项的版本管理和兼容性。
Cargo 主要特性和功能 依赖管理Cargo 通过 Cargo.toml 文件管理项目的依赖这个文件列出了项目所需的所有外部库以及它们的版本。 构建系统Cargo 使用 Rust 编译器rustc来构建项目它会自动处理依赖的编译和链接。 包注册表Cargo 与 crates.io 这个 Rust 社区的包注册表交互允许开发者搜索、添加和管理第三方库。 构建配置通过 Cargo.toml 和 Cargo.lock 文件Cargo 允许开发者配置构建选项如编译器选项、特性features和目标平台。 项目模板Cargo 提供了创建新项目的模板可以通过 cargo new 命令快速启动新项目。 测试Cargo 提供了一个简单的命令 cargo test 来运行项目的单元测试。 基准测试Cargo 支持使用 cargo bench 命令进行基准测试。 发布通过 cargo publish 命令开发者可以将他们的库发布到 crates.io 上供其他开发者使用。 自定义构建脚本Cargo 允许使用自定义的构建脚本来处理更复杂的构建需求。 多目标项目Cargo 支持在一个项目中定义多个目标如可执行文件、库、测试和基准测试。 跨平台构建Cargo 支持跨多个平台构建 Rust 程序包括 Windows、macOS、Linux 以及各种嵌入式系统。 构建缓存为了加快构建速度Cargo 使用构建缓存来存储编译后的依赖。 离线工作Cargo 支持在没有互联网连接的情况下工作它会自动使用本地缓存的依赖。 插件系统Cargo 允许开发者编写插件来扩展其功能。 环境变量Cargo 支持通过环境变量来覆盖默认的构建和运行行为。
Cargo 功能
Cargo 除了创建工程以外还具备构建build工程、运行run工程等一系列功能构建和运行分别对应以下命令
cargo new project-name创建一个新的 Rust 项目。cargo build编译当前项目。cargo run编译并运行当前项目。cargo check检查当前项目的语法和类型错误。cargo test运行当前项目的单元测试。cargo update更新 Cargo.toml 中指定的依赖项到最新版本。cargo --help查看 Cargo 的帮助信息。cargo publish将 Rust 项目发布到 crates.io。cargo clean清理构建过程中生成的临时文件和目录。
格式化输出
打印由std:fmt进行执行
format!将格式化文本写到字符串。print!与 format! 类似但将文本输出到控制台io::stdout。println!: 与 print! 类似但输出结果追加一个换行符。eprint!与 print! 类似但将文本输出到标准错误io::stderr。eprintln!与 eprint! 类似但输出结果追加一个换行符。
这些宏都以相同的做法解析文本。有个额外优点是格式化的正确性会在编译时检查。
例子
fn main() {// 通常情况下{} 会被任意变量内容所替换。// 变量内容会转化成字符串。println!(Month{} {} days, 5, 31);println!({0}, this is {1}. {1}, this is {0}, Alice, Bob);// 可以使用命名参数。println!({subject} {verb} {object},object小黄 dog, subject红帽子 fox, verb 都是四足小动物);// 可以在 : 后面指定特殊的格式。println!({} of {:b} people know binary, the other half dont, 1, 2);// 你可以按指定宽度来右对齐文本。// 下面语句输出 15 个空格后面连着 1。println!({number:width$}, number1, width6);// 你可以在数字左边补 0。下面语句输出 000001。println!({number:0width$}, number1, width6);// println! 会检查使用到的参数数量是否正确。println!(My name is {0}, {1} {0}, Bond,Keny );}Rust 宏
Rust 宏是一种在编译时生成代码的强大工具允许你在编写代码时创建自定义语法扩展。宏在 Rust 中有两种类型声明式宏和过程宏1。
声明式宏
声明式宏使用 macro_rules! 关键字进行定义基于模式匹配可以匹配代码的结构并生成相应的代码
示例
macro_rules! greet {($name:expr) {println!(Hello, {}!, $name);};
}fn main() {greet!(World);
}
过程宏
过程宏是一种更为灵活和强大的宏允许在编译时通过自定义代码生成过程来操作抽象语法树AST。过程宏包括派生宏、属性宏等
示例
use proc_macro::TokenStream;
use quote::quote;
use syn;
#[proc_macro_derive(HelloMacro)]pub fn hello_macro_derive(input: TokenStream) - TokenStream {let ast syn::parse(input).unwrap();impl_hello_macro(ast)
}fn impl_hello_macro(ast: syn::DeriveInput) - TokenStream {let name ast.ident;let gen quote! {impl HelloMacro for #name {fn hello_macro() {println!(Hello, Macro! My name is {}!, stringify!(#name));}}
};gen.into()
}
Rust List
use std::fmt; // 导入 fmt 模块。// 定义一个包含单个 Vec 的结构体 List。
struct List(Veci32);impl fmt::Display for List {fn fmt(self, f: mut fmt::Formatter) - fmt::Result {// 使用元组的下标获取值并创建一个 vec 的引用。let vec self.0;write!(f, [)?;// 使用 v 对 vec 进行迭代并用 count 记录迭代次数。for (count, v) in vec.iter().enumerate() {// 对每个元素第一个元素除外加上逗号。// 使用 ? 或 try! 来返回错误。if count ! 0 { write!(f, , )?; }write!(f, {}, v)?;}// 加上配对中括号并返回一个 fmt::Result 值。write!(f, ])}
}fn main() {let v List(vec![1, 2, 3]);println!({}, v);
}Rust Cms
Rust 支持的性能RSCMS 利用 Rust 的速度和可靠性来提供高性能内容管理功能确保最佳效率和可扩展性。 模块化架构借助灵活的模块化架构开发人员可以轻松扩展和自定义 RSCMS以满足其特定的内容管理需求。 用户友好的界面RSCMS 为内容创建、编辑和发布提供了一个直观且用户友好的界面使用户能够轻松有效地管理其数字内容。 安全性和可靠性RSCMS 在构建时充分考虑了安全性优先考虑数据保护和系统完整性为管理敏感内容提供了安全的环境。 社区驱动的开发RSCMS 是一个开源项目欢迎社区为增强功能、修复错误和推动持续改进做出贡献。后续会继续研究Rust Cms。