原文
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
原始链接: https://news.ycombinator.com/item?id=44032995
这篇 Hacker News 讨论帖谈论了类型推断和编译器错误信息。原文重点关注如何设计类型推断以生成高质量的错误信息。 要点: * **错误信息的目标:** 关于错误信息是否应该“证明”代码无效,还是仅仅解释编译器为什么无法验证它,存在争议。普遍观点倾向于为用户提供可操作的信息以纠正他们的代码。 * **编译器复杂性:** 生成有用的错误信息非常困难,尤其是在处理复杂的转换或元编程时,错误的根本原因会被掩盖。 * **实际限制:** 许多类型系统并不完整。良好的语言设计需要在表达性和实际类型检查之间取得平衡。重载可能是一个挑战,导致一些人更喜欢显式类型注解。 * **编译器作为诊断工具:** 一位评论者认为编译器的主要功能是提供人类可读的错误信息。这可以与代码风格检查器分开。 * **Ada 的类型安全:** Ada 被认为是类型安全的典范。
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
> The job of a compiler error message is to prove to the user that their code is invalid
The job of the compiler error message is to convey why the compiler couldn’t demonstrate the code is correct. The code may be valid but the compiler just can’t prove it (analyses are sound but not complete unless the language is strongly normalizing)
reply