【发布时间】:2010-12-23 01:20:23
【问题描述】:
我刚刚开始尝试了解更多关于 .Net VM 基础的信息,但我马上就被某些东西抛弃了。我知道有一个叫做 DLR 的新东西,它允许 C# 中的所有动态内容和 IronX 语言的运行。但现在我正在阅读这种名为 Boo 的语言,显然它早在 DLR 存在之前就具有动态功能。所以,
1) 这怎么可能?
2) DLR 为方程式添加了什么?
3) 像 Boo 这样的语言能否通过根据 DLR 重新实现自身来获得任何收益?
根据我在这里和那里收集到的信息,看起来 DLR 来自 IronPython,当时他们将 .Net 中支持 DL 所需的一切因素分解出来,并将其置于可重用的形式中。所以我猜 DLR 没什么特别的,只是一些有助于处理 Microsoft.Scripting.dll 中的动态对象的库,但如果你有时间的话,没有什么是你不能自己出去编写代码的,这我猜是Boo发生了什么?然后对于 2 和 3,我猜 DLR 的通用性和可重用性将允许任何未来的 DLR 改进自动被继承,但是如果你已经做了你的,那么没有迫切的“需要”重新实现使用 DLR自己的自定义运行时?或者 DLR 是否有一些秘密的 MS 酱汁使它比我们在 .Net 上所做的任何事情都更好?
4) DLR 真的是一个运行时还是只是一组库? (到底什么是运行时?我可能需要学习更多的编译器理论才能理解这个问题的答案,或者它是否是一个有意义的问题。忽略这个问题。或者不要。)
5) IronPython 编译是如何工作的?它是编译成 CIL 的新动态版本,还是只是将“ironpython.exe”命令添加到包含程序文本的字符串中?嗯,如果动态是 C# 中的关键字,那么 CIL 必须有动态版本,对吧?那么.Net如何知道在CIL上使用CLR还是DLR呢?
6) JVM 的达芬奇项目有什么不同吗?看起来它是 JVM 本身的实际重新实现。这种方法的含义是什么?我猜有巨大的性能提升,但还有什么? MS没有走这条路的原因是什么?
7) DLR 是否让 Boo 在制作 DSL 时有些过时?
【问题讨论】:
-
以后,请把你的问题分解成几个帖子。这将增加对每个人都有特定知识的不同人给出好的答案的可能性。
标签: .net clr ironpython dynamic-language-runtime boo