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

2022-11-28 15:23:08 浏览数 (1)

用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 语言中文社区

0 人点赞