在“IronPython in Action”一书中,作者指出 IronPython 与 CPython 不同,它受益于 JIT 和框架本身的某些优化,而 CPython 无法利用这些优化。因此,IronPython 可能比 CPython 更快,尤其是对于多线程场景。
IronScheme是否从此类优化中受益?它是一个解释器(不是编译器)吗?它是一个解释器,因为这是 Lisp 的本质,它必须被解释以提供类似 Lisp 的灵活性?如果是解释器,它还能从抖动中的优化中受益吗?
在“IronPython in Action”一书中,作者指出 IronPython 与 CPython 不同,它受益于 JIT 和框架本身的某些优化,而 CPython 无法利用这些优化。因此,IronPython 可能比 CPython 更快,尤其是对于多线程场景。
IronScheme是否从此类优化中受益?它是一个解释器(不是编译器)吗?它是一个解释器,因为这是 Lisp 的本质,它必须被解释以提供类似 Lisp 的灵活性?如果是解释器,它还能从抖动中的优化中受益吗?
与 IronPython(以及我基于 IronScheme 的 DLR 的初始版本)一样,IronScheme 一直编译到 IL 级别。
此外,IronScheme 中没有解释的部分(除非您调用运行时符号查找),因为我几乎从 DLR 的“分支”中删除了所有这些部分,因为没有被使用并减少了代码占用空间(我估计我只使用了大约 25% 的 DLR,其余的都以 Python 为中心)。
要查看生成的 IL,您可以查看ironscheme.boot.dll
Reflector .NET 中的程序集(最好使用 IL 模式,因为 C# 往往会被奇怪地重组,并且在少数情况下只是完全错误)。整个程序集由 IronScheme 编译。要查看运行时生成的代码要复杂得多。
如前所述,这确实具有 JIT 的所有优点,并且我在 DLR 上进行的优化更加以 Scheme 为中心,当我上次测试它时,它通常比 IronPython 执行得更快(至少 18 个月前,我意识到从那时起,IronPython 已经有了很多改进,但 IronScheme 速度要快一些,即使使用“感觉”更像 Python 的 Scheme 甚至是球赛)。
此外,我尝试尽可能多地利用 .NET 框架作为 IronScheme 的基础,并使互操作性更容易。vectors
、和之类byte-vectors
的东西基于我们都知道和使用的普通 .NET 类;, ,和分别,仅举几例。binary-ports
hash-tables
object[]
byte[]
Stream
Hashtable