当前位置 : 主页 > 编程语言 > java >

【Rust日报】2022-01-02 - Rust在嵌入式大有可为

来源:互联网 收集:自由互联 发布时间:2022-06-23
Rust中文视界2021年总结 Rust 中文社区一直在不断发展,持续地向外输出: 2021 年,Rust 中文社区共发表日报 326 篇,累计阅读数十万次,涵盖 Rust 各个方面,详情可查看:https://rustcc.cn/

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


    社区学习交流平台订阅:

    • Rustcc 论坛: 支持 rss
    • 微信公众号:Rust语言中文社区


    网友评论