在运行时转换应用程序而不降低应用程序

时间:2013-12-27 08:15:04

标签: dynamic runtime metaprogramming

我的问题陈述是 “在运行时转换应用程序时,如果不关闭应用程序实例(不杀死它或停止它),就会改变应用程序。”

哪种框架或编程语言具有此功能。 感谢您的支持。

1 个答案:

答案 0 :(得分:1)

它取决于操作系统和语言。

在Linux上,一个好的候选者是Common Lisp,尤其是SBCL。或kernel(一种Scheme方言)。

您也可以使用dynamic loading。甚至在Linux上使用dlopen(3)的C或C ++。 (例如,MELT生成C ++代码,将其编译为某些shared object,并dlopen - s ....,所有这些都在运行时)。或者Ocaml的dynlink等等......当然还有Java和其他基于JVM的实现(Scala,Clojure ......)和class loading。另外erlang ......

您可以使用程序生成器库,例如libjitllvm

如果应用程序存在很长时间,您还需要关心garbage collecting旧死代码。

在运行时更改call stack会很困难(例如,将一些调用堆栈帧更改为另一个)。阅读continuationscall/cc

另请阅读homoiconicityapplication checkpointingpersistencemultistage programmingjust-in-time compilationevalgenerative metaprogramming,{{ 3}}和type introspection

BTW,Pitrat的书reflection说明了为什么改变自己的代码是有用的。另见artificial beings: the conscience of a conscious machine运行时模块化仍然是一个研究课题。参见例如his blog,...和Queinnec的this

PS:你仍然可以在这个科目上攻读博士学位。如果你这样做,我会很高兴看到你的!