一个语言特性能扯到多线程上,这思路也真是开阔到没谁了。java 做不到看到 a = 3,非得指三为零,不意味着别的语言也非得这样。比如 python,完全不存在这个问题。
我已经说了,这个世界上除了 java 以外,还有一种东西叫常识。因为只知道 java,理所当然的认为只有 java 世界里的知识是常识,其它语言只要跟 java 不一样就“奇葩之处多如牛毛”。这个问题纯粹是一个很简单的语言设计的问题,根本没有任何的复杂性。出于某种原因,java 选择直接抄了 c++ 的设计,而同期的其它语言(py、rb、delphi)根本就不存在这种问题。
我并不否认学编程是需要一定智商的,我个人觉得,如果连 js 里 this 这么简单的东西都搞不清楚的话,或者是理解不了 pure function、declarative ui 这些概念的话,智力水平是不太适合干这行的。js 因为历史包袱的原因,的确有很多坑存在,比如前面 sort 的例子,或者是 [...].map(parseInt) 这类东西。但是这些其实都是小问题,因为都是可以通过 linter 来解决的。靠 linter 解决不了的问题,除了 number 是 ieee-754 64位浮点数,而 json 标准又没规定 number 类型的精度这个坑以外,我还真想不出来什么。
顺便说一下,2010年后流行的新语言,除了历史原因需要 class 以外(kotlin、swift),几乎都不再选择 oop 的设计。java 设计的那么完美,为啥新语言都不再抄它了?
【 在 RuralHunter 的大作中提到: 】
: 设计要以最小惊讶原则我同意,可惜这只是理想,不是现实,计算机世界本来就不是直觉世界。我想现实中不存在任何这样一门语言靠常识就足够,要不然学习编程也太简单了。不要说计算机语言,连这样的自然语言都不存在。要论不违反直觉,java恰恰是违反直觉最少的语言之一。反而
: 琷s才是数一数二的违反这一原则的语言,里面奇葩之处多如牛毛,甚至还有人拿这些点专门出了本书。
: 至于什么看到a=3后面a就应该肯定等于3就是乱来了,照你这么说所有多线程的冲突都是违反直觉,或者多线程就不应该存在。这个世界上本来就是有复杂的东西,需要你花一定时间理解,不是你说我不想看到它它就不应该存在了。
: ...................
--
FROM 203.184.25.*