C#:昨天,今天和明天:和 Anders Hejlsberg 座谈,第三部分
源贴地址:
C#: Yesterday, today, and tomorrow
作者:John Osborn
<chsdate year="2005" month="10" day="17" islunardate="False" isrocdate="False" w:st="on"></chsdate>10/17/2005
翻译:我要去桂林
Osborn:关于增加的匿名方法有什么特点吗?我记得当匿名方法刚被人介绍出来的时候,我和其作者聊过,他说你不得不在语言中支持这样的功能,但是为什么要这么做,却说不出个所以然来。我肯定匿名方法有他的实际用处,看我们这篇报道的人也有同样的问题吧。尽管如此,在C# 3.0中支持匿名方法的特色,和泛型一样,还是很吸引人的。
Hejlsberg:那绝对是。老实说,首先,你知道我们应该把荣誉放到他应该放的地方。我并没有在这里创造什么新的东西出来。这一切都是基于 lambda 表达式或者 lambda 微积分 的,他们已经在基于函数的编程方法里存在几十年了。然而,在主流的编程语言中确看不到他们的身影。
C# 语言有幸成为第一个实现这个特色的语言。我们是怀着严肃的态度来改进它的,这一点你将在C# 3.0中看到他们的身影。我们在匿名方法的基础上做了进一步的改进,我们成为 lambda 表达式,并给了它丰富的接口支持。
Hejlsberg:为了表明这一点是如此的重要,我们来举例说明吧。在 C# 3.0 中我们引入了和语言集成的查询符号:LINQ。我们做的事情是:把查询的语言做成API的方式变成了可能。上面我说过,这些方法就是:Where,Select,OrderBy 和 GroupBy 等等。我们可以用一系列的Where ,Select ,OrderBy 和 GroupBy 方法组合起来,形成一个完整的查询。
如果你想在一种不支持匿名方法或者 lambda 表达式的语言中实现一个Where方法,这是不太可能的。一个 测试应用到每个元素上, 你知道我说的意思吗?我想说 list.Where(blah) , blah 是我希望在测试中输入的一个参数。
但这并不是一个普通意义上的参数,因为我并没有把它作为一个 布尔 值参数,很显然这个参数首先被计算,然后在传递进去。我并不想看到 真 或者 假,我只是想传递 测试 本身。你知道我刚才讲的意思吗?
Osborn:是的,你想传递一个过程,然后执行这个过程。
Hejlsberg:没错。实际上,我希望的是我引用一些代码,并且我可以执行这些代码,对不对?我希望一个方法的引用或者一个函数的引用,然后把他们传递到 Where 表达式,然后Where表达式可以为每个数据项运行这些代码,这就是测试,然后最终的结果是返回所有执行结果为真的数据项。同样的道理,如果你看看 Select 操作符是如何执行的,他和上面的道理是一样的。这就是:提供一个元素,提供一个函数他就能把元素转换成另一个元素。这就是组合的威力。
OrderBy 和这是同样的道理,提供一些元素,然后对他们进行比较。重申一遍,这些都是通过写代码实现的。在这里,最让人印象深刻的是编程语言丢失了把代码作为参数传递的能力。
Osborn:这是非常重要的功能。
Hejlsberg:这只是 lambda 表达式和匿名方法能让我们实现的一点事情。另外要补充说明的是: lambda 表达式 和匿名方法其实是一件事情。唯一的不同是:他们语法表现形式不同。Lambda 表达式是在语法方面的更进一步的进化。在本质上,他们是一件事情。他们的作用都是:产生方法。这就是:内联方法。
C# 2.0 的其他方面的亮点
Osborn:除了 泛型 和 匿名方法外 人们还应该注意 C# 2.0 的其他方面呢?
Hejlsberg:Nullable 类型,一个非常重要的进步。因为这是在数据库世界和通用编程世界的变得平等的第一步。你知道,在数据库中基于 Nullable 类型 而程序编程中确不是,因此这两者之间的映射很难说明明白有什么意义。
Hejlsberg:当然,你可以跳过这些…
Osborn:你现在要做的事情是?
Hejlsberg:在编程过程中人们经常用装箱操作。比如:为对象分配空间,然后保存数据,如果不再使用了就设置为:null。在java中做这个是非常有效率的。但是这种方法使用起来却是非常耗费效率的。因为,为了表示一个可能值为null的整数值,在java中使用Integer封装类,为每个 int 值分配空间,然后当他们是null的时候你设置值null来实现。
Hejlsberg:这不是直接发生的,你让每个int值耗费了4陪的内存空间。又很多耗费和这点相关。在 C# 使用 nullable 类型,我们可以非常高效的让你可以把对象值设置为null,可是并不给他分配内存空间。我们通过一个泛型类型:T 和 bool 来实现这个特性。这就是: Nullable<T> ,他的内部有2个字段: T 和 bool。
但是 Nullable<T> 本身也是一个值类型。这个类型实际上用了 栈分配 或者 内联分配,从内存的角度来看这是非常高效的。总之 , 我们使用语言语法来支持: nullable 。我们使用问号作为修饰语。
因此: int 是一个整形数据, int? 是一个 nullable的整形数据。可以把 int 隐式的转换成 nullable int ,其他方式的显式转换可以抛出 null 异常。这就是说:把人们常用的这种情况作为一等公民来对待。
对于我,一个语言的设计者,这个问题就是:人们在这里会做什么呢?在编程中什么是应该作为一等公民来对待的。
Osborn:这么说 C# 一种语言将会统治所有其他语言?
Hejlsberg:^_^,绝对不是啦,我真的不是这么想的。世界上还有很多其他的场合更适用于其他的语言。在 C# 的本质来说, 他是一种强类型的语言。你知道,对于很多事情来说,动态语言更适合,如果你只是准备写几行代码,并且不愿意在还没有写代码之前就要写一大堆声明。你只是想试试而已。
在语言的世界里,我希望我能够尽我所能超前发展。
Osborn:对于 2.0 来说,我们看到微软是不是也是按照标准实现的?
Hejlsberg: 2.0 吗?
Osborn:对 2.0 。
Hejlsberg:没错。从标准上说,叫:第三版,但实际上我们叫他 2.0 。
Osborn:因此这里面微软没有做什么改变吧?
Hejlsberg:没有,每个语言特色我们都提交到了 ECMA ,并且这是一个标准的过程。我们希望公平简短的社区投票,在这一点上,这的确是个问题。这些事情都已经发生了,我们已经这么干了。参考:C# 和 CLI 变得更加强大。
Osborn:是不是大概就在今年年底?
Hejlsberg:没错。
这是座谈会的第一部分。
John Osborn 是 O’Reilly Media 公司的执行编辑。
C#:昨天,今天和明天:和 Anders Hejlsberg 座谈,第一部分 C#:昨天,今天和明天:和 Anders Hejlsberg 座谈,第二部分: 关于 泛型
分享到:
相关推荐
Visual C# .NET 是 Visual Studio .NET 的产品套件的组成部分,该产品套件还包括 Visual Basic .NET、Visual C++ .NET 和 JScript 脚本语言。所有这些语言都支持对 Microsoft .NET Framework 的访问,该框架包括一个...
它首次将组件概念作为第一等公民,这意味着在C#中,属性、方法和事件都是组件的核心部分。设计时和运行时的属性使得开发者可以对组件进行更精细的控制和自定义。此外,C#通过XML集成文档,提供了一种无缝的编程体验...
3. **性能提升**:对于原始类型,泛型避免了装箱和拆箱操作,减少了运行时的开销。 #### C#中的泛型实现 在C#中,泛型的引入使得语言更加灵活和强大。开发者可以定义泛型类、接口和方法,如: ```csharp public ...
**C#** 是一种现代的、面向对象的编程语言,由 **Anders Hejlsberg** 和 **Scott Wiltamuth** 共同编著的《C#语言参考》是一本权威性的技术书籍,详细介绍了 C# 语言的核心特性和高级功能。 ##### 1.1 Hello, World...
《C# 语言规范》是由Anders Hejlsberg,被誉为C#之父的主要作者之一,与Scott Wiltamuth共同编写的权威性文档。这本书深入解析了C#编程语言的各个方面,为开发者提供了详尽的指导。以下是该书涵盖的一些关键知识点:...
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 由可执行代码和运行时环境组成,允许在不同的计算机平台和体系结构上使用各种高级语言。
本书由C#语言的架构师Anders Hejlsberg和设计小组的成员编写,并为C# 2.0进行了更新。全书从C#语言的简介开始,完整并详细地介绍了C# 1.0的技术规范,并介绍了许多C# 2.0的新功能,包括泛型、匿名方法、迭代器、分部...
《QT024-微软C#语言参考》是由Anders Hjlsberg和Scoot Wiltamuth共同编著的一本技术专著,这本书详细阐述了C#编程语言的核心概念和技术,对于深入理解C#及其应用至关重要。Anders Hjlsberg是C#的主要设计者之一,...
C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一...
3. **内存管理**:C# 使用垃圾回收机制来自动管理内存,减轻了内存泄漏和其他内存相关问题。 4. **丰富的特性**:C# 提供了丰富的语言特性,如属性、索引器、委托、事件、泛型、LINQ(Language-Integrated Query)等...
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 ++语言的...
C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一...