扩展C++, Java, C#

        Java是1991年,由Sun公司的加拿大人James Gosling等人为小型消费品电子(如电视遥控器等)项目Green开发一种简单的程序设计语言。开始叫Oak(橡树),因为与Sun的另一产品商标同名,1994年改为Java(爪哇——位于印度尼西亚西南的一个大岛,盛产咖啡豆,也是印尼首都雅加达的所在地)。虽然在小型消费品电子产品上失败,但是Java却特别适合网络语言程序的开发。1994年秋,他们用Java开发出,交互功能强大的动态浏览器WebRunner,获得了极大成功。1995年5月改名为HotJava,并与Java语言一起,由Sun公司正式推向市场。

Java具有面向对象、跨平台、安全稳定、多线程等特点,适合于网络编程。Java源自C++,它从C++中继承了大多数语言成分,但是它也对C++进行了大量简化。例如,它抛弃了C++中复杂和容易引起问题的头文件、编译指令、预处理器、指针、结构、隐式类型转换、操作符重载、多重继承和goto语句等。增加了字节码、虚拟机、垃圾内存收集、接口、GUI支持、多线程、异常处理、网络编程、各种类库等内容。

Java语言的跨平台和安全性,都依赖于它的JVMJava Virtual MachineJava虚拟机)。Java是一种编译型解释语言(对比:Fortran/Pascal/C/C++为编译语言,早期的Basic为解释语言),它先将Java源代码(*.java)编译成专用的字节码(*.class),再利用各个计算机平台上安装的JVM来运行这些字节码。

Java通过取消指针和添加虚拟机,在增强了安全性的同时,也具备了跨平台的能力。但这些却是以牺牲编程的灵活性和程序的运行效率为代价换来的。所以,Java并不太适合于,对运行效率要求很高的本地(客户端)的(系统)编程。

开始时,Java虽然从C++继承了大量面向过程和面向对象的特征,但是并没有继承模板。只是到了JDK 1.5J2SE 5.0 2004 9 30 推出)才加入对编译时静态绑定的泛型编程的支持。所以,Java现在与C++一样,也可以算是一种同时具有面向过程、面向对象和泛型编程的特征的混合型程序设计语言。


l         C#

眼看Java占领了利润丰厚的服务器端编程的大部分市场,微软公司心有不甘。为了与Sun公司的JavaJ2EE竞争,1996Bill Gates用重金从Borland公司挖来(Turbo PascalDelphi的开发者)Anders HejlsbergHejlsberg转到微软后,先后开发出Visual J++1997)、.NET框架中的CLICommon Language Infrastructure公共语言基础设施)和C# 语言(2000)。

丹麦人Anders Hejlsberg1961年出生在丹麦首都哥本哈根,1980年在读大学期间,就开始为计算机公司写软件,后来他在丹麦创办了自己的Poly Data公司,为DOSCP/M编写了Pascal编译器PolyPascal1983年他和他的公司被Philippe Kahn创办的Borland公司所收购,并很快(1983.11.20)推出革命性的产品Turbo Pascal,由Hejlsberg编写编译器,Kahn编写编译界面。它是世界上第一个IDEIntegrated Development Environment集成开发环境),运行在MS-DOS之上。

后来Borland公司又推出具有类似IDE的其它产品,如Turbo BasicTurbo CTurbo C++Turbo Prolog等,在Windows操作系统出现后,又推出Borland PascalBorland C++(由越南人Eugene Wang开发,由于与Kahn不和,他离开Borland到了Symantec,又开发出Symantec C/C++)、C++Builder等。由于微软公司利用其在操作系统中垄断地位(WinAPIOLE等),用(从Borloand公司挖来的许多人开发出的)Visual C++ 1.0打垮了曾经占统治地位的Borland C++ 3.1。作为反击,HejlsbergBorland公司又开发出划时代的产品——Delphi(以Object Pascal为基础,组件思想优秀)。Java发布后,Hejlsberg对其有很多改进的想法,但是得不到当时老板的支持(Kahn因为公司亏损,已经被他自己创办的Borland公司扫地出门),所以他才愿意到微软公司去。他改造了Java,并随Visual Studio 6.0推出Visual J++。由于Sun公司状告微软违反合同(私自修改Java),并胜诉,所以Sun收回了给微软的Java授权。这也正是微软不得不自己开发出.NET环境和C# 语言的主要原因。

C#C Sharp)语言源自C++(数字符# Sharp升半音符,可以视为由4个加号组成,相当于(C++)++),模仿了Java(微软不承认这点)。C# 的很多内容都与Java相似,例如虚拟机、垃圾内存收集、接口、GUI支持。但是,与Java不同的是,C# 保留了指针,不过限制了指针的使用。C# 还引入了值类型、引用类型、元数据、装箱和拆箱转换等概念(这些概念在最新版本的Java中也有,在C++0x中也会引入与元数据类似的“概念”)。

C# 是一种面向对象的程序设计语言,最初是作为.NET的一部分而开发的。换句话说,.NET是围绕C# 而开发的。C# 的面向过程和对象的语法,是基于C++的,但也包含了另外几种程序设计语言的特征(其中最显著的是DelphiVisual BasicJava),C# 特别强调简易性(如所需符号比C++的少、所需修饰比Java的少)。

从某种意义上来说,C# 是最直接地反映了底层CLI的一种程序设计语言,它非常依赖于.NET框架,因为它被特地设计成能充分利用CLI所提供的特征的一种语言。例如,绝大多数的C# 内置类型,全都对应于CLI框架所实现的值类型(value-types)。

