这篇文章 随意 的 记录 关于 D# 语法的想法 。
template 和 interface 同时作为一等公民
D# 是程序员的语言,不需要太多包装和修饰,
D# 是 简单的, 编译器 和 IDE 都是, 程序员 的 语言 是 简单的
let , 类似 js 的 let, 用以 支持 完备 的 闭包 特性,一般 的 变量 相当于 js 的 var , 加上 let 相当于 js 的 let,比如 let string s ;
可以起到 在 循环 中 给 闭包 传递 变量 的 作用,
Task 库
返回多个 返回值,比如 D# 中
public (int i, string s) Foo()
{
int i;
string s;
…… // 对 i, s 操作
return (i, s);
}
var r = Foo();
r.i …… // r.i 表示返回的 i
r.s …… // r.s 表示返回的 s
编译为 InnerC 是这样:
struct R<>1
{
int i
string s,
}
Foo()
{
R<>1 r ;
r.i …… // 对 i 操作
r.s …… // 对 s 操作
……
return r ;
}
R<>1 r = Foo() ;
r.i …… // r.i 表示返回的 i
r.s …… // r.s 表示返回的 s
D# 是否 要 支持 async await 语法?
我曾经想过用 闭包 + 观察者 来 取代 async + 职责链, 但 后来 发现, 闭包 和 职责链 好像 更配,这 有点讽刺 ……
但 其实 闭包 + 观察者 也是 可以的, 比如 Cef 中 ResourceHandler 的 方法里 可以 return true / false ; 和 callback.Continue() ;
如果 当前 就处理完了 任务, 则 可以直接 return true / false, 告知 Cef 可以进行下一个任务,
如果 当前 任务 异步 执行, 则 可以 等 异步任务 完成时 调用 callback.Continue() 告知 Cef 可以进行下一个任务 。
今天看到 群 里 有 网友介绍 kooboo json 使用 表达式树 提高效率 , https://github.com/Kooboo/Json/blob/master/Kooboo.Json/Formatter/Deserializer/Expression/CollectionBuild.cs
这样当然很好, 但是我还是觉得 表达式树 太复杂 了,我觉得应该写 C# 代码 来 动态编译 就可以 。
比如
“ obj.name = dataRead [ \“ name \” ] ; ”
这是 ORM 里 给 Entity 属性 赋值 的 代码, 这可以算是 C# 脚本 。
这种做法 只是 第一次 编译时 可能 比 表达式树 多一点时间 , 编译完成后 运行效率 是一样的 。
其实 第一次 编译时 也多不了 多少时间, 只是 多了 文本语法分析 的 时间 。
以后 D# 也要这么干, 提供 动态编译,支持 D# 脚本 。
D# 是 不会 提供 C# 那样的 表达式树 的 。
C# 的 表达式树 就是 面向对象 泛滥 的 结果, 认为什么都可以用 对象 来表达,
其实 字符串 表达的会更好 。
在 D# 看来, C# 的 Emit 和 Expression 是没有意义的堆砌 。
在 D# 脚本 看来, C# 的 Emit 和 Expression 是 不需要 的 。