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

时间:2016-03-24 11:00:37

标签: c++ perl serialization deserialization

我有一个perl脚本,它生成一个非常大的数据结构(它以数组引用数组的形式开始)。然后使用一些奇怪的home-brew序列化方案将其写入文本文件。

来自文本文件的数据作为值存储在键值存储db中。

然后,c ++文件检索数据并对其进行反序列化(进入散列映射,尽管可能对此数据的结构方式有灵活性)。

我感兴趣的是找到在perl和c ++之间共享数据结构的好方法(类似于Storable,但这意味着perl-> perl not perl-> C ++)。目前的方法很难维护,可能没有最佳性能。

最重要的因素是反序列化的速度,以及序列化结构的大小。任何人都知道可以做到这一点的事情吗?

2 个答案:

答案 0 :(得分:3)

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

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

  • JSON - 适用于数组和哈希(键值)。
  • YAML - 非常适合'配置文件'样式数据(但扩展方式类似于JSON)
  • 如果必须,XML - 但请记住,XML是设计的用于元数据文档,因此IMO不适用于大多数使用它的应用程序对于。

作为标准,他们已经记录了格式化,并且解析器可以广泛使用。如果这是您想要的路线,那么实施您自己的并不是太难。只要确保你遵守规范,你就会很好。

注意 - 因为XML和JSON(我认为YAML?)是递归的,所以您可以解析为流,而不是独立的对象。 (当您在JSON中点击“关闭括号”或在XML中点击“关闭标记”时,陷阱,处理和丢弃)。

答案 1 :(得分:-1)

轻松的工作。

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

请看:     https://github.com/tlqtangok/perlcpp

这里有一个简短的例子:

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