猫史档案馆


【召唤精灵】各种主流编程语言的分析~

用户:The_End_404N0tF0undThe_End_404N0tF0und查看:0 回复:2 评论:0 创建时间:2018-12-29T20:21:12


今天看到几篇好帖子,我要做一个搬运工搬运过来

众所周知,TIOBE榜单的结果更倾向于受欢迎的编程语言评选,主要综合了各大搜索引擎的数据。TIOBE近一年的榜单基本没什么变化,Java、C、C++是不变的前三名,即便Java已从一月份的17.278%下降至12.431%,但还是比其他编程语言的排名高出许多。未来一年,Java的位置可能还会如此稳固。

数据科学家 David Robinson 称,Python 是访问量增长最快的主流编程语言。在 Stackoverflow 上,主流编程语言如 Java、Javascript、C#、php 和 C++ 的访问量过去几年基本没太大的变动,只有 Python 一路呈上升趋势。

2017 年 6 月,Python 首次成为高收入国家访问量最高的标签。而在 2012 年,它的访问量比其它五种主流语言都低,Python 的年增长率达到了 27%。 Python 以及 R 的热捧被认为与数据科学的流行有关。

面向过程编程语言 C, Rust, Cython

C语言毫无疑问仍然是底层编程语言的统治者.它是实现 Python解释器的核心语言,同样也是实现 Linux操作系统内核的核心语言。作为软件开发人员,学习 C语言是学习更多关于软件所运行的底层硬件的最好起点– C语言经常被描述为“可移植的汇编语言”,通常使用 C语言编译器作为交叉编译器,为新的 喵U体系结构编译出第一个应用程序。

Rust是Mozilla开发的注重安全、性能和并发性的编程语言。“Rust”,由web语言的领军人物Brendan Eich(js之父),Dave Herman以及Mozilla公司的Graydon Hoare 合力开发。

Rust是针对多核体系提出的语言,并且吸收一些其他动态语言的重要特性,比如不需要管理内存,比如不会出现Null指针等等。

Rust,相比之下,是一个由 Mozilla创建的比较新的语言。它能够进入这个名单的原因是, Rust吸取了工业界已知的关于不能在 C语言中做什么的教训,并且被设计成可以与 C库互操作的语言,它对硬件的控制达到了和低级系统编程语言相同的精度,但它使用不同的编译时方法进行数据建模和内存管理,在结构上消除了许多常见的困扰 C程序的的缺陷(比如缓存溢出、重复释放内存错误、空指针访问以及线程同步问题)。我是一名嵌入式系统工程师,通过培训具备了最初的专业经验,我已经看到,当前被 C语言和定制汇编代码统治的各个领域很有可能会被 Rust取代。

Cython也是一种默认的更底层的语言,但是与通用目标语言 C, Rust不同, Cython主要用于书写 喵ython扩展模块。 Cython被设计作为一个 Python的超集,让程序员选择何时支持纯 Python语法的灵活性,当 Cython语法支持的扩展使其可以生成的代码相当于本地 C代码的速度和内存效率。

学习这些语言之一是以实用的角度增强其对内存管理,算法效率,二进制接口兼容性,软件可移植性,将源代码转换成运行系统的深刻理解。

面向对象的数据建模: Java, C#, Eiffel

编程中最主要的任务之一是为现实世界的状态建模,这方面最通常的方法是面向对象语言所提供的那些原生的语法支持:把数据结构、操作这些数据结构的方法组合成类。

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

Java具有简单性、面向对象、分布式、健壮性、安全性、平喵立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等 。

得益于 Sun Microsystems在20世纪90年代中后期对 Java语言的市场推广, Java成了很多大专院校计算机科学入门课程的默认语言。虽然现在在很多教育领域它正被 Python淘汰,但它在商业应用程序开发领域仍然是一种喵的语言。有一系列其它语言针对公共的 JVM( Java虚拟机)运行时的实现,包括 Python的 Jython实现。 Android系统的 Dalvik和 ART环境是基于 Java编程 API实现的。

