D# 语法
这篇文章 随意 的 记录 关于 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# 语法的更多相关文章
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
- 探索C#之6.0语法糖剖析
阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...
- [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性
回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性 序 目前最新的版本是 C# 7.0,VS 的最新版本为 Visual Studio 2017 RC,两者都尚未进入正式阶段.C# 6.0 ...
- Velocity初探小结--velocity使用语法详解
做java开发的朋友一般对JSP是比较熟悉的,大部分人第一次学习开发View层都是使用JSP来进行页面渲染的,我们都知道JSP是可以嵌入java代码的,在远古时代,java程序员甚至在一个jsp页面上 ...
- node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法
1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...
- C#语法糖大汇总
首先需要声明的是"语法糖"这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕 ...
- 值得注意的ibatis动态sql语法格式
一.Ibatis常用动态sql语法,简单粗暴用一例子 <select id="iBatisSelectList" parameterClass="java.util ...
- Flex 布局教程:语法篇
作者: 阮一峰 网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便 ...
- postgresql 基本语法
postgresql数据库创建/修改/删除等写入类代码语法总结: 1,创建库 2,创建/删除表 2.1 创建表 create table myTableName 2.2 如果表不存在则创建表 crea ...
随机推荐
- 20175224 2018-2019-2 《Java程序设计》第八周学习总结
教材学习内容总结 第十五章 泛型与集合框架 泛型 泛型:目的为建立具有类型安全的集合框架. 泛型类声明:class People<E> class 名称<泛型列表> 链表 定义 ...
- n个骰子的点数之和
题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为S.输入n,打印出S的所有可能的值出现的概率. 解题思路:动态规划 第一步,确定问题解的表达式.可将f(n, s) 表示n个骰子点数的和为s的排列 ...
- nginx——配置 Nginx 防盗链
什么是防盗链:简单地说,就是某些不法网站未经许可,通过在其自身网站程序里非法调用其他网站的资源,然后在自己的网站上显示这些调用的资源,使得被盗链的那一端消耗带宽资源 (1) 根据 HTTP refer ...
- 精进之路之lru
原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”. 实现1 最常见的实现是 ...
- python自动生成bean类
近期在学习python,一直在和java做对比,目前没有发现有通过字段自动生成getter setter方法,故此自己写了一个类,可以通过__init__方法传入类名和字段数组,再调用内部的方法,就可 ...
- Maven可以使用mvn package指令对项目进行打包,如果使用Java -jar xxx.java
Maven可以使用mvn package指令对项目进行打包,如果使用Java -jar xxx.jar执行运行jar文件,会出现"no main manifest attribute, in ...
- IIs实验,中间件漏洞
实验一.IIS实验 1.修改端口 开始→管理工具→Internet 信息服务(IIS)管理器,属性,将端口改为 8080 如图: 2. IP 地址绑定 前面步骤同第一题一样,将 Ip 改为本 ...
- 学习笔记--python中使用多进程、多线程加速文本预处理
一.任务描述 最近尝试自行构建skip-gram模型训练word2vec词向量表.其中有一步需要统计各词汇的出现频率,截取出现频率最高的10000个词汇进行保留,形成常用词词典.对于这个问题,我建立了 ...
- 神州数码NAT地址转换配置
实验要求:熟练掌握NAT地址转换的配置方法 拓扑如下 R1 enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface s0/1 进入端口 ip ad ...
- 通过JQuery的$.ajax()把 json 数据 post 给 PHP
通过JQuery的$.ajax()把 json 数据 post 给 PHP时的几种情况: 无法在PHP中通过$_POST 以及 $_REQUEST 获取json数据,即 $json = $_POST[ ...