编译器有多少种报错或警告比较合适

猜测通用且成熟的语言应该会较多,尤其是系统编程语言。rust 有 五百左右,C 约一百五十,python 只有 七十左右。差距挺大。

领域专用语言应该与领域复杂度等有关。postgresql 约三百,sqlite 约一百,R常见的 约一百三十

1 个赞

一般来说静态类型语言报错类型就要多一些,动态类型要少一些,特别是一些带GC的报错会更少,因为GC封装了内存这一最容易出问题的东西。。。

动态类型,带GC的脚本语言报错信息类型会少很多,如果愿意可以在动态检查类型时都可以不报错,直接返回一个null或者undefined,NaN等等,这样还能减少很多报错信息类型,故意减少报错信息类型也有好处:在写一些简单的脚本时,会很容易上手,一把梭哈。当然程序大了,就显得不太好调试了。

1 个赞

还是要看语言给用户的定位。
静态类型语言的类型静态检查系统就是要尽可能的检查出类型错误,报错当然会多很多,C语言的类型检查不太严格存在不少隐式类型转换,Rust,C++等类型检查会严格很多,报错也会多很多。

动态类型相反,就是要屏蔽类型检查这个东西,虽然运行时动态检查类型,但是任然会故意减少一些(甚至完全屏蔽)类型检查错误,浏览器中的JavaScript就是这样减少了不少类型检查错误,你的网页脚本怎么写浏览器都很少报错,都能跑起来,至于是不是你想要的结果,浏览器就不管了。

此外不带GC,不封装内存,你的语言,必然要引入不少概念去抽象内存,比如指针,结构体,联合体等等,这些概念的引入也会带来不少语法及一些衍生错误信息。

1 个赞