转贴:MSDN访谈录之C#编程二

编程

ROBERT HESS:C#被认为是微软的私有语言吗?

ANDERS HEJLSBERG:其实并非如此。我们与产业伙伴特别是HP和Intel合作,今年年初,我们向一个叫做ECMA(欧洲计算机制造商协会)的欧洲标准化组织提交了建议,以便标准化C#和CLI。 CLI代表通用语言基层体系(Common Language Infrastructure)。

ROBERT HESS:而这是不是有点类似于C Runtime 和VB Runtime?

ANDERS HEJLSBERG:嗯,实际上CLI是.NET framework的一个大的子集。在某种意义上,它是.NET可以移植到其它平台的那部分。这意味着,例如,它不包括任何Windows专门的UI库,因为其它平台对此并没有多大的兴趣。

ROBERT HESS:就象内存管理,而且……

ANDERS HEJLSBERG:嗯,绝对如此,内存管理,大部份的类库被包含在CLI中。我们于9月份向ECMA提交了这个建议,并在一次ECMA会议上得到了采用,制订这两个标准的工作正在进行中。其中一个是C#标准,而另一个是CLI标准。

ROBERT HESS:那么,C#具有ECMA标准又意味着什么?

ANDERS HEJLSBERG:嗯,这意味着其它产业伙伴们可以也最有可能在不同的平台上实现该语言。

ROBERT HESS:如果我是类似波音这样的公司,且拥有一些老式的PDP 11/70计算机,我想让C#在其上面运行,可能会考虑利用ECMA标准给这些老掉牙的家伙设计编译器,如果没有什么人已经做了类似工作的话。

ANDERS HEJLSBERG:绝对正确。现在这两个标准实际上已相继被提交,而目前C#本身并没有规定一个runtime库,而是依赖于.NET framework,或者,当我们正在谈论到标准提议时,C#依赖于通用语言基层体系为其提供的runtime基层体系和类库。我们目前正在与标准化组织以及我们的产业伙伴们共同研究,以确定最低的门槛。很明显,CLI将被分成几个层次,事实上我们向ECMA提交的方案被分为几个层次,这些层次开始于很低的核心层,而你真正地拥有了这些核心数据类型,一些象数组那样十分简单的东西,以及在那里的所有原子变量(atoms),但是分子(molecules)就不必要了。它们被构建在更高层的栈上,因此对于嵌入设备也是这样,实际上可以把其应用于一个非常轻量级的环境(lightweight environment),而这种轻量级环境可以移植到不同的平台。

ROBERT HESS:因而我可以让C#的一个版本在我的手表中或某些类似的设备中运行。

ANDERS HEJLSBERG:是的,理论上是这样,或在您的冰箱中,或任何需要的地方。

ROBERT HESS:在某种程度上,这就是.NET framework的全部目标,也就是允许编程的基层体系存在于多种不同类型的设备中,通过网络或蓝牙等类似连接,一个设备就可以和另一个设备通讯,并且借用服务,提供相互支持,

ANDERS HEJLSBERG:对,那是其中的一部分。我想,现在我们应当牢记于心,尽管您谈论到了分布式应用程序或者设备之间的相互通讯,但安置在.NET framework甚至是在CLI中的基层体系,实际上并不要求在网络的两端都有.NET存在。而且,我们所推荐的体系结构确实具有引导作用,何时利用类库来设计程序完全基于XML和SOAP这样的产业标准,并且也可以在Linux box(比方说Java和Apache web server)中实现它,然后利用其它工具在另一端开发相应的程序,如果你乐意的话。

ROBERT HESS:因此在我的C#应用程序里,假如我正在编写它与一个外部服务连接,就可以视其为标准的C#调用,而运行于不同的机器上的一个外部服务可能是Amazon.com,或者类似于其它一些既不运行Windows也不运行C#的系统……

ANDERS HEJLSBERG:这正是所有web服务的梦想……

ROBERT HESS:而所有要做的事情就只有实现SOAP了。

