怎么用人话说明 Java 和 JavaScript 的区别?

2015-11-25 23:20:13 +08:00
 irockytan

我和媳妇在讨论妇产科妇科产科的区别...我说就和别人不理解 Java 和 JavaScript 的区别一样,我也不知道妇科产科妇产科的区别...然后她就问我了, Java 和 JavaScript 有什么区别?
我就不知道该怎么和她说了....
她是人事...

8642 次点击
所在节点    Java
70 条回复
clifftts
2015-11-27 15:31:39 +08:00
就是没有关系 ,还用解释这么复杂
brucefeng
2015-11-27 17:32:55 +08:00
一个妹子跟你说“你真傻”和“你真傻逼”的关系
Cathy0571
2015-12-04 09:29:00 +08:00
作为一个 HR 表示,我能从技术说两者是干嘛的,但是我不会说人话啊
joyee
2015-12-05 02:50:21 +08:00
@HentaiMew V8 没有解释器,只有编译器。没有解释执行,只有源代码->机器码->执行,而不是源代码->执行。即使不优化,也照样编译成机器码,然后执行机器码,也就是说跟 C/C++编译器是一个路子。

ECMAScript 完全没有要求过 JS 需要怎样被运行,所以并不存在什么 “ JS 无需编译成字节码即可被执行的本质”……那些都是“实现细节”……
HentaiMew
2015-12-05 09:15:07 +08:00
@joyee 脚本语言的最基本的本质之一就是无需编译成二进制文件,直接执行源代码,不然就不能算脚本。
告诉你吧,所有 JS 引擎全部都有“解释器”和“编译器”。只有执行的步骤和内部细节区别。 JS 是脚本语言,无需编译即可执行,这门语言诞生就是如此,不需要改变。任何 JS 运行时都需要保证这个最基本的条件,任何 JS 运行时在执行时最终都会将程序解释成机器码, V8 只是在执行前解释成了机器码并且缓存起来。
wxcwater
2015-12-05 14:21:39 +08:00
老婆跟老婆饼,雷锋跟雷峰塔,或者说他俩都姓 ja ?
joyee
2015-12-06 05:33:45 +08:00
@HentaiMew “所有 JS 引擎全部都有“解释器”和“编译器””这种论调是哪里来的, V8 就没有解释器,真的没有,不信你看 https://channel9.msdn.com/Shows/Going+Deep/Lars-Bak-and-Steve-Lucco-Chakra-V8-JavaScript-Open-Source , Lars Bak 还表示了对解释器的不屑…… V8 是开源的,你完全可以去看他的源代码,看过你就知道了,他只有编译器,区别只在于 baseline compiler 编译出的是没有优化的机器码, crankshaft 编译出的是优化过的机器码,从来没有解释执行一说……那照你这么说他非得编译成机器码才能执行 JS 引擎, V8 就不算 JS 运行时了么= =
joyee
2015-12-06 05:36:40 +08:00
@HentaiMew 另外编译和解释这种不都算实现细节么,和语言无关,除了 Java 这种自带 JVM Spec 的,没有什么本质之说……你要想解释, C/C++也是能直接解释执行的啊,大把人写 C/C++ 的解释器做 toy project 玩儿呢……那 C/C++ 就变成脚本语言了?
HentaiMew
2015-12-06 14:33:49 +08:00
@joyee 例如 Java 这种执行平台无需解释源代码,因为 JVM 有字节码规范,无论源码是怎样的,只需要编译成遵守规范的 JVM 字节码都可以执行。哪怕源代码不是 Java 语言,例如 scala 或者 clojure 或者 groovy 。但是 JS 是靠源代码执行的,无论任何 JS 的运行时都要读懂源码,况且 V8 不是唯一一个及时编译的 JS 引擎,火狐的 JS 引擎也可以。 JS 是不是脚本语言怎么能跟运行时扯上关系呢,无论它在那个平台执行,它就是脚本语言,改变不了
joyee
2015-12-06 14:48:13 +08:00
@HentaiMew 不我的意思是。。即使没有 JIT , V8 也是编译成机器码再执行的,你看过那个对谈就知道了,如今其他所有主流 JS 引擎确实都是解释器+JIT 编译器的架构,但 V8 还真不是,也毫无意愿加解释器。我纠结的点是,人家明明不需要解释器啊, ES 里啥都没规定,那些属于实现细节。。你真要做 AOT ,也不是不可以(不过 eval 和 with 需要 workaround )。。 JS 当然是脚本语言了,名字里都摆着。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/238956

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX