首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪些框架(和相关语言)支持类替换?

哪些框架(和相关语言)支持类替换?
EN

Stack Overflow用户
提问于 2010-06-15 08:06:10
回答 4查看 151关注 0票数 2

我正在撰写我的硕士论文,其中涉及.NET中的AOP,我提到在加载时替换类的支持不足,这是一个重要因素,因为目前还没有执行真正动态编织的.NET AOP框架--而不是不强制要求编织类必须扩展ContextBoundObjectMarshalByRefObject,或者在接口上公开它们的所有语义。

但是,多亏了ClassFileTransformer,您可以在JVM中使用Java完成这一任务。

  • 扩展ClassFileTransformer
  • 订阅类加载事件。
  • 在类加载时,重写类并替换它。

所有这些都很好,但是我的项目主管在最后一分钟要求我给他一个框架(和相关语言)的列表,这些框架(和相关语言)支持/不支持类替换。我现在真的没有时间去寻找这个问题:我只做一项肤浅的研究,在我的论文中加入错误的信息,我就不会感到舒服了。

所以我问你,哦,全能的编程社区,你能帮忙吗?当然,我不是要你们自己研究这个。简单地说,如果您确信某个特定的框架支持/不支持这一点,那么就让它作为一个答案。如果你不确定,请别忘了指出。

非常感谢!

编辑:@ewernli

  • 我在问(2)。
  • 在C#中,您确实可以在运行时发出代码并动态创建新类,但是它们是新类,它们不替换现有类。我想做的是在加载时转换类,就像在Java中使用ClassFileTransformer所做的那样。
  • 关于修改一个方法的签名:是的,你是对的。我应该提到,在我的例子中,我不想修改类的接口,而是修改类方法的内容。

你的回答很有帮助。谢谢您:)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-15 08:49:29

您是在询问(1)在运行时真正的类替换,还是(2)在类加载时转换类的工具,还是(3)支持动态类加载的语言?

Java支持用ClassLoader加载动态类,用ClassFileTransformer进行转换,但不支持真正的类替换。

我不确定C#,但我认为您可以在运行时发出代码并动态创建新类,这样您就可以实现(3)甚至可能(2)。

真正的类替换主要是由动态语言支持的,例如Smalltalk、Ruby和其他一些。这需要转换类的实例以匹配新的形状。如果类发生变化,它们通常将新字段初始化为零。

移植到JVM的动态语言AFAIK对ClassLoader进行了广泛的黑客攻击,以支持运行时的类替换。对于JRuby,请参阅第一次体验调用动态以获得更多的指针--它们现在是如何实现的,有什么问题,以及即将到来的invokedynamic可能会有什么帮助。

这不是静态类型语言中提供的,因为类型系统很复杂。如果方法签名在类中更改,其他已加载的现有类可能不需要遵守不安全的新方法签名。但是,在java中,只要使用Java平台调试器架构签名相同,就可以更改方法。

有人试图将此特性添加到Java和/或静态类型化语言中:

  • 运行时对类型安全动态Java类的支持
  • 支持应用程序行为的意外动态适应
  • 一种Java软件的动态更新技术

本文对相关问题进行了概述。

  • 类型系统在动态软件演化中的fl应用

不太清楚这是否解决了你最初的问题,但这些提示对你的论文来说可能是很有趣的。

票数 4
EN

Stack Overflow用户

发布于 2010-06-15 08:18:03

Java语言不支持类文件替换。JVM通过您提到的类公开该特性。因此,所有的已移植到JVM的语言都可以利用它。

票数 2
EN

Stack Overflow用户

发布于 2010-06-15 09:12:46

二郎支持热代码交换,如果您也在寻找建模动态类更新的理论框架,您可以查看Creol语言(解释)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3043451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档