## 背景 我是搞C++的,当然也会用Java、Go等。我最近连续遇到好几个try-catch导致不知道错误源头的问题。这让我特别烦心。这也促使我最近反复思考,到底计算机编程语言错误处理应该怎么设计才是“好的”?C C 的错误处理很原始。就是用全局的错误码或者用返回值或者类似的等价物。对于简单的场景,这个很好使。但对于类似要从很底层向很外层传递一个错误的场景,这种方式的就特别麻烦。基本上没发做好!Java Java 往往被吐槽,一层套一层的try-catch,写起来实在麻烦。一个芝麻大点功能,动不动就是四五个异常要处理。这也导致很多人往往会直接捕捉所有异常了事。C++ C++ 可以用C的处理方式,也有Java的异常机制。两种方式都可行,这看起来很完美。但这也意味着C++也有C和Java的错误处理方式的所有缺点。C++的异常不是必须的。你可以随意忽略异常。它的异常机制和错误码是两套独立的机制,还不能同事使用。搞 C++ 的同学也容易写出捕获所有异常的代码。导致我前面遇到的问题。真的一言难尽。Go go有两种错误处理机制,一个是通过返回值返回error对象,这跟C的错误码机制差不多。缺点可想而之,被吐槽N多年了。go还有个panic-recover错误处理机制。这东西初看很简单,但是控制力太弱,约束也多。用得很少。Rust Option 模式是从Rust大力推广开的。但这也也没解决跨层错误传递的问题 问题 编程语言的错误处理,到底应该怎样设计才好?
为编程语言设计怎样的错误处理方式才是“好的”?
请登录之后再进行评论
登录