OS Tutorial Summer of Code
复习 Rust 编程之道: 之前有粗略地度过Rust编程之道,现在可以再复习一下。
开始 Rustling 练习: 目前完成到 move_semantics2
// 使用enum的匿名结构体进行匹配
match message {
Message :: Move { x, y} => self . move_position ( Point { x, y} ) ,
....
}
// 使用 std::cmp::max 进行比较
pub fn bigger ( a : i32 , b : i32 ) -> i32 {
cmp:: max ( a, b)
}
// 错误处理:直接使用 Box<dyn error::Error> 处理
fn read_and_validate ( b : & mut dyn io:: BufRead ) -> Result < PositiveNonzeroInteger , Box < dyn error:: Error > > {
let mut line = String :: new ( ) ;
b. read_line ( & mut line) ?;
......
Ok ( answer)
}
// 迭代器:向特定目标 collect
iterator. collect :: < String > ( )
// 迭代器:可以用来代替循环
pub fn factorial ( num : u64 ) -> u64 {
( 1 ..=num) . fold ( 1 , |acc, x| acc * x)
}
// FromStr 和 .parse<T>()
impl FromStr for Person {
type Err = String ;
fn from_str ( s : & str ) -> Result < Person , Self :: Err > {
....
}
}
"something" . parse <Person >( )
// should_panic 测试
#[ should_panic]
受 MashPlant 大神影响,对编译比较感兴趣,尝试使用 Rust 编写一个编译式的正则表达式引擎,如果时间充足,可以尝试编写 lalr1 生成器。
学校的 OS 实验大体完成。
之前的正则表达式引擎,已经完成了 DFA 的生成(下图为 ([A-Z]*|A[a-z]*)H
的 Dfa)。项目地址
继续进行 Rust 的刷题。感觉想要用 Rust 优雅地刷题还是比较困难的,无法避免地需要使用大量的下标运算,Rust 会检查其是否越界,可能会带来性能损失,而且下标一旦用错了就容易panic,最好想一些办法避免。