ANDERS HEJLSBERG:是的,嗯,基本上我们所要做的是利用现有的internet的基层体系,意思是,传输协议是http,有效承载(payload)是以XML格式封装的SOAP(SOAP formatted XML),并且实际上在网络的另一端可以是任何东西。当从C#中访问XML和SOAP的调用时,我们事实上有能力使它们看起来象具有方法的对象,但是我们给你提供了所有的基层体系,通过在.NET framework中所具有的所有连续的基层体系,你便可以把方法调用转换进XML SOAP包中,这样的包可以穿越网络并回传然后再解包。

ROBERT HESS:好了,您说您从事C#的工作至今已经几年了,而XML的生命期也恰好与此相同。这就意味着当它们开始时,彼此之间是毫无了解的。

ANDERS HEJLSBERG:嗯,XML的历史可能要长一点。SOAP却相当新,它与C#还有.NET framework是齐头并进的,并且我们也非常积极地从W3C引进这些标准化主体,我们一直在跟踪它的发展,并把这些技术追加到最新的标准中。

ROBERT HESS:那么SOAP和XML之间在这一层次上的相互连接性(interconnectivity)是否当初就是C#一个方面的内容,或者是随着该语言的发展而发展的?

ANDERS HEJLSBERG:嗯,我认为这里确实存在着一些距离。大部分需要处理XML和SOAP的基层体系是由.NET framework而不是C#提供的。C#语言建立在.NET framework的顶层,并使您具有访问这些东西的权力,例如,通过我们在C#中称之为属性(attribute)的东西,在代码中就可以直接表达什么东西正由这个类的实体映射(mapping)成为穿越internet的XML格式。所以我可以说,例如对于成员(field),我想使这个成员变成具有同样名字的XML元素,让这个类名变成XML里的标签(tag)名,等等。而且属性可以直接地集成到代码里,这就是使XML 和 C#变得更易于使用的措施之一。

ROBERT HESS:那么它们真的很合适在一起?

ANDERS HEJLSBERG: 是的,确实如此。

ROBERT HESS:当考虑一个应用程序的设计时,为了更好地运用C#,我想要有条有理地建立应用程序,有没有什么不同的办法?或者还是与正常地开发一个C应用程序具有相同的思路?

ANDERS HEJLSBERG:嗯,我认为关其中的一个关键原则就是,您是以一种很深的面向对象的方式进行编程的,甚至当您在使用C#时,是以一种面向组件的方式进行的。所以会趋向于认为您的应用程序设计有点区别。好,如果您正在使用C++,就可能会想到写对象等等。当您用C#写程序时,例如您可能会想到,哎呀,我正在写一个组件吗?嗯,这个组件必须能加入到Visual Studios的工具栏,以便我可以把它拖到表单,或拖到一个商业对象,或拖到一个网页,然后它是不是会被属性检查器(property inspector)显示出来,哎呀,那么在那里我到底应该拥有什么属性,我怎么控制下拉单里的东西,我能不能拥有那样的编辑器?现在,我们把基层体系的所有东西都呈现给您,它使您认识到您的设计不同于C++传统的设计。

ROBERT HESS:因此很多时候,您仍然在编写应用程序,通过装点修饰应用程序,您正好有更多的性能要展示。

ANDERS HEJLSBERG:是的,您可以这么说。

ROBERT HESS: 有关更多此类面向服务的完整概念是什么呢?因此我正在编写一个几乎无GUI的应用程序并且运行在一台服务器上,并计划用一个web客户程序对其进行攻击。客户程序请求首先到达服务器并要求回应以便跟踪包(package)等类似的东西。这是否从根本上改变了思路,或者仍然是同样的服务方向?

ANDERS HEJLSBERG:嗯,我认为在某种意义上,它让您多一点地考虑应用程序中的抽象。您应更加注意认识到,我是怎样把应用程序安置到商业逻辑层(business logic tier)和表示层(presentation tier),是怎样把API放到商业逻辑层,以便它既可以被表示逻辑用来表示HTML或基于UI的客户,甚至也为遍布网上的Web服务指明入口点(entry points)。因此,您应注意一点,再也不能编写那些铁板一块的程序了。

