推荐项目 | 基础工具库
聚焦 Rust 生态库
ouch: 压缩和解压缩工具
ouch
代表Obvious Unified Compression Helper,是一个 CLI 工具,可帮助您压缩和解压缩多种格式的文件。
格式 | .tar | .zip | .bz , .bz2 | .gz | .lz4 | .xz , .lzma | .zst |
---|---|---|---|---|---|---|---|
支持的 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
https://github.com/ouch-org/ouch
Meadowlark: 数字音频工作站
Meadowlark 是一个(目前未完成)项目,旨在成为适用于 Linux、Mac 和 Windows 的免费开源 DAW(数字音频工作站)。它的目标是成为世界各地艺术家的强大录音、作曲、编辑、声音设计、混音和母带制作工具,同时还具有直观性和可定制性。
可以关注下此项目,看看它的目标能否实现
https://github.com/MeadowlarkDAW/Meadowlark
gpgpu-rs : 基于 wgpu 实现的 GPU 计算库
wgpu 是一个安全且可移植的 GPU 抽象库,实现 WebGPU API 。gpgpu-rs 在其之上创建了一个简单的 GPU 计算库。
libracity: 基于 Bevy 实现的益智游戏
LibraCity - 针尖上的城市规划!LibraCity 是一款益智游戏,您可以用一根针在平衡状态下建造一座城市。要取得成功,请利用建筑物的各种重量,并在确保城市保持稳定的同时放置它们。
https://github.com/djeedai/libracity
Chaos Theory : 一款小游戏
用 Rust 和 WASM 实现的一款 H5 小游戏,利用了一个小型的游戏引擎 ld-game-engine 。
soldank: 是 Soldat 游戏的 Rust 实现
soldat 是 是一款独特的2D(侧视图)多人动作游戏。 它受到了Liero,Worms,Quake和Counter-Strike等最好的游戏的影响,并提供了大量的鲜血和肉体的快节奏游戏体验。soldank 是这款游戏的 Rust 实现。
https://github.com/smokku/soldank
plotters :快速绘图工具
Plotters 是一个绘图库,设计用于以纯 Rust 渲染图形、绘图和图表。支持各种类型的后端,包括位图、矢量图、活塞窗口、GTK/Cairo 和 WebAssembly。
在有的人看来,这仍然不是"非常"便捷,尤其是在 debug 的时候,仍然需要花费一点精力来绘制。 debug_plotter 这个库帮我们实现了这个需求,通过 plot! 宏,可以快速完成图像绘制,可视化程序运行情况。
fn main() {
for a in 0usize..10usize {
let b = (a as f32 / 2.0).sin() * 10.0;
let c = 5 - (a as i32);
debug_plotter::plot!("My Plot"; a, b, c);
}
}
https://crates.io/crates/debug_plotter
rnet - 从 .net 中调用 Rust
这个 crate 原理仍然是将rust编译成 cdylib,然后在 c# 里面调用。不过将这个过程变得更容易了一点。
https://docs.rs/rnet/0.1.0/rnet/index.html
Rust-CUDA: 完全用 Rust 编写和执行快速 GPU 代码的库和工具生态系统
Rust CUDA 项目是一个旨在使 Rust 成为使用 CUDA 工具包进行极快 GPU 计算的一级(tier-1)语言的项目。它提供了将 Rust 编译为极快的 PTX 代码的工具,以及使用现有 CUDA 库的库。
过去,通用高性能 GPU 计算是使用 CUDA 工具包完成的。CUDA 工具包主要提供了一种使用 Fortran/C/C++ 代码与单一源的 CPU 代码协同进行 GPU 计算的方法。它还提供了许多库、工具、论坛和文档来补充单源 CPU/GPU 代码。
CUDA 是唯一的 NVIDIA 工具包。已经提出了许多用于跨平台 GPU 计算的工具,例如 OpenCL、Vulkan Computing 和 HIP。然而,到目前为止,CUDA 仍然是此类任务最常用的工具包。这就是为什么必须让 Rust 成为与 CUDA 工具包一起使用的可行选择。
然而,使用 Rust 的 CUDA 在历史上一直是一条非常崎岖的道路。到目前为止,唯一可行的选择是使用 LLVM PTX 后端,但是,LLVM PTX 后端并不总是有效,并且会为许多常见的 Rust 操作生成无效的 PTX,而且近年来已经一次又一次地表明随着 rust-gpu(用于 Rust -> SPIR-V)等项目的出现,GPU 上的 Rust 需要专门的解决方案。
我们希望通过这个项目,我们可以推动 Rust GPU 计算行业向前发展,并使 Rust 成为处理此类任务的优秀语言。Rust 提供了很多好处,例如__restrict__
每个内核的性能优势、出色的模块/板条箱系统、使用 分隔 CPU/GPU 代码的不安全区域unsafe
、高级包装器到低级 CUDA 库等。
https://github.com/Rust-GPU/Rust-CUDA
minijinja: Rust 实现的一款最小依赖的模板库
作者是 Python 框架 Flask 的作者,minijinja 基于 Python 的 Jinja2 模板引擎语法和行为而实现。
https://github.com/mitsuhiko/minijinja
appflowy: 一个开源的基于Rust和Flutter的Notion替代产品
@annieanqi 开源了一个基于 Rust 和 Flutter 的 Notion 替代产品 appflowy,目前是MVP状态,该项目还处于一个比较早的状态,欢迎各位开发者提出自己的想法。
Quinn: 0.8.0发布,正式支持 QUIC v1
Quinn是IETF QUIC传输协议的纯rust、异步兼容的实现。
目前刚发布 0.8.0 版本,正式支持了 QUIC v1标准.
https://github.com/quinn-rs/quinn/releases/tag/0.8.0
Docker Activity:获取docker容器的统计数据和能耗
Get stats and the energy consumption of your docker containers
Docker activity是一种用于监视Docker容器统计信息并输出其能耗的工具。
当前它还处于早期阶段,对于demoing来说,它很快就会变得更好。。。
pixels - 一个微小的硬件加速像素帧缓冲区。
-
建立在现代图形 API 的基础上
-
wgpu:Vulkan、Metal、DirectX 12、OpenGL ES3。
-
DirectX 11、WebGL2 和 WebGPU 支持正在进行中。
-
-
使用您自己的自定义着色器来获得特殊效果。
-
完美像素边界上的硬件加速缩放。
-
支持非方形像素纵横比。
https://github.com/parasyte/pixels
Lemmy v0.14.0 发布
Lemmy 是一款 Reddit 替代品,使用 Rust 编写。在刚刚发布的 v0.14.0 中完成了与 Mastodon 和 Pleroma 联合。这意味着,如果你是 Mastodon 和 Pleroma 的用户,那么你也可以:
- 查看 Lemmy 社区,用户配置文件,帖子和评论
- 关注 Lemmy 社区获取新的帖子和评论
- 答复(提及)双向生效,包括通知
Lemmy Online: https://lemmy.ml
Lemmy (a federated reddit alternative written in Rust) Release v0.14.0: Federation with Mastodon and Pleroma: https://lemmy.ml/post/89740
hRPC:面向用户的 API 的简单 RPC 系统
hRPC 是一个 RPC 系统,在 Harmony 仓库中,作者们一直在用 hRPC 开发他们的去中心化聊天协议。hRPC 使用 PB 作为协议中间件,并支持流式传输。hRPC 使用 REST 对普通一元请求建模,使用 WebSockets 对流请求建模。因此,为不支持它的语言编写一个库应该很容易。
elfshaker 一个高性能的针对二进制文件进行了优化的版本控制系统
400 GiB -> 100 MiB,访问时间为1s+;当应用于 clang 构建时。
Github链接
semver-explain: 语义版本解释工具
semver-explain,是一个 CLI 工具,用于解释语义版本控制 (Semantic Versioning)要求,将其转换为仅具有小于、大于或等于比较器的形式,其中主要、次要和补丁版本都是指定的。
SemVer 需求的确切含义解释来自于 Cargo。尤其是它不处理连字符范围或来自 JS node-semver 库的 x-ranges。
#![allow(unused)] fn main() { $ semver-explain "^1.4.0" >=1.4.0, <2.0.0 $ semver-explain "~0.5.3" >=0.5.3, <0.6.0 $ semver-explain "5.6.*" >=5.6.0, <5.7.0 }
https://github.com/alilleybrinker/semver-explain
pigeon-rs:电子邮件自动化工具
Pigeon 是一种命令行工具,用于以廉价且高效的方式自动化电子邮件工作流程。
比如,查询时事通讯的订阅者并向他们发送电子邮件:
pigeon send-bulk \
sender@your-domain.com \
--receiver-query "select email from user where newsletter_confirmed = true" \
--message-file "message.yaml" \
--display \
--assume-yes
结果如下:
> Display query result: shape: (4, 1)
+------------------------------+
| email |
| --- |
| str |
+==============================+
| "marie@curie.com" |
+------------------------------+
| "alexandre@grothendieck.com" |
+------------------------------+
| "emmy@noether.com" |
+------------------------------+
| "elie@cartan.com" |
+------------------------------+
> Sending email to 4 receivers ...
marie@curie.com ... ok
alexandre@grothendieck.com ... ok
emmy@noether.com ... ok
elie@cartan.com ... ok
Massage 配置文件格式如下:
# You can leave EITHER the text OR the html empty, but not both. Ideally, fill out both.
# You MUST provide a subject. Personalize message by wrapping variables in curly brackets, eg. {firstname}.
message:
# The subject of your email
subject: "Test subject"
# The plaintext version
text: "This is a test message (plaintext)."
# The html version
html: "This is a test message (html)."
GitHub:https://github.com/quambene/pigeon-rs
LibertyOS - 使用Rust语言从头开发的操作系统
LibertyOS完全从头开发,具体面向桌面还是IoT目前并不清楚,项目还在早期,感兴趣可参与。
https://github.com/LibertyOS-Development/kernel
Persy - 一个单文件数据库存储,类似于 sqlite
Persy完全由Rust开发,目前已发布1.1版本。在性能上有一些改进。
https://persy.rs/posts/persy-1.1.html
yap:一个小型的、基于迭代器的、零依赖的解析库
Yap是一个小型的、零依赖的解释器库,灵感来自于parser-combinator。我试图以简洁性换取简单性,并以迭代器接口的灵活性为基础。它的目标是使解析字符串和切片变得容易,并且易于使用。
在过去的几个星期里,我一直在构建和使用它,我认为它已经准备好向其他可能有兴趣使用它的人发布了!
下面是它的用法:
#![allow(unused)] fn main() { use yap::{ // This trait has all of the parsing methods on it: Tokens, // Allows you to use `.into_tokens()` on strings and slices, // to get an instance of the above: IntoTokens }; // Step 1: convert our input into something implementing `Tokens` // ================================================================ let mut tokens = "10 + 2 x 12-4,foobar".into_tokens(); // Step 2: Parse some things from our tokens // ========================================= #[derive(PartialEq,Debug)] enum Op { Plus, Minus, Multiply } #[derive(PartialEq,Debug)] enum OpOrDigit { Op(Op), Digit(u32) } // The `Tokens` trait builds on `Iterator`, so we get a `next` method. fn parse_op(t: &mut impl Tokens<Item=char>) -> Option<Op> { match t.next()? { '-' => Some(Op::Minus), '+' => Some(Op::Plus), 'x' => Some(Op::Multiply), _ => None } } // We also get other useful functions.. fn parse_digits(t: &mut impl Tokens<Item=char>) -> Option<u32> { let s: String = t .tokens_while(|c| c.is_digit(10)) .collect(); s.parse().ok() } // As well as combinator functions like `sep_by_all` and `surrounded_by`.. let op_or_digit = tokens.sep_by_all( |t| t.surrounded_by( |t| parse_digits(t).map(OpOrDigit::Digit), |t| { t.skip_tokens_while(|c| c.is_ascii_whitespace()); } ), |t| parse_op(t).map(OpOrDigit::Op) ); // Now we've parsed our input into OpOrDigits, let's calculate the result.. let mut current_op = Op::Plus; let mut current_digit = 0; for d in op_or_digit { match d { OpOrDigit::Op(op) => { current_op = op }, OpOrDigit::Digit(n) => { match current_op { Op::Plus => { current_digit += n }, Op::Minus => { current_digit -= n }, Op::Multiply => { current_digit *= n }, } }, } } assert_eq!(current_digit, 140); // Step 3: do whatever you like with the rest of the input! // ======================================================== // This is available on the concrete type that strings // are converted into (rather than on the `Tokens` trait): let remaining = tokens.remaining(); assert_eq!(remaining, ",foobar"); }
- https://github.com/jsdw/yap
- https://www.reddit.com/r/rust/comments/r3blx1/announcing_yap_a_small_iterator_based_zero/
amdfand v1.0.6发布
新版本的AMD显卡冷却和电压守护程序。
当前版本包括:
-
非常简单的电压管理
-
有关如何启用电压管理的信息 ...
-
https://www.reddit.com/r/rust/comments/r1wyu7/release_amdfand_v106/