本文列举并简要介绍了常用的编程语言,顺序参考TIOBE 排行榜,但是删除了作者从未使用过的部分语言。

本文主要包括通用编程语言(GPL,general-purpose language),不包括大部分领域特定语言(DSL,domain-specific language),例如在 bash,powershell 使用的语言,或者 CMake 语言。当然,本文列举的数值计算领域的 MATLAB,Mathematica 也应该被归类为 DSL。

Python

Python 是一种著名的胶水语言,脚本语言,学习门槛低,代码可读性很高。

Python 的运算效率较低,尤其是原生数组的运算和循环等。通常科学计算为了达到高效率,都会调用 numpy 等库进行操作,这些库主要基于 C/C++/Fortran。

Python 是机器学习,人工智能时代的宠儿,深度学习主要都是使用 Python 来搭建神经网络。(在投入实际生产,对速度有要求时可能会使用 C++重写)

1
print("hello,world!")

C

C 是最经典的语言,主要用于系统开发工作,特别是组成操作系统的程序。

C 语言最接近底层,语法和汇编的对应最为直接,效率也几乎一样。

操作系统的接口也主要是通过 C 语言函数的形式对外提供,例如 Windows 平台的windows.h

1
2
3
4
5
6
#include <stdio.h>

int main(int argc, char *argv[]) {
printf("hello,world!\n");
return 0;
}

C++

C++(读作 C plus plus)约等于 C 的超集(但并不是完全兼容 C 的),在 C 的基础上添加了面向对象,以及很多复杂的组件,C++的目标是在保留面向底层,运行高效率的前提下拥有更多丰富的功能。

没有人可以精通 C++,C++的语法比其它语言都更加复杂。

1
2
3
4
5
6
#include <iostream>

int main(int argc, char *argv[]) {
std::cout << "hello,world\n";
return 0;
}

Java

Java 是一种彻底的面向对象的编程语言,它的关键词仍然是 C/C++系列的风格,但是语法上选择完全拥抱对象,甚至 main 函数也必须从属于一个类。

Java 具有跨平台,可移植性强的特点,因为它基于 JVM 来运行,不需要直接面向底层(例如使用垃圾收集机制,无法直接操作内存)。 由于 JVM 和 GC,Java 在运行效率上很难和 C/C++相比,高性能计算并不是 Java 的应用方向,Java 在互联网行业中应用非常广泛。

1
2
3
4
5
class HelloWorld {
public static void main(String[] args) {
System.out.println("hello,world!");
}
}

C#

C#(读作 C sharp)是微软用来对标 Java 的一款语言,基于.net 平台,背靠 Windows 系统和宇宙第一 IDE——VS。C#的语言特点也和 Java 差不多,但是市场份额比 Java 小,可能是考虑到微软完全掌握 C#发展的原因。

这个语言的名字也是意味深长的:C, C++, C++++ = C#。

1
2
3
4
5
6
7
8
9
10
namespace Helloworld
{
class Hello
{
static void Main(string[] args)
{
System.Console.WriteLine("hello,world!");
}
}
}

JavaScript

JavaScript 是为浏览器和网页定制的语言,网页主要依靠的就是 html+css+js,在浏览器中任何页面直接按F12就可以进入控制台,控制台可以输入并执行简单的 js 语句。当然 js 也可以独立在浏览器之外,比如 node.js 就是服务端的 js 运行时。

常用的 json 数据格式同时也是 js 的语法。

JavaScript 的名字和 Java 没有任何关系,只是蹭热度。TypeScript 是 JavaScript 的改进版,对类型和语法的要求更严格。

1
console.log("hello,world!");

MATLAB

MATLAB 是著名的科学计算商业软件,同时 MATLAB 也是在这个软件上使用的编程语言(和其它的通用编程语言赶紧不太一样)。

MATLAB 的名字是 Matrix Laboratory(矩阵实验室)的缩写,这个语言对于矩阵、线性代数的语法支持非常友好,并且计算比较高效。

在科学计算的运行效率方面:

  • MATLAB 较容易写出比 Python 更高效的代码(MATLAB 作为商业软件加上长期的代码优化,而 Python 只是开源产品)。但是 MATLAB 也有 Python 类似的问题,比如原始的 for 循环很慢,应当用向量化运算代替循环;
  • 和 C/C++/Fortran 相比,MATLAB 的效率也并不是注定低一等,主要取决于程序员的编程技巧,因为 MATLAB 的核心计算也是基于 C/C++/Fortran 的,并且已经经过了长期的代码优化。

MATLAB 在科学计算以及工业界都有广泛应用,在工业界的应用主要是体现在 MATLAB 具有功能丰富的扩展工具箱。

作为 MATLAB 的开源替代,Octave 是一个尽量模仿 MATLAB 语法的开源语言/软件,更加轻量级,支持核心的语法内容。

1
disp('hello,world!')

Fortran

Fortran 是过程式编程的活化石,比 C 语言还早,主要用于科学计算中,名称就是 Formula Translation 的缩写。

C/C++/Fortran 通常代表着运行效率的上限,它们是目前可以达到最高的运行效率的一类语言(同样使用并行加速时,Fortran 甚至比其它两个更快),但是值得注意的是:

  • Cpp的下限很低,程序员需要非常熟悉 C++的各种语法技巧,才能让程序获得很高的效率,编译器面对复杂的语法无法进行很好的优化;
  • Fortran 的下限很高,因为语法非常简单直接,不需要程序员拥有较高的水准,编译器就可以让程序达到很高的效率。

当然以上仅仅是从科学计算的运行效率比较,在其它方面 Fortran 简直一无是处,语法仍然是上个世纪的活化石(比如面向对象的语法支持非常瘸腿), 应用也远没有 C/C++ 那么广泛,Fortran 的存在感主要体现在各种祖传代码中。

1
2
3
4
program main
implicit none
write(*,*) "hello,world!"
end program main

Julia

Julia 是一个非常新的正在发展中的编程语言(2009),设计者的野心非常大:希望 Julia 可以同时拥有 Python/MATLAB 一样的易用性和 C/C++/Fortran 一样的运算效率。

Julia 也是 Jupyter notebook 名称来源之一(Jupyter = Julia + Python + R)。

1
print("hello,world!")

Mathematica

和 MATLAB 定位类似,它并不适合被称为一个通用的编程语言,主要是在 Mathematica 软件中使用,但以符号计算为特色。

它擅长的内容都是其它编程语言所不擅长的,比如符号求解方程组和复杂表达式的化简等,符号计算比数值计算更复杂,更耗内存,计算也更慢。

1
Print["hello,world!"]

Lua

Lua 是一种用 C 语言编写的轻量级的脚本语言,一开始的定位就是便于嵌入到 C/C++代码中执行,常见用法是在 C++编写的游戏中嵌入 Lua 虚拟机,使用 Lua 脚本实现部分频繁改动的逻辑。

1
print("hello,world!")