在perl和cpp之间共享数据结构

Sharing data structures between perl and cpp

本文关键字:共享 数据结构 之间 cpp perl      更新时间:2023-10-16

我有一个perl脚本,它生成一个非常大的数据结构(它以数组引用的数组开始)。然后使用一些奇怪的自制串行化方案将其写入一个文本文件。

文本文件中的数据作为值存储在键值存储数据库中。

然后,一个c++文件检索数据,并对其进行反序列化(将其反序列化为哈希映射,尽管在数据的结构方面可能会很灵活)。

我感兴趣的是发现是否有任何好的方法可以在perl和c++之间共享数据结构(类似于Storable,但这是针对perl->perl而不是perl->c++的)。目前的方法维护起来很头疼,而且可能没有最好的性能。

最重要的因素是去序列化的速度,以及按顺序序列化的结构的大小。有人知道什么能起作用吗?

Storable是转储和加载perl数据结构的一种方法。不过,我并不推荐它用于一般用途——它很方便,因为它是核心的一部分,而且易于使用。

但对于多平台(和语言)的可移植性,使用标准的数据表示要好得多。你选择的可能是你在结构中持有的数据类型的问题,但核心竞争者是:

  • JSON-适用于数组和散列(键值)
  • YAML-非常适合"配置文件"风格的数据(但扩展方式类似于JSON)
  • 如果必须的话,XML-但请记住,XML是为带有元数据的文档设计的,因此IMO不适合它所用于的大多数应用程序

作为标准,它们有文档格式,解析器广泛可用。如果这是你想走的路,那么实现自己的目标并不太难。只要确保你遵守规范,你就很好。

请注意,因为XML和JSON(我认为YAML?)是递归的,所以您可以将其解析为流,而不是独立的对象。(在JSON中点击"闭括号"或在XML中点击"关闭标记"时捕获、处理并丢弃)。

简单的工作。

我喜欢perl,也喜欢C/C++。为了充分利用两者,我写了一个github项目来解决这个问题。

请参阅:https://github.com/tlqtangok/perlcpp

这里有一个简短的例子:

P_eval("$a=2;$a=$a**10;"); 
Int("a") ;   // a= 1024