
你听说过 Hello World 吗?这段示例代码是程序员的入门仪式,但它究竟是什么意思,我们为什么要使用它呢?让我们一起来探索这个程序的历史,并了解它如何揭示各种语言的特性。
什么是 Hello World?
无论你是编程新手,还是正在学习你的第七种编程语言,一个简单的示例程序都会有所帮助。运行任何程序都是一大步,因此从一个经过验证的例子开始是很明智的。这个例子就是 Hello World。
Hello World 是你能想象到的最简单的代码片段之一。它的需求非常简单:
将文本“hello, world”打印到屏幕上。
就是这样!当然,确切的文本——包括它的标点符号——会有所不同,而且并不那么重要。“Hello, world”只是在你运行第一个程序时看到的一个有趣而积极的东西。
很难准确指出 Hello World 的确切起源,但我们已知的最早的具体例子来自 1972 年的书籍《B 语言教程介绍》:
main( ) {
extrn a, b, c;
putchar(a); putchar(b); putchar(c); putchar('!*n');
}
a 'hell';
b 'o, w';
c 'orld';
B 是一种古老的语言,是 C 语言的前身。Hello World 实际上可能可以追溯到更早的 1967 年,以及一种叫做 BCPL 的语言,但对此并没有确凿的证据。
这个概念真正为人熟知是在 1978 年出版的《C 编程语言》一书中。这本书现在是经典的计算机科学教材之一;通过将 Hello World 程序作为其第一个代码示例,它确立了一种延续至今的传统。
Hello World 有什么用?
Hello World 有两个用途。首先,它作为一个有用的规范示例,可以用来比较不同的语言。由于程序的目的如此简单且易于理解,因此它可以教会你很多关于语言语法的知识。一位经验丰富的程序员可以查看用他们不了解的语言编写的 Hello World 程序,并开始了解一些关于这种语言的信息。
但 Hello World 也有实际应用。运行这个示例程序是在同一种语言中编写任何其他程序的一大步。它需要一个合适的编译器或解释器来运行程序。它将确认底层操作系统正确地处理其输出。它还可以帮助你配置你的 IDE 来使用该语言。
几种语言中的 Hello World
你可以从 Hello World 的实现中学到很多关于一种语言的知识。由于这些程序中的每一个都应该表现完全相同,你还可以使用一组 hello.* 源文件来测试你的环境。
C 语言中的 Hello World
如前所述,我们已知的 Hello World 的第一个可靠示例是在 C 语言中。它可以追溯到 1978 年:
main() {
printf("hello, world\n");
}
十年后,该书的第二个版本更新了此示例,以与 ANSI C 兼容:
#include <stdio.h>
main() {
printf("hello, world\n");
}
但是,如今,即使这个版本也需要更新;现代 C 编译器在尝试编译此程序时会报错:

