< 返回版块

洋芋 发表于 2021-07-03 21:45

Tags:rust, 日报

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


From 日报小组 洋芋

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页