Programming languages 哪些框架(和相关语言)支持类替换?
我正在写我的硕士论文,主要研究.NET中的AOP,以及其他内容,我还提到,在加载时缺乏对替换类的支持,这是一个重要因素,因为目前没有.NET AOP框架能够执行真正的动态编织——这需要编织类必须扩展Programming languages 哪些框架(和相关语言)支持类替换?,programming-languages,frameworks,aop,classloader,dynamic-class-loaders,Programming Languages,Frameworks,Aop,Classloader,Dynamic Class Loaders,我正在写我的硕士论文,主要研究.NET中的AOP,以及其他内容,我还提到,在加载时缺乏对替换类的支持,这是一个重要因素,因为目前没有.NET AOP框架能够执行真正的动态编织——这需要编织类必须扩展ContextBoundObject或MarshalByRefObject或公开其所有属性接口上的语义 不过,由于ClassFileTransformer,您可以在JVM中使用Java实现这一点: 您可以扩展ClassFileTransformer 您可以订阅类加载事件 在类加载时,重写类并替换它
ContextBoundObject
或MarshalByRefObject
或公开其所有属性接口上的语义
不过,由于ClassFileTransformer
,您可以在JVM中使用Java实现这一点:
- 您可以扩展
ClassFileTransformer
- 您可以订阅类加载事件
- 在类加载时,重写类并替换它
编辑:@ewernli
- 我问的是(2)
- 在C#中,确实可以在运行时发出代码并动态创建新类,但它们是新类,不能替换现有类。我想做的是在加载时转换类,就像在Java中使用
所做的那样ClassFileTransformer
- 关于修改方法的签名:是的,你是对的。我应该提到,在我的例子中,我不想修改类的接口,而是修改它的方法的内容
ClassLoader
动态加载类,使用ClassFileTransformer
进行转换,但不支持真正的类替换
我不确定C#,但我认为可以在运行时发出代码并动态创建新类,这样就可以实现(3)和(2)
真正的类替换主要由动态语言支持,例如Smalltalk、Ruby、我猜Python和其他一些语言。这需要转换类的实例以匹配新形状。如果类发生更改,它们通常将新字段初始化为nil
另外,移植到JVM的动态语言对类加载器进行了大量的攻击,以支持在运行时替换类。对于JRuby,请参阅以获取更多的指针,了解他们现在是如何做的,有什么问题,以及即将推出的invokedynamic
可能会有什么帮助
这在静态类型语言中不提供,因为类型系统的复杂性。如果一个类中的方法签名发生了更改,那么已经加载的其他现有类可能不需要遵守新的方法签名,这是不安全的。但是,在java中,只要签名相同,就可以使用
有人试图将此功能添加到Java和/或静态类型语言中:
- 对类型安全的动态Java类的运行时支持
- 支持应用程序行为的意外动态适应
- 一种Java软件动态更新技术
- 类型系统对动态软件演化的影响
不确定这是否解决了你们最初的问题,但这些指针对你们的论文来说可能很有趣 支持热代码交换,如果您也在寻找建模动态类更新的理论框架,您可以查看该语言(解释)。Objective-C的运行库支持类的动态构造和注册、惰性方法注册和“方法swizzling”通过该方法可以在运行时切换实现。以前的版本支持“类swizzling”,通过它可以在运行时用一个类替换另一个类,但现在改用方法swizzling 是的,谢谢。我经常忘记区分语言和框架。(我知道,这是一个很大的区别)。那很有帮助,谢谢。我会修改这个问题使它更准确。但是,您知道那些已经移植到JVM的其他语言是否利用了它吗?我的意思是:他们提供了任何方法来取代一门课吗?这是一个很好的答案:),谢谢!我编辑了我的问题以回答你的一些观点。谢谢你的资源,它们真的很有用。谢谢:)[愚蠢的15个字符限制,抱怨抱怨]太好了,谢谢你的解释和链接!你们真的在帮我:)