标签归档:编程语言

RSS feed of 编程语言

编译型语言和解释型语言的优缺点对比

编程语言可以分为:完全的编译型,纯粹的解释型或者两者相互混合的编程语言。实际上,大部分现有的编程语言都同时拥有其编译型和解释型版本。
编译型语言和解释型语言分别有其各自的优势和不足。下面从编译型语言开始介绍。

编译型语言:

  1. 编译型语言最大的优势之一就是其执行速度。用C/C++编写的程序运行速度要比用Java编写的相同程序快30%-70%。
  2. 编译型程序比解释型程序消耗的内存更少。
  3. 不利的一面——编译器比解释器要难写得多。
  4. 编译器在调试程序时提供不了多少帮助——有多少次在你的C语言代码中遇到一个“空指针异常”时,需要花费好几个小时来明确错误到底在代码中的什么位置。
  5. 可执行的编译型代码要比相同的解释型代码大许多。例如,C/C++的.exe文件要比同样功能的Java的.class文件大很多。
  6. 编译型程序是面向特定平台的因而是平台依赖的。
  7. 编译型程序不支持代码中实现安全性——例如,一个编译型的程序可以访问内存的任何区域,并且可以对你的PC做它想做的任何事情(大部分病毒是使用编译型语言编写的)
  8. 由于松散的安全性和平台依赖性,编译型语言不太适合开发因特网或者基于Web的应用。

解释型语言:

  1. 解释型语言提供了极佳的调试支持。一名Java程序员只需要几分钟就可以定位并修复一个“空指针异常”,因为Java运行环境不仅指明了异常的性质,而且给出了异常发生位置具体的行号和函数调用顺序(著名的堆栈跟踪信息)。这样的便利是编译型语言所无法提供的。
  2. 另一个优势是解释器比编译器容易实现
  3. 解释型语言最大的优势之一是其平台独立性
  4. 解释型语言也可以保证高度的安全性——这是互联网应用迫切需要的
  5. 中间语言代码的大小比编译型可执行代码小很多
  6. 平台独立性,以及严密的安全性是使解释型语言成为适合互联网和Web应用的理想语言的2个最重要的因素。
  7. 解释型语言存在一些严重的缺点。解释型应用占用更多的内存和CPU资源。这是由于,为了运行解释型语言编写的程序,相关的解释器必须首先运行。解释器是复杂的,智能的,大量消耗资源的程序并且它们会占用很多CPU周期和内存。
  8. 由于解释型应用的decode-fetch-execute(解码-抓取-执行)的周期,它们比编译型程序慢很多。
  9. 解释器也会做很多代码优化,运行时安全性检查;这些额外的步骤占用了更多的资源并进一步降低了应用的运行速度。

原文链接:http://www.codeproject.com/Articles/1825/The-Common-Language-Runtime-CLR-and-Java-Runtime-E


Pros and cons of compiled and interpreted languages

Languages can be developed either as fully-compiled, pure-interpreted, or ...

继续阅读

最适合初学者入门的5种编程语言

如果你想学习编程,你决定选择的第一门编程语言与你想要学什么、想要用这个技能做些什么以及最终要达到什么目的有很大关系。尽管如此,某些编程语言比其他语言要好学,拥有一个致力于教学的社区,或者当你学会它的时候提供更多有用的技能。下面是根据大家的提名总结出的5种最佳编程语言候选名单。

应该清楚的是,我们并不是在试图绝对化地解决你应当首先学习哪门编程语言这个问题。每个人都有不同的观点,并且,基于你特定的学习动机,也许这些都不适合你。由于篇幅所限,我们不可能把征集到的所有编程语言在此一一详细介绍。也就是说,这里列出的5种语言是提名中最流行的,排名不分先后。

Java

Oracle公司的Java是互联网历史最悠久、最坚挺和最具影响力的编程语言之一。你可以在线上线下、各种平台、操作系统和设备应用的核心部分发现Java的身影。它是一门极具特色的基于类、面向对象的编程语言,被设计为能够在尽可能多的平台上移植和运行。出于这个原因,它也是世界上最流行的编程语言之一,如果你对编程感兴趣,Java非常具有学习价值。Java的短板是由于其可移植性和适用性,它变得非常难以把握,并且难以有效和高效地编程。

