前几天面试,说到 ES6 ,有两个面试官都问我,如何看 ES6,第一次我说到箭头函数,我说他是语法糖,然后忘记了他重要的 this 绑定,但是它也的确实现了语法糖。第二次我说 ES6 新增了类的概念,面试官又告诉我 ES6 的类只不过是语法糖而已,我于是又说 ES6 以前的实现起来是使用原型模式,工厂模式, ES6 才终于有了 class bar extends foo 。
其实要在我看来,所有的高级编程语言,都是机器语言的语法糖,看你怎么理解。
1
wohenyingyu02 2017-03-09 19:15:15 +08:00 via iPhone
C 语言难道不是汇编语言的语法糖么
|
2
jixiangqd 2017-03-09 19:17:37 +08:00
已经被官方定义的语法,怎么能理解成语法糖?连语法糖的定义都没搞懂,面试官水平不行,不要去了。
|
3
afpro 2017-03-09 19:19:52 +08:00
类怎么能是语法糖呢 举个例子 kotlin 里面的 obj?.method() 实现了自动判 null 可以写成 obj == null ? null : obj.method() 这是语法糖
但是 kotlin 里面的 lambda 就不是语法糖了 因为有各种优化在里面 不能用直观的方式实现出来 至于所有语言都是机器语言的语法糖的说法 举一个极端点的例子 haskell 就不是用语法糖就能解释的通的 从提出语言到实现第一个编译器经历了几年时间 就是因为里面的一些纯函数式概念不好实现 总结一下 楼主对语法糖的说法有点强词夺理的感觉 |
4
holyghost 2017-03-09 19:20:00 +08:00
总感觉抽象和语法糖应该不是一回事
|
5
phrack 2017-03-09 19:21:22 +08:00 via Android
不这么认为,高级语言和机器语言是两个完全不同的东西。
|
6
SuperMild 2017-03-09 19:27:45 +08:00
面试官说得对。关于语法糖的定义在 wikipedia 里说得很清楚。
说 ES6 的类是语法糖,其含义是那不是真的类,它并没有使 JS 变成严格意义上的面向对象语言,其实现原理仍然只是原型链而已。 |
7
Cbdy 2017-03-09 19:39:15 +08:00
现在的计算模型基本就是图灵机(与一阶逻辑、 lambda 演算完全等价),机器语言只是对图灵机的建模,只是计算模型的一个实现
程序设计语言当然不是机器语言的语法糖,事实上很多东西都可以计算,比如 dna 计算机、量子计算机,高级机器语言翻译成 dna 计算机的'指令',里面就没有寄存器、没有机器码了 计算的本质是数理逻辑,是对人思维的仿真,所以现代语言越来越像人说话 不是一切都是语法糖哦 |
8
jybox 2017-03-09 19:41:09 +08:00 via iPhone 1
确实大部分是语法糖,不过 generator 和 symbol 这种特性就不是语法糖了。
|
9
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. |
12
gy134340 2017-03-10 01:42:41 +08:00 via Android
汇编语言难道不是 1010 的语法糖
|