我的要求是将代码更新无缝热部署到正在运行的服务,而不会丢失当前状态,包括收集数据。有没有可以用来开发这种解决方案的c ++框架?
答案 0 :(得分:2)
您可能应该阅读dynamic software updating上的一些研究论文,例如在Kitsune(您可能会使用)
关于更新call stack(以及局部变量中的实例)存在一个主要问题;另请阅读continuations;并且您可能有一些特殊情况(如果您的应用程序像大多数GUI应用程序一样是事件循环驱动的,您可能希望更新事件处理程序的外部代码)。
您当然应该在设计的早期考虑动态软件更新。也许来自garbage collection&的一些术语和概念。 persistence& serialization技术是相关的。
您的要求(将代码更新无缝热部署到正在运行的服务而不会丢失当前状态) 非常难并且需要批次工作 (可能是几年)和仍然是一个困难的&有趣的研究课题(绝对是一个很好的博士学位)。
您可能希望使用自己的meta-programming技术,这些技术会由您自己的代码生成器生成大多数相关的C +++支持代码。
如果您已经拥有重要的代码库,可以考虑使用GCC自定义最近的MELT编译器(例如,查询编译器的内部表示并从中生成一些代码) - 但即使这意味着很多工作 -
PS。编写比C ++更好的东西,比如Erlang或Common Lisp,可以减少你的目标。