RustSBI组织宣布成立
RustSBI是RISC-V平台下的引导程序实现,它完全由Rust编写,并已经被录入RISC-V SBI国际标准。6月3日,RustSBI已经在GitHub上成立了组织,并提交了它对多个RISC-V平台的支持示例软件包。
RISC-V处理器架构中,存在着定义于操作系统之下的环境,它被称作SBI标准。这个环境除了引导系统启动,还将常驻后台,在内核运行时提供处理器功能。RustSBI就是这样的一种环境,它是一个扩展性较好的库,允许开发者自由地添加需要的功能模块,以支持芯片研发企业、应用厂商和板卡厂商提供自己芯片的SBI支持环境。
根据它的GitHub主页介绍,RustSBI项目组已经根据Mulan-PSL v2协议开源了它对K210和QEMU平台的支持,更多平台如FU540、C906等的支持也在筹划中。RustSBI组织以模块化开发、较好的支持嵌入式Rust生态,期望以这一形式,使厂商无需担忧是否合并到主分支,并鼓励开发者尝试多种多样的设计,来丰富引导程序方面的RISC-V生态环境。
“未来的RISC-V引导程序可能包含很多种可能性,这包括已经用在无盘工作站、安全网络等引导程序中的下载和验证机制,也可用于DIY爱好者的主板诊断。甚至用它做调试器也是可以的,它事实上提供了完全可定制的硬件兼容层,”RustSBI的维护者洛佳这样告诉《Rust日报》,“实践证明,它可以完成硬件到硬件的兼容性,从而延长硬件的生命周期,降低管理和迭代更新成本。”
“RustSBI已经能引导启动rCore等类Unix系统,”维护者继续说,“它是开源开放的,我们期待它被更进一步的被科研、教学和生产界广泛使用。”
RustSBI组织首页:https://github.com/rustsbi
使用Windbg调试非安全Rust代码导致的崩溃
作者在Windows平台写非安全Rust代码的时候遇到一个奔溃:
error: process didn't exit successfully: `target\debug\rustdesk.exe` (exit code: 0xc0000374, STATUS_HEAP_CORRUPTION)
因为这是一个与unsafe的Rust代码相关的分段故障崩溃,很难从控制台消息中得到任何线索,作者便使用了其它工具进行调试,并且记录在了这篇Blog中。
这篇blog的作者是大家最近比较热门的用Rust写的跨平台远程桌面开源软件 RustDesk 的作者。
Read More: https://dev.to/rustdesk/debugging-a-crash-in-unsafe-rust-with-windbg-2b39
tabled 一个易于使用的库,用于打印出漂亮的,由Rust结构体和枚举体所表示的表
用法:
use tabled::{Tabled, table};
#[derive(Tabled)]
struct Language {
name: &'static str,
designed_by: &'static str,
invented_year: usize,
}
let languages = vec![
Language{
name: "C",
designed_by: "Dennis Ritchie",
invented_year: 1972
},
Language{
name: "Rust",
designed_by: "Graydon Hoare",
invented_year: 2010
},
Language{
name: "Go",
designed_by: "Rob Pike",
invented_year: 2009
},
];
let table = table!(&languages);
let expected = "+------+----------------+---------------+\n\
| name | designed_by | invented_year |\n\
+------+----------------+---------------+\n\
| C | Dennis Ritchie | 1972 |\n\
+------+----------------+---------------+\n\
| Rust | Graydon Hoare | 2010 |\n\
+------+----------------+---------------+\n\
| Go | Rob Pike | 2009 |\n\
+------+----------------+---------------+\n";
assert_eq!(expected, table);
同时还支持颜色等功能:
// --features color
let table = table!(
&data,
Style::Psql,
ChangeRing(
Column(..),
vec![
Box::new(|s| { s.red().to_string() }),
Box::new(|s| { s.blue().to_string() }),
Box::new(|s| { s.green().to_string() }),
]
),
);
GitHub: https://github.com/zhiburt/tabled
本周引语
我最近获得了博士学位。在之前的模拟器开发中,我用4种不同的编程语言开发了5个不同的版本。最后选择的版本是完全用安全的Rust语言实现的。它之所以能成为我的选择,其中一部分原因是因为Rust对“安全”有很强的保证。也因此我能够使用Rust将通常的运行时错误转化为编译时错误。在以前使用的开发语言中,这些错误通常需要几天或几周的调试才能得到相对简单的修复。[…] 所以再次感谢你!
– Cem Karan 发表于 rust-internals
Read More:https://this-week-in-rust.org/blog/2021/06/02/this-week-in-rust-393/
中文: https://blog.budshome.com/budshome/rust-guan-fang-zhou-bao-393-qi-(2021-06-02)
From 日报小组 Cupnfish 洛佳
社区学习交流平台订阅:
评论区
写评论还没有评论