我正在实施跨平台(Mac OS X,Windows和Linux)应用程序,该应用程序将对财务数据进行大量CPU密集型分析.由于速度原因,大部分分析引擎将使用C++编写,用户可访问的脚本引擎与C++测试引擎连接.我希望随着时间的推移编写几个脚本前端来模拟现有大型用户群的其他流行软件.第一个前端将是一个类似VisualBasic的脚本语言.
我认为LLVM可以满足我的需求.由于数据量庞大,性能非常重要; 运行一次测试以获得答案可能需要数小时或数天.我相信使用LLVM还可以让我使用单个后端解决方案,同时我会为不同风格的脚本语言实现不同的前端.
测试引擎本身将与接口分离,测试甚至将在单独的过程中进行,进度和结果将报告给测试管理界面.测试将包含与测试引擎代码集成的脚本代码.
在我之前编写的类似商业测试系统的实现中,我构建了一个快速解释器,它可以轻松地与测试库连接,因为它是用C++编写的,并直接链接到测试引擎库.从脚本代码到测试库对象的回调涉及在具有显着开销的格式之间进行转换.
我想象一下,使用LLVM,我可以直接将回调实现到C++中,这样我就可以使脚本代码的工作方式几乎就像用C++编写的那样.同样,如果所有代码都编译为LLVM字节码格式,似乎LLVM优化器可以跨脚本语言和用C++编写的测试引擎代码之间的边界进行优化.
我不想每次都要编译测试引擎.理想情况下,我想JIT只编译脚本代码.对于小型测试,我会跳过一些优化过程,而对于大型测试,我会在链接期间执行完全优化.
这可能吗?我可以将测试引擎预编译为.o目标文件或.a库文件,然后使用JIT链接脚本代码吗?
最后,理想情况下,我希望脚本代码将特定方法实现为特定C++类的子类.因此,C++测试引擎只能看到C++对象,而JIT设置代码编译的脚本代码实现了对象的一些方法.似乎如果我使用正确的名称修改算法,那么将脚本语言的LLVM生成设置为看起来像C++方法调用相对容易,然后可以将其链接到测试引擎中.
因此,链接阶段将进入两个方向,从脚本语言调用到测试引擎对象以检索定价信息和测试状态信息,并从测试引擎调用某些特定C++对象的方法,其中代码不是从C++提供的,而是来自脚本语言.
综上所述:
1)我可以链接预编译(.bc,.o或.a)文件作为JIT编译,代码生成过程的一部分吗?
2)我可以使用上面1)中的过程链接代码,这样我就可以创建代码,就好像它都是用C++编写的一样吗?
小智 14