- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
C++ 编译器在优化时能够丢弃以下函数。
void function()
{
long long number = 0;
long long problemSize = 100;
for( long long i = 0; i < problemSize; ++i )
{
number++;
number--;
}
}
Python生态系统中是否有等效或类似的机制?
work = 1
for x in xrange(problemSize):
work += 1
work -= 1
最佳答案
CPython引用解释器没有这样的功能;它拥有的优化器极其有限,一般无法进行语句间优化;由于优化器正在查看 work -= 1
,所以它完全忘记了 work += 1
。
Cython 可能能够也可能无法对此进行优化;我怀疑它本身不会,但如果正确声明类型,编译 Cython 生成的代码的 C 编译器可能能够消除未使用的代码。
对于其他解释器(PyPy、Jython、IronPython),这一切都取决于其 JIT 编译引擎的质量。如果代码只执行一次,他们就不会费心对其进行 JIT,但如果是热代码,执行多次,则可能能够消除循环。
在 Python 中执行此操作比较困难,主要是因为即使是像您所表达的那样简单的循环也可能会产生不可预测的副作用。当然,从表面上看,删除循环是安全的(如果稍后没有从 x
读取任何内容),但总是可以用 xrange
替换来进入循环,无论是在模块全局或内置范围,并且替换可能会产生明显的副作用。如果不简单地忽略 xrange
被替换的可能性(如 Cython 所做的那样)或编译在 xrange
不被替换时有条件执行的代码,则几乎不可能对代码进行静态编译。替换(谨慎的 JIT 必须这样做)。
关于python - Python生态系统中是否有与C++编译器优化等效或类似的机制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56553814/
我最近遇到了 HFOSS (人道主义免费开源软件)项目以及其他一些公司在做智能电网软件公司和其他类型的绿色软件项目。 由于我正在对该主题进行一些研究,并且因为谷歌在绿色/生态/人道主义/可持续性上的搜
我是一名优秀的程序员,十分优秀!