CLR如何将我们的抽象映射到内存中?

时间:2009-05-01 23:01:22

标签: .net

我真正感兴趣的一件事,我在.NET圈子中没有看到太多关于或讨论过的内容,那就是运行时如何通过CLR实现我们的抽象并实现它们。虽然有一些书籍讨论了其中的一些问题(例如Richter的 CLR通过C#或者Simon Robinson非常悲惨地忽略了高级.NET编程,我强烈推荐如果你还没有阅读,即使它已经绝版了,那么这个拼图的重要部分并没有被我能找到的任何东西所覆盖。

至少对我而言,采用我们在编程中所做的抽象并将它们映射到位和字节数组中这是一个非常了不起的成就,它不仅是我们抽象的忠实表示,而且还可以通过生成新的方式进行操作,创意抽象本身。我正在寻找资源来帮助我理解这是如何发生的。

作为我正在研究的一个例子,我们更多地了解这一点:我们开发人员认为类和实例是一个谨慎的整体。你有一个班级,你有实例。我们可能会理解运行时设置实例的方式是通过一个引用来保存实例数据,以便两个相同类型的对象不共享数据(duh),但我怀疑很多开发人员都理解CLR没有类信息所在的任何一个地方 - 它实际上只有方法信息和实例信息然后在'类型'的标题下链接两者。我知道CLR的类实现与我想象的完全不同。

有没有人找到涵盖这类东西的好资源?它们不需要显式.NET,尽管我对.NET特定的那些最感兴趣。我并不是真的精通类型理论/实现世界,但我猜想.NET CLR在处理映射抽象到位的方法中是相当典型的,因此任何书籍/网站都会受到赞赏。

3 个答案:

答案 0 :(得分:2)

什么是比官方规范本身更好的信息来源?

Standard ECMA-335 - Common Language Infrastructure (CLI)

答案 1 :(得分:0)

目前正在阅读一本书“更有效的C#”,Bill Wagner写了一些关于泛型及其如何影响性能的有趣内容。他没有详细介绍,但我真的很喜欢他对编译器和CLR如何处理各种约束等的解释。

到目前为止好书!

答案 2 :(得分:0)

如果你知道C,那么我所知道的最好的例子就是一些黑客入侵C文章的OOP。它确实说明了vtable,铸造等是如何在引擎盖下工作的。

从CLR的角度来看,唯一重要的增强功能(尽管我确定会添加其他内容)是垃圾收集,边界检查和类型安全 - 这些都是运行时比内存相关的更多

一个快速的谷歌使Essential.NET看起来非常有趣(并且由Don Box和Chris Sells,它必须详细说明) - 但我只浏览了2页。