最近、ちょっとシステム寄りのRustコードをいじってて、約1年前の初期のコーパイロットを使ってC++のシステムコードにも使ったことがあるんだ。この場合、スマートなオートコンプリートが大幅な時間節約になることが分かった。実際、インタラクティブな機能やエージェント機能よりも私には価値がある。最近のバッファにあるコードの一部を紹介するね: // すべての名前付き出力が統合されている場合、命令はスキップされるべきです。 if ! self.should_keep_instr(instr) { return; } // 非ドロップは選択肢を持つべきです。 let instr_choice = choices.maybe_instr_choice(instr_ref) .expect("命令に対する選択肢がありません"); self.pick_map.set_instr_choice( instr_ref, instr_choice.clone(), ); // PIR選択肢に対してすべての名前付き定義入力をインクリメントします。 instr_choice.visit_input_defs(|input_def| { self.def_incref(input_def); }); // SIR命令に対してすべての名前付き定義入力をデクリメントします。 instr.visit_inputs( |input_def| self.def_decref(input_def, sir_graph) ); 実際に私が書いたのはコメントだけなんだ。構文を打ち込む必要がないのはかなり大きな節約だよ。手動コーディングの80%はそれに費やされてたと思う。ちょっとしたタイプミスやフォーマットを整えるための微調整が多いからね。もう一つの良い点は、LLMを信頼する必要がないこと。各スニペットをその場で評価できるし、通常は機械が他のコードベースやファイルから構文スタイルやセマンティクスをうまく拾って適用してくれる。スニペットは明らかでない場合、私が作業しているコンパイラのバックエンドコードの一部からのものだよ。この支援がなければ、余暇にコンパイラのバックエンドを書くことなんて絶対に試みなかったと思う。経験豊富な開発者にとって、オートコンプリートは開発スピードの大幅な効率向上に十分だね。エージェントインターフェースにはまだ慣れてないけど、LLMが正しいコードを信頼性高く生成するとは思えないから、いつもレビューしちゃうし、グリーンフィールドコードのレビューは書くよりも多くの作業になることが多い(特に今はオートコンプリートが書くのを速くするのに役立ってるから)。