20种不同语言的“Hello, World!”_2025.05版

多年前,写过一篇20种不同语言的“Hello, World!”(以下简称上一版),依据的是当时的TIOBE排名。时过境迁,如今流行的程序语言已经大不相同,因此今天更新一版。

以下依据TIOBE Index的2025年5月排名。

1. Python

上一版排名:6 ↑

上一版中,Python还排在第6位,但随着人工智能、机器学习的兴起,被人戏称为“胶水语言”的Python,却实实在在地粘合起了计算机科学的最前沿。作为强大简洁的代表语言,我决定保留上一版的代码:

#!/path/to/python
print "Hello, World!"

2. C++

上一版排名:3 ↓

作为编程语言的常青树,C++、C和Java三雄常年盘踞在排行版前列,若不是近年来被人工智能常用的Python抢了风头,这第一估计还是这三者之一。Python再牛,背后不还是C和C++么。相比上一版,C++的排名还上升了1位呢。和上一版的不同,这次来点儿花活(不建议在正式项目中使用)。

#include <unistd.h>

int main() {
    const char msg[] = "Hello, World!\n";
    syscall(1, 1, msg, sizeof(msg)-1);
}

3. C

上一版排名:2 ↓

C也没啥好说的了,和上一版相比下降了1位。这次也来段花的。因为也利用了编译器内置的系统调用,所以同样不建议用于正式项目。

// 无头文件版本
#define SYS_write 1
#define STDOUT_FILENO 1

int main() {
    const char msg[] = "Hello, World!\n";

    __syscall(SYS_write, STDOUT_FILENO, msg, sizeof(msg)-1);
}

4. Java

上一版排名:1 ↓

Java虽然在企业开发中很有市场,但相对Python来说太“重”了,因此这些版本的Java一直在试图引入一些简化的特性,但经过四个版本了(Java 21到Java 25)还在预览。但“你升任你升,我用Java 8”,相比上一版,Java足足掉了3位。今天就来尝尝鲜,下面的只适用于Java 21以后的预览特性。可以看到类被省略了,main函数的声明也被简化了。

void main() {
   System.out.println("Hello, World!");
}

5. C♯

上一版排名:5 =

由于微软的大力推广,相比上一版,C♯位次没有变化,非常稳。其实C♯后面的并不是井号,而是音乐里的升调符号,读作sharp,但因为特殊字符不好输入,大家都用#来代替了,连微软自己都用弃疗了。为了尊重稳定的C♯,代码也保留上一版的吧。

public class HelloWorld {
    public static void Main() {
        System.Console.WriteLine("Hello, World!");
    }
}

6. JavaScript

上一版排名:11 ↑

这几年移动互联网发展,再加上后端开发的兴起,使得JavaScript(或者更准确地说是ECMAScript)得到了很大发展,不仅语言加入了很多新特性,也诞生出了很多知名框架,如React、Vue。和上一版相比,JavaScript足足提升了5位!下面的代码只是上一版小改,并没有使用什么新特性。

document.write('Hello, World!')

7. Go

上一版排名:>20 ※

作为Google搞出来的语言,上一版还没有进入前20,只是附加选手,这次就到第7位了。作为觊觎C/C++和Java地位的新兴语言,Go可谓风头正劲。下面和上一版相比也只是改了下中文字符。

package main

import "fmt"

func main() {
  fmt.Println("Hello, World!")
}

8. Visual Basic

上一版排名:7 ↓

令人震惊,这门已经停止发展的语言(最后一版是VB 6.0,后面的VB.NET完全是另一门语言)居然还能保持如此高位,甚至相比上一版仅仅下降1位。上一版代码是用弹出窗口输出,这次换一种方式吧。注意这段单吗并不能单独运行,还需要很多外围工作。

Private Sub Form_Load()
Print "Hello, World!"
End Sub

9. Delphi/Object Pascal

上一版排名:12 ↑

另一门同样令人震惊的语言,也是停止发展(开发的公司Borland甚至已经不在了),但相比上一般竟然还提升了3位,实在令人匪夷所思。Pascal作为我第一门系统学习的编程语言,我对它还是有些特殊感情的,后面再来研究一下吧。

Program Hello_World;

{$APPTYPE CONSOLE}

Begin
  WriteLn('Hello, World!');
End.

10. SQL

上一版排名:未知 ※

上一版中上榜的是两种特定的SQL语言——第14位的Transact-SQL和第20位的PL/SQL。而这次,作为大多数关系型数据中使用的通用语言,SQL在多种应用开发中都会用到,所以即使不是专门做数据库开发的,也会略懂一二。多的不说,继续“选择”吧。

SELECT "Hello, World!";

11. Fortran

上一版排名:>20 ※

这是一门非常古老的语言,甚至比在坐的绝大多数语言都要古老,古老到可以拿下“第一种高级编程语言”的名号。近年来,在数值计算、高性能计算等领域发挥了新的魅力。得益于Fortran相比Python更高的性能和比MATLAB更低的成本,在数值计算领域成为了更多人的首选。下面是一段Fortran 90的代码。

