关于什么是语法糖,什么不是,我参照的是维基的说法:
https://zh.wikipedia.org/wiki/%E8%AF%AD%E6%B3%95%E7%B3%96“指计算机语言中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员使用。”
1. 为什么 async/await 不仅仅是语法糖,
因为带有 async/await 的代码段会被 C# 编译器插入状态机代码。这已经改变了代码原来的含义了。
2. delegate 对应到 C++ 的相同作用的应该是类似于 std::bind,std::bind 就不是一个 class 或者别的语法结构的替代物。硬要用 class 来表示的话,至少也得支持重载 operator() ;
可惜这两者 Java 都不支持。所以说 delegate 就是 interface 的简化版,要么蠢要么坏。
3. LINQ 只是一个 SQL 语言嵌入在 C# 里面,可以用函数以及一些类来组合表示达到同样的效果?
这样想纯粹是因为那些人只会写 SQL。
SQL 有 delete update insert 这些 LINQ 都没有,也不需要。
因为 LINQ 实际上是表达一个 C# 的语法树结构 AST,并且 C#编译器保证这个 AST 至少能符合 C#语义
然后,有了 AST,你就可以在不同的场合 interpret 也好,compile 也好,让它做不一样的事情。
例如在 与数据库交互的领域,你可以让这个 AST 翻译成对应的 SQL。
如果你自己写一个数据库,你也可以直接解析运行这个 AST 而不需要 转一遍 SQL。
管这些叫语法糖??
这种代码及数据 的在编程语言中的实践,除了 LISP F# C# ,目前我还不知道别的通用编程语言能做到。
你喜欢认为这是语法糖的话,你开心就好。