30种编程语言的比较选择问题_第1页
30种编程语言的比较选择问题_第2页
30种编程语言的比较选择问题_第3页
30种编程语言的比较选择问题_第4页
30种编程语言的比较选择问题_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、30种编程语言的比较选择冋题本文涉及到的编程语言: C C+、Java、C# Prolog、VB Scala、Clojure、 Haskell、Ada、Python、Ruby、Pascal( Delphi )、Fortran、Lisp、matlab、 Perl、Erlang、Boo、Tcl、Bash、C shell、Objective-C、PHP PL-SQL Transact-SQL、ASP JSP、Lua、smalltalk 、R D,golang,rust 涉及到的工具:sed、awk、grep我们现在学一门语言,大部分是要用到了才学(基本上是中国的公司用什么我们学什么),基于兴趣的不多

2、。比如,大头肯定是 C+和java,因为这个最容易混饭吃。最近多玩用了Erlang,还有不少公司跟风上了Erlang,让这个沉默了好久的语言忽然被明星了。大公司一般除了 C+外,都会招Java,事实上,互联网公司,Java占了半 壁江山(当然,没选java架构的除外,有不少.net族的)。所以,生活 在贫困线上的广大中国程序猿很少有人会去看看诸如scala之类的玩意。不过作为胶水,python、perl还是有一定的用户量的。随着互联网迭代速度的加快,很多公司甚至用python直接写大吞吐的后台,腾讯的python情结就比较重。而随着网络安全重要性的提高,大部分的网络安全从业者 选择了 pyth

3、on作为攻击式的语言,因为快又方便。要不很难应对变化更 快的poc。而随着幵源软件的兴起,storm ,kafka等也使用了小众的clojure , scala等。但是我们看到在最核心的nginx,ats, lvs等基础架构,还是c 一支独大。最多有在之上的lua插件系统(lua真是个好伴侣)似乎,我们生活中只有这么几种语言。貌似,遇到一个问题,我们该选择什么语言呢?虽然每个语言本质上都是 图灵完备的,但是能用 prolog写出来的东西,如果用别的语言写,会无 比痛苦。这就是不同语言存在的原因:不同的问题,不同思考方式(编程 范式)。?解决问题case:已知大量事实,和事实之间的约 束,要求挖

4、掘关系。果断用prolog族语言。例如,汉诺塔、地图着色、数独问题、八皇后问题等这种考验智商,并且需要从已知规则中发现模式 的问题。拥有一大堆已知案例的应用(例如大部分的人工智能情况)除非你是研究者,程序员一般是遇不到这种问题的。当然顶级的程序员也 确实得具备解决这些问题的能力。但是他们就算解决也是用c解决的。这属于叫好不叫座的科研型语言。?应用程序case:从小到超大型应用程序,非完全 互联网应用这也是大部分软件公司遇到的情况。一般有几种没办法分出高下的解决方案: C+,Java,C# VB当然,这里面可以有 clr和jvm的不同衍 生。例如,理论上,你也可以用 scala来代替(不过估计大

5、型公司不会 冒这个险)。还是在理论上,你也可以用函数式编程的Clojure 和Haskell来做(估计没人会那么傻)。还是在理论上,也可以用Ada这种强悍的通用语言,但估计没人愿意接受比C+还复杂的编程语言。理论上(基本只能在理论上),不嫌弃的话Smalltalk也行。还是在理论上,python、ruby等配合一定的图形界面库也可以胜任(但项目大到一定的程度是,你会欲哭无泪)。但是,我另起一行。有个语言:D语言。我个人不认为不可以列入首选名单。但是貌似知名度不行啊。企业支持少啊。确实是门优 秀的语言。C+太尾大不掉,需要一种语言,让C+成为纯粹的C+。最近谷歌强势的推出了 golang,背景是

