2019年的某个时候,麻省理工学院的博士生Ajay Brahmakshatriya制定了一个简单但仍颇具挑战性的目标。他想让在特定领域(如气候建模、生物信息学或体系结构)拥有专业知识的人能够编写自己的编程语言,即所谓的领域特定语言(DSL),即使他们在创建编程语言方面几乎没有经验。Brahmakshatriya是该研究所计算机科学和人工智能实验室(CSAIL)麻省理工学院教授Saman Amarasinghe领导的研究小组的成员,他希望这些语言具有人们舒适使用它们所需的所有辅助功能,包括调试工具。他和Amarasinghe同意,这一消除软件错误的过程至关重要,因为他们将缺乏调试支持称为“DSL的致命弱点”
这几年对他们俩来说都是富有成效的。2021年,Brahmakshatriya和Amarasinghe推出了BuildIt,这是一个大大简化了创建DSL任务的软件包。上个月,在蒙特利尔由计算机协会联合主办的一次国际会议上,这对搭档推出了D2X,这是一种可以很容易地向任何DSL添加调试的工具,并且已经证明它与BuildIt配合得特别好。他们的关于工作的论文甚至还获得了会议上颁发的两项杰出论文奖之一。
Brahmakshatriya解释说,在专门领域生成一种语言的主要原因是“促进易用性”。例如,图像处理DSL可以有一个表示“模糊整个图像”的功能。Brahmakshatriya指出,用通用语言发出相同的命令将需要更多行代码。“这是使用DSL的部分原因。另一个原因是性能。”因为操作是特定于该域的,所以可以更容易地对其进行优化-以适当的顺序执行,从而更高效、更快地完成。
Brahmakshatriya将BuildIt描述为“用于创建DSL的DSL”。它促进了一个多步骤过程,以获取现有的通用编程语言,并将其精简,直到它以正确的方式专门化。“假设你有一个问题,你想写一个程序来解决它,”他说。“你可以编写一个程序来完整地解决它,或者你可以编写较小的程序来解决你感兴趣的问题的子类。你制作的程序越专业,它运行得越快。”BuildIt设计用于构建DSL,并牢记这些指导原则。
Halide是2012年发明的一种图像处理语言,比BuildIt早了很多年,它是Amarasinghe团队推出的首批DSL之一。它的开发是由当时的学生乔纳森·雷根·凯利和安德鲁·亚当斯领导的,他们当时是CSAIL的博士后。Amarasinghe说:“Halide现在非常流行,在许多Adobe应用程序中都有使用,包括Photoshop,但它仍然没有调试器。”。他补充道,原因是“调试器非常复杂。编写它们非常困难,这就是为什么大多数小型DSL没有调试支持。”
Brahmakshatriya认为,这不是一个理想的状态,他坚持认为每个DSL都应该有自己的调试器。“你不能直接为你的新语言使用现有的调试器,因为它们不理解域。”此外,这是不可能的,他说,写一个第一次就完全正确的程序。“你总是从一些有错误的东西开始,尽管它们通常在开发周期的很晚时候才会出现。如果一个错误在那一点突然出现,当你有5000行代码时,很难找到它。”因此,一旦一个程序“代码完成”(被开发人员认为已经准备好进行测试),软件工程师可能就必须将一半以上的时间用于繁重的调试工作。
但是,D2X(发音为“detox”,因为它涉及到消除程序中的毒物或缺陷的概念)形式的帮助正在到来。D2X本身不是一个程序,而是被归类为一个库——一段可以被其他程序重用的计算机代码。它被设计为与现有的调试器(如GDB或LLDB)一起工作,充当这些工具和给定DSL之间的桥梁。调试器需要有关要清理的程序或编程语言的信息。Amarasinghe说:“每个调试器都需要以自己特定的格式提供信息,这种格式可以是400页的文档。”。“如果您使用D2X,您不必担心。它会为您解决问题。”
Brahmakshatriya说,使用D2X作为接口,“你的程序可以使用流行的调试器进行调试,而无需对调试器本身进行任何修
改。”,这就是D2X与BuildIt结合的主要优势:“如果您使用BuildIt编写DSL,则不必做任何额外的工作。您可以免费获得调试器,而无需编写任何额外的代码。”
康奈尔大学(Cornell University)计算机科学副教授阿德里安·桑普森(Adrian Sampson)评论道:“D2X正面解决了高性能软件中的一个固有矛盾。”。“一方面,特定领域的语言是我们在现代时代大幅提高计算效率的唯一希望。然而,从头开始为新语言制作一个新的调试器是很困难的,而缺少调试器则是程序员可能会拒绝“更好”的语言而选择“更差”的语言的合理原因D2X的一点是它降低了为DSL构建有用调试器的障碍。”
但就布拉马克沙特里亚而言,这还不是故事的结局。除了调试之外,他还希望与BuildIt合并的另一个功能是编辑,这使得编写程序更容易。例如,编辑可以突出显示文档中的某些关键字,这可以提高文档的可读性。他们可以执行其他功能,例如自动完成,在输入一小部分文本后自动填充文本。
Brahmakshatriya希望将分析器、调试器和编辑器作为BuildIt平台的一部分。他说:“分析器就像调试器一样,但它不是帮助您查找错误,而是让您评估程序中的性能问题。”。他说:“如果程序的运行速度比预期的慢,你可以使用分析器来了解程序的哪一部分会让事情陷入困境。”。
阿马拉辛格认为,所有这些努力都将使创建专门语言的前景更加诱人。“在我看来,有大量的人支持传统语言——数千名程序员为C、C或Java构建工具,”他说。“另一方面,如果我正在构建一个简单的DSL,我没有成千上万的程序员来提供所有这些支持。”但现在,有了BuildIt和D2X,他补充道,“小家伙可以得到其他人得到的所有东西,包括调试器,最终是编辑器和分析器,这与传统语言带来的好处是一样的。你可以做到这一点,而无需工程师团队编写各种复杂的代码。”
这项工作得到了应用驱动架构研究中心、美国国防高级项目局(DARPA)的支持,这是一个由半导体研究公司和DARPA共同赞助的联合大学微电子项目中心;国家科学基金会(NSF);以及Intel/NSF奖。
注:本文由院校官方新闻直译,仅供参考,不代表指南者留学态度观点。