这篇文章 随意 的 记录 关于 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    是 不需要 的   。

D# 语法的更多相关文章

  1. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  2. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  3. 探索C#之6.0语法糖剖析

    阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...

  4. [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性

    回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性 序 目前最新的版本是 C# 7.0,VS 的最新版本为 Visual Studio 2017 RC,两者都尚未进入正式阶段.C# 6.0 ...

  5. Velocity初探小结--velocity使用语法详解

    做java开发的朋友一般对JSP是比较熟悉的,大部分人第一次学习开发View层都是使用JSP来进行页面渲染的,我们都知道JSP是可以嵌入java代码的,在远古时代,java程序员甚至在一个jsp页面上 ...

  6. node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法

    1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...

  7. C#语法糖大汇总

    首先需要声明的是"语法糖"这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕 ...

  8. 值得注意的ibatis动态sql语法格式

    一.Ibatis常用动态sql语法,简单粗暴用一例子 <select id="iBatisSelectList" parameterClass="java.util ...

  9. Flex 布局教程:语法篇

    作者: 阮一峰 网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便 ...

  10. postgresql 基本语法

    postgresql数据库创建/修改/删除等写入类代码语法总结: 1,创建库 2,创建/删除表 2.1 创建表 create table myTableName 2.2 如果表不存在则创建表 crea ...

随机推荐

  1. μCOS-Ⅲ——临界段

    临界段代码(critical sections),也叫临界区(critical region),是指那些必须完整连续运行,不可被打断的代码段.μC/OS-Ⅲ系统中存在大量临界段代码.采用两种方式对临界 ...

  2. 1011. World Cup Betting (20)

    生词(在文中的意思) tie 平局 lay a bet 打赌 putting their money where their mouths were 把他们的钱用在刀刃上 manner of 的方式 ...

  3. L362 When to Bring up Salary During the Job Interview Process

    Money is an awkward topic of conversation for many professionals—even more so when you’re busy tryin ...

  4. js 音乐播放器

    在写之前先说下我遇到得两个问题,第一个问题是,在音乐标签,我希望得是切换数据做到得,但是出了问题,暂时为解决,第二个问题,页面切换时音乐继续播放由卡顿情况,未处理好. 好了,那我们开始做这个音乐播放器 ...

  5. python笔记——遇到一些报错

    1.TypeError: data type not understood File "C:\Users\81476\PycharmProjects\untitled1\k-临近算法\kNN ...

  6. 2019-04-22-day037-数据库的安装

    内容回顾 进程 线程 协程之间的相同点和不同点 进程 : 内存隔离 操作系统级别 开销大 可以利用多核 计算机中资源分配的最小单位 线程 : 内存共享 操作系统级别 开销中 Cpython解释器下不能 ...

  7. 编译原理子cygwin的使用

    目的:熟悉cygwin环境的使用,学习使用lex写简单的词法分析程序,会在cygwin环境下使用flex调试lex写的程序 内容:使用cygwin下的flex工具将exam1.l和exam2.l编译并 ...

  8. ASP.NET项目答辩系统课件使用中的问题记录

    使用软件:VS2008 模块一:登录模块 1-08 问题:显示属性“background”不是元素"td"的有效属性 解决:style="background-image ...

  9. jq常用

    1.文本框.密码框.隐藏域.文本域(id换成对应的,value属性存在,才能利用attr(‘value’) 获取值,否则返回undefined): 1.1 获取—>$(“#text”).val( ...

  10. mybatis 源码分析一

    1.SqlSessionFactoryBuilder  public SqlSessionFactory build(InputStream inputStream, String environme ...