Rust Boom 是一个我在学习使用 Rust 的时候,对 Rust 的一些难点的解决方法以及一些 Rust 开源的好玩的库、书籍、文章的整理,希望可以帮助更多的 Rust 初学者来翻过 Rust 这座大山。
- Rust Boom 💥
我自己写的一些关于 Rust 特殊问题的处理和解决方案。
TODO:
Rust 的书。
Rust 语言真的好:连续七年成为全世界最受欢迎的语言、没有 GC 也无需手动内存管理、性能比肩 C++/C 还能直接调用它们的代码、安全性极高 - 总有公司说使用 Rust 后以前的大部分 bug 都将自动消失、全世界最好的包管理工具 Cargo 等等。但...
在线文档:Rust 语言圣经 - Rust 语言圣经(Rust Course)
Rust 程序设计语言的本质实际在于 赋能(empowerment):无论你现在编写的是何种代码,Rust 能让你在更为广泛的编程领域走得更远,写出自信。(这一点并不显而易见)
举例来说,那些“系统层面”的工作涉及内存管理、数据表示和并发等底层细节。从传统角度来看,这是一个神秘的编程领域,只为浸润多年的极少数人所触及,也只有他们能避开那些臭名昭著的陷阱。即使谨慎的实践者,亦唯恐代码出现漏洞、崩溃或损坏。
Rust 破除了这些障碍:它消除了旧的陷阱,并提供了伴你一路同行的友好、精良的工具。想要 “深入” 底层控制的程序员可以使用 Rust,无需时刻担心出现崩溃或安全漏洞,也无需因为工具链不靠谱而被迫去了解其中的细节。更妙的是,语言设计本身会自然而然地引导你编写出可靠的代码,并且运行速度和内存使用上都十分高效。
已经在从事编写底层代码的程序员可以使用 Rust 来提升抱负。例如,在 Rust 中引入并行是相对低风险的操作,因为编译器会替你找到经典的错误。同时你可以自信地采取更加激进的优化,而不会意外引入崩溃或漏洞。
但 Rust 并不局限于底层系统编程。它表达力强、写起来舒适,让人能够轻松地编写出命令行应用、网络服务器等各种类型的代码——在本书中就有这两者的简单示例。使用 Rust 能让你把在一个领域中学习的技能延伸到另一个领域:你可以通过编写网页应用来学习 Rust,接着将同样的技能应用到你的 Raspberry Pi(树莓派)上。
本书全面介绍了 Rust 为用户赋予的能力。其内容平易近人,致力于帮助你提升 Rust 的知识,并且提升你作为程序员整体的理解与自信。欢迎你加入 Rust 社区,让我们准备深入学习 Rust 吧!
—— Nicholas Matsakis 和 Aaron Turon
在线文档:Rust 程序设计语言
Rust 是一门注重安全(safety)、速度(speed)和并发(concurrency)的现代系统编程语言。Rust 通过内存安全来实现以上目标,但不使用垃圾回收机制(garbage collection, GC)。
《通过例子学 Rust》(Rust By Example, RBE)内容由一系列可运行的实例组成,通过这些例子阐明了各种 Rust 的概念和基本库。想获取这些例子外的更多内容,不要忘了安装 Rust 到本地并查阅官方标准库文档。另外为了满足您的好奇心,您还可以查阅本网站的源代码。
在线文档:简介 - 通过例子学 Rust 中文版 (rustwiki.org)
代码仓库:rust-lang-cn/rust-by-example-cn: Rust By Example 中文版(包含在线代码编辑器) (github.com)
Rust 标准库是可移植 Rust 软件的基础,这是一组针对 更广泛的 Rust 生态系统 的最小且经过实战测试的共享抽象。 它提供了核心类型,例如
Vec
和Option
,库定义的对 语言原语 的操作,标准库宏,I/O 和 多线程,以及许多 其他 东西。默认情况下,
std
可用于所有 Rust crates。因此,可以通过use
语句使用路径std
来访问标准库,就像在use std::env
中一样。
在线文档:std - Rust (rustwiki.org)
收集一些 Rust 比较好的文章内容。
- rust 语言基础学习: rust 所有权之 Move 和 Copy 语义 - 架构小白|青蛙小白|关注程序开发、互联网技术、云原生 (frognew.com)
- Top 23 Rust GUI Projects (Jul 2022) (libhunt.com)
Rust 开发的框架。
Tauri 是一个为所有主要桌面平台构建微小、速度极快的二进制文件的框架。开发人员可以集成任何编译为 HTML、JS 和 CSS 的前端框架,以构建其用户界面。应用程序的后端是一个 Rust 的二进制文件,前端可以与之交互。
Tauri 应用程序中的用户界面目前将 tao 用作 macOS 和 Windows 上的窗口处理库,并通过 Tauri 团队孵化和维护 WRY 在 Linux 上使用 gtk,该团队利用 macOS 上的 WebKit、Windows 上的 WebView2 和 Linux 上的 WebKitGTK,为系统 webview(以及菜单和任务栏等其他好东西)创建了统一的界面。
在线网站:Build smaller, faster, and more secure desktop applications with a web frontend | Tauri Appshttps://tauri.studio/
egui 是一个简单、快速、高度可移植的 Rust 即时模式 GUI 库。egui 可运行于 Web, 原生(Native) 甚至 你喜欢的的游戏引擎 (即将到来)。
egui 旨在成为最易用的 Rust GUI 库,用最简单的方式创建 Web 应用程序。
egui 可以在任何可以绘制纹理三角形(textured triangles)的地方使用,这意味着你可以轻松地地将它集成到你选择的游戏引擎中。
中文文档:egui-doc-cn/README_zh-hans.md at main · Re-Ch-Love/egui-doc-cn (github.com)
FLTK 图形用户界面库的 Rust 绑定。 fltk crate 是一个跨平台的轻量级 gui 库,可以静态链接以生成小型、自包含和快速的 gui 应用程序。
代码仓库:fltk-rs/fltk-rs: Rust bindings for the FLTK GUI library. (github.com)
在线文档:Home - fltk book (fltk-rs.github.io)
Rust 的跨平台 GUI 库,专注于简单性和类型安全。灵感来自 Elm。
代码仓库:iced-rs/iced: A cross-platform GUI library for Rust, inspired by Elm (github.com)
Druid 是一个实验性的 Rust 原生 UI 工具包。它的主要目标是提供优美的用户体验。这个目标有很多因素,包括性能、丰富的交互调色板(因此有一个小部件库来支持它们),以及与本机平台的良好配合。有关详细信息,请参阅目标部分。 Druid 目前的发展很大程度上是由它在 Runebender 中的使用推动的,这是一种新的字体编辑器。 我们一直在 crates.io 上定期发布 Druid,但它正在积极开发中,它的 API 可能会改变。所有更改都记录在更改日志中。 有关一些关键概念的概述,请参阅(正在进行的工作)Druid 书。
代码仓库:linebender/druid: A data-first Rust-native UI design toolkit. (github.com)
tui-rs 是一个 Rust 库,用于构建丰富的终端用户界面和仪表板。它深受 Javascript 库 blessed-contrib 和 Go 库 termui 的启发。
代码仓库:fdehau/tui-rs: Build terminal user interfaces and dashboards using Rust (github.com)
[
](https://github.com/bevyengine/bevy/workflows/iOS cron CI/badge.svg)
Bevy 是 Rust 内置的令人耳目一新的简单数据驱动游戏引擎。它永远是免费和开源的!
代码仓库:bevyengine/bevy: A refreshingly simple data-driven game engine built in Rust (github.com)
Tokio 是 Rust 编程语言的异步运行时。它提供了编写网络应用程序所需的构建块。它提供了针对广泛系统的灵活性,从具有数十个内核的大型服务器到小型嵌入式设备。
在线网站:Tokio - An asynchronous Rust runtime
Yew 是一个设计先进的 Rust 框架,目的是使用 WebAssembly 来创建多线程的前端 web 应用。
代码仓库:yewstack/yew: Rust / Wasm framework for building client web apps (github.com)
资源仓库:jetli/awesome-yew: 😎 A curated list of awesome things related to Yew / WebAssembly. (github.com)
Deno 是一个简单、现代且安全的 JavaScript 和 TypeScript 运行时,它使用 V8 并内置于 Rust。
代码仓库:denoland/deno: A modern runtime for JavaScript and TypeScript. (github.com)
一个代码打包器。
SWC(代表 Speedy Web Compiler)是一个用 Rust 编写的超快速 TypeScript / JavaScript 编译器。它同时是 Rust 和 JavaScript 的库。如果您使用 Rust 的 SWC,请参阅 rustdoc,对于大多数用户,您使用该库的入口点将是解析器。
代码仓库:swc-project/swc: Rust-based platform for the Web (github.com)
Parcel 是用于 web 的零配置构建工具。它将优秀的开箱即用的开发经验与可扩展的体系结构结合在一起,可以将您的项目从刚开始的阶段转变为大规模的生产应用程序。
代码仓库:parcel-bundler/parcel: The zero configuration build tool for the web. 📦🚀 (github.com)
Rome 是用于 JavaScript、TypeScript、JSON、HTML、Markdown 和 CSS 的格式化程序、linter、捆绑程序等。 Rome 旨在取代 Babel、ESLint、webpack、Prettier、Jest 等。 Rome 统一了以前是独立工具的功能。建立在一个共享的基础上,我们可以为处理代码、显示错误、并行化工作、缓存和配置提供一种内聚的体验。 Rome 有很强的约定,旨在具有最小的配置。阅读更多关于我们的项目理念的信息。 Rome 是用 Rust 编写的。 Rome 拥有一流的 IDE 支持,具有复杂的解析器,可以完全保真地表示源文本和一流的错误恢复。 Rome 是麻省理工学院根据贡献者契约行为准则获得许可和管理的。
用于在 Rust 中构建已编译的 Node.js 附加组件的最小库。
代码仓库:napi-rs/napi-rs: A framework for building compiled Node.js add-ons in Rust via Node-API (github.com)
WebAssembly 的运行时
代码仓库:bytecodealliance/wasmtime: A standalone runtime for WebAssembly (github.com)
WebAssembly 又一个运行时
代码仓库:wasmerio/wasmer: 🚀 The leading WebAssembly Runtime supporting WASI and Emscripten (github.com)
WebAssembly 又又一个运行时
WasmEdge 是一个轻量级、高性能和可扩展的 WebAssembly 运行时,适用于云原生、边缘和去中心化应用程序。它为无服务器应用程序、嵌入式功能、微服务、智能合约和物联网设备提供支持。
为 WebAssembly 提供内部调用接口的库
WASI 不是一个单一的标准系统接口,而是标准化 API 的模块化集合。不需要实现任何 API 即可具有兼容的运行时。相反,主机环境可以选择哪些 API 对其用例有意义。
代码仓库:WebAssembly/WASI: WebAssembly System Interface (github.com)
构建 p2p 网络的包 运行您的网络应用程序,不受运行时和地址服务的影响,与它们的位置无关。
代码仓库:libp2p/rust-libp2p: The Rust Implementation of the libp2p networking stack. (github.com)
Rocket是 Rust 生态系统中对初学者来说最容易上手的 web 框架。
它是高度可定制化的,可以快速启动一个新的应用程序。同时,它避免了许多不必要的文件。
与 Actix Web 不同的是,该框架运行在 Rust 语言的“实验”版本)上。
代码仓库:SergioBenitez/Rocket: A web framework for Rust. (github.com)
Actix Web 是一个功能强大、实用且速度极快的 Rust Web 框架.
- 支持 HTTP/1.x 和 HTTP/2
- 流和流水线
- 带有可选宏的强大请求路由
- 完全兼容 Tokio
- 保持活动和缓慢的请求处理
- 客户端/服务器 WebSocket 支持
- 透明内容压缩/解压缩(br、gzip、deflate、zstd)
- 多部分流
- 静态资产
- 使用 OpenSSL 或 Rustls 的 SSL 支持
- 中间件(记录器、会话、CORS 等)
- 与 awc HTTP 客户端集成
- 在稳定的 Rust 1.57+ 上运行
一个超级简单、可组合的 web 服务器框架,用于提高 warp 速度。 warp 的基本构建块是过滤器:它们可以组合和组合来表达对请求的丰富需求。 由于其过滤器系统,warp 提供了这些开箱即用的功能:
- 路径路由和参数提取
- 标头要求和提取
- 查询字符串反序列化
- JSON 和表单主体
- 多部分表单数据
- 静态文件和目录
- 网络套接字
- 访问记录
- Gzip、Deflate 和 Brotli 压缩
代码仓库:seanmonstar/warp: A super-easy, composable, web server framework for warp speeds. (github.com)
gjson 的 Rust 移植,通过 dotpath 语法获取 JSON 值。原名为:rust-ajson
代码仓库:importcjj/rust-ajson: Rust port of gjson,get JSON value by dotpath syntax (github.com)
轻松解析和序列化 JSON。
代码仓库:maciejhirsz/json-rust: JSON implementation in Rust (github.com)
JSON 解析器直接获取值而不在 Rust 中执行标记化。
Serde 是一个用于高效且通用地序列化和反序列化 Rust 数据结构的框架。
代码仓库:serde-rs/json: Strongly typed JSON library for Rust (github.com)
高性能 xml pull reader/writer。 几乎是零拷贝(尽可能使用 Cow) 易于分配内存(API 提供了一种重用缓冲区的方法) 支持各种编码(具有编码功能)、命名空间解析、特殊字符。
代码仓库:tafia/quick-xml: Rust high performance xml reader and writer (github.com)
SeaORM 是一种关系 ORM,可帮助您使用熟悉的动态语言在 Rust 中构建 Web 服务。
目前支持:
sqlx-mysql
- SQLx MySQLsqlx-postgres
- SQLx PostgreSQLsqlx-sqlite
- SQLx SQLite
代码仓库:SeaQL/sea-orm: 🐚 An async & dynamic ORM for Rust (github.com)
受 Mybatis 和 MybatisPlus 启发,用 Rust 编写的高性能、安全、动态 SQL(编译时)ORM 框架。
- - 编译时动态 sql(mybatis 动态 sql 标签)、全异步(Future)、生产实践(abs_admin)、
- - 内存安全,协程安全,事务安全(防忘提交),百分百 safe 代码
- - 多种插件,分页/逻辑删除/sql 拦截器/CRUD/Wrapper/PySQL/HtmlSQL
支持数据库:
数据库 已支持 Mysql √ Postgres √ Sqlite √ Mssql/Sqlserver √(50%) MariaDB(Mysql) √ TiDB(Mysql) √ CockroachDB(Postgres) √
代码仓库:rbatis/rbatis: Rust High Performance compile-time ORM(RBSON based) (github.com)
此存储库包含官方支持的 MongoDB Rust 驱动程序,这是一个客户端库,可用于与 Rust 应用程序中的 MongoDB 部署进行交互。它使用 bson crate 来支持 BSON。该驱动程序包含一个完全异步的 API,它支持 tokio(默认)或 async-std,具体取决于设置的功能标志。驱动程序还有一个同步 API,可以通过功能标志启用。
代码仓库:mongodb/mongo-rust-driver: The official MongoDB Rust Driver (github.com)
该项目的主要目标是基于数据模型为 MongoDB 提供一个简单、健全且可预测的接口。如果在任何时候该系统可能会妨碍您,您可以直接访问底层驱动程序。该项目针对 MongoDB 3.6、4.0、4.2 和 4.4 进行了测试。 好消息! Wither 现在基于官方的 MongoDB Rust 驱动程序。由于驱动程序的进步,Wither 现在是完全异步的。简单地镜像底层 MongoDB 驱动程序的功能,Wither 支持以下运行时: tokio-runtime(默认)激活 tokio 运行时。 async-std-runtime 激活 async-std 运行时。 由于底层驱动程序的更新,Model trait 以及 Model 派生宏有相当多的重大变化。详细信息可以在更改日志和文档中找到。此外,现在默认情况下一切都是异步的,并且同步接口已从 repo 中完全删除。
代码仓库:thedodd/wither: An ODM for MongoDB built on the official MongoDB Rust driver. (github.com)
Redis-rs 是 Rust 的高级 redis 库。它通过非常灵活但低级的 API 提供对所有 Redis 功能的便捷访问。它使用可自定义的类型转换特征,因此任何操作都可以返回您期望的类型的结果。这带来了非常愉快的开发体验。
代码仓库:redis-rs/redis-rs: Redis library for rust (github.com)
适用于 Rust 的强大模拟对象库。
代码仓库:asomers/mockall: A powerful mock object library for Rust (github.com)
geo crate 提供了点、线串和多边形等地理空间基元类型,并提供了算法和操作,例如: 面积和质心计算
- 简化和凸包操作
- 欧几里得和哈弗辛距离测量
- 交叉口检查
- 仿射变换,例如旋转和平移。
⚠️ :如果需要计算距离所有的坐标使用 f64,这是小编踩过的坑.
代码仓库:georust/geo: Geospatial primitives and algorithms for Rust (github.com)
这个 crate 提供了基本的图像处理功能和方法来转换各种图像格式。 提供的所有图像处理函数都对实现 GenericImageView 和 GenericImage 特征并返回 ImageBuffer 的类型进行操作。
代码仓库:image-rs/image: Encoding and decoding images in Rust (github.com)
适用于 MacOS、Windows、Linux(X11、wayland) 的跨平台截图库。
用 Rust 编写的一些实用的应用软件。
Lapce 是用纯 Rust 编写的,用户界面是 Druid(也是用 Rust 编写)。它是用 Xi-Editor 的 Rope Science 设计的,使得计算速度快如闪电,并利用 OpenGL 进行渲染。关于 Lapce 功能的更多信息可以在主网站上找到,用户文档可以在 GitBook 上找到。
一个有点像是 VSCode 的编辑器。
代码仓库:lapce/lapce: Lightning-fast and Powerful Code Editor written in Rust (github.com)
这是 Neovim(一个经过积极重构和更新的 Vim 编辑器)的简单图形用户界面。在可能的情况下,有一些图形改进,但在功能上,它应该像终端用户界面一样。
仓库链接:neovide/neovide: No Nonsense Neovim Client in Rust (github.com)
面向所有人的开源虚拟/远程桌面基础架构!开源的 TeamViewer 替代方案。显示和控制您的 PC 和安卓设备。
仓库链接:rustdesk/rustdesk:为每个人提供开源虚拟/远程桌面基础架构!开源的 TeamViewer 替代方案。显示和控制您的 PC 和安卓设备。 (github.com)
GitUI 为您提供了 git GUI 的舒适性,但就在您的终端上.
代码仓库:extrawurst/gitui: Blazing 💥 fast terminal-ui for git written in rust 🦀 (github.com)
Rust 中的一个现代、简单的 TCP 隧道,它将本地端口暴露给远程服务器,绕过标准 NAT 连接防火墙。这就是它所做的一切:不多也不少。
代码仓库:ekzhang/bore: 🕳 bore is a simple CLI tool for making tunnels to localhost (github.com)
快速计算或计算源代码行和注释的差异。
macbox :: github/kubernetes » time cloc . 72.5313 secs ┌───────────────────────────────────────────────────────────────────────────────────────┐ │ Language files size blank comment code │ ├───────────────────────────────────────────────────────────────────────────────────────┤ │ Autoconf 533 515.91 KB 100 992 21399 │ │ Bash 148 420.09 KB 1183 592 10153 │ │ C 149 149.31 KB 970 1671 3065 │ │ C Header 25 6.94 MB 9975 109175 20975 │ │ GNU Style Assembly 2946 8.96 MB 48895 43894 285473 │ │ Go 463514 4.44 GB 13873486 22200757 106047029 │ │ Html 50 950.00 B 0 0 50 │ │ Ini 24 5.70 KB 48 0 240 │ │ JSON 21759 1011.18 MB 100 0 23771190 │ │ Lua 25 419.92 KB 750 100 11875 │ │ Markdown 18270 162.09 MB 530001 0 1794019 │ │ Plain Text 1161 5.50 MB 7186 0 176276 │ │ PowerShell 174 2.92 MB 8947 74817 1149 │ │ Protocol Buffer 4489 51.42 MB 220374 684092 425720 │ │ Python 175 581.23 KB 2975 5500 8750 │ │ SVG 101 1.22 MB 101 101 9532 │ │ Shell 9470 56.70 MB 189547 361195 998808 │ │ Toml 299 342.58 KB 3667 4325 7223 │ │ Yaml 38405 140.98 MB 31308 31043 5317632 │ ├───────────────────────────────────────────────────────────────────────────────────────┤ │ Sum 561717 5.86 GB 14929613 23518254 138910558 │ └───────────────────────────────────────────────────────────────────────────────────────┘ cloc . 23.21s user 153.47s system 239% cpu 1:13.72 total
该工具扩展了 Cargo,允许您通过从命令行修改 Cargo.toml 文件来添加、删除和升级依赖项。 当前可用的子命令:
代码仓库:killercup/cargo-edit: A utility for managing cargo dependencies from the command line. (github.com)
一个具有高性能、高压缩率和高实用性的开源分布式时间序列数据库。
仓库地址:cnosdb/README_CN.md at main · cnosdb/cnosdb (github.com)
Rust 相关的社区。
- Rust 语言中文社区-首页 (rustcc.cn)
- Rust 技术论坛 | Rust 语言技术论坛 - 优质的 Rust 开发者学习社区 (learnku.com)
- The Rust Programming Language Forum (rust-lang.org)
Rust 相关的热点新闻或事件。
封面图来自:Rustacean.net: Home of Ferris the Crab
徽章来自:Shields.io: Quality metadata badges for open source projects
如果你有自己用 Rust 开发的软件或者推荐的资源都可以提交 PR,在这里感谢所有为 Rust 生态贡献的开发者,因为只有越来越丰富的生态才能吸引更多的人来学习使用 Rust。
最后希望 Rust 越来越牛 X。
如果文档有用请帮帮忙点一下 star,收集整理不易。
MIT