编程语言概览

标签: 编程语言 计算机 语言
481人阅读 评论(0) 收藏 举报
分类:

前言

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

语言受欢迎程度排名

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

1~20名

Oct 2017 Oct 2016 Programming Language Ratings Change
1 1 Java 12.431% -6.37%
2 2 C 8.374% -1.46%
3 3 C++ 5.007% -0.79%
4 4 C# 3.858% -0.51%
5 5 Python 3.803% +0.03%
6 6 JavaScript 3.010% +0.26%
7 7 PHP 2.790% +0.05%
8 8 Visual Basic .NET 2.735% +0.08%
9 11 Assembly language 2.374% +0.14%
10 13 Ruby 2.324% +0.32%
11 15 Delphi/Object Pascal 2.180% +0.31%
12 9 Perl 1.963% -0.53%
13 19 MATLAB 1.880% +0.26%
14 23 Scratch 1.819% +0.69%
15 18 R 1.684% -0.06%
16 12 Swift 1.668% -0.34%
17 10 Objective-C 1.513% -0.75%
18 14 Visual Basic 1.420% -0.57%
19 20 PL/SQL 1.408% -0.12%
20 16 Go 1.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星期速成,因此选语言不是头等大事(甚至在公司间工作会经常换语言),语言只是我们表达思想的工具,很多语言的出现也是为了更好的解决某一方面的问题。

查看评论

Android应用组件之概览屏幕

摘要: 概览屏幕与任务 1 概述        概览屏幕(也称为最新动态屏幕、最近任务列表或最近使用的应用)是一个系统级别 UI,其中列出了最近访问过的 Activity 和任务。 用户可...
  • Create_Cool
  • Create_Cool
  • 2017年08月31日 20:23
  • 310

交互概览图

一:定义 1,交互概览图是交互图与活动图的混合物,可以把交互概览图理解为细化的活动图,在其中的活动都通过一些小型的顺序图来表示;也可以将其理解为利用标明控制流的活动图分解过的顺序图。 2,交互概览...
  • litianxiang_kaola
  • litianxiang_kaola
  • 2017年01月02日 14:48
  • 391

android-支持多种屏幕[屏幕支持概览] 五

Android 支持多种配置限定符,可让您控制系统 如何根据当前设备屏幕的特性选择备用资源。配置限定符是可以附加到 Android 项目中资源目录的字符串,用于指定在其中设计资源的配置。 要使用...
  • ZHOU452840622
  • ZHOU452840622
  • 2017年04月01日 15:36
  • 298

UML行为建模图———交互概览图

交互概览图 一个交互概览图是活动图的一种形式,它的节点代表交互图。交互图包含顺序图,通信图,交互概览图和时间图。 大多数交互概览图标注与活动图一样。例如:起始,结束,判断,合并,分叉和结合节点是完全相...
  • jasonsix
  • jasonsix
  • 2016年09月17日 18:30
  • 1281

Linux环境编程语言概览

本文出自 “elephant_liu” 博客,请务必保留此出处http://elephantliu.blog.51cto.com/1107116/868249  Linux环...
  • cbs612537
  • cbs612537
  • 2012年06月03日 21:25
  • 662

SAP概览(初学者必看)

SAP概览(初学者必看)     Q:什么是ERP? A: ERP是英文Enterprise Resourse Planning的缩写,中文意思是企业资源规划。它是一个以管理会计为...
  • freeblue_eddy
  • freeblue_eddy
  • 2015年03月04日 15:39
  • 305

MRP概览

  • zhongguomao
  • zhongguomao
  • 2017年02月09日 16:31
  • 481

IT行业和相关技术概览……

一、企业信息化:1、ERP产品2、CRM产品3、物流4、商务协同(CC)、知识管理(KM)与办公自动化(OA)5、IT服务管理、IT外包6、SAP7、SCM二、移动与游戏开发1、移动计算技术、多核计算...
  • ecaterina
  • ecaterina
  • 2008年04月27日 19:39
  • 749

Android Framework入门介绍

framework概述Android简介      Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发...
  • fu_kevin0606
  • fu_kevin0606
  • 2018年03月13日 09:37
  • 67

创业计划书学习笔记二——创业计划书的目录结构与执行概览部分的写作方法

对创业计划书的目录层次和第一部分内容的写作方法进行了描述
  • sinat_34905048
  • sinat_34905048
  • 2016年07月19日 22:36
  • 865
    个人资料
    持之以恒
    等级:
    访问量: 18万+
    积分: 6383
    排名: 4759
    ?神?论文
    http://www.cs.cmu.edu/~rwh/theses/okasaki.pdf