是否有可能开发一个程序来优化算法,检测设计模式,然后重写代码?例如:
此程序应通过包含语法等各种规则的配置文件,适用于任何编程语言的来源。
发布于 2020-10-16 07:33:06
不,这不可能。
决定程序是否执行某一算法(例如,气泡排序)等同于求解停止问题,因此无法判定。
确定两个程序是否计算相同的函数等于解决停止问题。,因此无法判定。决定他们是否执行“相似”的功能将有类似的问题。
发布于 2020-10-16 09:13:53
首先,这是不可能的,因为停止的问题,正如已经说过的。
其次,如果有可能的话,我不会让这样的优化器做你建议的任何事情,所以这并不是很明显,它会有任何用处。
检测气泡排序并将其转换为快速排序或合并排序
这是个糟糕的主意。对于足够小的输入,气泡排序比快速排序或合并更快,只是规模很小。与代码分析器相比,程序员更容易知道预期的输入大小。
将类实例的不必要重复替换为Singleton
要知道什么时候才是正确的做法,就需要理解意图。这在代码中是不可见的。也许单例在语义上是正确的,但出于缓存的原因,我选择在每个线程保留一个实例。也许我想为自己保留一个实例,然后将另一个实例与动态加载的库共享,这个库在源分析时是不可见的。
将类似的函数重构为接受参数的更通用的函数
因此,现在我还必须让它重写我的所有单元测试,并相信代码和测试都是正确的。而广义函数现在将给我的指令缓存和分支预测带来更大的压力,因此很可能执行得更差。
发布于 2020-10-16 07:53:45
优化编译器每天都会执行程序转换,但是他们并不是在源代码级别执行转换,他们需要以一种保持语义的方式进行转换。例如,循环展开和强度缩减是常见的技术(甚至可以应用于源代码,但可能会妨碍可读性)。
重构可以使用工具支持来完成,既可以识别可能受益于重构的地方,也可以应用源代码转换。然而,重构的决定和责任通常由开发人员承担。在许多情况下,要证明重构保留了代码的语义是很困难的,而且在这样的重构之后,代码是否具有更好的可读性和可维护性往往是一个主观的判断。
https://softwareengineering.stackexchange.com/questions/417996
复制相似问题