uutils coreutils がコンパイラ風のエラー診断を導入:エラーの位置をキャレットで指し示す
Pointing at the error: compiler-style diagnostics in uutils coreutils
uutils coreutils 0.11.0 から、test や chmod、tr、sort などのコマンドで引数のパースエラーが発生した際、エラーメッセージにソース行とキャレットを表示し、問題の箇所を正確に示すようになりました。これは Rust コンパイラの診断に触発されたもので、ariadne ライブラリを使用しています。エラーは stderr がターミナルの場合のみリッチ表示され、スクリプトやパイプでは従来のメッセージが維持されます。UUTILS_DIAG 環境変数で制御でき、NO_COLOR にも対応。28 のユーティリティが対象で、findutils や sed など他の uutils プロジェクトにも展開予定です。
Unix ツールはエラーを stderr に 1 行で報告します。その行は何が間違っていたかを示しますが、どこが間違っていたかは示しません。
- discardable_dan
コンパイラのエラー処理は、私の仕事の中で最も面白い部分になってきました。計算してみれば、コンパイラへの呼び出しのほとんどはエラーを返す呼び出しです。だから、それらの呼び出しは本当に可能な限り最高のエラーを生成する必要があります!(LLMの世界ではそうでもないかもしれませんが、確かにその直前まではそうでした。)スパンを追跡し、余分なアルゴリズム作業を行い、期待が失敗した理由を調査して、ユーザーに最も情報量の多いエラーを提供することは、メインの計算パスに対する余分な作業です。しかし、それは配当をもたらします:簡単に診断できるバグと、コード自体に存在する迅速な修正です。スパンを追跡して元の定義を指し示すことなどは、何がうまくいかなかったかを正確に説明するエラーを見るまでは、常に配管作業のように感じられます。そして、それを見れば、もはやエラーは、網を投げかけようとするフラストレーションではなくなります。
- shakna
これらすべてをTTSエンジンにかけてみてください。はい、実際に指示された情報があることは非常に役立ちます。しかし、それを行うためにTUIを使う必要があるのが気になります。偶然ではありませんが、私はほとんどの時間JAWSを使っています。
- emilfihlman
クールな革新です(実際に良くてクールです)。しかし、まずRust版をC版と同じように動作させてからにしてください。正しく機能する必要があるソフトウェアに、複雑さを追加し、互換性を壊し、新しいバグを導入するのは非常識です。