C#在很多方面与 Java相似,在 Sun和 Microsoft解决关于 J++(微软实现的 Java语言)和标准 JAVA不一致的问题失败后,它是作为 J++的替代语言出现的。像 Java一样,它也是一个受欢迎的商业应用开发语言,有一系列其它语言针对共享. NET CLR(公共语言运行库)的实现,包括 Python的 IronPython实现(原始的Windows.0中的核心组件被抽取出来创建. NET动态语言运行库的中间层)。在很长的一段时间里,. NET是只能在 IronPython系统中使用的专有技术,有一个跨平台的开源代码 mono重新实现了. NET,但在2015年初,微软宣布了. NET开源计划。

Eiffel语言是继Smalltalk-80之后的另一个“纯”OOPL。这种语言是由OOP领域中著名的专家Bertrand Meyer等人20世纪80年代后期在ISE公司(Interactive Software Engineering Inc.)开发的,它的主要特点是全面的静态类型化、有大量的开发工具、支持多继承。

与列表里大多数语言不同,我并不推荐在日常使用 Eiffel。它之所以在推荐列表里,是因为这门语言有着大量优良的面向对象设计思想,包括以“正确可信”作为程序的设计目标。(同时, Eiffel也告诉我对于大多数的软件开发,并没有以“正确可信”为设计目标,这是因为正确可信的软件确实无法妥善处理不确定的情况。当很多相关约束还不清楚,需要在不断迭代的过程中去逐步完善的时候,这种设计理念就完全不适合了)

学习这类编程语言,就需要去熟悉继承模型、契约设计、类不变项、前置条件、后置条件、协变( covariance)、逆变( contravariance)、方法查找路径、泛型编程,以及其他各种在 Python的类型系统上也支持的特性。此外还有很多标准库模块和第三方框架,会用到“显示的面向对象”设计风格,例如 unittest和 loggingmodules,以及 Django框架里基于类的 view。

面向对象的 C: C++, D

C++的目标是在源码级完全兼容 C语言,在此之上增加了一些高级特性,例如原生的面向对象编程支持和基于模板的元程序开发。 C++的晦涩和复杂是臭名昭著的(即使2011年的语言标准的更新解决了大量最糟糕的问题),不过就算这样, C++仍然是很多场景下的选择,包括3D建模图形引擎和跨平台应用开发框架,如 Qt。

D编程语言也很有趣,因为它和 C++的关系很像 Rust与 C语言之间的关系:设计 D语言的目的是,既要保留 C++的大部分优点,也要避免 C++中存在的很多缺陷(比如缺乏存储安全性)。与 Rust不同, D语言不是一个从零开始设计的全新编程语言,相反,它是直接从 C++衍生出来的语言,尽管它不像 C++那样是 C语言的严格超集,但它遵守一个设计原则,任何落入 C语言和 D语言公共子集中的代码,在两种语言中的行为必须相同。

学习这些语言有利于深刻理解把高级语言特征和底层 C运行时模型相结合的复杂性。

面向数组的数据处理:MATLAB/Octave, Julia

面向数组的编程用于数值编程模型:基于矩阵代数和相关的数值方法。

MATLAB语言像Basic、Fortran和C语言一样规定了矩阵的一系列运算符,它不需定义数组的维数,并给出矩阵函数、特殊矩阵专门的库函数,使之在求解诸如信号处理、建模、系统识别、控制、优化等领域的问题时,显得大为简捷、高效、方便,这是其它高级语言所不能比拟的。

Octave语言是直译式及结构化(类于C语言)的编程语言,支援许多C语言的标准函式库提供的功能,同时可以使用UNIX的系统呼叫以进行扩充增进功能,但不支援以参照的方式传递参数。

Octave程式包含了许多脚本函式呼叫,它本身是以矩阵为基础并提供许多矩阵的操作函式。它并非面向对象编程语言但支援资料建构。它的语法基本上与Matlab一致,严谨编写的程式码应同时可在Matlab及Octave执行。

