ATLAS: Multi-View Code Representation Tool for C and C++ Source Programs
ATLAS 是一个开源命令行工具,它能够直接从 C 和 C++ 源文件生成对齐的抽象语法树、控制流图和数据流图,且无需完整的构建过程,并以 JSON、DOT 或 PNG 格式生成多视图表示。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你拥有一座由数千块微小积木搭建而成的宏大且复杂的乐高城堡。你想了解它的运作原理,但仅仅观察完工后的城堡是不够的。你需要三份特定的蓝图:
- 形状蓝图(Shape Blueprint): 积木是如何堆叠的(语法/Syntax)。
- 交通蓝图(Traffic Blueprint): 一个人的路径是如何穿梭于房间和走廊之间的(控制流/Control Flow)。
- 供应蓝图(Supply Blueprint): 材料是如何在不同房间之间移动以进行建造的(数据流/Data Flow)。
多年来,如果你想为特定类型的城堡(C 和 C++ 代码)获取这些蓝图,你必须雇佣一支庞大的施工队,先完成建筑的建造。如果缺少哪怕一块积木(缺失一个文件或头文件),施工队就会停工,你也无法得到任何蓝图。
ATLAS 登场了。
ATLAS 就像一个超级聪明、即时扫描的探测器,它并不在意城堡是否已经完工。它可以观察一堆散落的积木、一面半成品的墙壁,或者一座完整的城堡,并能瞬间为你绘制出所有三份蓝图。
以下是它的工作原理,使用简单的类比:
1. “禁止施工区”规则
大多数工具都像是严苛的建筑师,他们会说:“在完成建筑并向我提交正式许可证之前,我无法绘制地图。”如果你缺少一个头文件(一份小的说明书),它们就会放弃。
ATLAS 则不同。它像是一个侦探,能够观察一个半完成的拼图并说:“我不需要盒子上的图案也能知道这块碎片应该放在哪里。”即使代码部分缺失或无法实际编译,它也能分析代码。它直接作用于原始的源代码文本。
2. “通用 ID 标签”系统
通常,如果你从一个工具那里获得一份“形状蓝图”,又从另一个工具那里获得一份“交通蓝图”,它们会使用不同的编号系统。这就像一张地图使用“101 号房间”,而另一张地图使用“蓝色走廊”。你无法轻易将它们匹配起来。
ATLAS 为每一段代码都赋予了一个通用 ID 标签。
- 一个名为
x的变量在形状、交通和供应蓝图中都会获得相同的 ID。 - 因为它们共享这些标签,你可以将这些蓝图混合搭配。你可以只看交通,只看供应线,或者查看一个叠加视图——在同一张地图上,交通线是红色的,而供应线是蓝色的。
3. “缩放与过滤”功能
有时,由于蓝图包含太多微小的细节(比如每一个数字或重复的变量名),会导致难以阅读。
ATLAS 拥有三个“魔法按钮”(命令行标志)可以在无需重新扫描代码的情况下清理它:
- 折叠(Collapse): 如果“count”这个词出现了 50 次,这个按钮会将它们合并为一个大节点,就像把所有的“厨房”房间归类为一个单一的“厨房区域”。
- 黑名单(Blacklist): 你可以告诉 ATLAS,“不要显示数字。”它会立即从地图中移除所有数字积木,只留下结构。
- 视图选择(View Selection): 你可以只要“交通图”,或者只要“供应图”,或者两者都要。
4. 它表现如何?
作者在大型开源代码库(TheAlgorithms)上测试了 ATLAS。
- 成功率: 它为 96.8% 的 C 文件和 91.7% 的 C++ 文件绘制了正确的“交通蓝图”(控制流图)。
- “损坏”的文件: 即使对于那些如此破碎以至于无法被普通计算机编译的文件,ATLAS 仍然能够正确地绘制出地图。
- 实际应用: 它已经作为 AI 系统(SPARC)的“眼睛”投入使用,该系统用于编写代码测试用例。因为 ATLAS 提供了一张如此清晰的代码运行路径图,AI 能够编写出比以前更好的测试。
5. 它目前还做不到什么
ATLAS 很强大,但它并非万能。它承认自己存在一些盲点:
- 它对“幽灵指针”(指针指向内存中隐藏内容的情况)的追踪能力较弱。
- 它在处理复杂的 C++ 特性(如高级模板或运算符重载)时会感到吃力。
- 它尚未在“超大规模”项目(数百万行代码)上进行过测试,目前仅限于中小规模项目。
总结
ATLAS 是一个让研究人员和开发者无需先构建完整躯体,就能看到 C 和 C++ 代码“骨架”的工具。它将结构、运动和数据流统一到一张地图中,使得计算机(以及人类)更容易理解、分析和改进软件。它是免费、开源的,并且以“Docker”盒子的形式提供,这意味着任何人都可以运行它,而无需安装各种各样的工具。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。