前言
编程语言的错误处理,是一项比较重要的功能,对于开发、测试的调试和线上发现问题都有很重要的意义。下面对比一下各种语言之间的错误处理。
对比
C语言的错误处理比较原始,通过返回状态码来区分成功还是失败,通过文档来标识各种状态码的含义。这种方式对程序员并不友好,但是性能应该是最棒的。
Java的错误处理是经典的try-catch和throw,并且将系统错误(Error)和程序错误(Exception)分离开来。Exception分编译时异常(Checked Exception)和运行时异常(RuntimeException),区别在于抛出编译时异常的函数需要在签名上加上throws。
Rust的错误处理也分系统错误和程序错误,使程序错误用代数数据类型,即枚举Result,成功时是Some(x),值是x,错误时是Error(e)。系统错误则使用panic,类似于throw。
其他语言的错误处理,基本也是差不多的思路,如果有别的方式,请大家帮忙补充一下。
观点
对于调试错误来说,一个很重要的点是函数调用栈。没有了函数调用栈,无论对调试还是查错都是致命的。当然可以通过做非常细致的日志来定位问题,但是这个工作量实在不小。
说些什么吧!