Rust中文视界2021年总结
Rust 中文社区一直在不断发展,持续地向外输出:
- 2021 年,Rust 中文社区共发表日报 326 篇,累计阅读数十万次,涵盖 Rust 各个方面,详情可查看:https://rustcc.cn/section?id=f4703117-7e6b-4caf-aa22-a3ad3db6898f
- 社区的张老师投身 Rust 界多年,他在 2021 年发布了《Rust 编码规范》,参与商用 Rust 项目落地,创办《Rust 精选》,筹备《Rust China Conf 2021》大会,并创建中文社群,组织线上沙龙。与此同时还完成了诸多图书和课程工作,为 Rust 的发展和推广起到了不可磨灭的作用。详情可查看:https://mp.weixin.qq.com/s/eBYlvokJ5Q-Up87OP7qVUw
- 2021 年 6 月 3 日,RustSBI 在 GitHub 成立组织,RustSBI 是 RISC-V 平台下的引导程序实现,它完全由 Rust 编写,并已经被录入 RISC-V SBI 国际标准。来自社区的维护者洛佳表示,“RustSBI 可以完成硬件到硬件的兼容性,从而延长硬件的生命周期,降低管理和迭代更新成本。”详情可查看:https://github.com/rustsbi/rustsbi
Rust嵌入式工作组2021年总结
来自社区的张汉东老师对文章进行了总结:
- 树莓派 2021 发布首款 RP2040 微控制器中有两个 Cortex M0 内核。这让工作组的成员开始思考,在多核微控制器下该如何提供安全性,由此有了 rp-rs 组织。
- Espressif (乐鑫)正式雇佣 mabez 针对 eso 芯片开发 Rust 支持:esp-rs
- 其他平台也逐渐开始支持 Rust,包括:Atmel ARM SAM-D 和 SAM-E、Atmel AVR、NXP ARM iMX. RT 微控制器、ARM nRF51、52和 9160 蓝牙/LTE 设备、RISC-V、树莓派、STM32 等。
- 嵌入式 Rust 生态得到长足发展:嵌入式并发框架已经 1.0 、嵌入式异步框架正在大力开发且支持 STM32,nRF 和 RP2040平台,并且还深深影响着 Rust 异步的改进、嵌入式开发和调试工具又发布了新的探针工具、嵌入式 smoltcpTCP/IP 栈发布了新版本、嵌入式图形库 Matrix 发布了新版本、新的嵌入式实时 OS Hubirs 开源。
- 嵌入式工作组自身维护的项目在这一年也是大力开发和维护中。
链接:https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/
GitHub:https://github.com/rust-embedded/wg
另外,也有一些新的创业公司,比如这个专注于 GUI 的 Sixty FPS,该 GUI 工具库面向全平台,目标之一是取代 Qt。2022 年他们可能要长足支持嵌入式。
链接:https://sixtyfps.io/blog/2021-in-review.html
GitHub:https://github.com/sixtyfpsui/sixtyfps
Rust写Python扩展的9个原则
- 创建一个同时包含 Rust 和 Python 项目的仓库。
- 使用 maturin & PyO3 在 Rust 中创建 Python 可调用的翻译器函数。
- 让 Rust 翻译器函数调用 “好的” Rust 函数。
- 在 Python 中预分配内存。
- 将好的 Rust 错误处理转换为好的 Python 错误处理。
- 使用 Rayon 和
ndarray::parallel
的多线程,返回任何错误。 - 允许用户控制并行线程数。
- 将好的动态类型 Python 函数转换为好的 Rust 通用函数。
- 同时创建 Rust 和 Python 的测试。
链接:https://towardsdatascience.com/nine-rules-for-writing-python-extensions-in-rust-d35ea3a4ec29
Superstruct:处理版本化数据
可以使用单个定义来定义多个不同版本的 Struct,并生成一个枚举来统一它们:
use superstruct::superstruct;
# V1
pub struct Request {
start: u16,
}
# V2
pub struct Request {
start: u16,
end: u16,
}
# Superstruct
#[superstruct(variants(V1, V2))]
pub struct Request {
pub start: u16,
#[superstruct(only(V2))]
pub end: u16,
}
#[cfg_attr(test, test)]
fn main() {
let r1 = Request::V1(RequestV1 { start: 0 });
let r2 = Request::V2(RequestV2 { start: 0, end: 10 });
assert_eq!(r1.start(), r2.start());
assert_eq!(r1.end(), Err(()));
assert_eq!(r2.end(), Ok(&10));
}
文档:https://sigp.github.io/superstruct/intro.html
面向对象的Query
支持查询、插入、更新和删除。以查询为例,使用方法如下:
use qoo::base::*;
use qoo::select::*;
fn main() {
let select_query =
SelectBuilder::select(["col0", "col1"].to_vec())
.columns(["col2", "col3"].to_vec())
.from("table1")
.wheres("id >= 100");
assert_eq!(
select_query.to_sql(),
"select col0, col1, col2, col3 from table1 where id >= 100".to_string()
);
}
GitHub:https://github.com/ddddddO/qoo
了解原子和内存排序的工作原理
作者使用一个带有简单单元测试的 repo 增强对这个主题的理解。其中,包含了一个简单例子和一个复杂例子。
GitHub:https://github.com/blasrodri/atomic-story
egui 0.16.0 发布
本次发布的主要内容:
- Context menus
- Rich Text (colors, underline, ...) in all widgets
- Bar Charts and box plots
- 阅读原文 https://github.com/emilk/egui/blob/master/CHANGELOG.md
Kira, 一个用于游戏开发的音频库
Kira 是用 Rust 编写的用于游戏开发的音频库,并且具有不太常见的功能,例如平滑的补间参数和声音的精确定时,作者正在用它来制作一个动态生成的音乐游戏。
- Repo github.com/tesselode/kira
一个用于有序集合的比较器 pre-RFC
- Read More https://internals.rust-lang.org/t/pre-rfc-add-comparator-api-for-ordered-collections/15889
From 日报小组 冬杰 长琴
社区学习交流平台订阅:
评论区
写评论还没有评论