PROGRAM HelloWorld
     WRITE(*,*)  "Hello, World!"
END PROGRAM

12. R

上一版排名:>20 ※

虽然被Python夺去了不少份额,但在统计领域,R语言仍然是第一选则。特别是在学术领域,R语言是当之无愧的一哥。

cat("Hello, World!\n")

13. Ada

上一版排名:16 ↑

Ada也是老当益壮,虽然还没有Fortran这些“爷爷级”那么老,但也可以和C++之类同辈一起被称为“爸爸级”了。作为美国军方开发的语言,Ada主要用于嵌入式开发领域。

with Text_IO;
procedure Hello_World is

begin
  Text_IO.Put_Line("Hello, World!");
end Hello_World;

14. Scratch

上一版排名:未知 ※

非常年轻的语言,由麻省理工学院(MIT)开发,是一门面向青少年的图形化编程语言。能到现在这个排名,说明现在计算机基础教育的普及。这是好事,孩子时多学一些计算机知识,将来会大有裨益的。由于是图形化编程,就没法放代码了,下面就用截图展示一下吧。图中绿色小旗子是程序的入口,点击它程序就开始运行,小猫是默认的角色,截图自一个网页版Scratch

Scratch Hello World

15. PHP

上一版排名:4 ↓

由于JavaScript等语言“侵入”Web后端开发,以及Go等语言的兴起,PHP的地位受到了严峻的挑战。但PHP其实并没有固步自封,PHP 7中引入的类型声明,PHP 8中引入的JIT等特性,都使得PHP性能得到大幅提高、更加现代化。时至今日,PHP仍然是快速Web开发的不二之选。历史是螺旋上升的,说不定什么时候PHP也能迎来第二春呢。下面的代码和上一版略有不同,利用了PHP的另一个特性,但效果是一样的。

<?php
echo 'Hello, '?>World!

16. Perl

上一版排名:9 ↓

和Python类似定位的语言,但由于没有赶上机器学习的顺风车,使得排名大幅下降。而另一个类似定位的Ruby,已经跌出了前20了。

#!/path/to/perl
print "Hello, World!\n";

17. MATLAB

上一版排名:>20 ※

同样也是一款“爸爸级”语言,专攻数学计算与工程仿真。但由于被美国政府制裁,最近几年排名一直在掉。但在上一版中完全没有上榜,所以也算表现出色了。

disp('Hello World');

18. Assembly language

上一版排名:未知 ※

汇编语言,几乎和电子计算机一样古老。就是把计算机指令换了个容易记的名字而已,和二进制机器码是一一对应的。在硬件开发相关领域仍是不可取代的。因为和计算机指令集架构高端关联,所以程序很难通用。下面是一段x86架构的汇编代码。

section .data
    msg db 'Hello, World!', 0xA  ; 字符串 + 换行符(ASCII 0xA)
    len equ $ - msg              ; 计算字符串长度

section .text
    global _start

_start:
    ; sys_write 系统调用(编号4)
    mov eax, 4      ; 系统调用号4(sys_write)
    mov ebx, 1      ; 文件描述符1(stdout)
    mov ecx, msg    ; 字符串地址
    mov edx, len    ; 字符串长度
    int 0x80        ; 触发中断

    ; sys_exit 系统调用(编号1)
    mov eax, 1      ; 系统调用号1(sys_exit)
    mov ebx, 0      ; 退出状态码0
    int 0x80        ; 触发中断

_start:后的部分就是汇编代码(;表示注释),其对应的机器码如下(十六进制表示):

B8 04 00 00 00
BB 01 00 00 00
B9 00 A0 04 08
BA 0E 00 00 00
CD 80
B8 01 00 00 00
BB 00 00 00 00
CD 80

机器码1~5行对应汇编代码10-14行,6-8行对应17-19行。其中第3行中的00 A0 04 08对应汇编代码数据段中的msg地址,具体值会因链接器不同而变化。机器码实际不分行,分行只是为了方便对照。

19. Rust

上一版排名:未知 ※

Rust也是非常年轻的语言,在前20中是最年轻的。作为一门目标在系统级开发,旨在挑战C/C++等传统语言的新秀,Rust在近几年可谓风生水起。虽然在某些特性上比竞争者更优秀,但距离取代C/C++还有很长的路要走。

fn main() {
    println!("Hello World!");
}

20. COBOL

上一版排名:>20 ※

仅次于Fortran的古老语言,但在这个时代也展现出了新的活力。由美国国防部开发,现在主要用于商业数据处理。

*****************************
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
MAIN SECTION.
DISPLAY "Hello, World!"
STOP RUN.
****************************

做这个选题的初衷,并不只是为了看看各家语言的Hello World差异,而是通过结合排名,管窥现代计算机发展的一隅。如有机会,今后争取每年做一次类似的选题。个人水平有限,如有错漏,欢迎指正。