我有一个即将到来的项目,其中一个核心要求是改变方法在运行时的工作方式。请注意,我不是在谈论更高级别的 OO 概念,例如“一种方法与另一种方法的影子”,尽管实际效果是相似的。
我追求的关键属性是:
我必须能够修改方法,以便添加新表达式、删除现有表达式或修改其中发生的任何表达式。
修改方法后,对该方法的后续调用将调用新的操作序列。(或者,如果语言绑定方法而不是每次都评估,请为我提供一种取消绑定/重新绑定新方法的方法。)
理想情况下,我想操作语言的原子单元(例如,“
foo
在对象上调用方法bar
”)而不是直接操作程序集(例如“将这三个参数弹出到堆栈上”)。换句话说,我希望能够高度确信我构造的操作在语言中具有语义意义。但我会拿走我能得到的。
如果您不确定候选语言是否符合这些标准,这里有一个简单的试金石:
你能写另一种方法吗
clean
:
接受一个方法
m
作为输入返回另一个
m2
执行相同操作的方法m
是否
m2
与 相同m
,但不包含对您的语言中的 print-to-standard-out 方法的任何调用(puts、System.Console.WriteLn、println 等)?
我现在想做一些初步研究,找出最强的候选人是什么。拥有一个庞大而活跃的社区对我来说与实现我想做的事情的实用性一样重要。我知道这里可能有一些未伪造的领域,因为直接操作字节码通常不是需要公开的操作。
我有哪些选择?如果可能,您能否提供一个使用您推荐的一种或多种语言的玩具示例,或者指向我最近的一个示例?
更新:我这样做的原因是我想编写一个能够在运行时修改自身以响应新信息的程序。这种修改超越了单纯的参数或可配置数据,而是全面的、进化的行为变化。(不,我不是在写病毒。;))