ROBERT HESS:您是否想象这本身有助于人们利用他人的组件比过去更容易?我记得在波音公司工作时,我们老是遇到有关代码重用这个关键问题。我们必须确保所编写的任何应用程序、任何代码都是专为代码重用而设计的,虽然这听起来在理论上确实是一个伟大的主意,但在实践中,却由于从来没有得到好好的利用而寿终正寝了,因为重用别人的代码简直是难上加难。您认为这样居然能使代码重用更容易吗?

ANDERS HEJLSBERG:我认为会的,这里起关键作用的实际上就是.NET framework。事实我们已经定义了这样一个底层(substrate),在其之上可以生成组件。而说到许多关于如何把它们装入类中,如何使它们成为组件,我们给您明确的指导,而事实上整个framework都当作其中一个范例,但关键是组件一律要能被各种各样的语言所访问,因此这里您已经谈论过这个问题,例如,如果某些家伙在用Cobol编写一些语言或库而您却想从C++中利用它们,您知道,这会特别困难。实际上我们提供给您一个substrate,让您进行上述交互性操作。所以您大有希望使组件交互操作。因为事实上令人感到困惑的是,组件是以不同的设计观点或在不同的抽象层上编写而成的,这正是使人们糊涂之处。他们并不习惯于这种风格的API,因此迷失在基层体系之中,只见树木不见森林,您应该明白我的意思。因此通过说明许多关于如何写组件,并且提供了用于写组件的永久有效的API和基层体系,您就极其有希望获得更好的重用性

ROBERT HESS:嗯,我认为解释恰到好处。为了能抓住C#语言体系的重点,您认为最后还有什么重要的概念要让观众去理解?

ANDERS HEJLSBERG:我想最好的方法就是您应亲自摆弄它。所以我会催促人们从我的站点下载,而我也相信您会给他们地址的。下载它,摆弄摆弄,写出一些例子,参加我们的用户组或新闻组,和其他用过它的人交谈,看看他们有什么经验。我想你会过得很舒心的。

ROBERT HESS:我肯定会在本记录稿的后面建立一个链接,以让他们下载当前版本的C# runtime以及我们在PDC上公开的.NET材料,我猜我们会有另一个版本的……

ANDERS HEJLSBERG:我们的beta 1.0版要发布了……

ROBERT HESS: Beta 1.0版很快就要发布了,因此您提到的新闻组里也要建立一个连接到beta 1.0的链接。因此您应保证寄给我的email里要含有这些新闻组,以便我能建立。

ANDERS HEJLSBERG: 好的。

ROBERT HESS:谢谢Anders,感谢您的谈话,而且我希望观众感谢这位真正帮助过设计C#语言的专家,感谢他有关开发应用程序的心得。
    在短暂的休息之后,我们会继续与一位程序员交谈,至今他用C#开发应用程序已经有些时日了,我们会了解到他对这种语言的想法,以及任何有助于我们用C#开发自己应用程序的线索。所以请不要走开哦。

时间: 2024-09-12 21:32:42

转贴:MSDN访谈录之C#编程二的相关文章

转贴: MSDN 访谈录之C#编程一 rainbow(翻译)

编程 标题    MSDN 访谈录之C#编程一    rainbow(翻译)关键字    C#,msdn出处    http://www.msdn.com MSDN 访谈录(MSDN Show)  C#编程 C#是一种令人耳目一新且为之一振的编程语言,它设计给C++程序员带来快速的开发能力,而又不牺牲C和 C++所特有的功能和控制.    在今天的这一期里,我们将要和Anders Hejlsberg交谈,他是微软一位资深的工程师,一直帮助设计.开发和实现该语言,并发挥其在未来.NET平台中的作用

转贴:msdn 访谈录之C#编程三

