首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >代码优化工具

代码优化工具
EN

Software Engineering用户
提问于 2020-10-16 07:10:41
回答 3查看 180关注 0票数 -2

是否有可能开发一个程序来优化算法,检测设计模式,然后重写代码?例如:

  1. 检测气泡排序并将其转换为快速排序或合并排序
  2. 将类实例的不必要重复替换为Singleton
  3. 将类似的函数重构为接受参数的更通用的函数

此程序应通过包含语法等各种规则的配置文件,适用于任何编程语言的来源。

EN

回答 3

Software Engineering用户

发布于 2020-10-16 07:33:06

不,这不可能。

决定程序是否执行某一算法(例如,气泡排序)等同于求解停止问题,因此无法判定。

确定两个程序是否计算相同的函数等于解决停止问题。,因此无法判定。决定他们是否执行“相似”的功能将有类似的问题。

票数 3
EN

Software Engineering用户

发布于 2020-10-16 09:13:53

首先,这是不可能的,因为停止的问题,正如已经说过的。

其次,如果有可能的话,我不会让这样的优化器做你建议的任何事情,所以这并不是很明显,它会有任何用处。

检测气泡排序并将其转换为快速排序或合并排序

这是个糟糕的主意。对于足够小的输入,气泡排序比快速排序或合并更快,只是规模很小。与代码分析器相比,程序员更容易知道预期的输入大小。

将类实例的不必要重复替换为Singleton

要知道什么时候才是正确的做法,就需要理解意图。这在代码中是不可见的。也许单例在语义上是正确的,但出于缓存的原因,我选择在每个线程保留一个实例。也许我想为自己保留一个实例,然后将另一个实例与动态加载的库共享,这个库在源分析时是不可见的。

将类似的函数重构为接受参数的更通用的函数

因此,现在我还必须让它重写我的所有单元测试,并相信代码和测试都是正确的。而广义函数现在将给我的指令缓存和分支预测带来更大的压力,因此很可能执行得更差。

票数 3
EN

Software Engineering用户

发布于 2020-10-16 07:53:45

优化编译器每天都会执行程序转换,但是他们并不是在源代码级别执行转换,他们需要以一种保持语义的方式进行转换。例如,循环展开和强度缩减是常见的技术(甚至可以应用于源代码,但可能会妨碍可读性)。

重构可以使用工具支持来完成,既可以识别可能受益于重构的地方,也可以应用源代码转换。然而,重构的决定和责任通常由开发人员承担。在许多情况下,要证明重构保留了代码的语义是很困难的,而且在这样的重构之后,代码是否具有更好的可读性和可维护性往往是一个主观的判断。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/417996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档