关于语法糖的讨论

2017-03-09 19:09:09 +08:00
 zhangolve

前几天面试,说到 ES6 ,有两个面试官都问我,如何看 ES6,第一次我说到箭头函数,我说他是语法糖,然后忘记了他重要的 this 绑定,但是它也的确实现了语法糖。第二次我说 ES6 新增了类的概念,面试官又告诉我 ES6 的类只不过是语法糖而已,我于是又说 ES6 以前的实现起来是使用原型模式,工厂模式, ES6 才终于有了 class bar extends foo 。

其实要在我看来,所有的高级编程语言,都是机器语言的语法糖,看你怎么理解。

2950 次点击
所在节点    程序员
14 条回复
wohenyingyu02
2017-03-09 19:15:15 +08:00
C 语言难道不是汇编语言的语法糖么
jixiangqd
2017-03-09 19:17:37 +08:00
已经被官方定义的语法,怎么能理解成语法糖?连语法糖的定义都没搞懂,面试官水平不行,不要去了。
afpro
2017-03-09 19:19:52 +08:00
类怎么能是语法糖呢 举个例子 kotlin 里面的 obj?.method() 实现了自动判 null 可以写成 obj == null ? null : obj.method() 这是语法糖
但是 kotlin 里面的 lambda 就不是语法糖了 因为有各种优化在里面 不能用直观的方式实现出来
至于所有语言都是机器语言的语法糖的说法 举一个极端点的例子 haskell 就不是用语法糖就能解释的通的 从提出语言到实现第一个编译器经历了几年时间 就是因为里面的一些纯函数式概念不好实现

总结一下 楼主对语法糖的说法有点强词夺理的感觉
holyghost
2017-03-09 19:20:00 +08:00
总感觉抽象和语法糖应该不是一回事
phrack
2017-03-09 19:21:22 +08:00
不这么认为,高级语言和机器语言是两个完全不同的东西。
SuperMild
2017-03-09 19:27:45 +08:00
面试官说得对。关于语法糖的定义在 wikipedia 里说得很清楚。

说 ES6 的类是语法糖,其含义是那不是真的类,它并没有使 JS 变成严格意义上的面向对象语言,其实现原理仍然只是原型链而已。
Cbdy
2017-03-09 19:39:15 +08:00
现在的计算模型基本就是图灵机(与一阶逻辑、 lambda 演算完全等价),机器语言只是对图灵机的建模,只是计算模型的一个实现
程序设计语言当然不是机器语言的语法糖,事实上很多东西都可以计算,比如 dna 计算机、量子计算机,高级机器语言翻译成 dna 计算机的'指令',里面就没有寄存器、没有机器码了
计算的本质是数理逻辑,是对人思维的仿真,所以现代语言越来越像人说话

不是一切都是语法糖哦
jybox
2017-03-09 19:41:09 +08:00
确实大部分是语法糖,不过 generator 和 symbol 这种特性就不是语法糖了。
freestyle
2017-03-09 22:28:55 +08:00
@jixiangqd https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes 第一段
JavaScript classes introduced in ECMAScript 2015 are syntactical sugar over JavaScript's existing prototype-based inheritance. The class syntax is not introducing a new object-oriented inheritance model to JavaScript. JavaScript classes provide a much simpler and clearer syntax to create objects and deal with inheritance.
zhangolve
2017-03-09 23:03:11 +08:00
@freestyle 这个好,有理有据,学习了。
lkytal
2017-03-10 01:17:06 +08:00
@SuperMild 原型怎么就不算面向对象了...
gy134340
2017-03-10 01:42:41 +08:00
汇编语言难道不是 1010 的语法糖
SuperMild
2017-03-10 07:19:55 +08:00
@lkytal 原型链不是严格意义上的面向对象,缺少了一些典型功能, JS 不是真正的面向对象语言,这是普遍公认的。 C++之父曾专门写过一篇文章说明什么是面向对象,比较经典了,那个判断方法有一定权威性。
jixiangqd
2017-03-10 09:22:19 +08:00
@freestyle 学习了。。。。

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

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

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

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

© 2021 V2EX