问题描述
我在网上看过很多关于才C#/C++/Java三门语言之间的优劣对战,有人说C#,Java比C++强大应用稳定在开发领域有着无与伦比的稳定性,但回过头看一下很多古董公司用的都是C++,我们能从软件直接开发角度来说确实是Java,C++比较稳定,但跟多人在比较的时候忽略的了一个很重要的问题,从包容性,以及工具的全面性考虑,c++有着绝对的优势,虽说很多源有着模糊性只是不明确性,但包含范围确实比那些明确的源广泛了,但如果从确切的开发某一程序来说,这个有程序着明确的目的性以及程序的应用方面的指示性,用比较稳定的Java或者C++比较好。
解决方案
解决方案二:
送分我是要的,其实谈论稳定性的对比没有意义。谁用C++觉得不稳定,那是因为功力没到家,我只能说那个语言要先死,那么C++肯定排在最后。.net跟java所谓的稳定,那是被框在“框子”里面用。
解决方案三:
只从语法和基础类库角度来看,C#优势太大了
解决方案四:
C#和JAVA是同一级别的,C++掺和进来干嘛……
解决方案五:
抛开需求/场景单谈语言/平台没什么意义。要说本质,这些图灵完全的语言本质是没有区别的,就算是8条指令的Brainfuck,本质上都相同。更多的时候,谈论的不是本质,而是生态系统的未来方向。就我看到的近20年的编程语言的发展来说,其中最不可能改变的规律就是语言/平台都必然向更高级化发展,进一步降低开发门槛,解放生产力。然后,有三个趋势,一是由于物联网化发展,设备越来越多样,可移植能力会非常重要;二是因为CPU频率瓶颈十年没有突破,并且可见的未来貌似也没戏,多线程能力也是一个重要指标;三是指令式与函数式融合,静态类型与动态类型融合,函数式编程更适合数据处理、多线程场景,静态类型语言可以通过工具静态分析,动态类型语言开发的效率更高,二者结合能更好的提高生产力。C/C++的生产力明显不如C#/Java这些更高级的语言/平台,这就决定了它今后会继续丧失地盘,集中于一些特定领域,但是由于它是基础设施的一部分,仍然会很活跃,会越来越多的被作为制造工具的工具,而不是用来生产的工具。虽然跨平台能力C/C++应该说最好,但是跨平台不等于可移植,一般来说,编译时或运行时进行翻译的语言/平台更容易移植。论多线程能力,再说细点就是并发能力和同步能力,C/C++在语言层面没有提供帮助,但是极端性能的场景下还是它胜出。C#/Java做的也并不好,C#5添加了async/await可以说是一个进步,Java貌似也在继续学C#,但是因为生态系统问题,Java的开发人员大多熟悉服务端编程,对多线程的掌握水平比C#生态系统要高。这一点是像Erlang和Go这些拥有语言内置的并发/同步能力的语言做的更好,可以减少很多人为的错误。论指令式与函数式融合,应该说除了C/C++(函数指针太原始),其它主流语言基本都融合了一定函数式编程机制,C#在这方面还可以,从匿名delegate、lambda、LINQ,到6.0的进一步表达式化,后面还有提案可能要加入函数式编程的一个标志性的特征:模式匹配。Java现在在语言方面的发展一直比C#慢,不过JVM平台上还有Scala这类语言一定程度上进行了弥补。论静态与动态融合,一般不是通过语言本身能实现的,对于C/C++,可以通过嵌入Lua/Javascript这类语言来获得一定动态能力,C#/Java也类似,C#虽然添加了dynamic,但是用途有限。这方面还是原本的动态语言比如Javascript发展的比较好,Typescript变种可以增加静态特征。对于第一集团的其它语言,PHP基本被局限在了web开发,不如其它主流语言使用面广;Python和Ruby各个方面都不弱,个人感觉Ruby的生产力略高一点;Obj-C完全是渣,替代品Swift因为有后发优势,还算可以,估计能很快进入第一集团,不过它的问题是现在还太依赖Apple,生态系统比较单一。最后,还是说下C#,02年的时候我经过一番对比,最后选择了C#作为主技能。它的语言、类库和开发工具都相当不错,但是弱点就是跨平台/可移植的能力,Mono作为其跨平台实现解决了一部分问题,但是直到微软近几年开始转型,才让我真正看到了希望,现在CoreCLR已经可以试用,效果不错,等它正式发布,C#就能有更大的发展空间。当然,这还需要开发人员的努力,因为生态系统问题,C#/.NET平台的开发人员更多的是活跃在基于Windows系统的PC桌面领域和中小型企业内部系统的领域。业务熟练,但是技术水平,尤其是服务端技术不容易提高,希望使用C#的开发人员能多磨炼服务端技术,在新的空间里有所作为。