在铁锈中使用宏魔术的整个“我的世界”协议

2020-10-17 06:41:25

在过去的三周里,我一直在做这件事:在Rust中实现“我的世界”多人网络协议。我希望将线路上的字节反序列化为结构,并将结构序列化为字节。

我试过用其他语言实现这个功能,但是从来没有一种语言足够强大,可以在3周内完成这个项目。

级别1//相信我,这是一些尖端的狗屎//我绝对不会使用单元测试生成代码。

1级伟大的工作顺便说一句。我还是个生疏的新手,但到目前为止我真的很喜欢它的语言。

第2级,谢谢!是的,实际上我做完这个后给羽毛社区的一些人发了信息。他们有一些非常棒的过程性宏用来从JSON文件(项/块/其他数据)生成我还没有实现的东西,而且他们采用了不同的方法来定义协议。

他们使用Ron将整个事情描述为数据,然后实现一些可以读取该描述并充当协议的东西。我对他们的代码的解释可能是大错特错,但这是我最好的总结。这是一项非常酷的技术。我只是对如何做有不同的看法。无论哪种方式,他们的代码都非常酷,而且他们做的事情比我多得多:p。

级别1的https://crates.io/crates/zerocopy也非常适合声明性解析,而且它也是零拷贝的。我相信至少有4个板条箱从读取器而不是切片构造结构。

第2层我从来没有见过这个板条箱,所以谢谢!这看起来非常适合添加自我开始这个项目以来一直推迟的性能增强功能。

级别1我记得我试着用Rust编写了一个基本的“我的世界”服务器,虽然我得到了一些基本的握手工作,但我实际上从来没有达到发送块数据的地步(NBT解析是一个兔子洞,我意识到我不想下去哈哈)。

是否有可能将协议机箱修改为支持#![NO_STD](可能带有alloc)?我一直想尝试编写一个运行在ARM/AVR内核上的嵌入式Rust服务器,以制作类似于CNLohr的Worlds Minimum Mincraft Server的东西,尽管没有1kb的RAM限制;),我一直想尝试编写一个运行在ARM/AVR内核上的嵌入式Rust服务器,以制作类似于CNLohr的Worlds Mincraft Server的东西。)。

现在2级了,这是个很酷的主意!我还没有尝试用#![no_std]来编写代码,但是mcproto-rs实际上是要尽可能好地实现类型,而不是其他的。所以这正是我应该做的事情!

我有几个使用VEC作为字段的情况,所以我想这需要一些考虑,但我非常肯定其他STD代码可能会被删除,并用一些内联内容代替。

第二级我也写了一个玩具服务器,我已经登录到天盒了。NBT并不是太糟糕,但实际的区块数据是完全不同的故事,这是我完全放弃希望的地方。

一级令人惊叹!我现在已经试着让自己实现一个协议六次了,但是我总是半途而废。

第2级,这也是我过去的经验,我尝试过:围棋,水晶,药剂,Clojure,Java(如果你仔细想想,这有点傻),可能还有其他我记不起来的东西。我常常无法通过握手或最初的几个数据包。

铁锈是独一无二的,它是如何使这些东西成为可能的,因为它的强大的功能集。使用宏、枚举、Rust的泛型,以及一些奇妙的语法-糖类……。你真的可以很快完成很多事情。

2级谢谢你,我马上就会做这个改变,我不知道!