Bevy 诞生三周年 🎉
Bevy在3年前发布了0.1版本,重新激发了Rust游戏引擎的开发。
以下是我对 Bevy 0.11 版本的一些零散想法,以庆祝其三周年。在这个版本中,Bevy 已经拥有了必要的功能,如资源加载、渲染、运行游戏逻辑等,当然,当前和一个连贯的、高效的游戏引擎之间的差距还是巨大的,我认为这就像是编程语言的特性和它们的库生态系统、社区、工具等方面的区别。
原文给了很多例子,推荐大家去原文查看!
ReadMore: https://trent.kiwi/bevy-three-years
使用 FuturesUnordered 处理多个 Future
在本文中,我们将探讨一个强大而高效的类型 futures::stream::FuturesUnordered
,它可以同时处理多个异步任务并以非阻塞的方式轮询多个任务,然后处理当任务完成时获取到的结果。
use futures::stream::FuturesUnordered;
use futures::StreamExt;
use std::pin::Pin;
use std::future::Future;
#[tokio::main]
async fn main() {
// Create a FuturesUnordered struct with the same type for all futures: Box<dyn Future<Output = String>>.
let mut tasks = FuturesUnordered::<Pin<Box<dyn Future<Output = String>>>>::new();
// Use Box::pin to create a pinned, heap-allocated version of each future.
// This ensures that the memory location of the future does not change once it starts executing.
tasks.push(Box::pin(task_one()));
tasks.push(Box::pin(task_two()));
tasks.push(Box::pin(task_three()));
while let Some(result) = tasks.next().await {
println!("{}", result);
}
}
QuickDiv 基于libdivide 的快速除法和取模
QuickDiv 是一个Rust包,基于libdivide C/C++库,允许您通过相同的除数加速重复的除法和取模运算。在大多数硬件上,整数除法操作的执行时间比乘法和加法等操作要长。因此编译器通常通过将除以常数的操作替换为更快速的移位、乘法和加法序列来进行优化。本软件包允许您应用类似的算法来优化在运行时才能确定的值的除法操作。
use quickdiv::DivisorU64;
fn is_quadratic_residue(q: u64, modulus: u64) -> bool {
// Initializing a divisor is more expensive than a single
// unoptimized division, to gain a benefit you must divide
// multiple times by the same divisor.
let modulus = DivisorU64::new(modulus);
// The original value can be recovered by using ::get().
for x in (0..modulus.get()) {
// A divisor can be used as the second operand with
// the / and % operators.
if (x * x) % modulus == q {
return true;
}
}
false
}
assert!(is_quadratic_residue(152, 169));
assert!(!is_quadratic_residue(51, 111));
ReadMore: https://github.com/dtrifuno/quickdiv
From 日报小组 Koalr
社区学习交流平台订阅:
评论区
写评论还没有评论