【发布时间】:2011-02-15 00:06:18
【问题描述】:
我正在为我最后一年的项目的一小部分 python 代码构建一个优化编译器。我要做的第一件事是测试变量是否涉及或导致 I/O。如果我要在众所周知的兔子洞中静态跟踪函数调用,我怎么知道它涉及 I/O?是否会调用内置的 python 函数,例如打印、输入或内置的“文件”对象函数调用来读取和写入?
我没有太多时间来做这个项目(只有 6 个月),所以我完全忽略了人们用 C 编写 I/O,将它包装成某种 python 对象并从 python 调用它。
生成的字节码是否指示是否有 I/O?还是和 AST 一样无用?
如果它是可撤消的,没什么大不了的,我将只为我的项目打印 I/O 子集,输入读取和写入。或者做活性分析。
谢谢。
【问题讨论】:
-
在动态类型语言上通过静态分析来做出这些决定几乎是不可能的。这就是为什么静态优化动态类型语言和静态类型语言要困难得多的原因。
-
@Glenn 别担心。我可以将我正在使用的 python 子集更改为或多或少的限制。但我的问题仍然存在。 python I/O的基本函数调用是什么?它们会是内置函数 open("blah.txt", "rw").read 和 write 吗?还是会根据实现(比如第三方库)而改变?
标签: python optimization compiler-construction io abstract-syntax-tree