C#:昨天,今天和明天:和 Anders Hejlsberg 座谈,第二部分
源贴地址:
C#: Yesterday, today, and tomorrow
作者:John Osborn
<chsdate year="2005" month="10" day="17" islunardate="False" isrocdate="False" w:st="on">10/17/2005</chsdate>
翻译:我要去桂林
Osborn:
回到和语言相关的问题,我现在还是想说说LINQ。微软 Visual Stuido .NET 的产品经理 Tony
Goodhew 在一次访谈中说过,微软的研究表明越来越多的人倾向于在编程中使用2种或者更多的语言来工作。好像现在有一种感觉,这就是语言只是 syntactic
sugar 语法糖块。你选择某种语言是因为你对他最满意。
你认为现在有这种变化吗?我们以前没有过多谈过这方面的。
Hejlsberg:
好吧,的确没有谈过,但是语法是不是走到了尽头?我的意思是我们只是用 XML 文档来描述抽象语法树来表现你想做的,这也是一种语法,但是很显然,这对程序员来说并不怎么有用。因此,我认为编程语言在人们的脑海中占据这一个特别的位置,如果人们用语言说话是表达自己的一种方式,程序语言也和自然语言一样用来表达你自己的。
实际上,语法是编程语言的组成和表现形式,在很多方面,语法影响你如何思考你的程序,等等。因此,我认为语法很重要,非常重要。
Osborn:
那么从语法的角度来看,C#有什么特别的呢?你能给我们描述一下吗?
Hejlsberg:
好,我认为我们现在所说的面向组件类的特点是极为重要的。我们努力的做到没有其他的方法可以做这件事情。我们尝试发现语法间的协同,我的意思是:这很难用语言来精确的形容。那我们来看看语言级别集成的LINQ查询吧。这个可扩展的模型是:我们采用方法调用的方式来实现这一点。当你使用 where ,
orderby 和 select 语句来写查询语句的时候,我们把这个转换成对等的方法调用:Where,
OrderBy 和 Select 集合。我们把你写的查询作为 Lambda 表达式语句传递给相关的方法。
这样,查询就变成连在一起的方法调用,从而查选也变得可读性更好,这就像一个语言胶水一样。上面的转换是立即执行的,如同 foreach 循环转换成:从while 循环中获得一个数字一样。这个小小的改进非常有利于你在更高的层次上思考问题。你明白我的意思吗?
Osborn:明白。
Hejlsberg:从这方面来讲,语法在很大程度上影响了你如何思考问题的,尽管这些语法上的东西根本和事情本身毫无关系。
Osborn:
是的。从书籍出版商的角度来看,我们公司自己的历史数据上显示,古老的C++语言有自己的地盘,在书籍出版量上只有很少的增长;去年VB的销量下降了百分之20到百分之25。C#
书籍销量还算平稳。但是很平淡。
Hejlsberg:哦,这样呀。
Osborn:
情况很清楚,从我们的销量来看,似乎有股从VB转向到C#的动向,或者其他的。可是C++却自始至终占领者一部分市场。
Hejlsberg:
没错。VB 和 C# 在同一个程序员的群体里是相互竞争的。C++ 扮演这一个特别的角色,可是C++的核心是写非托管的代码,是相对底层的编程。我知道我刚才是泛化的说明,你也可以使用
STL 来作基于模板的编程。标准模板库有他伟大的地方。我只是说,从更广泛的背景上看C++写出的应用程序和用 VB 和 C# 写出的程序是应用于不同的目的的。
Hejlsberg:对于C++应用领域的跌落,我感到并不惊讶。
Osborn:
我知道一个人不能用C++来写托管代码。
Hejlsberg:
从个人出发点来看,我也不会用它来写托管代码。但是,你要是让我来写一个编译器,这可不能是托管代码,那我还是会用C++的。经过这么多年的发展,我认为作为一条通用的规则,写托管代码的理由会越来越多。原因很简单啦,硬件变得更加强大,牺牲点
CPU 和内存来换取更高的生产效率来说就变得更重要了。我觉得这时一个非常有价值的命题。并且,我坚信这会逐渐的成为共识。另外,托管世界的也变得更加精彩啦。也就是,越是有创新的地方就越有更多的程序被企业所应用。
泛型和C#
Osborn:
侃了这么多,我们来说点关于 C# 2.0 的事情吧。很明显,C# 语言朝着泛型的方向发展有很长一段时间了。
Hejlsberg:没错。
Osborn:
那么,相对于其他的语言而言C#的泛型有什么不同呢?
Hejlsberg:
哈哈,靠,很明显我更想让你说:就在C#和Java之间比较吧。
Osborn:没错,我也是这个意思。
Hejlsberg:
首先,我非常高兴的我们在2.0里面加入了泛型编程。你现在看我们做的C# 3.0 里面的很多东西都是泛型在起作用。这的确是意义深远的,引入泛型后为类型系统开辟了一个新的空间,也打开了实现更多可能性的大门。比如:没有泛型的帮助,我们不可能做到语言级别集成的查询LINQ。从这个意义上讲,这是更多有趣功能后面的发动机。泛型也是现实编程世界里的解决方法的好帮手。
对,有更多的类型是很好的,这意味着你可以更快的发现错误,因为只有很少的运行时动态检查程序的类型,因此你可以写出很好的代码来。
现在,看看 java 和 C# 这对冤家吧,从语法学上面看两者实现泛型的形式是很相似的。他们都像 C++ 的模板,这是继承下来的。
现在我们抛开表面看本质,Java 和 C# 的泛型实现机制是截然不同的。我认为最大的不同在于:.NET平台下的泛型不只是一个语言特色。泛型根植于
CLR 和 .NET 的类型系统。这也就是为什么泛型可以在运行的时候表现出来。
而 Java 则选择了另一个不同的方式实现泛型,一言以蔽之,他们是在编译时实现的。而且 Java 编译器把泛型化从代码中移除了,并注入了对象,有效的对象替代了类型参数信息。也就是说呀,Java 在运行时根本没有泛型这一说。这就有意思啦,一方面可以让泛型跑在一个未经修改的 VM 虚拟机上,另一方面强加给你很多让然吃惊的限制和规则。相对于我们的泛型实现来说,java
的泛型并不能带来性能的收益,很显然吗,不管外表 List<T> 看起来多么泛型,Java 在运行时压根没泛型这马事儿,你不得不自己做运行时的动态检查和类型转换。
更微妙的是,因为 Java 没有在运行时的泛型信息,你从你的编译后的代码丢失了泛型信息。。如果在运气期间,有人给你一组自定义的对象,他们传递给你的仅仅是对象,如过你想从对象中推测是这些对象的更多信息是办不到的,因为额外的信息已经被移除了。
在现实世界里,我们越来越多的依赖运行中代码和动态行为的动态生成和检查,而Java 的泛型实现对我来说,是很大问题,他缺少程序运行时候的真实表现。
Osborn:
牛呀,这么说 .NET 实现的泛型允许我们……
Hejlsberg:
太对了。如果我定义一个 List<T> 作为一个 object , 我可以问 “这是什么“?系统可以告诉我,这是一个列表。他还可以告诉我们,这是一个
List<T> ,T 代表 Customers 类。我还可以说:为什么不给我一个 System.Type 的 List<T>也可以是,你为什么没有把
T 绑定到 Order ?也就是说我们可以把类型转换为 List<Order> ,并创建他的一个实例。说了这么多,总之,我可以通过反射在编译的时候,在运行的时候来实现上述功能,这是一个巨牛的功能呀。
C#:昨天,今天和明天:和 Anders Hejlsberg 座谈,第三部分
第三部分讲:匿名方法和 lambda 表达式和LINQ 的关系。
分享到:
相关推荐
Visual C# .NET 是 Visual Studio .NET 的产品套件的组成部分,该产品套件还包括 Visual Basic .NET、Visual C++ .NET 和 JScript 脚本语言。所有这些语言都支持对 Microsoft .NET Framework 的访问,该框架包括一个...
它首次将组件概念作为第一等公民,这意味着在C#中,属性、方法和事件都是组件的核心部分。设计时和运行时的属性使得开发者可以对组件进行更精细的控制和自定义。此外,C#通过XML集成文档,提供了一种无缝的编程体验...
在编译阶段,C#编译器会将泛型代码编译为包含类型参数的中间语言(IL)和元数据。当程序运行并首次引用具体类型的泛型类时,如 `List<int>`,JIT编译器会根据实际类型参数生成相应的本机代码。这意味着每次使用不同...
**C#** 是一种现代的、面向对象的编程语言,由 **Anders Hejlsberg** 和 **Scott Wiltamuth** 共同编著的《C#语言参考》是一本权威性的技术书籍,详细介绍了 C# 语言的核心特性和高级功能。 ##### 1.1 Hello, World...
2. **类型系统**:C#有严谨的类型系统,包括基本类型(如int、float等)、引用类型和值类型。类型系统统一化意味着所有类型(包括用户定义的类型)都直接或间接地继承自System.Object,实现了类层次结构的统一。 3....
Deep Inside CSharp---An Interview with Microsoft Chief Architect Anders Hejlsberg
C#是一种现代、通用的、面向对象的编程语言, 由Anders Hejlsberg和Scott Wiltamuth开发。C#语言是Microsoft公司推出的第一个真正面向对象的编程语言,具有强大的功能和灵活性。 C#语言的主要特点是: 1. modern...
C# 是由 Anders Hejlsberg 和他的团队在 .Net 框架开发期间开发的。 C# 是专为公共语言基础结构(CLI)设计的。CLI 由可执行代码和运行时环境组成,允许在不同的计算机平台和体系结构上使用各种高级语言。
《QT024-微软C#语言参考》是由Anders Hjlsberg和Scoot Wiltamuth共同编著的一本技术专著,这本书详细阐述了C#编程语言的核心概念和技术,对于深入理解C#及其应用至关重要。Anders Hjlsberg是C#的主要设计者之一,...
本书由C#语言的架构师Anders Hejlsberg和设计小组的成员编写,并为C# 2.0进行了更新。全书从C#语言的简介开始,完整并详细地介绍了C# 1.0的技术规范,并介绍了许多C# 2.0的新功能,包括泛型、匿名方法、迭代器、分部...
C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一...
C#(读作 "C sharp")是一种面向对象的编程语言,由微软公司开发并由Anders Hejlsberg主导设计。C# 是 .NET 框架的主要编程语言,于2000年首次发布。它的设计受到了C++和Java等语言的影响,旨在提供强大的编程能力...
入门部分包括第1章和第2章,介绍了C#语言的新特性和它与其他编程语言的比较,以及C#的开发工具,尤其是*** Framework SDK中的编译工具。编者的意图是让读者能够快速了解C#的基本概念,并掌握其在.NET平台上的应用...
C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一...
C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一...
《C#语言规范》是C#编程领域的重要参考资料,由其创始人Scott Wiltamuth 和 Anders Hejlsberg共同打造,全面深入地阐述了C#编程语言的核心概念、语法和特性。这本书的中文翻译版使得中国程序员能更方便地理解和学习...
C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一...
C#是一种现代的面向对象的编程语言,由Microsoft的首席设计师和首席架构师Anders Hejlsberg于2000年开发。 它的发音为“ C-Sharp”,其灵感来自音符“♯”,该音符代表音调稍高的音符。 由于它被认为是C ++语言的...