ITPub博客

首页 > 数据库 > 数据库开发技术 > 【Rust日报】2022-07-17 用Rust写Linux内核

【Rust日报】2022-07-17 用Rust写Linux内核

原创 数据库开发技术 作者:Rust语言中文社区 时间:2022-07-17 23:38:56 0 删除 编辑

用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 的轻量级通用池库,专注于简单、性能和稳固的灾难恢复。使用示例:
#[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 语言中文社区

原文作者:Rust语言中文社区;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2020-06-11

  • 博文量
    1769
  • 访问量
    718769