用Rust写Linux内核
Rust 作为第二语言被引入 Linux 内核,虽然目前是实验性质,但对每一个 Rustaceans 来说都是一件值得关注的大事。本文通过编写一个简单的字符设备驱动,带领我们了解如何通过 Rust 为 Linux 编写内核模块。
文章地址:https://mp.weixin.qq.com/s/m2eZ0lEzQHjrNVC6YCC_IA
Rustlings 5.0.0 发布
可能是迄今为止最大的更新。此版本增加了 12 个新练习,对现有练习进行了大量小改进,重新安排了大部分练习并删除了一些不适合此项目的练习。未来可能为智能指针提供更好的练习。
详细更新日志:https://github.com/rust-lang/rustlings/blob/main/CHANGELOG.md#500-2022-07-16
tere:终端文件浏览
终端文件浏览器,是 cd ls 的快速替代方案。它只做一件事:使用 TUI 高效地导航到文件夹,然后在退出时打印该文件夹路径。
GitHub:https://github.com/mgunyho/tere
kanata:键盘定制
跨平台键盘定制。这是一个适用于 Linux 和 Windows 的软件键盘重映射器。功能概述:
- 跨平台宜人的配置文件。
- 多层按键功能。
- 高级按键定制。
设计文档:https://github.com/jtroo/kanata/blob/main/docs/design.md
GitHub:https://github.com/jtroo/kanata
boson-lang:用Rust写个语言
Rust 写的解释型、动态类型、多线程编程语言。特点包括:
- 多种数据类型:字符、整数、浮点数、字符串、数组、哈希表、字节和缓冲区。
- 算术和逻辑运算。
- 变量和常量。
- 控制和循环结构。
- 函数和 Lambda 表达式。
- 线程和多线程。
- Shell 运算符用于在语言语句中运行 shell 命令。
- 一些基本的内置功能。
- 迭代器(伪迭代器)。
- 字节码生成、序列化和加载。
GitHub:https://github.com/Narasimha1997/boson-lang
cargo-unused-features:移除启用未用的feature
查找可能未使用的已启用 feature 标记并移除它们。使用步骤:
- 分析启用的未使用 feature:
unused-features analyze
- 生成 HTML 报告(可选):
unused-features build-report --input "C:/some_path/report.json"
- 应用删除建议:
unused-features prune --input "C:/some_path/report.json"
GitHub:https://github.com/TimonPost/cargo-unused-features
whitepool:通用池库
WhitePool 是 Rust Tokio 的轻量级通用池库,专注于简单、性能和稳固的灾难恢复。使用示例:
代码语言:javascript复制#[tokio::main]async fn main() { let pool_size = 7; let max_overflow = 4; // 使用 pool channel 创建一个通讯的 session
let session = Pool::new(pool_size,
max_overflow,
|| {Box::pin(async move { // tokio_postgres 创建连接
let (client, connection) = tokio_postgres::connect("host=localhost user=postgres", NoTls)
.await.unwrap();
tokio::spawn(async move { if let Err(e) = connection.await {
eprintln!("connection error: {}", e);
}
});
client
})}).await.run_service();
// session.clone() 内部调用 channel mpsc::Sender::Clone
process(session.clone()).await;
process(session.clone()).await;
process(session.clone()).await; // 等待直到所有的 pending 被处理,然后关闭
session.safe_shutdown().await
tokio::time::sleep(Duration::from_secs(100)).await;
}pub async fn process(session: Session<Client>) { // 检验来自 Pool 的资源
if let Ok(mut client) = session.block_checkout().await { // ============== start ===================
let _rows = client
.get()
.query("SELECT $1::TEXT", &[&"hello world"])
.await.unwrap(); // ============== end ===================
// 所有job完成后调用 checkin
let _ = session.checkin(client).await; // 或者,如果销毁资源,调用
// session.destroyed(resource).await;
}
}
GitHub:https://github.com/Rustixir/whitepool
From 日报小组 长琴
社区学习交流平台订阅:
- Rustcc 论坛:支持 rss
- 微信公众号:Rust 语言中文社区