我有一个即将进行的项目,其中的核心要求是改变方法在运行时的工作方式。请注意,我不是在谈论更高级别的 OO 概念,例如“将一种方法与另一种方法相结合”,尽管实际效果是相似的。
我追求的关键属性是:
我必须能够以添加新表达式、删除现有表达式或修改其中发生的任何表达式的方式修改方法。
修改方法后,对该方法的后续调用将调用新的操作序列。 (或者,如果该语言绑定(bind)方法而不是每次都进行评估,请为我提供一种解除绑定(bind)/重新绑定(bind)新方法的方法。)
理想情况下,我想操作语言的原子单元(例如,“在对象
bar
上调用方法foo
") 而不是直接汇编(例如,"将这三个参数弹出到堆栈中")。换句话说,我希望能够高度确信我构造的操作在语言中具有语义意义。但我会尽我所能。
如果您不确定候选语言是否符合这些标准,这里有一个简单的试金石:
Can you write another method called
clean
which:
accepts a method
m
as inputreturns another method
m2
that performs the same operations asm
such that
m2
is identical tom
, but doesn't contain any calls to the print-to-standard-out method in your language (puts, System.Console.WriteLn, println, etc.)?
我现在想做一些初步研究,找出最强的候选者。拥有一个庞大、活跃的社区对我来说与实现我想做的事情的实用性一样重要。我知道这里可能有一些未伪造的领域,因为直接操作字节码通常不是需要公开的操作。
我有哪些选择?如果可能,您能否提供一个使用您推荐的一种或多种语言的玩具示例,或者向我指出最近的示例?
更新:我这样做的原因是我想编写一个能够在运行时修改自身以响应新信息的程序。这种修改超越了单纯的参数或可配置数据,而是成熟的、进化的行为变化。 (不,我不是在写病毒。;))
最佳答案
好吧,您始终可以使用 .NET 和表达式库来构建表达式。我认为这真的是你最好的选择,因为你可以在内存中建立命令的表示,并且有很好的库支持操作、遍历等。
关于programming-languages - 哪些编程语言可以让我操纵方法中的指令序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4959023/