C# 编写的应用程序,需要CLRCommon Language Runtime公共语言运行时)的一个实现,才能运行。这与Java的虚拟机JVM有点相似,但是与Java不同的是,CLI应用程序要被编译两遍,第1遍由C# 编译器,将C# 源程序被编译成平台抽象字节码,即ILIntermediate Language中间语言)代码,存放在PEPortable Executable可移植的可执行)文件中(似Java.class);第2遍,在应用程序首次运行时,由CLRJITJust-In-Time即时/实时)编译器,将IL代码编译成本地客户端的机器代码(.exe)。

CC++比较,C# 在许多方面有所限制和增强,包括:

n         指针——C# 是真正支持指针,但是其指针只能在非安全作用域中使用,而只有具有适当权限的程序,才可以执行标记为非安全的代码。绝大多数对象的访问是通过安全的引用(references)来进行的,而引用是不会造成无效的,而且大多数算法都是要进行溢出检查的。一个非安全指针,不仅可以指向值类型,还可以指向子类和System.Object。也可以使用指针(System.IntPtr)来编写安全代码。

n         托管(managed受控)——在C# 中,托管内存不能显式释放,取而代之的是(当再没有内存的引用存在时的)垃圾收集。但是,引用非托管资源的对象,例如HBRUSH,是可以通过标准的IDisposable接口的指示来释放指定内存的。

n         多重继承——在C# 中多重继承被禁止(尽管一个类可以实现任意数目的接口,这点似Java),这样做的目的是为了避免复杂性和“依存地狱”,也是为了简化对CLI的结构需求。

n         转换——C# C++更类型安全,唯一的缺省隐式转换也是安全转换,例如加宽整数和从一个派生类型转换到一个基类(这是在JIT编译期间间接强制进行的)。在布尔和整数之间、枚举和整数之间都不存在隐式转换,而且任何用户定义的隐式转换,都必须显式地标出。

n         数组声明——和C/C++的数组声明的语法不同,C# 中用“int[] a = new int[5];”代替了C/C++的“int a[5];

n         枚举——C# 中的枚举被放入它们自己的命名空间

n         特性——可在C# 中可以使用特性(properties属性集),访问类似于C++中成员域,与VB相似

n         类型反射与发现——在C# 中可以使用完整的类型反射与发现,这些都会用到元数据所提供的信息

n         模板——为了简单性,C# 1.0中不支持模板等泛型编程技术

C# 2.0的新特征:

n         部分类——一个类可分开到多个文件中实现

n         泛型——C# 2.0起,开始支持泛型或参数类型。C# 还支持一些C++模板不支持的特性,例如对泛型参数的类型约束。另一方面,C# 的表达式不能用作泛型参数,而这在C++中却是允许的。C# 的参数化的类型为虚拟机的首个类对象,允许优化和保存类型信息,这一点与Java不同。

n         关键字yield——迭代器的一种新形式,可通过功能类型的关键字yield,来使用协同例程

n         匿名委托——提供了闭包功能

n         结合运算符??——返回表中的第一个非空值,例如:

object nullObj = null;

object obj = new Object();

return nullObj ?? obj // returns obj;

n         可空值类型——可空值类型由问号?来标记(例如,int? i = null;),它可以改善与SQL数据库的交互

Visual C# 1.0是随.NET框架1.0Visual Studio .NET 2002一起推出的;Visual C# 1.1,是随.NET框架1.1Visual Studio .NET 2003一起推出的;Visual C# 2.0是随.NET框架2.0Visual Studio 2005一起推出的。

C# 语言,已于200112月成为欧洲标准:ECMA -334 C # Language SpecificationC#语言规范),200212月和20056月又分别推出ECMA-334的第2版和第3版。20034C# 成为国际标准:ISO/IEC 23270:2003 Information technology -- C# Language Specification(信息技术——C# 语言规范)。


微软对C++的扩展

为了适应自己新提出的.NET框架(framework)和CLRCommon Language Runtime公用语言运行时)运行环境,使C++能够编写在.NET环境中运行的托管(Managed)程序,微软公司在它的Visual C++中,对标准C++进行了托管扩展。

在随.NET框架1.0/1.1Visual Studio .NET 2002/2003一起推出的Visual C++ 7.0/7.1中,这种扩展叫做Managed C++(托管C++,简称为MC++);而在随.NET框架2.0Visual Studio 2005一起推出的Visual C++ 8.0中,又改称为C++/CLI

其中,CLICommon Language Infrastructure公共语言基础设施)是微软公司提出的一种所谓垮语言(如C#VBC++J#Jscript)、跨平台(如WindowsUnixLinuxMac OS)的分布式计算方案和运行平台架构。CLI.NET的核心,CLR只是CLIWindows平台上的一个实现。也有人把.NETCLI移植到了LinuxSolarisMac OS XUnix上,但是至今还没有被广泛认同和应用(参见网站http://www.mono-project.com)。

CLI已经成为ECMAEuropean Computer Manufacturers Association欧洲计算机厂商协会)标准(ECMA-33520056月推出第3版)和ISO标准(ISO/IEC 23271 2006 10 1 推出第2版,对应于ECMA-335的第3版)。

C++/CLI也已于200512月成为欧洲标准——ECMA-372, C++/CLI Language Specification, 1st edition (December 2005) C++/CLI语言规范),但是至今仍未成为国际标准。

C/C++语言谱系图

https://p-blog.csdn.net/images/p_blog_csdn_net/touzani/303255/o_c++javac_.jpg



width="728" scrolling="no" height="90" frameborder="0" align="middle" src="http://download1.csdn.net/down3/20070601/01184120111.htm" marginheight="0" marginwidth="0">
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值