Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ErrorGuaranteed

これまでのセクションでは、コンパイラのユーザーが目にするエラーメッセージについて扱ってきました。しかし、エラーを発行することには、コンパイラのソースコード内でもう 1 つ重要な副作用があります。それは、ErrorGuaranteed を生成することです。

ErrorGuaranteed は、rustc_errors クレートの外部では構築できないゼロサイズ型です。これはエラーがユーザーに報告されるたびに生成されるため、コンパイラコードが ErrorGuaranteed 型の値に遭遇した場合、そのコンパイルは_静的に失敗することが保証されます_。これは、エラーのコードパスが失敗につながることを静的に確認できるため、健全性を損なうバグを避けるのに役立ちます。

ErrorGuaranteed の使用については、いくつか重要な考慮事項があります。

  • これはエラーの_種類_に関する情報を伝えません。たとえば、そのエラーは(間接的に)遅延バグや他のコンパイラエラーに起因している可能性があります。 したがって、エラーを発行するかどうか、またはどの種類のエラーを発行するかを決定する際に、ErrorGuaranteed に依存すべきではありません。
  • ErrorGuaranteed は、コンパイルが将来エラーを_発行する_ことを示すために使用すべきではありません。これは、エラーが_すでに_発行されていること、つまり emit() 関数がすでに呼び出されていることを示すために使用すべきです。たとえば、コンパイラの将来の部分でエラーになることを検出したとしても、まず自分たちでエラーまたは遅延バグを発行しない限り、ErrorGuaranteed を使用することは_できません_。

ありがたいことに、ほとんどの場合、ErrorGuaranteed を誤用することは静的に不可能であるはずです。