今天的会议,Anders 的 session 座无虚席,Anders 回顾了一下C#的历史,以及展望了未来,然后着重提了几个特性。

C# 1.0, 大概98年11月份开始组件团队,马上就10年了。关键词:Managed Code,托管代码

C# 2.0, 提出了,Generics

C# 3.0, 主要是Linq

那么C# 4.0呢?

Anders 提到目前语言的几个方向,或者是以后的趋势

  • Declarative,所谓声明性语言,比如 Linq,他重点强调是关注做什么,而不是怎么做。或者类似SQL语言一眼
  • Dynamic,动态语言,这个比如当前流行的Ruby,Python,动态语言有动态语言的优势
  • CoCurreny,并发,或者说并行计算。目前进入多核时代,PDC上Intel,AMD 也都有自己的工具让你的C++程序来profile问题更好支持多核,以及编译器的支持。

其中CoCurrent,CLR 4.0多了一个并行计算的类库,也有PLinQ,比如PLinq.For等

动态语言,以前有IronPython,这个版本会有完整的Runtime支持

比如 Dynamic Typed Object、 Optional and Named Parameter,这个特性就是可选参数以及命名的参数,VB.NET 很早就有了,过了10年,C#才有。Anders开玩笑说,这就叫Co—Evolution,可以说互相学习吧,为了VB.NET会跟C#特性尽可能的一致。

然后就是COM Interop,所谓的NoPIA的问题,以前做Office应用的时候,一个小的C#应用,比如访问Excel的Com 互操作,可能就要Reference一个1M多的Assembly。现在C#可以动态的把用到的接口和类型,嵌入到Assembly中,这个成为Assembly Embedding,而对于多个版本的问题,比如一个接口,不同版本,只要GUID一样,则可当作一个type,彼此可以互相CAST,只是运行的时候会约束方法参数一致,所谓Type Safe。

然后开始演示Dynamic ,包含了Expression Tree,Dynamic Dispatching,Call Site Caching。

下面则是不同的Binder,比如对JS,Python,Ruby的Binder

一个Demo是关于Silverlight的,我们知道在Silverlight的C#代码中,如果你要访问JS的话,大多会用

HtmlWindow.Invoke(“Foo”,Parameters)

那么现在改为

Dynamic win=HtmlWindow.AsDyanmic

可以直接Call

win.Foo(parameters) 运行的时候,Runtime会解析和派遣到对应的方法。

这时候Foo是JAVA Script写的一个方法,后来觉得还不过瘾。能不能用C#来写呢?

改为

private Foo()

{

Dynamic map=Window.New.Map();

map.Load(para)…

}

鼓掌。。。

然后演示了一下Python的集成

比如Define add(x,y):

return x+y;

dynamic foo=pyahoruntime.load(“your.py”)

foo.add(x,y),直接调用

当然Python本来就是动态语言,你可以add(1,2),也可以add(Datetime.Now, timespan)

然后着重讲一下Dynamic,当然如果是Dynamic对于值类型的话,其实没有什么花样,在编译的时候就已经知道类型。对于动态的类型,runtime 在运行的时候派遣到对应的对象,方法。

Dynamic对象,有一个IDynamicObject接口,主要包含了一些GetMember,Invoke的方法。

也可以在C#中自己定义个一个动态对象。

比如

Foo:IDynamicObject

{

SetMember()

GetMember()

}

然后dynamic foo=new Foo();

foo.X=Value

foo.Y=Value

就会调用我们定义的SetMember方法。

然后我们可以写一个Generic的Helper方法。

比如

void DumpPrice(dynamic obj)

{

Console.Writeline(obj.Price + obj.Name)

}

不过是动态对象还是静态对象,只要有Price和Name两个member,都可以被DumpPrice方法调用

所谓的Dispatch可以到动态对象,也可以到静态对象

接下来演示了可选参数以及命名方法。

现在你可以这样定义方法了

SaveFIle(string filename,  int fileSize=1204,encoding coding=null)

你调用的时候可以

直接Saveas(”foo.txt”)

也可以SaveAS(“foo.txt”,fileSize:2034)

还可以打乱顺序,SaveAS(“foo.txt”, encoding:xyz, fileSize:2222)

又是鼓掌…

然后提了一下Co Contra Variance的问题。下面的代码,在3.0是不可能编译通过的。一个是Invariant问题一个是Contravariance问题

CodedelegateT Func1<outT>();delegatevoidAction1<inT>(T a);staticvoidMain(string[] args)
        {
            Func1
<Cat>cat=()=>newCat();
            Func1
<Animal>animal=cat;

Action1<Animal>act1=(ani)=>{ Console.WriteLine(ani); };
            Action1
<Cat>cat1=act1;

Console.WriteLine(animal());
            cat1(newCat());
        }

IEnuamable<Object> 不等于IEnuamble<string>

多了一个IEnuamble<out T> 或者 <in T>

编译的时候就可以更安全检查

最后展望了更未来的版本

Anders说他很看好Meta Programming,可是目前的Compiler是个黑盒子,NativeC++写的。开发人员不能控制Comipler任何的行为。

