Rust 实现光线追踪器
一个非常有趣的项目,可以熟悉优秀的 Rust 资源,非常易于理解的逐步介绍光线追踪原理的指南。
链接,https://clayto.com/2021/02/shaking-off-the-rust-1-ray-tracing-in-one-weekend/
prae,类型包装器库
prae,提供了一个方便的宏,允许生成类型包装器。
让我们创建一个用户名(Username)类型。它将是非空字符串(String)的包装器:
prae::define!(pub Username: String ensure |u| !u.is_empty());
// We can't create an invalid username.
assert!(Username::new("").is_err());
// But we can create a valid one!
let mut u = Username::new("valid name").unwrap();
assert_eq!(u.get(), "valid name");
// We can mutate it:
assert!(u.try_mutate(|u| *u = "new name".to_owned()).is_ok());
assert_eq!(u.get(), "new name"); // our name has changed!
// But we can't make it invalid:
assert!(u.try_mutate(|u| *u = "".to_owned()).is_err());
assert_eq!(u.get(), "new name"); // our name hasn't changed!
// Let's try this...
assert!(Username::new(" ").is_ok()); // looks kind of invalid though :(
Github链接,https://github.com/teenjuna/prae
tiling,构建正多边形库
示例如下:创建一个空的 tiling 模型。
let (width, height, scale) = (1024, 1024, 128.0);
let mut model = Model::new(width, height, scale);
在原点放置一个多边形,增加了一个六边形。
let stroke = Color::new(242, 60, 60)?;
let fill_hexagon = Color::new(242, 194, 106)?;
model.add(Shape::new(6, fill_hexagon, stroke)?);
Github链接,https://github.com/jonasrmichel/tiling
【视频】1Password 开发者炉边谈话:深入了解 Rust 中的 Async & Futures
1Password 客户端应用程序 Rust 团队的高级开发人员谈到:几个月前,在对 Rust 中的 Async 和 Futures 进行了基础知识的第一次深入研究,试图揭开帷幕并解释它们是如何组合在一起的,尤其是着眼于那些主要用于 Promise 的开发人员感到惊讶的事情。
视频链接,https://www.youtube.com/watch?v=HrxwOUVzyDU
社区学习交流平台订阅:
- Rustcc论坛: 支持rss
- 微信公众号:Rust语言中文社区