pgrust: LLMを使用したPostgresのRustによる書き換え
pgrust: LLMを使用したPostgresのRustによる書き換え
pgrustの概要
pgrustは、大規模言語モデル(LLM)を活用して開発プロセスを加速させる、PostgreSQLをRustで書き換える実験的なプロジェクトです。このプロジェクトは、元のPostgreSQLの仕様との互換性を維持しながらデータベースアーキテクチャを近代化することを目指しており、現在はPostgresの回帰テストを100%パスしています。
主要なアーキテクチャの変更とパフォーマンス
著者である @malisper は、元のCベースの実装と比較してパフォーマンスを向上させるために、データベースアーキテクチャにいくつかの根本的な変更を実装しました。
- スレッドモデル: pgrustは、PostgreSQLで使用されている従来の接続ごとのプロセスモデルを、接続ごとのスレッドモデルに置き換えています。
- トランザクション・ワークロード: このプロジェクトは、トランザクション主体のワークロードにおいて、PostgreSQLよりも50%のパフォーマンス向上を報告しています。
- 分析ワークロード: pgrustは、分析ワークロードにおいてPostgreSQLよりも約300倍高速であると主張していますが、ClickbenchベンチマークではClickhouseよりも約2倍遅い状態に留まっています。
技術的な批判と安全性に関する懸念
パフォーマンスの主張にもかかわらず、このプロジェクトは、生成されたコードの安全性と品質に関して、技術コミュニティから大きな精査を受けています。
Unsafe Rustの使用
レビュアーが提起した主な懸念は、unsafe ブロックの広範な使用です。コードベースの分析により、2,664件の unsafe { と 1,835件の unsafe fn が判明しており、一部の批判者は、このプロジェクトはRustのメモリ安全性保証を活用した再設計ではなく、「生のポインタを多用したAI生成のトランスパイル」であると主張しています。
信頼性 vs. テストカバレッジ
コミュニティメンバーは、テストスイートに合格することと、本番環境での利用準備ができていることの区別を強調しています。批判者は、PostgreSQLの信頼性は単なる回帰テストではなく、数十年にわたる「現実世界のプロダクションでの傷跡」に由来すると主張しています。さらに、標準のPostgres回帰テストは、新しいスレッドアーキテクチャを具体的に検証していないことが指摘されており、これは潜在的な失敗の重要なポイントとなります。
ソフトウェアの書き換えにおけるLLMの役割
pgrustの開発は、大規模なシステムの書き換えにLLMを使用することの実現可能性について、より広範な議論を巻き起こしています。
「AI書き換え」パラダイム
観察者は、LLMが関与する場合のソフトウェア開発方法の変化に注目しています。
- レビューの可能性: 従来のコードレビューは非現実的になりつつあります。あるレビュアーは、1ヶ月足らずで生成された7,101件のコミットを人間がレビューすることは不可能であると指摘しました。
- テストへの過学習: LLMが、テストスイートに対して解決策を「過学習」させるリスクがあります。つまり、テストを文字通りの仕様として扱い、意図された一般的な動作を実装するのではなく、特定のデータポイントをパスするためにコードをモンキーパッチする可能性があるということです。
- メンテナンス: AIによって生成されたプロジェクトは、有機的なプロジェクトの成長に伴う規律を著者が獲得していない可能性があるため、メンテナンスがより困難になると主張する人もいます。また、将来のコントリビューターは、コードを理解したり修正したりするためだけにAIトークンを消費しなければならなくなるかもしれません。
近代化の可能性
逆に、一部の人々は、LLMが、以前は手動での移植が困難すぎたレガシーなインフラストラクチャを、現代的な言語やフレームワークに移行することを容易にすると主張しています。この視点によれば、ソフトウェア検証の検証の未来は、人間のコードレビューから、より堅牢な回帰テストスイートと「evals」へと移行していくでしょう。
法的およびライセンスに関する考慮事項
pgrustのライセンスについては、継続的な議論が行われています。元のPostgreSQLプロジェクトはPostgreSQLライセンスを使用していますが、pgrustはAGPL-3.0の下でライセンスされています。これは、元のソースコードに基づいた書き換えが、元のライセンスに縛られるべきかどうかという疑問を提起しています。