其他分享
首页 > 其他分享> > 【Rust日报】2020-08-13 关于群集(Bevy)引擎ECS框架中system的语法糖是怎么

【Rust日报】2020-08-13 关于群集(Bevy)引擎ECS框架中system的语法糖是怎么

作者:互联网

Learn Wgpu 系列简化了之前Instancing的教程

作者表示之前的Instancing部分写的太过繁杂,作者喜欢展示各种不同的技术导致之前该章节与之前的章节相比显得脱节,这次更新简化了该教程。教程地址:https://sotrh.github.io/learn-wgpu/beginner/tutorial7-instancing/#instancing

关于群集(Bevy)引擎ECS框架中system的语法糖是怎么实现的

群集(Bevy)引擎中的system就是普通的Rust函数,这样的设计及其符合人体工程学,就像作者本人在群集(Bevy)引擎的介绍中说的那样,目前找不到比群集引擎更符合人体工程学的ECS框架设计了。推特上有人简单分析了一下群集引擎中这部分代码的语法糖是怎么实现的,考虑到不少小伙伴并不能够随时访问推特,在这里我把大概意思搬运过来。system作为普通的Rust函数,它的参数也就代表了需要访问的那些组件的查询。群集提供的主要示例非常引人注目,系统就是函数,组件就是结构体,你不需要实现额外的trait,就能够让ECS框架正常运作。

use bevy::prelude::*;
struct Velocity(f32);struct Position(f32);// setup这个函数就是一个系统// 这个系统把由Postion和Velocity组件构建的实体spawn到了commands缓冲区内fn setup(mut commands:Commands) {    commands      .spawn((Position(0.0),Velocity(1.0),))      .spawn((Position(1.0),Velocity(2.0),));}// 该系统的参数就是我们要查询的组件构成的实体fn movement(position:Mut<Position>,velocity:&Velocity) {    position.0 += velocity.0;}// 这是应用的入口,希望你把上面写好的系统注册到要运行的App中fn main() {    App::build()      .add_startup_system(setup.system())      .add_system(movement.system())      .run();}

就像上面的示例一样,只要按照一定的规则写出函数,在App的构建模式中调用.system()方法就可以把函数变成系统。一个普通的Rust函数在调用.system()这个方法之后,将被转换为一个Box<dyn System>,对于群集支持的两种系统,采用IntoForEachSystemIntoQuerySystem这两个trait进行转换。

// 具体代码可以去群集的文档里看,这里只举例了IntoQuerySystem这个trait
pub trait IntoQuerySystem<Commands,R,Q> {    fn system(self) -> Box<dyn System>;}

有了trait之后只需要把trait实现给我们可能会调用的函数,一个一个函数的去实现肯定是不可能的,翻看群集的这部分源码能够看到大量的使用了宏:具体的代码可以去看群集的源码,总结来说,群集实现的这种及其符合人体工程学的ECS架构,就是基于宏加上trait来实现的。宏的部分十分值得仔细研究,推特原文作者也是正在研究其中的东西,截至日报更新时还没有新的成果,后续可以直接去关注该条推特。推文链接:https://twitter.com/yaahc_/status/1293567953875505152?s=20

Rust写数据可视化的一个小教程

该文用到了plotly库,是一个可以动手实验的小教程。教程原文:https://shahinrostami.com/posts/programming/rust-notebooks/box-plots-at-the-olympics/

OrbTk 0.3.1-alpha3发布了

之前关注过Redox的应该知道OrbTk是他们团队给该操作系统设计的Gui库,现在这个库在crates.io发布了最新的版本,相较于之前性能更好了,也有了新的主题切换引擎可以选择。还更新了三种UI组件(ProgressBar,NumericBox,TabWidget)。Read More:https://github.com/redox-os/orbtk/releases/tag/0.3.1-alpha3

“Rust没有稳定的ABI”

作者见过GNOME的用户(通常是在C库上工作了很长时间的人)表达以下问题:

  1. 编译的Rust代码没有稳定的ABI(应用程序二进制接口)。
  2. 因此,我们不能使用传统的Linux发行版共享库。
  3. 同时,Rust还将其整个标准库与它所编译的每个二进制文件捆绑在一起,这使得Rust构建的库非常庞大。

作者是那种认为大部分基础设施都应该用Rust重写的人,所以这些问题,也是作者本人非常关注的事。因此作者写了一篇关于这个问题文章。Read More:https://people.gnome.org/~federico/blog/rust-stable-abi.html

docs.rs 已经更新了文档覆盖功能

docs.rs更新了文档覆盖功能

关于构建者模式的一个简短介绍

一个关于构建者模式的简短介绍。以及提供了三个实际项目中的用例。Read More:https://matklad.github.io/2020/08/12/who-builds-the-builder.html

This Week in Rust

每周官方都会更新的This Week in Rust又更新了。这已经是第351期了。基本上最近有关Rust的动向里面都收集了,个人一直比较关注的是Tooling类的动向吧,rust-analyzer越来越好用了。其他动向日报基本都涉及过了,这里不再提及,主要说两个,一个是每月都会更新一次的Rust GameDev,以及最近才更新的区块链相关动向。感兴趣的可以直接下面的链接到文章。


标签:Bevy,13,函数,群集,trait,08,system,https,Rust
来源: https://blog.51cto.com/u_15127605/2762840