C++工程师的Rust迁移之道 组合与集成
知乎专栏C++工程师的Rust迁移之道继承与组合部分第二篇更新。
C++中的多态面临的问题
在使用静态派发时,由于完全依赖重载,当编写对应的代码时,很难保证你的类完整实现了调用代码的要求,再加上了深度模版的使用,导致出错信息非常难以阅读;为了解决这个问题C++标准委员会在C++ 20标准中加入了concepts的概念,它可以显式的提出约束,使用的例子可以参见上一篇文章 https://zhuanlan.zhihu.com/p/75755125,而更多的信息,大家可以参见cppreference[2];
在使用动态派发时,由于vptr存在,它会破坏对象本身的内存结构,当你的对象还需要与其他库(特别是C语言编写的库)进行交互的时候,内存结构就会称为一个显著的问题;
由于C++是一个非常成熟的语言,而concept又是在下一个标准中才会加入进来的概念,所以对于静态派发和动态派发的约束是完全不一样的语法,而且对于同样的约束,如果我们需要同时使用静态和动态派发的话,必须写两遍(一遍虚基类,一遍concepts)。
对于上述提到的3个问题,在Rust中有一个统一的解决方案,那就是trait系统, 更多内容请看正文。
grin 一个 MimbleWimble 协议的最小实现
MimbleWimble是一个区块链隐私保护的格式和协议,是一种可以防止区块链泄露个人信息的技术,名字来源于《哈利波特》。grin是MimbleWimble协议的最小实现。
amethyst 面向数据和数据驱动的游戏引擎
amethyst 是一种数据驱动和面向数据的游戏引擎,旨在尽可能快速且可配置,文档写的很详细,下面是由它实现的两个项目:
- Evoli - 3D, ecosystem simulator
- Space Menace - 2D, action platformer
tracing 更新
tracing 是一个框架,用于检测Rust程序以收集基于事件的结构化诊断信息。 跟踪由Tokio项目维护,但不需要使用tokio运行时。instrument 属性提供了一种向函数添加跟踪跨度的简便方法。 使用 instrument 注释的函数将在每次调用函数时创建并输入具有该函数名称的span,并使用fmt::Debug将该函数的参数记录为字段。
Rust 和 Raspberry Pi教程
最近在用 Rust 玩树莓派,找到了一份比较好的Rust + Raspberry Pi教程。
From 日报小组 格朗
日报订阅地址:
独立日报订阅地址:
社区学习交流平台订阅: