• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zhangolve
V2EX  ›  程序员

关于语法糖的讨论

  •  
  •   zhangolve · Mar 9, 2017 · 3439 views
    This topic created in 3361 days ago, the information mentioned may be changed or developed.

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

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

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

    总结一下 楼主对语法糖的说法有点强词夺理的感觉
    holyghost
        4
    holyghost  
       Mar 9, 2017
    总感觉抽象和语法糖应该不是一回事
    phrack
        5
    phrack  
       Mar 9, 2017 via Android
    不这么认为,高级语言和机器语言是两个完全不同的东西。
    SuperMild
        6
    SuperMild  
       Mar 9, 2017
    面试官说得对。关于语法糖的定义在 wikipedia 里说得很清楚。

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

    不是一切都是语法糖哦
    jybox
        8
    jybox  
       Mar 9, 2017 via iPhone   ❤️ 1
    确实大部分是语法糖,不过 generator 和 symbol 这种特性就不是语法糖了。
    freestyle
        9
    freestyle  
       Mar 9, 2017
    @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
        10
    zhangolve  
    OP
       Mar 9, 2017 via Android
    @freestyle 这个好,有理有据,学习了。
    lkytal
        11
    lkytal  
       Mar 10, 2017
    @SuperMild 原型怎么就不算面向对象了...
    gy134340
        12
    gy134340  
       Mar 10, 2017 via Android
    汇编语言难道不是 1010 的语法糖
    SuperMild
        13
    SuperMild  
       Mar 10, 2017 via iPad
    @lkytal 原型链不是严格意义上的面向对象,缺少了一些典型功能, JS 不是真正的面向对象语言,这是普遍公认的。 C++之父曾专门写过一篇文章说明什么是面向对象,比较经典了,那个判断方法有一定权威性。
    jixiangqd
        14
    jixiangqd  
       Mar 10, 2017
    @freestyle 学习了。。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3054 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 60ms · UTC 02:36 · PVG 10:36 · LAX 19:36 · JFK 22:36
    ♥ Do have faith in what you're doing.