Xel*_*ian 99 java java-8 semantics
我在Java 8中经常听说'糖化'和'贬低',这些术语是什么意思?他们是概念性的还是语法式的.
一些例子:
默认迭代循环重新发布到java
编辑中的句法糖观察.
Den*_*ret 121
在编程中,糖通常指的是那些甜蜜的补充,主要是快捷方式,使一些结构更容易打字和阅读(后者在实践中是程序生命周期中最重要的).
维基百科有一个句法糖的定义,但你应该注意到并非所有的糖本质上都是语法的(并非所有最近的甜味添加都只是编译器的变化).
这里有一些例子 :
i++和++i).他们唯一的目的是避免写一个额外的声明.他们是纯糖.+=,|=,&=等都是由同种糖的.人们普遍认为Java不够简洁,特别是与现代语言相比.这就是为什么欢迎那些有助于使代码更快阅读的新增功能.
最后,我要注意的是,虽然缺糖可以使你的程序变胖,过多的糖,导致许多不同的方式来编写相同的东西,可以使你的语言不安,你的程序不那么连贯,更难维护.另一种糖,API糖,通常是一种瘟疫,使API更难掌握,特别是当它由添加物(例如超载)组成时.
这就是说,desugaring指的是
Sho*_*orn 16
"Desugaring"似乎在Java 8中具有非常具体的含义.表达lambda表达式可能绑定到实际具体方法调用的各种方式似乎是一个包罗万象的术语.
关于"Lambda表达式的翻译"的这篇文章似乎有关于如果你对细节感兴趣的事情的真实细节.
该文件的一个关键短语:
将lambda转换为字节码的第一步是将lambda体转化为方法.
正如其他人所指出的,在计算机编程和本文中,“糖”是指使代码更易于读/写的语言功能。“脱糖”是指当编译器或运行时缺乏对加糖版本的本机支持时,自动将“糖”结构转换为其他结构。
对于 Java,这些概念在 Android 环境中经常出现。Android 不包含 JDK,而是 Java 运行时的重新实现。因此,对新的 Java 语言功能的支持取决于 Android 对新语言功能的支持。目前,所有 Android 应用程序都可以使用脱糖来支持所有 Java 7 功能以及 Java 8 功能的子集。有关详细信息,请参阅“使用 Java 8 语言功能和 API”。
这里有一篇文章详细介绍了 Android 中的 Java 脱糖功能:“Android 的 Java 8 支持”。根据这篇文章,lambda 实际上总是在 Android 二进制文件中进行去糖操作(“这就是为什么无论您的最低 API 级别如何,总是在编译时进行去糖操作。”)
通常,javac中的“ desugaring”允许使用预先存在的语言功能来表示某些语言功能。这样就可以用字节码表示它们,而无需对类文件格式进行大的更改。同样由于这个原因,编译器的后端比前端更稳定。这并不意味着每个新语言功能都只是语法糖,绝对不是lambda和方法引用的情况。编译器中还有更多的“ desugaring”示例:
您还可以调查String开关,擦除类型,...