c/c++ 做脚本 动态 跨平台 方案 llvm-clang

  llvm-clang 牛的不要不要的,不了解的可以 google下。

  前几年都思考c/c++如果能做脚本运、使用jit方式 编译运行,那c c++可以像java 或者其他脚本语言一样,实现轻松夸平台,;同时能通过记事本修改代码就可以动态修改 添加软件功能。或者反过来说,java、c# python等可以 通过这种jit等方式实现native代码的效率。

   最近项目中需要用到动态策略,而这种策略又需要是无明显规则约束的。开始使用传统的数据库存储规则的方式。但是业务中如果只是一种业务,那可以拆解为配置的 数据。如果是多种业务,那就比较困难了。很难实现统一通用的动态规则。

    于是第一步引入了lua。各个方面来说,它还是不错的。 不过也有不好的地方: 所有接口需要定制导出;语法稍微别扭,不如c系语言的语法自然。当然了 其他的脚本语言 python 更加别扭有甚,什么效率,单线程限制 就不用说了。  为了项目时间,所以简单引入lua。差不多1-2天就搞定了,可以基本实现功能。

    理想状态是 c、c++能动态像脚本一样编辑,并拥有本地代码的高效率。那就是 llvm-clang可以了。普通开发者通过它,可以实现虚拟机,jit等,同时可以轻松实现自己发明编程语言,开发语言的分析补全工具等。实际上,chrome 的网页ppapi插件,就是使用了 这个方案实现了跨平台。正在开发的 webassimble 标准,也是使用类似的方案实现浏览器高效执行web代码,而比js/js-jit 大幅度提高效率。

   当前软件基本实现方案为:

   将程序功能块使用dll方式实现,并提供 lib .h二次开发包。  各种扩展功能块,使用二次开发包接口实现软件功能的扩展。扩展功能块可以使用普通记事本编辑即可。

   主程序读入扩展功能块的 c/cpp文件即可运行新的功能。在读入源文件后,使用clang动态编译为 bc文件,并保存,后期运行便可以不再编译。 llvm的虚拟机jit引擎可以载入bc文件并运行, 就像普通dll文件一样。

   具体的还需要进一步研究下,比如llvm虚拟机运行,是否能安全保证脚本运行可能导致的bug 崩溃等。

   再有,可以对 c、c++添加 垃圾回收功能,这样可以让 c c++简单易用。要能找到使用自动代码预处理的方式自动实现垃圾回收,那就非常理想了。

猜你喜欢

转载自blog.csdn.net/zsyddl2/article/details/80628353