惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
S
Security Affairs
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
Microsoft Security Blog
Microsoft Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
美团技术团队
月光博客
月光博客
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
有赞技术团队
有赞技术团队
博客园 - 叶小钗
Hugging Face - Blog
Hugging Face - Blog
Microsoft Azure Blog
Microsoft Azure Blog
V
V2EX
Vercel News
Vercel News
阮一峰的网络日志
阮一峰的网络日志
腾讯CDC
C
Cisco Blogs
T
Tor Project blog
The Hacker News
The Hacker News
雷峰网
雷峰网
MyScale Blog
MyScale Blog
博客园 - 司徒正美
AWS News Blog
AWS News Blog
GbyAI
GbyAI
Y
Y Combinator Blog
D
DataBreaches.Net
Simon Willison's Weblog
Simon Willison's Weblog
S
Securelist
The GitHub Blog
The GitHub Blog
S
SegmentFault 最新的问题
T
Tenable Blog
L
LangChain Blog
M
MIT News - Artificial intelligence
N
Netflix TechBlog - Medium
The Cloudflare Blog
A
About on SuperTechFans
IT之家
IT之家
F
Fortinet All Blogs
Security Latest
Security Latest
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
NISL@THU
NISL@THU
爱范儿
爱范儿
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
W
WeLiveSecurity
A
Arctic Wolf
I
Intezer
Application and Cybersecurity Blog
Application and Cybersecurity Blog

博客园 - montaque

xp 与 windows 7 共享收藏夹 Microsoft ILM V2 新特性 云计算 PDC , XAML 2009以及未来 PDC , KeyNote2 个人计算,Windows 7+ Live Service PDC 第一天总结 PDC 2008 WPF/Silverlight 中利用XamlReader /Writer 来处理对象的序列化反序列化 让你的Expression XAML 编辑器支持智能提示 silverlight 测试 Powershell 脚本自动下载 FTP Server上面固定格式的文件 EDI batch Receiving in Biztalk 2006 R2 EDI Party Resolution in Biztalk R2 EDI in Biztalk 2006 R2 Hello,Biztalk 2006 R2 BAM, WCF 集成 Hello, Biztalk 2006 R2 BAM what's new in Biztalk 2006 R2 hello biztalk R2 Mix08
PDC - C#4.0 以及未来
montaque · 2008-10-28 · via 博客园 - montaque

今天的会议,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问题

Code

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了一个

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