zch*_*nah 6 python import ironpython dynamic-language-runtime
在CPython中,我认为,import意味着将py文件编译为pyc文件并在当前帧中执行该文件,下次CPython将直接加载pyc文件而不再编译.如何进口铁腕?我猜ironpython没有类似pyc的格式.每次导入时都会编译吗?
是的,IronPython会在每次运行时重新编译导入的模块.实际上是两次.
情况很复杂.
在第一遍中,Python代码被解析为AST,AST被转换为DLR表达式树,并且存储表达式树.当需要执行它时,表达式树被编译成一组简单的基于堆栈的解释器的指令,模块代码在该解释器上执行.跑步时速度不快,但启动时间很短.
在一段代码运行一段时间后,IronPython厌倦了它的速度,回到表达式树,并将代码重新编译成.NET委托.这意味着它将被.NET JIT转换为MSIL,然后转换为本机代码.此代码执行起来很快,但需要时间来创建.
这种转换是基于每个函数(甚至每个循环)完成的,因此如果您重复使用模块中的一个函数而不使用其余函数,则只有一个常用函数将经历完整的IL代码生成和JITting.
但是,这些编译都没有保存到磁盘.IronPython附带的pyc.py程序可以预编译代码,但它不是自动完成的,因为在运行时生成的代码与pyc.py生成的代码不同.运行时代码通常是可收集的,而pyc.py生成的代码不是 - 并且在运行时生成不可收集的代码会导致内存泄漏.pyc.py应该通过节省几个步骤来加快导入,但我不确定多少.
| 归档时间: |
|
| 查看次数: |
462 次 |
| 最近记录: |