英文:
Why all Java Errors are not considered fatal in Scala?
问题
在Scala 2.13文档中,关于NonFatal的描述如下:
> 用于提取非致命的可抛出异常。不会匹配致命错误,比如VirtualMachineError(例如,OutOfMemoryError和StackOverflowError,VirtualMachineError的子类),ThreadDeath,LinkageError,InterruptedException,ControlThrowable。
为什么只有这些错误/异常被认为是致命的?在Java8中,有更多的Error子类,每个都表示“合理的应用程序不应该尝试捕获的严重问题”。其中包括CoderMalfunctionError,FactoryConfigurationError和IOError。我不会声称知道这些错误的确切含义,但如果Java认为这些错误是严重问题,为什么Scala不应该也这样认为呢?
英文:
In the Scala 2.13 docs, the description for NonFatal is:
> Extractor of non-fatal Throwables. Will not match fatal errors like VirtualMachineError (for example, OutOfMemoryError and StackOverflowError, subclasses of VirtualMachineError), ThreadDeath, LinkageError, InterruptedException, ControlThrowable.
Why are only these errors / exceptions considered fatal? In Java8, there are more Error subclasses, each of which "indicates serious problems that a reasonable application should not try to catch". Example of these include CoderMalfunctionError, FactoryConfigurationError, and IOError. I won't claim to know the precise meanings of these errors, but if Java thinks these errors are serious problems, why shouldn't Scala also think the same?
答案1
得分: 3
SethTisue提出了类似的问题
> @viktorklang to be honest, I don't really understand why any Error would be
> considered NonFatal. the JVM already has the Error vs non-Error
> distinction, I've never been especially clear on why NonFatal adds an
> additional level of classification.
viktorklang回答道
> @SethTisue "Error is a subclass of Throwable that indicates serious
> problems that a reasonable application should not try to catch." -
> https://docs.oracle.com/javase/8/docs/api/java/lang/Error.html
>
> The problem is that there are quite a few unreasonable applications
> out there, and since Error is extendable it is impossible to say that
> all Errors are fatal.
因此,似乎由于野外存在足够多违反 Error 预期语义的应用程序,Scala 的贡献者们对将它们全部定义为致命的感到犹豫不决。
还考虑一下关于以下评论的 gitter 讨论
> Edmund Noble @edmundnoble 于 2018 年 2 月 22 日 19:39 说
>
> 据我所知,Error 应该是致命的。虽然正如 @Ichoran 所说,也有例外情况,但我认为它们不太明确,基本上你需要列出你认为不是致命的错误。
英文:
SethTisue asked a similar quesiton
> @viktorklang tbh I don't really understand why any Error would be
> considered NonFatal. the JVM already has the Error vs non-Error
> distinction, I've never been especially clear on why NonFatal adds an
> additional level of classification.
and viktorklang replied
> @SethTisue «An Error is a subclass of Throwable that indicates serious
> problems that a reasonable application should not try to catch. » -
> https://docs.oracle.com/javase/8/docs/api/java/lang/Error.html
>
> The problem is that there are quite a few unreasonable applications
> out there, and since Error is extendable it is impossible to say that
> all Errors are fatal.
Hence it seems that because there are sufficient number of applications in the wild which violate the intended semantics of Error, then Scala contributors were hesitant to define them all as fatal.
Also consider gitter discussion around the following comment
> Edmund Noble @edmundnoble Feb 22 2018 19:39
>
> Afaik Error is supposed to
> be fatal Though as @Ichoran says there are exceptions, I just don't
> think they're well-defined, and you basically need to whitelist the
> errors you think aren't fatal
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论