Java并不是一门完美的语言——许多学校和课堂以C或者C++开始教学,因为Java从这些早期语言中继承了许多语法。坚持首选Java作为第一门编程语言的学习者必须注意Java迫使你以程序员的方式思维——逻辑和分析式思考,并且真正把握计算机是如何处理信息的才行。这是一些基本的概念,在你转向其它语言或技术时可以为你提供帮助。

Ruby

Ruby是一种动态、开源、面向对象的编程语言,由计算机科学家松本行弘(MatsumotoYukihiro)于上个世纪90年代研发,这使得它成为广泛使用的最年轻的语言之一。它的语法容易阅读、仅仅由人类编写,不需要学习一大堆基本的命令和特殊的“单词表”就可起步。尽管这个语言本身是面向对象的,它也支持过程化、函数式和命令式编程,这也是造就了其非凡灵活性的因素之一。

Ruby有一个比较易学的好名声,通过官网上的20分钟快速入门指引,你可以很快了解和熟悉 ...

继续阅读

自然语言VS编程语言

自然语言(人类语言)与编程语言之间有着很多惊人的相似之处。前些天我做了一个关于这两种语言相似性的讨论,惊讶地发现自己很容易就找到了它们之间的许多共同点。

然而实际上,两种语言之间具有如此多的相同之处也尚在情理之中,这两种形式的语言都是非常基础层面上的语言,它们本质上是为同一个目的服务的——那就是沟通。尤其是用来沟通思想和表达方式,有时也可以用来传达指令。

编程语言之间的相似之处比人们乍看上去的还要多得多。这意味着如果你很了解某一门编程语言,学习其他编程语言(至少同类型的编程语言)就变得十分容易。最开始的两种语言是最难学的,但是从学习第三门语言开始就会变得越来越轻松。

这其实与自然语言没什么不同。如果你会说英语,学习其他印欧语系的语言(比如法语和西班牙语)就会比较容易。然而,了解英语对于学习印欧语系以外的语言帮助就没有那么大了——比如印地语、阿拉伯语或者日语,它们与英语、法语相比有着显著的不同。

我的编程语言学习经历就是一个很好的例子。最开始学习的两门编程语言是BASIC和PHP,学完这两种语言之后,再学习其它类似的语言,比如C、C++、C#、MATLAB、Javascript、Ruby和Python就易如反掌了,我只需要了解它们之间的区别就好了。然而,学习它们圈外的语言时就得小心了,比如 LISP/Scheme、 AMPL、 SQL、 Regex和Dart,这种感觉就像一个已经说了25年英语的人去学习日语一样。

幸运的是,你懂得的语言越多,学习一门新语言就会越容易。在已经很好地掌握一门编程语言的基础之上,如果你愿意再花点儿时间做些必要的练习,你就可以很容易地同时掌握多门编程语言了。另外,你了解的语言种类越丰富,学习新语言也会越轻松。

这也就是为什么好的软件公司在招人的时候并不十分介意你是否已经掌握了他们所需的编程语言技能,他们会转而去看你了解多少门编程语言,期望在你的简历上看到你已经掌握了许多足够多样化的编程语言,此时学习一门新语言对于你来说并非难事。

21世纪程序员之间关于语言的一大争论就是:同时掌握多种编程语言与学习一门新的自然语言之间是否有互相促进的作用。坊间传闻和一些经验表明:优秀的程序员通常可以讲一口标准的英语,反之却不一定成立。关于这一点人们尚未达成共识,但是我们可以肯定的是,掌握更多的语言没有什么坏处。毕竟,你的思维广度是你所了解的所有语言的交集。

编程语言不能与算法混为一谈。精通Java并不意味着你就明白如何在不调用内置方法的情况下对一组数进行排序。算法之于编程语言,就同思维之于自然语言的关系一样。编程语言只是一种表达算法的手段,一组计算机需要执行的指令。同样地,我们使用自然语言来表达自己的思想,或者传达一条命令给其他人。

然而与人类语言不同的是,我们一般不会通过诗歌向计算机传情达意,因为计算机不知道如何对诗歌做出响应。如果不是一条确切的指令,计算机就会选择忽略它。

