《30种编程语言的比较选择问题.docx》由会员分享,可在线阅读,更多相关《30种编程语言的比较选择问题.docx(9页珍藏版)》请在第壹文秘上搜索。
1、30种编程语言的比较选择问题本文涉及到的编程语言:C、C+、Java.C#、PrologVB.Scala、ClojureHaskeI1.AdaPythonRubyPascal(Delphi)FOrtran、1.isp、matlabPerkErlangBooTckBashCshellObjective-CPHPP1.-SQ1.Transact-SQ1.ASP、JSP、1.Ua、smalltalkR、D,golang,rust涉及到的工具:sed、awk、grep我们现在学一门语言,大部分是要用到了才学(基本上是中国的公司用什么我们学什么),基于爱好的不多。比如,大头确定是C+和java,因为这个
2、最简洁混饭吃。最近多玩用了Erlang,还有不少公司跟风上了Erlang,让这个缄默了好久的语言突然被明星了。大公司一般除了C+外,都会招Java,事实上,互联网公司,JaVa占了半壁江山(当然,没选java架构的除外,有不少.net族的)。所以,生活在贫困线上的广袤中国程序猿很少有人会去看看诸如scala之类的玩意。不过作为胶水,python、Perl还是有确定的用户量的。随着互联网迭代速度的加快,许多公司甚至用Python干脆写大吞吐的后台,腾讯的Pythc)n情结就比较重。而随着网络平安重要性的提高,大部分的网络平安从业者选择了Python作为攻击式的语言,因为快又便利。要不很难应对改变
3、更快的PoC。而随着开源软件的兴起,storm,kafka等也运用了小众的CIOjUre,SCala等。但是我们看到在最核心的nginx,ats,IVS等基础架构,还是C一支独大。最多有在之上的IUa插件系统(IUa真是个好伴侣)好像,我们生活中只有这么几种语言。貌似,遇到一个问题,我们该选择什么语言呢?虽然每个语言本质上都是图灵完备的,但是能用PrOIe)g写出来的东西,假如用别的语言写,会无比苦痛。这就是不同语言存在的缘由:不同的问题,不同思索方式(编程范式)。解决问题case:已知大量事实,和事实之间的约束,要求挖掘关系。坚决用prolog族语言。例如,汉诺塔、地图着色、数独问题、八皇后
4、问题等这种考验智商,并且须要从已知规则中发觉模式的问题。拥有一大堆已知案例的应用(例如大部分的人工智能状况)除非你是探讨者,程序员一般是遇不到这种问题的。当然顶级的程序员也的确得具备解决这些问题的实力。但是他们就算解决也是用C解决的。这属于叫好不叫座的科研型语言。应用程序case:从小到超大型应用程序,非完全互联网应用这也是大部分软件公司遇到的状况。一般有几种没方法分出高下的解决方案:C+,Java,C#,VBo当然,这里面可以有C1.R和JVM的不同衍生。例如,理论上,你也可以用SCaIa来代替(不过估计大型公司不会冒这个险)。还是在理论上,你也可以用函数式编程的ClojUre和HaSkeH
5、来做(估计没人会那么傻)。还是在理论上,也可以用Ada这种强悍的通用语言,但估计没人情愿接受比C+还困难的编程语言。理论上(基本只能在理论上),不嫌弃的话SmalItalk也行。还是在理论上,python、ruby等协作确定的图形界面库也可以胜任(但项目大到确定的程度是,你会欲哭无泪)。但是,我另起一行。有个语言:D语言。我个人不认为不行以列入首选名单。但是貌似知名度不行啊。企业支持少啊。的确是门优秀的语言。C+太尾大不掉,须要一种语言,让C+成为纯粹的C+。最近谷歌强势的推出了goang,背景是后台程序员C+写的好的太缺,Python写的后台实在是效率不行。于是一个在这之间的,注意工程管理的
6、,并且是全静态编译的golang诞生了,你会发觉其拥有C+匹配的效率,也拥有python般丰富的编程库。其go和channel机制着实让人着迷,一出来就吸引了大量的后台开发人员,有的公司甚至后台全面转向go。但是其之前版本的内存回收机制比较烂,所以也有多数坑。现在的g。Iang已经基本解决了这些问题,编译器也用golang重新实现了。可以说已经产品化了。与golang竞争抢这个市场的还有rust,这是一个为并行而生,意在取代c+的编程语言。与golang的定位是相同的,但是目的是不同的。rust困难,很困难,上手难,但是一旦你驾驭,这将是一个很强大的武器。已经有公司放弃golang转向rust
7、的。但是这个语言的致命缺陷就是困难,我们已经有一个困难的C+了,他啥都能干,还要一个rust做什么?当然,我不能把rust拍死,终归这门语言的牛逼程度时比较靠近C+的。不过我高度怀疑其会较好不叫座。稍小一点规模的,无法接受面对对象的程序员,有不少用C的。虽然OoP程序员看他们像是不开化的人,但是他们有他们的哲学(我从嵌入式开发过来,相当长时间内也摆脱不了C,总本能的排斥OOP),但是假如读者是一个nginx或者其他的C底层基础设施确定会对oop嗤之以鼻,内核的编程范式已经给C下了一个什么叫对什么叫错的定义了。由于内核作为标杆,大家竟然同步的统一了编程风格。不用商议。nginx给那些卑视C的人上
8、了生动的一课,现在哪一个互联网公司能离开nginx? 解决问题case:程序规模不是很大的偏数学问题曾经许多人用PaSCal(包括扩展的DeIPhi),曾经许多人用FOman,但是都明显在退步。大型通用语言(C+、Java、C#)表明白他们在各种环境的适应实力。IiSP系列也在一些问题上呈现出古老的魅力。(但这个语言远没有黑客与画家的作者给我们描述的那样奇妙,个人认为。不过我的C+风格思想占了主导,可能没方法公正的评价lisp,但是据我的运用IiSP阅历,在大部分状况下,我最终还是放弃了它。因为大部分状况下我总能找到用C+(或其他OOP语言)更好的缘由)另外,读研的一般都用过matlab。这个
9、工具,两个字:强大!不过仅指科学计算方面。脱离了这个方面,就得考虑合不合适了,终归固定的矩阵思维不是啥状况都有效的。我用matlab最多的是神经网络,图片和信号处理。毫不夸张的说,matlab活脱脱一个PhOtoShOP啊。(当然,你得会用。)不过matlab的神经网络的确不行,做的太差了,小规模的网络可以,3层不用BP的F网,几十个就挂掉了。有这个需求的用ANN吧。(还是C+,偷笑) 特别应用case:须要大量处理字符串的应用首选利器是Pert不过假如你习惯了sed、awk、grep,也能很便利的完成相同的功能,但Perl是汲取三家所长做的。其次是C+,别拍我。诸位用过regex吗?就是bo
10、ost里的那个,最近被并入C+11啦。有了正则表达式的C+,处理字符,无敌了许多哇。当然,JaVa程序员别拍我,我知道这种库一个大型的通用语言都会有。我提C+,一般顺带着不否定Java和C#能以相像的代价完成相同的功能。 特别应用case:须要一个胶水,粘结不同语言写出来的程序首选是PythOn。俩字:精简(呀,这么说一个强大的语言有点太轻浮了,但比起ruby,的确简洁呐。)(另外BOo在met是可以用来取代python)其次是ruby。俩字:困难终归,没有rails,ruby根本火不起来。事实证明,Python的哲学很对。当然两种语言有许多细微环节的不同,甚至在编程范式上不同(真想不明白白r
11、uby支持多种范式怎么可能是个优点?市场证明白python的纯粹)还有一种编程思路就是Shello因为Iinux的一系列吩咐本身就是一系列可以完成小型功能的程序,你可以在任何语言中干脆调用系统吩咐完成想要的操作,这是代码复用的一种方式,而且复用程度相当高。假如大部分核心算法都可以用现有的吩咐,那么shell就是你编程的最佳选择。不过bashSheIl的语法比较惊奇,很简洁写出让人看不懂的东西,初学者看起来更是天书,所以,干脆用来写大型程序还是免了。 特别应用case:自动化测试不用问了,确定是tclTo由于这个特别应用,所以个人用户基本用不到,大部分是嵌入式公司。华为、数通、迈普等。Shell
12、也可以比较好的完成这个工作。不过由于通用语言的强势崛起,尤其是Python,已经被越来越多的用到专业领域。通用向专业渗透在芯片上就是如此,在编程语言上这个趋势也挺明显的。 特别应用case:系统底层这个确定是C了。操作系统,驱动,底层软件,大部分都是C写的,调用AP1.假如不用微软的ACtiVeX之类的技术,还是得老醇厚好用CAPl的。C写的代码,用Si看,真的很舒适。而且C写的好,根本不用文档。别人我说C+啥的也可以不要,C的代码干脆追踪,就算你有百万行,除非你用了一堆回调,否则追起来那简直是轻松。查逻辑问题也是很简洁,代码冗余大有的时候是缺点(在软件工程看来),但是实际的工程运用时,你会发
13、觉他们其实也是不小的优点。尤其是你的上级的需求常常改变,你可以把C用处脚本的感觉。 特别应用case:系统管理这个系统管理,一般指Iinux的。首选确定是各种shell啦:Bash、Cshell 特别状况case:苹果平台我们没得选。Objective-C和swift最近SWift开源了,java因为版权问题也闹起来了。SWift会不会在其他领域大展身手还说不准,终归又是一个通用的语言。但是其余g。Iarlg,rust,c+竞争,市场基本已经没有空间留下了。 特别领域:嵌入式大部分都是C了。不过andriod平台和苹果平台就得听话了。gmszone网友建议把Ada也放在这里,我不否定Ada在嵌
14、入式领域的广袤将来和实实在在的实力。但C主导了嵌入式这么久,程序员基本没方法接受别的思维了。比如ARM,三年前我用的XSCaIe,我实在不情愿想象放弃C。嵌入式的玩意对错有时候根本没方法说,所以很重要的是阅历,前人的积累,所以就像垄断一样,不是革命性的优秀根本无法动摇根基的。我用过spartan的FPGA,我记得当时选的Core也全部是用C做编程接口。所以,很愧疚这里我无法接收该网友的看法。 特别应用:网页嵌入网页内的,最火的确定是PHP(后端)javascript(前端)了。前者代替了古老的cgi。PhP的fastcgi实现fpm开创了一个时代,时至今日,wordpress等网站和现有的空间
15、,也大部分供应的方案也是php+fpmo但是,java系的jsp内嵌java,asp内嵌C#,都是PhP的强劲对手。网站的后台开发被PythOn带的很high,流行起了网络框架了,djongo等现成的网络框架,可以让你干脆注册到url,不用关切任何底层问题。但是做网页还是PhP的天下。通用语言在各个方面盛气凌人。 特别应用:数据库就是比哪个SQ1.版本更被人接受。标准Sql自然不必说,依据排名,P1.(SQ1.)/Transact-SQ1.上榜。最近兴起的nosql已经基本发展出格局了,nosql大部分都是用通用语言实现的,不须要运用Sql了。但是如mongodb还是支持标准sq1. 特别应用
16、:并行,分布式并行越来越重要了。两年前首选Erlang,现在无论是g。Iang还是mst都是现成的为并行而生的。但是,基于已有的条件,还是考虑选用通用语言的并行优化。C+JavaC#等都在这方面做了许多优秀的工作。C在这方面的建树应当是最优秀的,pthread,UPC等优秀的工作,使得用c组织现成也是特别轻松的,并且可以取得最完整的限制。 特别应用:特定语言的功能增加不用问了,我想说的是1.ua。用C+写实现,用1.Ua写逻辑是好多嬉戏的经典开发策略。(当然像UEty用的javascript,Unreal用的自己的。)在通用大型语言的基础上学会用1.ua加速,是一种很好玩的实践。nginx,ats上都有Iua的插件,这种基础设施你是