Skip to main content
QUICK REVIEW

[论文解读] Fusing Industry and Academia at GitHub (Experience Report)

Patrick Thomson|arXiv (Cornell University)|Jun 18, 2022
Scientific Computing and Data Management被引用 1
一句话总结

本文介绍了 Semantic,一个在 Haskell 中构建的生产规模程序分析系统,利用函数式编程技术(如代数效应、数据类型 à la carte 和递归模式)实现跨数亿个代码仓库的语义差异比较、代码导航和抽象解释。其主要贡献在于成功将先进的学术函数式编程研究成果应用于工业实践,打造出一个高性能、可扩展且开源的工具集,显著提升了 GitHub 的代码分析能力,并推动了社区驱动的语言支持。

ABSTRACT

GitHub hosts hundreds of millions of code repositories written in hundreds of different programming languages. In addition to its hosting services, GitHub provides data and insights into code, such as vulnerability analysis and code navigation, with which users can improve and understand their software development process. GitHub has built Semantic, a program analysis tool capable of parsing and extracting detailed information from source code. The development of Semantic has relied extensively on the functional programming literature; this paper describes how connections to academic research inspired and informed the development of an industrial-scale program analysis toolkit.

研究动机与目标

  • 解决在工业规模下对庞大且多样的代码库进行高性能、高正确性分析的挑战。
  • 评估高级函数式编程技术(如代数效应和递归模式)在真实世界高吞吐量生产系统中的适用性。
  • 通过允许外部语言社区在无需掌握底层系统编程知识的情况下维护代码导航规则,降低贡献门槛。
  • 通过将学术研究应用于解决实际工程问题,展示产业与学术界合作的双向价值。

提出的方法

  • 在 Haskell 中实现程序分析框架,利用强类型安全和引用透明性保障正确性与可维护性。
  • 使用代数效应和作用域效应来以纯函数式方式建模副作用,实现模块化且可组合的效应处理。
  • 应用数据类型 à la carte 构建跨多种编程语言的可扩展、强类型的语法树数据结构。
  • 采用递归模式和广义 LR 解析技术,实现对抽象语法树的高效且可扩展的遍历与转换。
  • 设计一种领域特定查询语言(集成至 Tree-sitter),替代基于 Haskell 的代码导航系统,降低外部语言社区的贡献门槛。
  • 通过参数化错误处理和注释追踪的类型系统(利用函子),在不牺牲类型安全的前提下提升灵活性。

实验结果

研究问题

  • RQ1学术界开发的高级函数式编程技术能否有效应用于解决大规模工业软件工程问题?
  • RQ2在处理数万个并发代码分析请求的生产系统中,代数效应和数据类型 à la carte 等技术的可扩展性如何?
  • RQ3在真实世界代码库中使用递归模式和广义解析技术时,表达能力与可维护性之间的实际权衡是什么?
  • RQ4学术研究如何被调整以降低工业工具中的贡献门槛,同时不牺牲性能或正确性?
  • RQ5领域特定语言在多大程度上可以替代生产系统中的低级函数式实现,同时保持性能和可扩展性?

主要发现

  • Semantic 系统成功扩展至每分钟处理数万个代码分析请求,延迟极低,证明了函数式编程在高吞吐量工业系统中的可行性。
  • 代数效应和作用域效应的使用实现了模块化、可组合且可测试的效应处理,显著提升了代码清晰度和可维护性。
  • 数据类型 à la carte 允许在多种编程语言间构建可扩展、强类型的语法树,支持多样化的代码库并保持强类型安全。
  • 从基于 Haskell 的代码导航系统迁移到基于 Tree-sitter 的领域特定查询语言,极大降低了外部社区的贡献门槛,使 Elixir 等社区能够自主维护其规则。
  • 通过函子对语法节点类型进行参数化(例如用于注释或差异状态),实现了灵活且类型安全的 AST 扩展,同时不损失性能或表达力。
  • 尽管在大型互递归语法树上使用递归模式初期面临挑战,但通过开发 Fastsum 和高阶类型类,成功恢复了生产环境所需的表达能力。

更好的研究,从现在开始

从论文设计到论文写作,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。