以后Compiler 会变成一个Service,可以在你编译或者runtime的时候加入你自己的逻辑。

比如可以有一个Eval方法

CSharpEvaluator eval=new CSharpEvaluator();

eval.reference.add(“system”)

eval.eval(“for(int i=0;i<10;i++)  Console.WriteLine(i)”)

则会执行你输入的C#代码,有了这个你就可以快速做一个C#解释器,嘿嘿。不超过50行代码,Anders就Show了一个

这是这次的主要内容,供大家参考

转载于:https://www.cnblogs.com/montaque/archive/2008/10/28/1321131.html

PDC - C#4.0 以及未来相关推荐

  1. Web 3.0的未来之路

    "因为稀有才是珍贵的,而水是最便宜的,但最好的." --柏拉图,<欧西德摩斯> 30多年前,第一个网页是在欧洲核子研究中心所创建的,由Tim Berners-Lee爵士 ...

  2. 零碳馆2.0展现未来科技

     没有iphone之前,诺基亚还是市场的老大,安卓也没有出现,手机仅仅是通话的工具.而iphone,一部集ipod.手机和互联网沟通工具于一体的设备,重新改造了手机,也重新改变了我们的生活方式.如 ...

  3. 加密听证会观点概览,美国监管首次强调Web3.0是未来

    听证会全程,BTC就在50000美元附近小幅波动. 作者:郝方舟 出品 | Odaily星球日报(ID:o-daily) 北京时间 12月 8 日 23 时,美国众议院金融服务委员会(House Co ...

  4. 抓虾的未来和Web3.0的未来

    郑昀 2007-4-26 jumpblack这几天写了一篇<"好看"无益--说说抓虾推出的新功能>,进一步引发了我和他对抓虾的讨论. 我的观点是: 用户也有了,内容也抓 ...

  5. 什么是 Web 3.0:面向未来的去中心化互联网

    前言 Web 3.0 可能是基于公共区块链的未来互联网模式,公共区块链是一种用以促进加密货币交易的记录保存系统. Web 3.0 的最重要的地方在于它是去中心化的,这意味着用户不是通过腾讯.阿里.百度 ...

  6. 未来十年将是Web3.0发展的黄金十年

    自2021年元宇宙元年开启元宇宙发展新势头起,各路资本纷纷下场,互联网大厂布局不断. 元宇宙概念"指数自2021年9月起一路高升,3个月累计涨幅高达72.6%:腾讯.阿里.百度.字节.上汽等 ...

  7. 封仲淹:OceanBase社区版4.0未来畅想

    8 月 10 日,2022 OceanBase 年度发布会在京沪深三地同时召开,OceanBase 资深开源生态技术总监封仲淹在会上分享了<OceanBase 社区版 4.0 未来畅想>的 ...

  8. Web3.0游戏是否还有未来?

    当前Web3.0领域已经大规模减速. 对大多数投资者来说,Web3.0游戏是一个炒作噱头,他们更关心投资回报,不那么在意真正交付给玩家的游戏产品,游戏的中长期运营也就失去了保障,今年以来的各种Web3 ...

  9. 什么是 Web 3.0?:未来去中心化互联网————初学者指南

    目录 Web 3.0 解释 网络的演变 什么是 Web 1.0? 什么是 Web 2.0? 什么是 Web 3.0? 什么是加密货币中的 Web 3.0? Web 2.0 与 Web 3.0 Web ...

最新文章

  1. 脱机多维数据集CUB文件的生成
  2. Vue.js——十分钟入门Vuex
  3. mongodb学习笔记(2)--curd
  4. C语言存储类、作用域、声明周期、链接属性
  5. HDU - 6955 Xor sum tire树 + 贪心
  6. JavaFX UI控件教程(四)之Button
  7. 产品经理必须要掌握的12种思维模型
  8. 添加notepad到右键菜单栏
  9. LeetCode题解-23 合并K个排序链表 Hard
  10. 读《JavaScript权威指南》笔记(三)--对象
  11. php redis 查询,Redis慢查询日志 PHP中使用redis – 安装扩展模块
  12. 6.深入分布式缓存:从原理到实践 --- Memcached 周边技术
  13. 简单理解混淆矩阵—Matlab详细代码注解
  14. hadoop无法停止
  15. bzoj 2959: 长跑
  16. python中Blowfish加密解密
  17. linux驱动系列学习之DRM(十)
  18. 制作Android开机动画 bootanimation.zip
  19. Ubuntu安装SqlServer
  20. 什么是CSS,CSS的使用

热门文章

  1. vue中使用swiper的一些坑
  2. BOM,DOM常见操作和DHML
  3. [linux内核]將ubuntu更新到最新的内核
  4. spring secrity(二)
  5. 论坛答疑SQL(二)
  6. Wannafly挑战赛9
  7. bash魔法堂:History用法详解
  8. Hadoop之父Doug Cutting
  9. 浅谈android中的目录结构
  10. 30秒的PHP代码片段(2)数学 - Math