C99 比 ANSI C 更严格;它需要这样:
#include <stdio.h>
int main() {
printf("hello, world\n");
}
C 语言版本的 Hello World 主要由三个部分组成:
- 对 printf(“print formatted”)函数的调用,该函数执行主要工作。此函数将字符串参数(双引号内的文本)打印到标准输出。字符串末尾的 \n 表示换行符。
- 开头的 #include 语句加载一个提供输出(和输入)功能的库 (stdio)。它包含 printf 函数的实际代码。C 语言的一个奇特之处是它不包含任何内置函数;你可以编写自己的函数,但要调用任何其他函数,你需要一个合适的 #include 语句。
- printf 行位于名为“main”的函数内。对于 C 语言来说,这是一个特殊的函数,当你运行编译后的程序时,它会自动运行。请注意,最新版本的 C 要求你声明 main 的“int”(整数)返回类型,即使你的函数不返回值也是如此。
Hello World 代码只是难题的一部分。剩下的另一半是运行程序。对于像 C 这样的编译语言,你需要运行一个程序将你的源代码转换为独立的可执行二进制文件:
gcc hello.c
如果一切顺利,编译器将静默运行并在你的当前目录中创建一个名为 a.out 的可执行文件。运行该程序(./a.out),你将看到你的代码运行:
这正是正确的 Hello World 程序应该表现出的行为,它将文本打印到你的终端,末尾带有换行符,然后终止。
Go 语言中的 Hello World
Go 是一种相对现代的语言。它于 2009 年发布,由 Google 工程师创建,其中包括发明 B 语言的 Ken Thompson。Go 具有简单的语法,很像 C 语言:
package main
import "fmt"
func main() {
fmt.Println("hello, world")
}
你可以使用 go run hello.go 运行此程序,或使用 go compile hello.go 编译可执行文件,然后使用 ./hello 运行它。
Go 的包系统将帮助你根据可靠的工程原则组织代码并重用功能。但是,对于像 Hello World 这样简单的程序,你只需要声明它属于“package main”,并确保你有一个 main 函数作为默认入口点。
Rust 语言中的 Hello World
Rust 的 Hello World 实现非常简洁,你可能会认为它没有告诉我们什么信息。但即使这段简单的代码也包含了一些语言的有趣细微之处。
fn main() {
println!("hello, world");
}
对 println 的调用——看起来很像一个函数——在其名称后包含一个感叹号。这意味着 println 实际上是一个宏,而不是一个函数;你必须使用感叹号语法来调用它。
与 C 语言一样,main 函数充当此独立程序的入口点。与 C 语言——以及大多数其他语言——不同的是,Rust 声明函数的关键字非常简短:fn。这与该语言的许多其他部分一致,这些部分使用诸如“pub”、“mut”和“ref”之类的简短关键字。
你可以使用 rustc hello.rs 编译此程序,并使用 ./hello 运行生成的执行文件。
Python 语言中的 Hello World
Python 的 Hello World 值得注意的是它是最简洁的之一。这很符合它作为一种简单语言的名声,尤其适合初学者。整个程序是:
print('hello, world')
Python 是一种解释型语言,因此你可以使用 python 命令直接运行 Python 程序。将上述代码保存到一个文件 (hello.py) 中,运行它 (python hello.py),你应该会看到熟悉的输出。
请注意,Python 的 print() 函数默认添加换行符,因此你不需要在字符串中包含 \n。另请注意,与 C 语言不同,你可以用单引号或双引号括起 Python 文本字符串。
Java 语言中的 Hello World
Java 与 Python 正好相反。它通常被称为冗长的语言,而它的 Hello World 程序并没有消除这种说法:
public class HelloWorld {
public static void main(String[] args) {
System.out.print("hello, world\n");
}
}
在 Java 中,即使是一个简单的独立程序也必须由一个类表示,而 Java 中等效于 C 语言 main() 函数的函数有三个修饰关键字:
- public 是一个访问说明符,指示该函数在整个程序中都是可访问的。
- static 是一个关键字,指示这是一个类方法,而不是实例方法。
- void 是一个返回类型,指示该函数不返回值。
你不需要了解这三个关键字背后的所有细节,但你需要记住它们才能编写任何 Java 程序。
调用 Java 的 print 函数甚至需要相当多的输入。“System.out.” 在 “print” 之前标识标准输出流,其他语言默认使用它。
在你能够运行 Hello World 之前,你还需要了解一个 Java 的特性:文件名。由于 Java 首先是类,因此你保存代码的文件需要以其公共类命名:HelloWorld.java。创建该文件后,运行 javac HelloWorld.java,然后运行 java HelloWorld 来告诉 Java 解释器运行你的程序:

每种编程语言都是独一无二的,但即使是在这里列出的各种语言中,你也可以发现相似之处。最重要的是,一旦你能够运行 Hello World,你就可以专注于你正在学习的语言的细节。

原创文章,作者:诺多,如若转载,请注明出处:https://www.huluohu.com/posts/1512/
微信扫一扫
支付宝扫一扫