Julia 是一个面向科学计算的高性能动态高级程序设计语言。其语法与其他科学计算语言相似。在许多情况下拥有能与编译型语言相媲美的性能。Julia 是个灵活的动态语言,适合科学和数值计算,性能可与传统静态类型语言媲美。Julia是另一个相对较新的语言,它的主要特点是支持面向数组编程和基于类型的函数重载.

学习这样的语言有助于研究如何利用 OpenCL和 Nvidia的 CUDA等类似的技术实现硬件级并发执行,也有助于研究如何使用 Apache Spark和 Blaze等数据处理框架实现分布式数据处理。

统计数据分析语言: R

R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。由于有越来越多的大数据集需要处理。因此需要一种免费的能处理这样的数据集的分析工具,编程语言 R就是一种这样的工具,它特别注重统计数据分析和可视化。

计算管道建模语言:Haskell, Scala, Clojure, F#

面向对象数据建模和面向数组数据建模主要用于对数据进行静态建模,有两种建模方式,一种是把数据保存在对象的各个属性中,另一种是把结构化的数据保存为数组。

相比之下,函数式编程语言更强调以计算流的形式对数据进行动态建模。只要学一下函数式编程基础,就会显著提高使用数据转换操作对数据建模的能力,这对于使用其他范式的编程语言(比如面向过程、面向对象、面向数组的编程语言)开发应用程序也是有帮助的。

Haskell是一种标准化的、通用纯函数式编程语言,有非限定性语义和强静态类型。它的命名源自喵逻辑学家Haskell Brooks Curry,他在数学逻辑方面的工作使得函数式编程语言有了广泛的基础。在Haskell中,函数是一等喵。作为函数式编程语言,主要控制结构是函数。Haskell语言是1990年在编程语言Miranda的基础上标准化的,并且以λ演算(Lambda-Calculus)为基础发展而来。具有“证明即程序、结论公式即程序类型”的特征。这也是Haskell语言以希腊字母「λ」(Lambda)作为自己标志的原因。Haskell语言的最主要的执行环境是GHC。

Scala 毫无疑问是基于JVM的函数式编程语言,与Java, Python和R一样,是Apache Spark数据分析平台的四门主要编程语言之一。在设计上支持函数式编程方式的同时,Scala的语法、数据模型和执行模型在设计上尽量避免为原有的Java程序员带了太大的障碍(从这个角度上看,Scala更恰当的分类应该是有着强函数式语言支持的面向对象的编程语言)。

Clojure是一种运行在Java平台上的 Lisp 方言,Lisp是一种以表达性和功能强大著称的编程语言,但人们通常认为它不太适合应用于一般情况,而Clojure的出现彻底改变了这一现状。如今,在任何具备 Java 虚拟机的地方,您都可以利用 Lisp 的强大功能。Clojure是另一门基于JVM的函数式编程语言,被看作是Lisp的一个变种。它在我们的清单中具有一席之地,是因为它为Python的函数式编程工具箱toolz的实现带来灵感。

F#是由微软发展的为微软.NET语言提供运行环境的程序设计语言。它是基于Ocaml的,而Ocaml是基于ML函数程序设计语言的。这是一个用于显示·NET在不同编程语言间互通的程序设计。F#自2002年开始研发,2005年发布了第一个版本,2007年底正式从研发专案转移至产品部门,并决定将F#置入Visual Studio 2010。截止目前(2015年4月7日现在),最新的F#为F# 4.0。搭载于Visual Studio 2015中。


回复

上一页1 页 / 共 1下一页
哲学喵哲学喵

看得我头疼 有点长哦

 

点赞0


评论


活动喵活动喵

亲爱的训练师,你的帖子符合【集齐碎片,召唤精灵】的活动规则!

本喵已经登记好你的帖子在小本本上啦!

小精灵们都在等着你哦,继续加油呀!

本喵不偷懒~每日更新精灵召唤师排行榜~

σ ゚∀ ゚) ゚∀゚)σ 请在https://www.codemao.cn/community/169930 查看自己是否上榜哦!

 

点赞0


评论