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
ひとこと要約

この論文では、Haskellで実装された生産スケールのプログラム解析システム、Semanticを提示する。このシステムは、代数的効果、データ型 à la carte、再帰スキームといった関数型プログラミング技法を活用し、数億のコードリポジトリにわたる意味的差分比較、コードナビゲーション、抽象解釈を可能にする。主な貢献は、先端的な学術的FP研究を産業分野に成功裏に応用した点であり、性能に優れ、拡張可能で、オープンソースなツールキットを実現し、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システムは、1分間に数万件のコード解析リクエストを低遅延で処理することができ、関数型プログラミングが高スループットな産業システムに実用可能であることを実証した。
  • 代数的効果とスコープ付き効果の使用により、モジュラーで合成可能かつテスト可能な効果処理が実現され、コードの明確さと保守性が顕著に向上した。
  • データ型 à la carte を用いることで、複数のプログラミング言語にわたる拡張可能で型安全な構文木が構築可能となり、強力な型安全性を維持した多様なコードベースをサポートした。
  • Haskellベースのコードナビゲーションシステムから、Tree-sitter上に構築されたドメイン固有のクエリ言語への移行により、貢献の障壁が著しく低下し、Elixirのような外部コミュニティが自らのルールを維持できるようになった。
  • 関手を用いた構文ノード型のパラメータ化(例:コメントや差分状態のため)により、パフォーマンスや表現力を損なわず、柔軟で型安全なAST拡張が可能になった。
  • 初期には大規模で相互再帰的な構文木に対して再帰スキームを適用する際に課題が生じたが、Fastsumと高階型クラスの開発により、生産用途に十分な表現力を回復した。

より良い研究を、今すぐ始めましょう

論文設計から論文執筆まで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。