英文:
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
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论