6、后台程序员 C+写的好的太缺, python写的后台实在是效率不行。于是一个在这之间的,注重工程管理的, 并且是全静态编译的golang诞生了,你会发现其拥有C+匹配的效率,也 拥有python般丰富的编程库。其go和channel机制着实让人着迷,一出 来就吸引了大量的后台幵发人员,有的公司甚至后台全面转向go。但是其之前版本的内存回收机制比较烂,所以也有无数坑。现在的golang已经基本解决了这些问题,编译器也用golang重新实现了。可以说已经产品化了。与golang竞争抢这个市场的还有rust,这是一个为并行而生,意在取代 C+的编程语言。与golang的定位是相同的,但是目的是不同的

7、。 rust复 杂,很复杂,上手难,但是一旦你掌握,这将是一个很强大的武器。已经 有公司放弃golang转向rust的。但是这个语言的致命缺陷就是复杂,我 们已经有一个复杂的 C+T,他啥都能干,还要一个rust做什么?当然,我不能把rust拍死,毕竟这门语言的牛逼程度时比较逼近C+勺。不过我高度怀疑其会较好不叫座。稍小一点规模的,无法接受面向对象的程序员,有不少用C的。虽然OOP程序员看他们像是不幵化的人,但是他们有他们的哲学(我从嵌入式幵发过来,相当长时间内也摆脱不了 C,总本能的排斥 OOP,但是如果读者 是一个nginx或者其他的c底层基础设施绝对会对 oop嗤之以鼻,内核的 编程范式

8、已经给c下了一个什么叫对什么叫错的定义了。由于内核作为标 杆,大家竟然同步的统一了编程风格。不用商量。nginx给那些歧视c的人上了生动的一课,现在哪一个互联网公司能离幵nginx ?解决问题case:程序规模不是很大的偏数学问题曾经很多人用Pascal (包括扩展的Delphi ),曾经很多人用Fortran,但 是都明显在退步。大型通用语言( C+ Java、C#)表明了他们在各种环 境的适应能力。lisp 系列也在一些问题上展现出古老的魅力。(但这个 语言远没有黑客与画家的作者给我们描述的那样神奇,个人认为。不 过我的C+风格思想占了主导,可能没办法公正的评价lisp,但是据我的使用li

9、sp经验,在大部分情况下,我最后还是放弃了它。因为大部分情 况下我总能找到用 C+ (或其他OOP语言)更好的原因)另外,读研的一般都用过 matlab。这个工具,两个字:强大!不过仅指 科学计算方面。脱离了这个方面,就得考虑合不合适了,毕竟固定的矩阵思维不是啥情况都有效的。我用matlab最多的是神经网络,图片和信号处理。毫不夸张的说,matlab活脱脱一个photoshop啊。(当然,你 得会用。)不过 matlab的神经网络确实不行,做的太差了,小规模 的网络可以,3层不用BP的F网,几十个就挂掉了。有这个需求的用ANN吧。(还是C+,偷笑)?特殊应用case:需要大量处理字符串的应用首

10、选利器是Perl,不过如果你习惯了 sed、awk、grep,也能很方便的完 成相同的功能,但perl是吸收三家所长做的。其次是C+,别拍我。诸位用过regex吗?就是boost里的那个,最近被 并入C+11啦。有了正则表达式的 C+,处理字符,无敌了很多哇。当然, Java程序员别拍我,我知道这种库一个大型的通用语言都会有。我提C+, 一般顺带着不否定Java和C#能以相似的代价完成相同的功能。?特殊应用case:需要一个胶水,粘结不同语言写 出来的程序首选是python。俩字:精简(呀,这么说一个强大的语言有点太轻浮了, 但比起ruby,确实简单呐。)(另外Boo在.net是可以用来取代p

11、ython) 其次是ruby。俩字:复杂毕竟,没有rails , ruby根本火不起来。事实证明,python的哲学很对当然两种语言有很多细节的不同,甚至在编程范式上不同(真想不明白白 ruby支持多种范式怎么可能是个优点?市场证明了python的纯粹)还有一种编程思路就是 shell。因为linux的一系列命令本身就是一系列 可以完成小型功能的程序,你可以在任何语言中直接调用系统命令完成想 要的操作,这是代码复用的一种方式,而且复用程度相当高。如果大部分 核心算法都可以用现有的命令,那么shell就是你编程的最佳选择。不过bash shell的语法比较奇怪,很容易写出让人看不懂的东西,初学者