编程 标题    msdn 访谈录之C#编程    rainbow(翻译)关键字    C#,JEFFREY RICHTER出处    http://www.mdsn.com[TR] 程序员天地Robert Hess和Jeffrey Richter(著名的编程作家.专栏作家和咨询专家)的谈话.ROBERT HESS: 欢迎回来.我们正要涉及到有关C#编程方面的问题.为了有助于我们理解这些问题,我邀请我的好朋友Jeffery Richter到这里来.Jeffery恰好是一名撰写了很多编程书籍的程序

gpu c语言-cuda gpu 编程 二维线程块

问题描述 cuda gpu 编程 二维线程块 这个程序语言用到二维线程块么 什么时候需要? 解决方案 GPU-cuda编程葵花宝典CUDA下的GPU编程--线程和变量CUDA下的GPU编程--线程和变量

转贴:MSDN访谈录C#编程之四

编程 ROBERT HESS: 当作一个标准的For循环? JEFFREY RICHTER:对,当作一个标准的For循环.因此有时到了最后,它所做工作比我当初想象的还要多.使用foreach是相当常见的,有了它实在是很爽. ROBERT HESS:我猜您本来也应当在那里放置一个计数器,不过这会完全使foreach不起作用. JEFFREY RICHTER: 是的,很正确. ROBERT HESS:那么,您认为C#还另外具有什么样很酷特性,以让观众说,好,这就是我要选的语言? JEFFREY RI

JAVA的网络功能与编程 二

编程|网络     五.显示网络上其他HTML文档     利用Java提供的getAppletContext().showDocument(URL)可以 显示其他结点的HTML文档,同前面的显示网络上其他结点的图象, 有两种格式,下面各举一例:                       ●程序8   格式一 import java.applet.*; import java.awt.*; import java.net.*; public class showdoc extends Appl

Windows Socket网络编程(二) 套接字编程原理

一.客户机/服务器模式 在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Server model).该模式的建立基于以下两点:1.非对等作用:2.通信完全是异步的.客户机/服务器模式在操作过程中采取的是主动请示方式: 首先服务器方要先启动,并根据请示提供相应服务:(过程如下) 1.打开一通信通道并告知本地主机,它愿意在某一个公认地址上接收客户请求. 2.等待客户请求到达该端口. 3.接收到重复服务请求,处理该请求并发送应答信号. 4.返回第二步,等待另一客户

GDI+编程(二)使用画笔

画笔常用于绘制图形的轮廓.GDI+的画笔除了具有常见的色彩和宽度属性外,还具有对齐方式,线帽,变换方式等属性.GDI+中通过Pen类来定义画笔对象. (一).构造与使用画笔 Pen(brush, width); //用颜色与线宽构造一个画笔 Pen(color, width); //用画刷与宽度构造一个画笔 例子: Pen pen(Color(255, 0, 0, 0),1);//用第一个构造函数.构造宽度为1的黑色画刷 graphics.DrawLine(&pen, 20, 10, 300,

Socket编程二

客户端 using System.Windows.Forms;using System.Net.Sockets;using System.Threading;using System.IO;using System.Net;//使用IPAredd类,IPHostEntry类namespace QQ{ public partial class Tcpclient : Form { private StreamWriter write; private NetworkStream stream; p

Java函数式编程(二):集合的使用_java

第二章:集合的使用 我们经常会用到各种集合,数字的,字符串的还有对象的.它们无处不在,哪怕操作集合的代码要能稍微优化一点,都能让代码清晰很多.在这章中,我们探索下如何使用lambda表达式来操作集合.我们用它来遍历集合,把集合转化成新的集合,从集合中删除元素,把集合进行合并. 遍历列表 遍历列表是最基本的一个集合操作,这么多年来,它的操作也发生了一些变化.我们使用一个遍历名字的小例子,从最古老的版本介绍到现在最优雅的版本. 用下面的代码我们很容易创建一个不可变的名字的列表: 复制代码 代码如下: