Amethyst游戏引擎的最新进展
开发团队:
- 组建核心团队,负责整体管理和方向。
- 引入新的贡献者团队,这些团队专注于引擎的特定领域,并授权写入权限。
- 引入活跃策略。如果团队中有人在6个月内处于非活跃状态,将会被自动剔除团队。
- 现在有四名活跃的成员。
引擎核心:
- 基于UDP协议的net-dev正在取得进展,它会独立于引擎之外,但会被用于引擎中的高级API。这意外着你可以独立使用net-dev库。
- 3D渲染器正在完全重写,为了支持现代的渲染技术(Vulkan/Metal/DirectX12后端、VR等),正在招募相关经验的贡献者
- 正在设计和原型化支持高级部署体系结构的新的资源管道,有助于集成专业级的工作流到引擎中。(使用构建时和部署时配置来节省运行时的计算负担),并减少开发人员和艺术家的资源管理负担。希望通过引擎实现高度可扩展的开发流程,即使在大型商业游戏上也是如此。
- 实验性的Amethyst editor 发布,用于创建游戏原型
- 下一步将推出0.9版本,该版本将助力于2D游戏开发人员
const fn编译时SUBLEQ解释器
作者通过实现一个SUBLEQ解释器来测试const fn最近稳定的最小化子集mini-const-fn的可能性。
SUBLEQ是一种单指令集计算机,由其唯一指令SUbtract和Branch(如果小于或等于0的分支)组成。
指令 subleq a, b, c 将会执行 mem[b] = mem[b] - mem[a]; if mem[b] <= 0 { goto c; }
,也就是,减并且小于等于0跳转,并且该指令是图灵完备的。其中a、b、c都是地址,mem[b] = mem[b] - mem[a];
求减法,后面的分支进行控制挑战,可以实现通用的计算。
wiki: https://en.wikipedia.org/wiki/One_instruction_set_computer
当前Rust稳定的const-fn最小子集,包含的内容比较少,比如,包括算术运算符,结构/元组/数组创建和访问。 不允许任何种类的控制流构造,如if,match,while,for或loop。
在实现过程中得到如下事实:
- const fn中仅仅允许使用生命周期和Sized作为泛型限定,比如还不能指定
T: Copy
- 函数指针在const fn中是 unstable状态
- const fn目前还不支持let绑定和重新分配可变变量
- 循环可以通过递归调用const fn来实现
const fn count(i: i32) -> i32 { count(i+1) } 比如实现无限的计数循环,但不能指定分支条件。最终的解决方案是,手动展开循环。
结论:
const fn的最小子集是否图灵完备?
答案是:
- 是的。因为可以用它实现图灵完备的SUBLEQ
- 不是。 只能执行有限数量的迭代。
- 也许。找到一种方式可以从循环或递归中提前中止(即使找到了中止的方法,仍然只有96次迭代的最大值,因为const fn求值器不允许超过96个栈帧)
一个有趣的事实
subleq函数可以看做一个不动点迭代器(Fixed Point iterator)。
免费书籍推荐:CODE ARTISTRY BOOK
副标题:A Practical Guide To Rust 卷1
继续讨论Rust中的2D图形
这是「我想要一个2D图形Crate 」文章相关的后续讨论贴,该文作者总结了此次讨论中的几个具体的主题。
评论区
写评论还没有评论