将文档定义转化为强大类的IDL类似解析器?

6 投票
2 回答
1139 浏览
提问于 2025-04-15 23:58

我在寻找一个类似IDL的翻译工具,或者说其他的工具,它可以把一个像DOM或JSON这样的文档定义转换成类,这些类需要满足以下条件:

  • 可以在同一个应用程序中同时被C++和Python访问
  • 能够把文档的属性显示为整数、浮点数、字符串、二进制数据和复合类型:比如数组、字符串字典(都可以嵌套)(基本上就是JSON的特性)
  • 可以跟踪更改,以便更新编辑界面的视图
  • 提供更改历史,以便进行撤销/重做操作
  • 可以和JSON进行序列化和反序列化(也可以是某种二进制格式)
  • 允许将大数据块保存在磁盘上,只有在需要时才加载部分数据
  • 提供非阻塞的线程安全的读写访问,以便与实时线程交换数据
  • 允许多个编辑器在不同的进程中(甚至在不同的机器上)查看和修改文档

到目前为止,最接近的就是Blender 2.5的DNA/RNA系统,但它并不是一个单独的库,而且文档也很糟糕。

我最想确认的是这样的库是否还不存在,这样我在开始设计和编写这样的工具时,就知道我的时间没有浪费。这个工具应该为编写编辑界面组件提供一个很好的基础。

2 个回答

0

SWIG 可能不能完全满足你的所有需求,但它确实让 C++ 和 Python 之间的连接变得简单很多。

1

ICE 是我能想到的最接近的产品。我不太确定它是否可以把数据序列化到磁盘上,但我想不出为什么不能。问题是它的费用很高。我个人没有和他们谈过许可,但在这个领域,ICE 是我知道的最大玩家。

然后还有 Pyro,这是一个专门为 Python 设计的分布式对象库。

在 Objective-C 中也有分布式对象的概念(不过对于 iPhone/iPad 开发来说不适用,这让我觉得很糟糕)。

还有一些 C++ 的分布式对象库,但大多数都已经不再维护,无法使用(比如 CORBA)。

我可以告诉你,这种技术的需求是非常大的。我最近在研究一些序列化和远程对象的东西,因为现成的解决方案通常非常昂贵。

至于帮助你们内部开发的开源框架,我推荐使用 boost::asio 的 strands 来实现异步线程安全的读写,以及 boost::serialization 来进行序列化。我对 JSON 技术了解不多,但 这个链接 看起来很有趣。

我希望能有一些免费的网络/序列化工具,这样很多项目都能受益。

撰写回答