关闭

编程语言概览

标签: 编程语言计算机语言
342人阅读 评论(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星期速成,因此选语言不是头等大事(甚至在公司间工作会经常换语言),语言只是我们表达思想的工具,很多语言的出现也是为了更好的解决某一方面的问题。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

神经概率语言模型--吴立德教授深度学习课程笔记(十)

神经概率语言模型–吴立德教授深度学习课程笔记(十) 神经概率语言模型, A Neural Probabilistic Language Model
  • beichao001
  • beichao001
  • 2016-09-10 13:48
  • 1403

程序设计语言基本概念语 与经典真题

一、基本概念 在计算机中,程序设计语言可划分为低级语言和高级语言两大类,与高级语言相比,用低级语言开发的程序,其运行效率高,但开发效率低。与程序设计相关的基本概念如下。 (1)低级语言:又称面向机器语...
  • u013036959
  • u013036959
  • 2016-04-30 14:49
  • 2332

CSS预处理语言Less常用语法

Less是一种动态样式语言,属于css预处理语言的一种 它使用类似CSS的语法为CSS的赋予了动态的特性 如变量,继承,运算,函数等,更方便css的编写和维护实现css模块化less 可以在多种语...
  • q1056843325
  • q1056843325
  • 2017-01-19 16:27
  • 1298

你不知道python- 1.3Python作为编程语言的优势(一)

  • 2018-01-08 17:07
  • 42.79MB
  • 下载

plc五种编程语言

  • 2014-11-25 20:04
  • 46KB
  • 下载

编程语言和超级英雄

  • 2016-01-07 10:42
  • 403KB
  • 下载

软件编程语言

  • 2016-05-05 22:06
  • 475KB
  • 下载

电气控制与PLC应用技术(第2版)第4章 PLC的基础知识2 PLC的工作原理及编程语言

  • 2017-10-30 15:21
  • 976KB
  • 下载

《自制编程语言》PDF+随书源码

  • 2017-11-19 19:53
  • 53.69MB
  • 下载

代码之髓 编程语言核心概念

  • 2017-12-24 11:15
  • 56.16MB
  • 下载
    个人资料
    • 访问:165404次
    • 积分:6016
    • 等级:
    • 排名:第4886名
    • 原创:449篇
    • 转载:7篇
    • 译文:0篇
    • 评论:7条
    神犇们的后庭院
    wzq_QwQ http://blog.csdn.net/wzq_QwQ
    vmurder http://blog.csdn.net/vmurder/
    PoPoQQQ http://blog.csdn.net/popoqqq/
    YJQ神犇 http://tarawa.github.io/
    ?神?论文
    http://www.cs.cmu.edu/~rwh/theses/okasaki.pdf