代码之家  ›  专栏  ›  技术社区  ›  none

有助于重构的编程语言属性?

  •  7
  • none  · 技术社区  · 15 年前

    我主要是考虑到编程语言的特性,使开发静态分析和重构工具变得更容易(即比较java与C++,前者对重构有更好的支持)。

    换言之,一种编程语言,从一开始就被明确地设计为支持自动静态分析和重构,它最好具有什么特性?

    例如,对于 Ada ,这是 ASIS

    Ada语义接口规范(ASIS)是一个分层的、开放的体系结构,提供对Ada库环境的独立访问。Ada的程序和程序允许对其进行静态分析。 Ada语义接口规范ASIS是一个允许应用程序访问Ada编译单元的完整语法和语义结构的库。这个库通常由需要对Ada程序执行某种静态分析的工具使用。

    ASIS information: ASIS为工具提供了一种标准的方法来提取由Ada编译器或其他源代码分析器最好地收集的数据。使用ASIS的工具本身是用Ada编写的,可以很容易地在支持ASIS的Ada编译器之间移植。使用ASIS,开发人员可以生成具有高度可移植性的强大代码分析工具。它们还可以节省实现从源程序中提取语义信息的算法的大量开销。例如,ASIS工具已经存在,这些工具可以生成源代码度量、检查程序是否符合编码样式或限制、进行交叉引用以及全局分析程序以进行验证和验证。

    ASIS FAQ

    你能想到其他的编程语言,它们提供了一个类似的全面和完整的接口来处理专门用于分析/转换的源代码吗?

    我正在考虑提供底层钩子的具体实现技术,例如提供在运行时检查AST或ASG的核心库函数。

    7 回复  |  直到 4 年前
        1
  •  7
  •   Bill K    15 年前

    最大的问题是静态输入。这使得工具能够更深入地了解代码的作用。没有它,重构就变得困难很多倍。

        2
  •  2
  •   Brian    15 年前

    我认为这仍然是一个很大程度上尚未探索的问题。“工具语言设计”的概念似乎只是最近才进入主流的边缘,尽管我认为这方面的研究已经有二十多年的历史了。我同意另外两个答案,即“静态类型”和“自相似性”是一种语言的有用属性,有助于简化重构支持。

        3
  •  2
  •   Ira Baxter    8 年前

    的确,特定的编程语言可以使分析更容易。 如果你想让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
  •   Reed Copsey    15 年前

    Reflection

    这就是为什么Java和.NET工具如此普通和美好的部分原因。这为工具提供了更好的功能,可以快速可靠地理解源代码的各个部分,这有助于源代码的静态分析。

    此外,您还可以分析编译后的代码。

        5
  •  1
  •   vpolozov    15 年前

    说真的,“编程语言”和“机器语言”是两个不同的要求。对于程序员来说,一种完美的分析语言可能是一场噩梦。更重要的是,为某些分析而设计的语言可能根本就不是编程语言。(上周我遇到了指针分析语言,它没有文本表示,只有两个可执行语句)

    再说一遍:首先你必须定义任务,然后解决它。例如:如果任务是“我要编写安全的程序,例如,我要确保我永远不会尝试混合整数和字符操作数”,那么您需要一种具有静态类型的语言。好的,“我需要知道在运行时我可以用外部库做什么”-反射是你的选择我需要用于交换、转换和分析的通用编程语言“-很可能,这不是您真正想要的。

        6
  •  0
  •   Anders Eurenius    15 年前

    重构:自相似

    接受代码移植的能力,而无需进行侵入性的更改或奇怪的重新解释。示例:

    • 将C++的片段提取到一个新的过程中,使用引用参数给它修改变量的访问权限。
    • Python、Javascript和Lua方法实际上只是具有“self”参数的函数。*
    • 在任何语言中,创建/填充结构的函数都可以(或多或少地)转换为构造函数。

    反例。。。

    对于(在我看来)完全不同的自动损坏的情况,我不太确定,但是函数式编程语言提供的副作用的自由是真正的。(好吧,那我们怎么能用一种语言为其他人提供同样的东西呢?)

    * Python是 几乎

        7
  •  0
  •   Erich Kitzmueller    15 年前

    在我看来,最重要的特性是语言是完全指定的和确定的。例如,在C语言中,下列代码的行为不是由语言规范定义的:

    x++ = x++ + ++x;
    

    某物 ,没有一种安全的方法可以自动更改它(即重构它),以保留它

    可以