编程语言概览

前言

自Lisp语言横空出世后,高级语言的发展便一发不可收拾,如今计算机编程语言市场百花齐放,各式各样的编程语言花样繁多,让人眼花缭乱。本文将粗略地介绍50种编程语言,并简单地进行分类。

语言受欢迎程度排名

先让我们看看语言受欢迎程度的排名
(摘自2017年10月TIOBE榜单)
https://www.tiobe.com/tiobe-index/

1~20名

Oct 2017Oct 2016Programming LanguageRatingsChange
11Java12.431%-6.37%
22C8.374%-1.46%
33C++5.007%-0.79%
44C#3.858%-0.51%
55Python3.803%+0.03%
66JavaScript3.010%+0.26%
77PHP2.790%+0.05%
88Visual Basic .NET2.735%+0.08%
911Assembly language2.374%+0.14%
1013Ruby2.324%+0.32%
1115Delphi/Object Pascal2.180%+0.31%
129Perl1.963%-0.53%
1319MATLAB1.880%+0.26%
1423Scratch1.819%+0.69%
1518R1.684%-0.06%
1612Swift1.668%-0.34%
1710Objective-C1.513%-0.75%
1814Visual Basic1.420%-0.57%
1920PL/SQL1.408%-0.12%
2016Go1.357%-0.45%

21~50名

SAS,Transact-SQL,COBOL,Fortran,Dart,D,ABAP,Crystal,Scala,(Visual) FoxPro,Lua,Prolog,Ada,Apex,Lisp,VBScript,LabVIEW,Erlang,Alice,Logo,Kotlin,Awk,Julia,Bash,Scheme,Rust,Clojure,F#,ML,Hack

51~100名

4th Dimension/4D, ABC, ActionScript, APL, AutoLISP, bc, Bourne shell, C shell, CFML, cg, CL (OS/400), Clipper, Common Lisp, Elixir, Elm, Euphoria, Forth, Groovy, Haskell, Icon, Inform, Io, J, Korn shell, Ladder Logic, Maple, MOO, Moto, MQL4, MUMPS, NATURAL, NXT-G, OCaml, OpenCL, OpenEdge ABL, Oz, PL/I, PostScript, PowerShell, Q, REXX, Ring, RPG (OS/400), Smalltalk, SPARK, SPSS, Stata, Tcl, Verilog, VHDL

Rank

分类

了解了编程语言排名,我们知道了那些语言更受欢迎或更有前景(某种意义上相当于现阶段用的多的)。下面我们对这些语言进行简单的分类,我们可以对比排名和分类结果中了解一些信息。
以下的分类没有办法把所有语言都囊括进来,实际上很多语言本身的分类也比较模糊,不便分类。

按运行类型分类

实际上各个语言的运行类型现在都趋于模糊化了,下面指的是应用比较多的情况下的运行类型。

编译型语言

这里指一般直接编译到本地代码(不需要虚拟机)的语言(实际上MSVC++超出操作系统自带的新版本是需要另外运行时环境的,这是因为类库的扩展,这种不视为需要虚拟机)。
C、C++、Assembly、Delphi/Pascal、Swift、Objective-C、Visual Basic、Go、Fortran、D、Ada、Lisp、Rust……
实际上一些语言,如Java(Java编译到本地代码的项目很多;Kotlin,Kotlin Native项目)、C#(VB.NET,.NET Native项目)近期也支持了编译到本地代码(native code)的功能,所以上面举的例子是通常(比如C shell的特例)编译到本地代码的语言。

解释型语言

实际上现在很多基于虚拟机的解释型语言,其虚拟机大多支持JIT(即 及时编译),也就是说这些语言实际上兼有编译型和解释型语言的特征,很少纯解释型语言。譬如Java,JVM支持JIT,甚至Java 9还推出了jshell,可以把Java当成脚本语言来用。因此本节不再举例。

按编程方式分类

面向过程

C、Pascal、Visual Basic、Go、Fortran……
面向过程的语言大多出现年代比较早,这是时代局限性导致的。面向过程某种意义上可以视为面向汇编面向机器思考的方式。

面向对象

如今大多数语言都是面向对象的,面向对象的语言更加适应大型项目的构建,程序的模块化在OO下是自然而然的事情(这不代表面向过程就不可以,只是OO更加适应)。
Java、C++、C#、Python、PHP、VB.NET、Ruby、Delphi/Object Pascal、Swift、Objective-C、Dart、D、Scala、Lua、Kotlin、Rust、Smalltalk(面向对象语言的鼻祖)……

面向函数

函数式语言鼻祖Lisp是最早出现的编程语言之一(将数学的表示方式引入计算机编程领域,可以想到这对数学家很友好),然而函数式语言在编程领域一直不温不火,只在数学研究、人工智能(实际上AI在60~70年代是很热门的)领域有所体现。近期CPU从高频率转向多核心的方向发展,面向过程和面向对象的编程语言表达并行程序比较乏力(主要指程序不易于设计,而不是无法表达),而函数式编程语言所具有的纯函数(也就是没有状态)先天具备并行能力,使得函数式编程思想在近期又开始火热起来,很多面向对象的语言Java、C++、C#、Python等等等等都引入了lambda表达式和函数式编程所需要的库。因此本节只介绍一些纯的函数式语言或主要的函数式语言:
Common Lisp、Lisp、Scheme、Clojure、Scala、F#、Haskell、(O)Caml……

