zoukankan      html  css  js  c++  java
  • 关于Lisp和函数式编程 & 各种语言对比 & TIOBE

    上一篇文章提到了,今天又读到Lisp的一些内容

    《为什么Lisp如此先进》ruanyifeng(Link)。关于Lisp的八卦,可以参考我前面两篇文章

    http://www.cnblogs.com/charlesblc/p/6110484.html  以及

    http://www.cnblogs.com/charlesblc/p/6123411.html


    先看一个 "格林斯潘第十定律"(Greenspun's Tenth Rule):

    "任何C或Fortran程序复杂到一定程度之后,都会包含一个临时开发的、只有一半功能的、不完全符合规格的、到处都是bug的、运行速度很慢的Common Lisp实现。"

    编程语言现在的发展,不过刚刚赶上1958年Lisp语言的水平。

    Lisp的作者 约翰.麦肯锡(John McCarthy) 图灵奖获得者,是把图灵老师 阿隆佐·邱奇的λ演算,发展成了一门编程语言。而且开始的时候,只打算把Lisp作为一种规则,而不是语言。

    为什么上个世纪50年代的编程语言,到现在还没有过时?简单说,因为这种语言本质上不是一种技术,而是数学。数学是不会过时的。你不应该把Lisp语言与50年代的硬件联系在一起,而是应该把它与快速排序(Quicksort)算法进行类比。这种算法是1960年提出的,至今仍然是最快的通用排序方法。

    选择哪一种编程语言,许多项目是无所谓的,反正不同的语言都能完成工作。一般来说,条件越苛刻的项目,强大的编程语言就越能发挥作用。但是,无数的项目根本没有苛刻条件的限制。大多数的编程任务,可能只要写一些很小的程序,然后用胶水语言把这些小程序连起来就行了。你可以用自己熟悉的编程语言,或者用对于特定项目来说有着最强大函数库的语言,来写这些小程序。

    其他内容,包括用一个返回功能函数的例子来对比各种语言编程能力的内容,就不详细摘录了,可以参考原文:

    http://www.ruanyifeng.com/blog/2010/10/why_lisp_is_superior.html

    正好,还有一篇文章提到了

    http://www.ruanyifeng.com/blog/2010/03/programming_language_evaluations_revised.html

    一、C

    C语言的优点是,运行效率高和接近机器语言。它特别适用于以下几种程序:

      1. 对运行速度要求很高的程序。

      2. 与操作系统内核关系密切的程序。

    除此之外,学习C语言有一个最大的理由,那就是它能帮助我们学会,在硬件层次上考虑问题。如果你想以编程作为自己的人生事业,C是一定要学习的。

    C的最大缺点是,在编程过程中,你不得不花很多时间,考虑与你要解决的问题完全无关、且非常复杂的硬件资源管理问题。

    二、C++

    C++在80年代中期推出,支持OO(面向对象编程),原意是作为C语言的取代者。

    但是它没能做到做一点,原因有以下几个:

      1. 它也没有解决"内存管理"问题,虽然比C有所改善。

      2. 标准化不成功。各个编译器都只支持自己选择的一个子集,导致跨平台性不如C。

      3. 过分的精细和复杂了。C++的复杂度,超过了C和OO的复杂度之和。

      4. OO并没有带来多少优势,反而带来了一些副作用,比如厚重的胶合层和庞大的代码体积。

    总的来说,C++的优势还是程序效率,以及面向对象编程能力,糟糕之处是它鼓励复杂的设计

    注:另外,我觉得,功能库不完善,分散,不易管理。开发速度慢。

    Shell, Perl 忽略。

    五、Python

    Python发布于1991年,是一种与C语言紧密集成的脚本语言。

    Python的优点是非常干净优雅,鼓励清晰易读的代码,易学易用;提供了面向对象编程的可能,但并不把这个选择强加于设计者;具有出色的模块化特性,同Java一样,适合用来做需要协同开发的大型复杂项目。(这一句值得怀疑)因为Python解释语言的特性,使得版本管理变得很tricky。

    在很多方面,它都比Java简单。此外,Python标准中包括了对许多网络协议的支持,因此也很适合网络管理任务。

    Python的缺点主要是效率低下,速度缓慢。在执行速度上,它不仅无法与C/C++竞争,而且也不如其他主要的脚本语言。但是,这其实并不是一个严重的问题,有时网络或磁盘的延迟,会完全抵消Python本身消耗的时间。而且因为Python特别容易和C结合起来,因此性能关键的 Python模块,可以很方便地转化成C语言来提高速度。

    总的来说,对于小型项目和大量依靠正则表达式的项目,Python不如Perl的表达能力强。至于更小的项目,Python则是大材小用,shell也许更适合。

    六、Java

    Java发布于1995年,设计目标有两个。

    一个是"write once, run anywhere"(一次编写,到处运行),即不依赖于特定的平台;另一个是在网页中嵌入交互程序(applet),可以在任何一个浏览器中运行。由于它的所有者Sun公司的一系列失误,第一个目标并没有完全实现,第二个目标则是彻底失败。但是Java依然在系统编程和应用编程方面非常强大,足以挑战C和 C++。

    Java的优点是比C++小巧简单,可以自动管理内存,支持类似C的语法和OO编程,与C程序的结合也很好。

    Java的缺点是某些部分过于复杂,比如内部类和匿名类的运用会产生很混乱费解的代码;某些部分功能不完善,也无法利用操作系统提供的功能接口,比如在Java中读取和处理文本文件,并不像其他语言那样容易。此外,Java配置环境和版本的混乱,也让人很头疼。

    总的来说,除了系统编程某些对运行速度要求很高的编程之外,Java都是比C++更好的选择。如果和Python相比,Java可能在大型项目上有优势,但是也不是绝对的。

    注:现在Java是绝对的语言中的王者。从TIOBE编程语言排名,可以看出,Java很久以来,稳居第一。

    另外,TIOBE, 是“The Importance Of Being Ernest”的缩写,很有意思,它是奥斯卡·王尔德的一部剧作,虽然我不清楚这跟程序设计语言有什么关系。它能够通过各种搜索引擎以及谷歌博客、维基百科甚至YouTube进行语言跟踪。

    有篇文章,说Java强大在4个地方(Link)。其中我只认可1,而2、3和4我认为是个语言就有:

    1. James Gosling 是 Java之父。他将Java描述为“蓝领”的程序设计语言。它能使开发者花最小的代价完成工作,同时还能使得开发者在一段时间之后,还能继续完成别人的(甚至自己的)代码并且明白其中的意思。

    所以,好维护。

    2. 向下兼容 3. 可扩展性

    Hadoop,Cassandra和Spark,大数据工程的基础框架,无不使用Java或者Scala并且在JVM虚拟机上运行的。如果你想要良好的拓展性和性能,Java和JVM是最好的选择。

    4. 2014年10月份开始,Java的受欢迎程度有了显著的提升,这刚好是在JDK8发行之后。JDK8对Java开发者来来说有了显著的变化,它引入了Lambda表达式和Stream API。突然间Java开发者能够在不用学习一整套新语言(如Scala)的情况下以一个更加有效的方式进行开发。

    我的理解:

    Java是趁了大数据和互联网的春风。

    首先大数据的Hadoop, Spark无不和Java密切相关,这让传统的系统级语言C/C++倍受打击。而Java开发虽不如Python、PHP语言那么快,但是胜在系统性强、强类型语言、易调试。易扩展,JVM上可运行Scala等多种语言。而且足够蓝领,门槛低。而且性能不差,JVM一直在优化。 

    然后是互联网春风,国内阿里等公司对Java的推广,也起了很大作用。

    本人既用PHP,又用Java,不得不说,PHP太草根了,Java写出来的代码,要规范化的多。

    附一份最新的 2016年11月份的 TIOBE编程语言排行榜:

    (完)

  • 相关阅读:
    ubuntu docker 安装
    后缀数组小结
    后缀数组小结
    后缀数组小结
    win7下如何建立ftp服务器
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/charlesblc/p/6131887.html
Copyright © 2011-2022 走看看