[强帖转载]C++、java、.net关系

[强帖转载]C++、java、.net关系
2011年03月27日
  语言方面:java在语言方面最大的看点就是去除了C++中所谓的危险的元素。例如宏,例如多继承,还有指针,取而代之的出现了引用(当然C++里面也有),和自动的资源管理机制(虽然为人诟病)。刨除了危险元素之后,Java保留的语法和C++差不多。另外,Java添加了一些自己的语法,例如instanceof ,而这样的关键字的出现完全归功于Java本身库的单根类管理机制,这样的管理机制使得RTTI更加的完全。使得我们通过一些特定的信息就可以动态的生成对象,例如我们可以通过一些配置文件来控制一个Java程序使用什么样的对象,而不用重新编译代码。当然这样的特性也使得效率大大的降低,但是相对于硬件高度发达的今天,这样的损耗几乎可以忽略(个人在机器上面运行eclipse一点也没有延迟感。)
  库方面:java在库的丰富程度上面可以说不容置疑,而设计也是非常得紧凑,一个开发者可以轻松的从Java的库上扩展出自己的代码。Java提供了2D图形,3D图形,界面库, 数据库接口,网络,完善的正则表达,以及完整的Dom甚至对于设计模式,都提供了统一的接口来等着你去实现,可以说在Java的世界,你几乎可以不用重复造任何的轮子,只要你把精力集中在你要做什么上,就可以。顺便说一句,这些库都是非常高效的,至少我用起来还没有遇到过什么效率上面的问题。
  开发工具:Eclipse大有一统天下的姿态,里面的插件不胜枚举,从代码设计到开发到维护,Eclipse框架可以一并帮你完成。至于他到底能做多少工作,我想你应该看看eclipse的网页才能完全知晓。
  //--------
  语法方面:C的语法构造比较少,有限的几种是:struct union enum等类型定义,函数定义,指针和数组派生类型,变量定义,三类(顺序、分支、循环)基本结构构造语句,各种繁多的运算符以及特殊的赋值,其中全局可见的只有类型、变量和函数,函数内部可以拥有除了函数以外的任意构造,但是,对于函数的返回值类型有限制。总之,C是语法简单,一致性较好,相对正交,基本可以任意组合的语言。
  库方面:C语言的标准库很少,除了基本的IO库以外,就是低层次的memory和string操作的库了,还有一些非常基本的数学库。剩下的文件系统相关的(包括ftp,nfs,http,smtp,pop等高层网络协议)库不存在,图形图像处理的库也不存在。控件库,数据库访问库,多媒体编码解码库,安全库,加密库,认证库也都不存在。不过,它们都可以通过非标准C库来获得,著名的OpenGL(我没有说DirctX是因为他是COM库,C用起来不舒服,而没有说QuickTime的原因完全是因为我不太了解它)就是工业界标准的图形图像处理库。gtk+就是跨平台的控件库。数据库访问库当然就汗牛充栋了。编解码库(著名的如Intel的IPP,低层次的基础库)也非常多是C库形式存在的。另外别的类型的库也都存在,而且跟C语言的结合比较自然,跟C语言以及标准C库的感觉一样,因为它们大都是C写的。总之,C标准库非常少,但是扩展库很全,不至于造成某些壁垒。
  开发工具方面:C语言的语法特征比较少,可以完全记在脑子里,所以编程序的时候不太依赖于辅助工具,当然,能够提供指示库接口的开发工具仍然是受欢迎的。C语言典型的开发工具在Windows平台上有VC系列和BCB系列,其余的还有DevCpp系列。在Linux平台上自然是Gcc和Gdb打头了,不过由于我更注重代码编辑器,所以我还是说说这方面。总体来说,我觉得VC的Code Editor比较舒服,尤其是最新版的VC2005,Linux平台上emacs和vi都是很好的编辑器,不过它们都需要定制才能达到VC code editor的级别,这对新手又是一个困扰。关于IDE,Windows平台上的不变,Linux上也有很多,比如Kylix3,KDeveloper,Aujuta,Eclipse+CDT,……我觉得其中Eclipse系列的是感觉最好的,但是若要论起来FormDesigner,Eclipse+CDT还需要复杂的定制,Windows平台上的VC也不怎么地,比较好的反倒是BCB,不过其底层支撑机制是ObjectPascal,除了问题很麻烦。总体来说,由于C发育的比较早,那时候还没有太好的IDE发展出来,而现在的IDE又很少是面对C的,所以C的IDE不怎么好,但是应该说C的基本工具(编译、调试)都是高度优化的。这给新手进入造成困扰。
  //----
  c++是对c的扩展,可也不全是,c++中引入了oo(面向对象)的东西,使其有了质的飞跃,但c++也不是纯的OO语言,也支持面向过程的东西,而VC++只不过是个工具而已,不是什么语言
  //-----
  10.说的太好了,硬件都要被MS托管了,JAVA是为了INTERNET而产生虚拟机,都认为这个主意太好了,而MS为了找到 新的经济增长点 ,也来个NET,因为虚拟机人人都说好啊,除了这些还要把所有的东西也要来个虚拟机,喜欢的人不就更多了吗??
  11.跟我想的一个样,我是想MS把C#编译成本机代码和托管代码两种,由别人来选,我的本机代码写得很安全的,高性能的,为什么还是要你来托管呢???
  12.亲爱的微软,下面是贵公司对C#的描述:
  Microsoft C# .NET 是一种现代的、面向对象的类型安全语言。程序员可以使用它快速生成用于新的 Microsoft .NET 平台的各种应用程序。C#(读作“C sharp”)旨在帮助 C++ 程序员快速进行开发,同时又保留了 C 和 C++ 所见长的功能和控制力。
  我们的代码写得很现代,也是面向对象的,很安全,性能很高的,为什么贵公司却要我们托管呢??
  为了方便写代码我们原则同意用C#写C++见长的功能和控制力的程序,可是你的见长的功能和控制力在那里呢,我们亲爱MS?,
  为什么不能把C#编译成本机代码,我们大家认为用C#写的非托管代码会写的更安全,性能更高,更现代,更能面向对象!!
  13.Net就要下台了,它的呼声很高,2005年的这场暴风雨就要来临。--让暴风雨来得更猛烈些吧!!
  14.关于C++写的什么数字通讯,图像处理啊,串口通讯啊,多媒体啊,游戏编程啊,数据结构啊,3D啊,嵌入式开发....的书太多了,是不是C++能作到的C#好多工作都不能作吗?为什么C#就没有这方面的书呢?算了还是学我的C++算了,大家说如何??请认真回答,这将是我的人生转折喔!!!
  15.MS的托管代码只能在WINDOWS上运行,又没有夸平台(不要说以后会夸平台哈,没有根据,MS也没有这么说),为什么非要我们编写托管代码,用C#写本机代码为什么不能呢?如果是为什么安全考虑,加强WINDWOS安全不就行了吗?MS卖的是什么药,大家分析一下??
  16. 见长的功能和控制力有:
  C++能写数字通讯,图像处理,串口通讯,多媒体,游戏编程,能数据结构表示,3D,嵌入式开发,硬件驱动,实时通讯,也能写操作系统,结合汇编C能写操作系统,还能写数据库,这些应该是见长的功能和控制力吧,其它商业应用我就不说了....,千万不要有人说这些C#也能,就象有人说中国也有数据库,也有操作系统一样,呵呵..那位再举些C++的功能和控制力,如上面有位ZJH135说的,不是我和C++比,是MS在比,想用C++的光辉照亮C#
  17. 我现在从C#转向C++了,虽然C++的语法比以前复杂了许多(有用于托管代码的语法,也有用于非托管代码的语法),但功能和性能C#没有办法比的,如托管的对象可以给本地对象用,指针的类型增加了,对本地对象和托管对象进行了集成,听说以后C#的代码也要转向C++/CLI执行以提高性能呢!!!你学C++代码后的事情会让你很清楚,也就是说你写一段代码,你会明白你的代码在机器里是如何工作的,就象你看见了一个透明的汔车发动机,你不仅知道是它产生了动力,而且也知道这个动力是如何产生的一样,当然有些人就是喜欢经过包装的东西,也象有些城里人吃了面包,看见麦子说是什么菜似的;不过有一点可以肯定经过包装的东西,它的灵活性会大大降低的,不利用我们把工作做到最好,也不利用发挥我们全身智慧,包装的目的只有一个,就是能够让我们很快地解决我们的问题,提高我们的效率,难怪有些人说,MS的东西就是漂亮,就是简单,就是好用,但是当遇到很专业的人士的时候,当这些专业人士要作他们的研究的时候,这些包装的东西会显得无能为力,这些(包装的)只是个在这些人士面前玩小技俩吧了!!永远记住:只有脚踏实地的中国人才能为国出力.如果你买个导弹来增强国防力量,是为国出力了吗??
  18. 这种趋势,有可能是这样:人们又会返回到C/C++/汇编的时代.人们会对这些C/C++/汇编进行增强,因为语言太高级,会对硬件无法控制或对控制产生难度,软件的运行是离不开硬件的,对不对呢??
  19. C#和Java的繁荣期,则有赖于人们对于大一统的中层次语言的信仰有多坚持。此两种语言无论在系统开发还是在应用开发中都非最优选。目前C#出现一些迹象,引入一些动态语言特性如cmdlet,又强化系统编程能力,想上下通吃。这是一条不归路,必会使C#变得更加复杂怪异。
  =====================================================================================
  我觉得C#上下通吃并不是一条不归路,而是一条以市场为导向,以人们的需求为目的的一条正确的路;人们不可能完全脱离系统而只写应用程序,反之应用程序不可能不与系统程序打交道;这种有一种语言解决诸多问题是人们孜孜以求的事情. 不会遇到硬件用C++写,遇到数据库用PB,DELPHI写,遇到应用级的用C#写,遇到网络用JAVA写....那人不就成了超人了吗???
  20.有人说:C#用起来确实 比C++要舒服! ----这就是明显示的被MS糖衣打中的人说的.
  21.不过可以期待,当微软的 Windows 平台全面转移到 .net 上时,用 C# 写驱动也不是不可能
  希望我这辈子还能看到,哈哈
  22.VC != C# 《微软很坏的,他只说C#具有C++的行动力》
  VB = C#
  C# 比较时髦
  23. question: 我以前学过一段时间vc,现在用cb,但borland公司不再升级cb了,想重新学习一种开发工具,请各位大虾指点一下,希望这种开发工具的生命周期相对长一点,别像cb!功能相对强大一些,主要在底层和网络方面。谢谢。并请说明理由!
  回答:
  建议用C/C++
  C++是写硬件驱动的,在写接近硬件程序的基础上写应用程序的;离开了硬件谈不上软件了,这个理由充分吧,其它如C#,VBNET,JAVA..(除汇编,C..等)是写应用程序的,C/C++/汇编是写系统及的程序的,如操作系统,数据库...,好象C/汇编的IDE很少或没有吧!你想想如果你是MS,你会帮别人把汇编及C的IDE作好,帮别人写操作系统及数据库了吗?C#,VBNET..是那些软件厂家的产品不是工具,它是开发应用程序的'工具',如果你想增强某方面的功能,你非得向这家IDE厂商提建议才能给你功能,才能给你增加某个类,你说对吗?所以C++是接近底层,不会过时的,如果你再深入点学C/汇编,中国的软件一定会有希望!!你也可以写个G#语言及编译器,以及数据库,祝你成功!!
  24. C++/CLI描绘的是一种多元组合,此处的 C++ 当然是指 Bjarne Stroustrup 在 Bell 实验室发明的C++编程语言。它支持速度和执行 文件的大小都得到优化的静态对象模型。但除了堆内存分配以外,它不支持运行时程序对对象的更改。它允许对底层机器进行无限制的访问,但对于正在运行的程序中的活动类型、以及相关的程序基础构造,它的访问能力却非常有限、或者根本就不可能。C++是一个混凝土语言。
    “CLI”即公共语言基础结构(Common Language Infrastructure),这是一个支持动态组件编程模型的多层架构。在许多方面,它所表示的对象模型和C++的完全相反。它是一个运行时软件层 ,一个虚拟执行系统,运行在应用程序和底层操作系统之间。对底层机器的访问受到相当严格的限制。支持对运行中程序的活动类型以及关联程序的基础构造 进行存取--发现和建构。斜线“/”表示 C++ 和 CLI 之间的一种绑定(binding),
  QQ问答:我有这样一个疑虑:为什么在开发过程中,想要的功能,总是要给如MS,BORLAND..提建议,让它们加上这些功能后我们才能用呢??
  那我要学2种语言罗,MS...BORLAND...不知道人们学习2种语言的难苦吗??
  我有这样一个疑虑:为什么在开发过程中,想要的功能,总是要给如MS,BORLAND..提建议,让它们加上这些功能后我们才能用呢??
  我发现中国好多好多程序员都在讨论别人的产品,别人开发的语言,可是这些都是别人的产品啊,为什么不讨论一下如何作好自已的产品呢?
  无论如何,面向对象都是一个抽象,底层机器思考的方式永远是面向过程的。编译器的制作者帮我们抽象了用,我何乐而不为呢?硬是要自己用C来面向对象就有点小题大做了吧。
  C/iso c++/I汇编是给硬件打交道的,直来直去不能虚为的(因为科学是不能有半点虚假的嘛),它是应用程序的基础,是它妈;而VB,c#,JAVA....是为了工作中管理的需要而设计的,是软件公司的产品,它不是在技术前沿(它可以表现的很华丽,很虚为,也很可爱),它的这些表现是通过前面的科学的基础上建立起来的.
  25.虽然到了.net 的runtime 时代,C 仍然是不可磨灭的主要支柱,包括在MSDN 里见到的API 大部都是有指针类型存在,那么在以C 冠首的C# 里应当如何去使用指针呢?
  其实,C# 里可以直接使用结构型的变量引用进API,但是毕竟它不是指针在对一些涉及以结构数组存放的内存区操作可能就力有不及了,我举一个例子要使用到结构数组的一个API
  26.在32位时代,VB代表快速成开发,便功能不强,C++代表功能强大,性能卓越的开发;在64位时候,C#代表快速的开发,功能不强,C++/CLI代表功能强,性能卓越的开发。
  27。建议学C/C++,然后再学汇编,你绝对是个人才.C/C++现在在开发中,达到了无所不能的地步(托管的,非托管的都能写),现在人们学C/C++开始从选择你的应用方向考虑了,因为C/C++太庞大了,以至于人类的精力不能全部学完;语言与思想是统一的,有的人不注重语言,注重思想,可思想的总要表现出来啊?如你能用VB表达出内存中的数据结构吗?你能知道表达出的代码背后的工作是如何进行的吗??C/C++能.有的人感时髦,学什么C#,VBNET...,楼主注意,这些时毛的东西只是那些如MS软件商家的产品,它注重你在工作中的应用,我敢肯定地说,在MS内部,绝对会有升级的C/汇编语言,绝对有很好的C/汇编IDE,但是它不会买给你,正如SAP公司内部有自已的开发工具一样.这些大的软件公司不会帮助你写一个操作系统,数据库...,为了中国的软件事业,请楼主向软件底层的开发努力,为国出力.有一天我们国家也有个操作系统,也有个很好的数据库,也有个NET,也有个JAVA,也有个类似C#,VBNET的产品,努力!祝福你!
  28.什么垃圾NET,争什么争,NET还处于实验阶段(MS做公测) 现在世面上哪个通用软件采用NET技术拉?杀毒软件:江民?瑞星?金山?还是国外的塞门铁克?
  文字处理:MS的office2003? 金山的WPS office2003?
  图象处理:你用啥?就Photoshop自己称雄,咋没有人竞争呢?也没采用啊?
  媒体播放:Realplayer?Windows mediaplayer?就这俩吗?也没采用的啊?
  游戏:现在啥游戏采用NET了?
  办公软件:用友财务?金蝶?louts?
  网络聊天:QQ?POPO?
  28.问题:c#程序的打印速度比pb慢了几十倍,我都不好意思说c#比pb好了。怎么办?
  答:(看到大家这么踊跃,本身就说明c#的慢是皇帝的新装,大家都知道。就好像自己的鞋子,合不合脚自己知道。不管pb采用什么技术,它就能在短时间内从服务器短查询到大量的数据,并快速打印。就这个任务,c#目前的版本根本做不到,除非开发人员阅读大量的oracle地层技术文档,自己做,好像公司的项目经理绝对不会答应,稳定性也没有保证。c#没有这个定位,作数据库不是c#的长项。我只是告诉大家一个现象。就好比同样的服务器配置,微软的sqlserver的处理速度就是比不上oracle一样,没办法,人家是吃一行饭的。微软也没想造一种放之四海皆灵的语言。果真这样,就用c#写sqlserver、oracle、windows算了。我最后到国外网站上看了看,老外也说c#控制excel报表虽然可以做得很漂亮,但是速度慢是解决不了的。最后我用水晶报表,再用线程队列,给用户的感觉就是打印瞬时完成,其实打印任务交给了后台。对微软的windows,我觉得应该有一种超然的态度看待它,不能把它看做计算机科学的全部,实际它也远远不是。真羡慕那些搞汽车制造、飞机制造、CT、MRI图像重建处理的计算机人员,它们80%的时间在搞数学、物理、光学研究,然后把研究成果用c++开发成软件,以昂贵的代价卖给发展中国家。它们才是真正搞计算机的人(起码我认为),我们中国人只好大多数在应用层面上,在微软给我们做好的猪圈里,自娱自乐地梦想自己是计算机高手,并且还互相攻击谩骂。其实,中国人应该有人, 有些人,凭自己的天赋和兴趣和经济基础,不为名利地开发操作系统。也许,务实的中国文化孕育不了这样的傻子,这也是中国人没有伟大思想家和理论家的根源。我说的太多了,见笑。
  29.整个.NET都是微软为了自己对抗Java的商业需要而弄出来的的东西,并非是大家需要的。.NET的里边的先进的类库设计,语言设计,完全都可以脱离.NET虚拟机技术而基于本机实现,如果他那样做的话,就是一个VCL式的框架,这才是应用开发需要的,但不是微软需要的。如果这个世界上没有Java,恐怕就不会有.NET,这个世界上如果没有C/C++,则就不会有Java。
  虚拟机技术的一个优秀之处是实时编译技术,可以做到运行时优化,但这并不是说本机代码无法做到,如果有IBM这样的大厂去研究开发本机运行时优化,那也是可以出产品的。但这恐怕没有多少商业利益,所以目前没有厂家去做。
  优秀的技术未必会留下来,商业成功运作的烂技术却会源远流长。
  30.对于我们程序开发人员来说,选择一门语言就像选择宝剑一样,无论选择哪门语言都会引起激烈的讨论。前不久,就有用户在微软的Web Cast上问C#开发组长关于C#和C++、Java和Delphi之间速度的比较。而他的回答很巧妙,说C#相当的快,这个问题本身没有意义,因为人们对语言的速度比较,绝大多数全是比较各个语言所带的运行库的速度,跟语言本身没有太大关系。同样,也有人问Bjarne Stroustrup用C替代C++语言的可能性。Bjarne答到,“如果你C的水平足够高,你甚至可以自己实现所有C++的功能,包括RTTI和类等一切功能。但现在已经有一个很稳定和有效的实现(C++),你为什么不用呢。(注:第一个C++编译器就是用Bjarne等用C语言实现的)
  A说:反过来想.为什么我们就不能用C#与C++比呢?
  按OO编程就一定要在托管上才能壮大发展吗?
  应该说从C到C++是一次飞越.提出了非常多的创意来解决和分解问题.而性能并未受到太大冲击.保持了与硬件速度.网络速度、人学习速度的平衡.
  但net去掉OO的特点后.彷佛回到了QB时代.只不过多了很多可用的对象与组件.打破了与硬件、与网络速度的平衡。而且IL解释器就象一个虚拟的处理器+虚拟设备。快速升级最终会让语言流于形式。我认为编程语言的发展与人类语言的发展一样不光是词汇的增多,句法的优化,而是应回到计算机刚出现时的所表现的意义,解决所有开发者的重复劳动,累积所有开发者的智慧,解决人的用。就象一本数学书,写书的人不要光为了份量,也要为了质量。书样式做的再好,字印的再清楚,段落规化的再有条理,没有新的思想,也没有达到学以致用的目的,不过是多学了一门外语数学。就如英语讲数学与中文讲数学一样。就如VBnet与C#一样搞笑。
  唯一能让人上眼的就只有代码编辑器了.智能化非常高.
  B说:A你应该去搞汇编或者去用打带机。不然真的亏了你了。哪些个可是和硬件相紧密的。速度也一流!
  C说:你一定是个英雄,但不能过美人关,MS有的是美女,C#就是一位,叫你死心特地,哈哈.
  没有硬件那来的软件呢?没有打印驱动,那会让你方便地一点就打印了呢?
  没有汇编/C那来的操作系统呢?我不相信你会用MS的VSNET写个操作系统和数据库出来!!MS
  会帮你吧,让你写个操作系统????
  除了汇编/C/C++是真正的工具外,MS的其它任何软件都是产品,是要向你要钱的,明白了吗?
  MS的产品是由底层的东西累积起来的,明白了吗?
  如果中国多一些搞底层的,可能中国也会有自已的OS/DATABASE,
  如果中国多一些搞玩弄别人产品的人,中国的软件业就完蛋,明白了吗?
  就象美国可以卖导弹给你,你买的再多也不会制导弹一样。你要明白导弹是怎么让你死的,这样你才死得冥目啊,对不?
  33。
  即便如此,在我看来,.NET类库、C#语言的设计依然和VCL、Object Pascal一样伟大而闪光,但是,其败笔则出在为了迎合微软.NET需要而设计成了托管状态。微软是在1999年开始提出.NET战略,而这之前这位前辈就已经在微软了,所以说.NET的库可能早就开始了设计,如果没有.NET的突然出现(或者说没有Java的大行其道和对微软起诉),或许我们会见到一个基于C++的MFC的替代类库。
  更多请参见
  http://community.csdn.net/Expert/topic/4620/4620992.xml?temp=.6003687 c,c++,vc++,c#,java 都是编成语言。前四个是逐步升高,而JAVA是现在应用最广的编程语言,因为它可以跨平台
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页