这是怎么回事?
我们有一个使用OpenCV处理视频图像处理和计算机视觉的 C++ 应用程序,我们将从头开始重写它,需要一些帮助来决定使用哪些技术。更具体地说,我需要有关如何选择我要使用的技术的帮助。
关于应用程序
应用程序的功能分为模块,这些模块按配置 XML 文件定义的顺序调用,也可以在运行时更改,但不能实时更改(即应用程序不需要关闭,但处理将从头开始) . 这些模块在中央数据池中共享数据。
为什么我们要从头开始?
这个应用程序并没有计划像它目前努力的那样动态化,所以它已经成长为一个有缺陷的补丁、宏和变通方法的集合;它现在充满了内存泄漏、不必要的 QT 依赖、QT 和 OpenCV 图像格式之间的缓慢转换以及编译和测试时间增长了太多。
语言选择
原来的代码用的是C++,只是因为最初启动这个项目的人只懂C ++。这可能是一个不错的选择,因为我们需要它尽可能快,但可能有更好的选择来解释应用程序的动态特性。
我们受到 OpenCV 支持的语言的限制(主要是 C++、Java 和 Python;虽然我读过也支持 Ruby、Ch、C# 和任何 JVM 语言)
需要什么
- 速度:我们的目标是实时跟踪。这可能会排除 Python 和 Ruby。
- 按名称进行类实例化:虽然我们的 C++ 宏和类注册系统可以工作,但设计为具有自己的运行时的动态语言会很好。也许是 Objective-C++ 或 Java。
什么是理想的
- 模块/插件/扩展/组件框架:为什么要重新发明轮子,为此使用一个好的框架可以让我们专注于我们的应用程序的特别之处。这里有很多选择。Objective-C 有它的 NSBundles;C++ 有 Boost.Extension、Pluma、DynObj、FxEngine 等库;C有C-Pluff;我什至会说有太多的选择。
- 运行时类加载和重新加载:从开发的角度来看,能够只编译和重新加载一个模块会很有趣。我已经通过 Objective-C 中的代码注入和使用 Java 的反射看到了这一点。
我错过了什么?
我有太多有趣的选择!
这是我需要帮助的地方,根据您在模块化应用程序开发方面的经验,在这种限制下,我应该寻找什么样的语言/框架功能?
我应该对这个项目提出什么问题才能缩小搜索范围?
编辑
我没有注意到 OpenCV 只有 C++ 的 GPU 绑定,所以我坚持使用它。
现在语言是固定的,搜索范围缩小了很多。我可以使用 Objective-C++ 来获得所需的动力(Obj-C 运行时 + 来自 Cocoa/GnuStep/Cocotron 的 NSBundle),这听起来很复杂;或带有框架的 C++。
所以我现在将我的问题缩小到:
- 以跨平台方式与 Objective-C++ 一起使用 NSBundle 是否比听起来更容易?
- 什么 C++ 框架将为我提供热插拔模块?
- 在运行时交换模块的主要原因是能够快速更改代码,运行时编译的 C++会是更好的解决方案吗?
Meta:我研究了如何提出这样的问题,我希望它是可以接受的。