ErrorGuaranteed
これまでのセクションでは、コンパイラのユーザーが目にするエラーメッセージについて扱ってきました。しかし、エラーを発行することには、コンパイラのソースコード内でもう 1 つ重要な副作用があります。それは、ErrorGuaranteed を生成することです。
ErrorGuaranteed は、rustc_errors クレートの外部では構築できないゼロサイズ型です。これはエラーがユーザーに報告されるたびに生成されるため、コンパイラコードが ErrorGuaranteed 型の値に遭遇した場合、そのコンパイルは_静的に失敗することが保証されます_。これは、エラーのコードパスが失敗につながることを静的に確認できるため、健全性を損なうバグを避けるのに役立ちます。
ErrorGuaranteed の使用については、いくつか重要な考慮事項があります。
- これはエラーの_種類_に関する情報を伝えません。たとえば、そのエラーは(間接的に)遅延バグや他のコンパイラエラーに起因している可能性があります。
したがって、エラーを発行するかどうか、またはどの種類のエラーを発行するかを決定する際に、
ErrorGuaranteedに依存すべきではありません。 ErrorGuaranteedは、コンパイルが将来エラーを_発行する_ことを示すために使用すべきではありません。これは、エラーが_すでに_発行されていること、つまりemit()関数がすでに呼び出されていることを示すために使用すべきです。たとえば、コンパイラの将来の部分でエラーになることを検出したとしても、まず自分たちでエラーまたは遅延バグを発行しない限り、ErrorGuaranteedを使用することは_できません_。
ありがたいことに、ほとんどの場合、ErrorGuaranteed を誤用することは静的に不可能であるはずです。