我在Java 8中经常听说'糖化'和'贬低',这些术语是什么意思?他们是概念性的还是语法式的。
一些例子:
默认迭代循环重新发布到java
编辑中的句法糖观察。
在编程中,糖通常指的是那些甜蜜的补充,主要是快捷方式,使一些结构更容易打字和阅读(后者在实践中是程序生命周期中最重要的)。
维基百科有syntactic sugar的定义,但你应该注意到并非所有的糖本质上都是语法的(并非所有最近的甜味添加都只是编译器的变化)。
这里有一些例子 :
i++
和++i
)。他们唯一的目的是避免写一个额外的声明。他们是纯糖。+=
,|=
,&=
等由同一种糖制成。人们普遍认为Java不够简洁,特别是与现代语言相比。这就是为什么欢迎那些有助于使代码更快阅读的新增功能。
最后,我要注意的是,虽然缺糖可以使你的程序变胖,过多的糖,导致许多不同的方式来编写相同的东西,可以使你的语言不安,你的程序不那么连贯,更难维护。另一种糖,API糖,通常是一种瘟疫,使API更难掌握,特别是当它由添加物(例如超载)组成时。
这就是说,desugaring指的是
“Desugaring”似乎在Java 8中具有非常具体的含义。表达lambda表达式可能绑定到实际具体方法调用的各种方式似乎是一个包罗万象的术语。
关于"Translation of Lambda Expressions"的这个文件似乎有关于如果你对细节感兴趣的事情的真实细节。
该文件的一个关键短语:
将lambda转换为字节码的第一步是将lambda体转化为方法。
通常,javac中的“desugaring”允许用预先存在的语言表示某些语言特征。这允许在字节码中表示它们,而无需对类文件格式进行大的更改。也是因为这个原因,编译器的后端比前端更稳定。这并不意味着每个新的语言特征都只是语法糖,因为绝对不是lambdas和方法引用的情况。编译器中有更多“desugaring”的例子:
您还可以调查String开关发生的情况,键入擦除,...