如果你说自己很了解一门编程语言,这意味着什么呢?这仅仅说明你经常使用这门语言并且用的很熟练吗?也许吧,但这并不是全部。诚然,熟能生巧,语言用得越多就越熟练。但究其原因是因为不断地练习会让你对语言的基本表达非常的熟悉。例如,控制结构可能是任何一门编程语言中最基本的概念——诸如if, then, else, while. do/while, foreach, goto, blocks, yields等等。了解一门编程语言意味着你了解如何在程序中自如地使用这些控制结构和控制流来表达思想。

不同编程语言之间的语法可能会有些许不同,但是编程语言之间基本的表达式大体是一样的。就像在所有的人类语言当中,讲话最基本的部分是一致的——名词(包括性别与数量),动词,形容词,副词等。但从表象上来看,它们在不同的语言中都不一样。

我对发明新的编程语言有着十分浓厚的兴趣。为什么有人会想要去发明一门新的编程语言呢?自然语言,由于其本身的定义,是自然产生的。它们源于人类之间相互交流的需求。并没有一群人坐在一起像制定委员会章程那样来制定一门语言的规则。好吧,的确有人做过这样的尝试,但是以彻底的失败而告终,那就是“世界语”。

另一方面,计算机语言的发明是用来满足人类与计算机交流的需要。因此,编程语言的能力是由你给计算机指令的复杂程度和完备程度所决定的。所以,人们会认为一门具有高级概念(比如递归,闭包和匿名函数)的编程语言比那些没有这些概念的编程语言更加强大。就像一门含有代词和感叹词的语言要优于没有这些概念的语言一样。

一门编程语言能力的大小在很大程度上也取决于传达指令效率的高下。现在,简洁的语言可以提升开发人员的效率,从而比那些冗长复杂的语言更受欢迎。然而,过分简洁的语言可能会存在问题,因为他们在未来会变得更加难以维护。可维护性是十分重要的,因为几乎90%以上的编码工作是用来向现有程序中添加特性的,而不是开发新的程序。一门没人愿意使用的编程语言能好到哪去?

在编程语言的表达能力和简洁程度上做出权衡是一门艺术。程序语言设计师在做出有关语言特征集的复杂性,同时还要保持简洁无歧义的重要决策时,常常会感到战战兢兢,如临深渊,如履薄冰。

对编程语言从哪里来这个问题感到好奇吗?编程语言的来源有很多。它们可能来源于一个学校计算机科学课程的编译器项目,后来逐渐演变成了一门语言。就像Linux一样,曾经是Torvald的课堂项目,后来开放了源码。

