1
7
最大的问题是静态输入。这使得工具能够更深入地了解代码的作用。没有它,重构就变得困难很多倍。 |
2
2
我认为这仍然是一个很大程度上尚未探索的问题。“工具语言设计”的概念似乎只是最近才进入主流的边缘,尽管我认为这方面的研究已经有二十多年的历史了。我同意另外两个答案,即“静态类型”和“自相似性”是一种语言的有用属性,有助于简化重构支持。 |
3
2
的确,特定的编程语言可以使分析更容易。 如果你想让easist分析语言,选择一个纯函数 一个。 (哈斯凯尔的人看到后会上下跳 但说真的,Haskell很少使用)。 使编程语言可分析的是基础设施 . 上面的阿达就是一个很好的例子。 不要混淆ASIS是为Ada编写的,或者是 用Ada写的;重要的是有人真的想要 我相信正确的治疗方法是建立通用分析基础设施 我们正在努力,我们应该建立通用的转型基础设施, 同样,因为一旦你有了一个分析,你会想用 它的作用是改变。(看医生不以诊断结束; 它们以治愈而告终)。我把我的事业押在这上面。 结果是一个我认为最适合分析的引擎, DMS Software Engineering Toolkit. 树操作,源代码到源代码重写,属性 语法评估,控制和数据流分析。 C和C++的,对于java,c++,COBOL,php,甚至 对于Verilog和VHDL(还有许多其他语言, 但不完全是在那个水平)。 把B-2轰炸机的快乐代码转换成C。。。 我们从来没有见过源代码。 看到了吗 http://www.semdesigns.com/Products/Services/NorthropGrummanB2.html 功能帮助? 但只能通过添加一个有限的单参数谓词,例如“X是一个整数”。 我想 代码(例如,问题或领域特定信息,例如“X>Y+3”。) 分析基础设施(坦率地说,是阅读代码的程序员) 这种断言通常用特殊的关键字编码,例如“assert”, “前(条件)”和“后(条件)”是有充分理由的 来自定理证明文献。 不管怎样编码都很容易:只要编写一个if语句,条件包含断言拒绝,并且主体执行调用一个习惯用法来指示 不可能或违反语言语义(例如,删除明显的空指针), 所以真正需要的不是语言中的断言, 谁愿意写他们 |
4
1
这就是为什么Java和.NET工具如此普通和美好的部分原因。这为工具提供了更好的功能,可以快速可靠地理解源代码的各个部分,这有助于源代码的静态分析。 此外,您还可以分析编译后的代码。 |
5
1
说真的,“编程语言”和“机器语言”是两个不同的要求。对于程序员来说,一种完美的分析语言可能是一场噩梦。更重要的是,为某些分析而设计的语言可能根本就不是编程语言。(上周我遇到了指针分析语言,它没有文本表示,只有两个可执行语句) 再说一遍:首先你必须定义任务,然后解决它。例如:如果任务是“我要编写安全的程序,例如,我要确保我永远不会尝试混合整数和字符操作数”,那么您需要一种具有静态类型的语言。好的,“我需要知道在运行时我可以用外部库做什么”-反射是你的选择我需要用于交换、转换和分析的通用编程语言“-很可能,这不是您真正想要的。 |
6
0
重构:自相似接受代码移植的能力,而无需进行侵入性的更改或奇怪的重新解释。示例:
反例。。。 对于(在我看来)完全不同的自动损坏的情况,我不太确定,但是函数式编程语言提供的副作用的自由是真正的。(好吧,那我们怎么能用一种语言为其他人提供同样的东西呢?)
|
7
0
在我看来,最重要的特性是语言是完全指定的和确定的。例如,在C语言中,下列代码的行为不是由语言规范定义的:
某物 ,没有一种安全的方法可以自动更改它(即重构它),以保留它 可以 |
Glory Raj · 有什么方法可以使这两个块具有共同的功能吗 2 年前 |
Justin · Python自属性重命名 6 年前 |
Sabutobi · 长dict属性行的重构 6 年前 |
Falco Alexander · 简单LINQ重构/样式 6 年前 |
05bs001 · Euler 12需要优化 6 年前 |
slartidan · 如何将lambda表达式重构为方法引用? 7 年前 |
Alex · 在Java类中频繁使用与映射键相同的字符串[已关闭] 7 年前 |