Jacquard 0.1: AIが記述し、人間がレビューするコードのためのプログラミング言語

Jacquard 0.1: AIが記述し、人間がレビューするコードのためのプログラミング言語

Jacquard 0.1は、コードの大部分が機械学習モデルによって記述され、人間によってレビューされるという体制のために設計されたプログラミング言語です。この言語は、人間がAI生成コードの全行を読み込む必要なく、「このコードは何に触れることができるのか?」「どの程度確実なのか?」といった、セキュリティと信頼性に関する重要な質問に言語自体が答える能力を提供することに焦点を当てています。

明示的なエフェクト追跡と権限の付与

Jacquardは、言語レベルで副作用の透明性を強制します。すべての関数シグネチャは、それが実行する可能性のあるエフェクトを明示的に宣言するため、レビュアーはコードの断片が何を実行できるのかを一目で確認できます。

  • エフェクト・シグネチャ: (text) ->{net} text のようなシグネチャは、その関数がネットワーク操作 (net) を実行する可能性があることを示します。
  • 言語レベルの強制: Jacquardのランタイムは、--allow フラグ(例: --allow net または --allow fs)を通じて明示的に権限が付与されない限り、未処理のワールド・エフェクトを拒否します。
  • アンビエント権限の排除: 従来の言語とは異なり、ファイルシステムやネットワークへの暗黙的なアクセス権限はありません。権限はランタイムに対して明示的に付与される必要があります。

マルチワールド実行とシミュレーション

Jacquardは、外部世界を管理するハンドラを入れ替えることで、同じプログラムを異なる「ワールド」に対して実行することを可能にします。これにより、従来のモック(mocking)に代わる、言語の第一級機能としての機能を提供します。

  • ワールド・ハンドラ: ハンドラは、プログラムの外部世界へのリクエストに応答するコンポーネントです。ハンドラを入れ替えることで、開発者は同じコードを実際のネットワーク、スクリプト化されたフェイク、過去のトラフィックの記録、またはサーバーの挙動の確率モデルに対して実行することができます。
  • 決定論的なテスト: このアーキテクチャにより、ワールド・ハンドラを変更するだけで、「APIがダウンした場合にエージェントはどう動くか?」といったシナリオのテストが極めて容易になります。

離散確率論的プログラミング

Jacquardは、確率論的プログラミングを組み込みのランタイム機能ではなく、深いマルチショット・ハンドラを備えた代数的エフェクトによって可能にされるライブラリとして扱います。

  • マルチショット・ハンドラ: ハンドラは、計算を0回、1回、または複数回再開させることができます。これにより、有限の離散モデルにおいて、到達可能なすべての結果とその確率を正確に列挙することが可能になります。
  • ライブラリとしてのベイズ推論: ハンドラはプログラムの継続(continuation)を制御できるため、sampleobserve 操作はエフェクトとして実装され、異なる推論アルゴリズム(likelihood weightingなど)はハンドラとして実装されます。
  • プログラム修正: この言語は、失敗したテストを「観測」として扱い、さまざまな候補パッチの確率を計算することで、プログラム修正を行うために使用できます。

構造的同一性とコンテンツ・アドレス指定

フォーマットや名前変更によるノイズを避けるため、Jacquardは、コードの正規化された解決済み構造に基づくコンテンツ・アドレス指定を使用します。

  • 正規化ハッシュ: Jacquardは、ソースのバイト列ではなく、プログラムの解決済み構造をハッシュ化します。これは、コメントの変更、フォーマットの変更、またはローカル変数の名前変更が、プログラムの同一性を変化させないことを意味します。
  • 構造的ディフ (Structural Diffing): この言語は、テキストの変更ではなく、ロジックの変更を識別する構造を認識するディファ(differ)を提供します。
  • 効率的なキャッシュ: 純粋なテストは、正規化されたコードまたはその依存関係が変更された場合にのみ再実行されるため、冗長な計算が削減されます。

技術的実装とツール群

Jacquard 0.1は、OCaml checkerとCPS interpreterとして実装された研究用プロトタイプです。Cコードを出力するネイティブAOT (Ahead-of-Time) バックエンドを含んでおり、それはその後 clang や gcc を介してコンパイルされます。

  • カーネルAST: この言語は、すべての形式が27個のカーネル形式からなる (head, meta, args) トリプルで表される、一様な表現に基づいています。

  • Nativie Compilation: jac build コマンドは、カーネルの .jqd キャリアをスタンドアロンのバイナリにコンパイルします。完全なエフェクト・ランゲージがコンパイルされる一方で、セキュリティ上の理由から eval 操作はインタプリタ・ティアに留まります。

  • Warp Testing: このプロジェクトには、コンテンツ・アドレス指定されたキャッシュを備えた、発見的およびプロパティベースのテスト用フレームワークである Warp が含まれています。

コミュニティの洞察と批判

プロジェクトがエフェクト追跡とコンテンツ・アドレス指定のアプローチに対しては称賛されていますが、コミュニティのメンバーからは、AIエージェントのための新しい言語の採用について懸念が示されています。

"AI中心の新しいプログラミング言語における明らかな問題は...、使用しようとするあらゆるLLMはゼロから始めることになり、コピーできるものがなく、自分で見つけることができるドキュメントもほとんどありません。"

他の批判者は、エフェクト・システムが本質的に洗練された型システムと何が違うのか、あるいはワールド・モデリング機能が単に依存関係注入(dependency injection)の一種ではないかと疑問を呈しています。

現在の制限事項

研究用プロトタイプとして、Jacquard 0.1には明示的な非目標と制限事項があります。現在はVM/JIT、並行処理、連続分布、勾配、型付きステージング、および形式的な健全性証明が欠ません。ワールド・グラント(権限付与)は粒度が粗く、言語の機能はまだ本番環境での使用を意図していません。

Sources