一些程序员,尤其是那些疯狂的(优秀的)程序员,以设计编程语言为乐趣。一部分原因是因为设计优秀的编程语言非常具有挑战性,另一部分原因是因为到最后可能会因此带来非常可观的收益。由于设计者没有任何时间压力,这些兴趣之作最后往往演变为非常优秀的语言。设计者可以花尽可能多的时间来为他们的语言做出正确的决策。而与这些兴趣爱好者不同的是,一些人有偿地为大公司设计编程语言,比如Google(Dart),Microsoft(C#)和Sun(Java)。

谈到自然语言与编程语言之间的差异,编程语言比自然语言更加严格,对错误的容许程度更低。这是因为人类语言具有显著的内置冗余机制,容许我们使用上下文来消除歧义。编程语言几乎没有冗余,因为这对于编写语言编译器的人们来说是额外的工作。英语在内置冗余性方面尤其臭名昭著。你可以很容易地在去掉30%的单词(过滤掉介词、连词和冠词等词汇),删掉所有的元音字母,打乱一个单词内除首尾字母外所有单词的顺序的情况下仍然能够表达清楚你想说的意思。

编程语言相较于人类语言更加严格这个事实没什么可惊讶的。计算机对于拟接收的指令要求非常的精确严谨。此外,计算机没有接受过像人类那样的消除表达歧义的训练。所以在很多方面,一门编程语言的优劣也可以由程序员编程时出错(也就是bug)的概率来衡量。

基于以上这些原因,编程语言实际上是由一个或者一群高端人才从零开始设计出来的。由于常常事关重大,编程语言设计失败的成本是非常高的。特别是当你知道你的语言可能会被用于驱动交通灯控制、国际空间站机械臂、NASA的火箭、核弹头,核磁共振机,亦或是你的下一款Facebook游戏的时候。你肯定不会乐意自己Farmville中的奶牛会随机消失吧?

注:FarmVille(台湾翻译为农场乡村)是一个社交网络服务网站Facebook上的农场模拟游戏,由Zynga公司开发,在游戏中Facebook的用户有一个虚拟的农场,可以种植及收成虚拟的作物、树木及动物,用户也可以拜访其他用户的农场。

原文链接: ...

继续阅读

编程语言与自然语言

    从人类(更准确地说是动物)存在时开始,自然语言就已经被人们以口头或者书面的形式所使用了。人是社会化的动物,使用语言相互交流。与之相对,编程语言是随着计算机的发展而发展的,人们需要向计算机输入一些机器能够理解的指令从而得到结果输出。自然语言与编程语言都是为沟通的目的而服务的:前者是人类之间互相交流的方式,而后者是人类与机器相互交流的媒介,它们还是可以从下面几个方面相互区别。

    自然语言与编程语言的一个主要区别在于两种语言的语法。自然语言是灵活可变的并且随着时间的推移而演化,而编程语言是静态的,并且从它诞生之初开始就保持不变。另外,当一个人使用自然语言不小心拼错一个单词时,大多数人并不会介意。但是编程语言一个分号的丢失都会最终导致程序的致命错误,使程序无法使用。换句话说,自然语言具有错误容许的能力,而编程语言无法容许任何错误。

    由于自然语言是用来与其他人沟通的,因此它们和人类一样复杂,词语可以用来传递情感,思想和各种信息对象,形容词和副词还可以强调重点内容,这与编程语言不同。计算机不关心人们在想什么,它们关心的只是接收到的明确指令。因此,自然语言有着庞大的词汇表,而编程语言的词汇表仅仅包含一些用来给计算机执行的直接命令,再无其他。

    尽管有着许多不同之处,编程语言与自然语言之间也有许多令人吃惊的相似的地方。其中一个直观的相似点就是它们都具有多样性:当前存在着数以千计的自然语言和数以百计的编程语言。不止如此,编程语言还是自然语言与计算机阅读的二进制码之间的桥梁。虽然编程语言最开始使用的是计算机能够读懂的语言,但是它过于笨拙。因此雄心勃勃的程序员们开发出了可以将编程语言转化为二进制码的工具。现在,编程语言中的很多代码都包含类似于自然语言中的名词或者动词的命令,方便了编程语言的编码。人们对于这两种语言都有着自己的个人偏好,经常做出关于“哪种语言更好”的评论。

    因此可以得出结论,自然语言与编程语言彼此之间既相似也不同。它们都很好地满足了人们的需求,但也许有一天编程语言和自然语言可以融为一体,特别是在编写出复杂的程序使得人们可以使用自然语言与计算机进行交流之后。尽管这个目标现在看起来很遥远,但我们已经将许多似乎不可能完成的任务变成了现实。

    原文链接:http://www.geo.brown.edu/People/Grads/Chen/MyOtherProjects/GradeSchool/Natural%20Languages%20vs%20Programming%20Languages.pdf

2014最受欢迎的编程语言-来自CodeEval

2014最受欢迎的编程语言

每年,CodeEval会根据收集到的数千个数据点来发布 “最受欢迎的编程语言”排行榜。

这些数据是通过处理超过2000个员工的10万个代码测试与挑战样本得来的。

这给我们提供了一个很好的点子来预测即将到来的一年里的编程语言流行趋势。

希望这些数据可以帮助即将毕业的计算机科学专业的学生和程序员们未雨绸缪,提前做一些知识储备。

Python已经连续3年位居榜首,今年紧随其后的是Java, C++和Javascript。

最值得关注的变化是Objective-C的提交量增长了300%,C#增长了100%,Javascript增长了33%,

而PHP下降了55%,Perl下降了16%,Java下降了14%。

相较于CodeEval指数,TIBOE指数可以更加准确地评价编程语言市场,而前者在预测工业界的语言流行程度上做得更好。

关于CodeEval

CodeEval是一个聚集了超过24000个优秀开发者的专属社区。成员可以相互竞争,向他们的朋友发出挑战,建立个人简历来展示自己的编程技能。