按变量模式分类

如果一个语言的变量一经声明类型即确定(包括编译器自动推导变量类型的),则这个语言称为静态语言,否则称为动态语言。一般脚本语言都是动态语言。函数式语言如Haskell没有变量一说,因此不参与分类。

静态语言

静态语言的好处是能在编译期间检查代码,提升代码查错率,借助IDE的强大提示能力,帮助我们快速找到想要的API。以下是静态语言:
Java、C、C++、C#、VB.NET、Swift、Objective-C、Visual Basic、Go、Fortran、D、Scala、Common Lisp(包含面向对象成分)、Kotlin……

动态语言

Python、JavaScript、PHP、Ruby、Perl、Matlab、Bash、Lua、ActionScript(Flash的控制语言)、Groovy……

按内存管理分类

此分类下我们只讨论堆空间的管理方式。

手动管理内存

手动管理内存指的是代码手工申请堆空间内存并主动释放(比如C的malloc/free,C++的new/delete,Pascal的new/free,Fortran的ALLOCATE/DEALLOCATE),这类语言多直接生成本地代码,效率较高(毕竟是手动管理内存),但管理内存较麻烦,且易出错。
C、C++、Fortran、Pascal、Delphi/Object Pascal、C#/VB.NET(Unsafe模式下)……

自动管理内存

自动管理内存指的是语言自带垃圾回收器(GC),基于虚拟机的语言几乎都自带GC,剩下的语言基本都是自带GC的。带GC的问题就是程序会经常暂停(Stop the World),暂停所有线程执行垃圾回收,对响应时间敏感的需求不适合使用这类语言(比如金融领域)。

按适用领域分类

先举一些通用语言,通用语言指一般可以胜任绝大多数工作(设计面向多用途)
Java、C、C++(通用性尤甚)、C#、Python、JavaScript(起初是仅面向前端,随着node.js的出现,JS已经可以担负大量的工作)、VB.NET、Swift、Objective-C……
通用语言量比较大,不再多举例。

本分类只是讲分类下用的比较多的语言,用的比较少的语言不会举例,遗漏会比较多,欢迎指出。

面向数学(数据)

Matlab、R、COBOL、Fortran、SAS……
函数式语言某种意义上也可以视为面向数学的。

面向后端

PHP(多用于编写网站后台)、Go(多用来开发服务器后端)、Python(快速开发)、Java/C#(后端领域全能)

面向终端

Bash(Unix、Linux、Mac OS平台)、Powershell(Windows平台)

面向底层

面向底层可以理解为用于硬件开发,比如嵌入式开发、操作系统开发等。
Assembly、Ada、C、C++、Objective-C(用的很少)、Pascal(用的很少)、Rust(用的很少)、D(要打问号)

面向桌面开发

C/C++(依赖系统API、或一些类库如wxWidget、Qt)、Java、C#/VB.NET(一般用于Windows)、JavaScript(配合HTML和CSS,依托node环境可以制作出桌面级应用程序,比如Atom、Visual Studio Code编辑器和GitHub客户端)、Swift/Objective-C(一般用于macOS)

面向移动开发

C/C++、Java(一般用于Android和老人机Java ME)、C#/VB.NET(一般用于Windows Phone,但后来出现的Xamarin使得其可以跨Android和iOS平台)、Swift/Objective-C(用于iOS平台)

其他

Verilog(面向硬件设计开发)、FoxPro(面向数据库)、Prolog/Erlang(逻辑编程语言)

按平台分类

这里的平台指虚拟机平台,很多语言自带虚拟机,但JVM(最初为Java设计)和CLR(最初为C#、VB.NET设计) 2个虚拟机平台收获了大量第三方语言,壮大了虚拟机的使用场景。

JVM系列语言

指允许运行在JVM上的语言
Java、Kotlin、Groovy、Clojure(Lisp方言)、Scala、JRuby(Ruby的移植)、Jython(Python的移植)……

.NET CLR系列语言

C#、C++/CLI、F#、J#(Java的语法)、PowerShell、IronPython(Python的移植)、IronRuby(Ruby的移植)、VB.NET、A#、IronLisp、P#(Prolog的移植)、Oxygene(Pascal的移植)、Phalanger(PHP的移植)……

小结

就分类来看,出现次数最多的几种语言,也恰好是受欢迎程度最多的语言。但是领域多决定语言,我们不是为了学语言而学,而是从中窥探到哪些领域十分活跃,然后再深入研究。语言可以1星期速成,因此选语言不是头等大事(甚至在公司间工作会经常换语言),语言只是我们表达思想的工具,很多语言的出现也是为了更好的解决某一方面的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值