12、看起 来更是天书,所以,直接用来写大型程序还是免了。?特殊应用case :自动化测试不用问了,肯定是tcl 了。由于这个特殊应用,所以个人用户基本用不到,大部分是嵌入式公司。华为、数通、迈普等。shell也可以比较好的完成这个工作。不过由于通用语言的强势崛起,尤 其是python,已经被越来越多的用到专业领域。通用向专业渗透在芯片上就是如此,在编程语言上这个趋势也挺明显的。?特殊应用case :系统底层这个肯定是C了。操作系统,驱动,底层软件,大部分都是C写的,调用API,如果不用微软的ActiveX之类的技术,还是得老老实实用 CAPI的。C写的代码,用si看,真的很舒服。而且c写的好,根本

13、不用文档。别人 我说C+啥的也可以不要,c的代码直接追踪,就算你有百万行,除非你 用了一堆回调,否则追起来那简直是轻松。查逻辑问题也是很容易,代码 冗余大有的时候是缺点(在软件工程看来),但是实际的工程使用时,你 会发现他们其实也是不小的优点。尤其是你的上级的需求经常变化,你可 以把C用处脚本的感觉。?特殊应用case :系统管理这个系统管理,一般指linux的。首选肯定是各种shell啦:Bash、C shell?特殊情况case :苹果平台我们没得选。objective-C 和 swift最近swift幵源了,java因为版权问题也闹起来了。swift会不会在其他领域大展身手还说不准,毕竟

14、又是一个通用的语言。 但是其余golang , rust , C+竞争,市场基本已经没有空间留下了。?特殊领域:嵌入式大部分都是C 了。不过andriod平台和苹果平台就得听话了。gmszone网友建议把Ada也放在这里,我不否定 Ada在嵌入式领域的广阔未来和实实在在的实力。但C主导了嵌入式这么久,程序员基本没办法接受别的思维 了。比如ARM三年前我用的Xscale,我实在不愿意想象放弃 C。嵌入式 的玩意对错有时候根本没办法说,所以很重要的是经验,前人的积累,所 以就像垄断一样,不是革命性的优秀根本无法动摇根基的。我用过spartan的FPGA我记得当时选的core也全部是用C做编程接口。

15、所以,很抱歉 这里我无法接收该网友的意见。?特殊应用:网页嵌入网页内的,最火的肯定是PHP(后端)和javascript (前端)了。前者代替了古老的cgi。php的fastcgi实现fpm幵创了一个时代,时至 今日,wordpress等网站和现有的空间,也大部分提供的方案也是 php+fpm。 但是,java系的jsp内嵌java, asp内嵌C#,都是php的强劲对手。网 站的后台幵发被python带的很high,流行起了网络框架了,djongo等现成的网络框架,可以让你直接注册到url ,不用关心任何底层问题。但是做网页还是 php的天下。通用语言在各个方面咄咄逼人。?特殊应用:数据库就

16、是比哪个SQL版本更被人接受。标准 sql自然不必说,根据排名,PL(SQL)/Transact-SQL上榜。最近兴起的nosql已经基本发展出格局了, nosql大部分都是用通用语言实现的,不需要使用sql 了。但是如mongodb还是支持标准 sql 。?特殊应用:并行,分布式并行越来越重要了。两年前首选 Erlang,现在无论是golang还是rust都是现成的为并行而生的。但是,基于已有的条件,还是考虑选用通用语言的并行优化。C+、Java、C#等都在这方面做了很多优秀的工作。c在这方面的建树应该是最优秀的,pthread ,upc等优秀的工作,使得用c组织现成也是非常轻松的,并且可以取得最完整的控制。?特殊应用:特定语言的功能增强不用问了,我想说的是 Lua。用C+写实现,用Lua写逻辑是好多游戏的经典幵发策略。(当然像Un ity用的javascript ,Un real用的自己的。)在通用大型语言的基础上学会用 Lu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论