这篇文章 随意 的 记录 关于 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. Oracle数据库各种名字的区别

    数据库名(DB_NAME).数据库实例名(INSTANCE_NAME).操作系统环境变量(ORACLE_SID).数据库服务名(SERVICE_NAME).数据库域名(DB_DOMAIN)以及全局数据 ...

  2. 【译】如何编写“移动端优先”CSS

    原文链接:https://zellwk.com/blog/how-to-write-mobile-first-css/ 构建响应式网站是如今前端开发者的必备技能,当我们谈到响应式网站时,“移动端优先” ...

  3. Python第七章(北理国家精品课 嵩天等)

    7.1文件的使用 1.1文本类型 文本文件:由单一特定编码组成的文件,如.txt 二进制文件:如.png,.avi 1.2文件的打开和关闭 打开-操作-关闭 <变量名> = open(&l ...

  4. 关于MySQL5.7开启bin-log主从复制

    主从复制:一般用于实时备份.也可配合mycat,实现读写分离. 传统的基于 ROW的主从复制 简单说下步骤: master主库配置同步,slave从库配置同步,master锁表/备份,slave恢复数 ...

  5. sql嵌套查询

    嵌套查询的意思是,一个查询语句(select-from-where)查询语句块可以嵌套在另外一个查询块的where子句中,称为嵌套查询.其中外层查询也称为父查询,主查询.内层查询也称子查询,从查询. ...

  6. php优秀框架codeigniter学习系列——CI_Input类学习

    这篇文章主要介绍CI核心框架工具类CI_Input. 根据CI文档自己的定义,该类用来: 提前处理全局变量,以保证安全; 提供一些帮助函数用来处理输入数据. 以下选取类中的重点方法进行说明. __co ...

  7. Java学习——方法

    在这一次的学习中我觉得首先要了解: 什么是方法呢 方法又怎么定义与调用 上面这段代码是我们经常写到的,其实它就是一个方法,其中 public 是修饰符 void是返回值类型 main就是方法名 arg ...

  8. 清华机试中手机键盘问题求解 java 和 c

    题目描述:按照手机键盘输入字母的方式,计算所花费的时间 如:a,b,c都在“1”键上,输入a只需要按一次,输入c需要连续按三次.如果连续两个字符不在同一个按键上,则可直接按,如:ad需要按两下,kz需 ...

  9. 玩转BLE(2)_使用bluepy扫描BLE的广播数据

    1. 前言 在linux平台下,bluez是一个很不错的软件,提供了很多基于命令行的测试工具,如hciconfig.hcitool.hcidump.bluetoothctl等.利用这些工具,我们可以方 ...

  10. 易语言 - 模块 - 子程序 - 纯真IP数据库查询

    .版本 .支持库 spec .程序集 程序集1 .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码 _临时子程序 () ' 在初始化代码执行完毕后调用测试代码 返回 () ' ...