作者:Sylvain Saurel | 譯者:夏夜 | 策劃:萬佳
對很多人來說,每當學習一門新的程式語言,寫下的第一行程式碼可能都是“Hello,World!“。因此,”Hello,World!" 已經成為一段經典程式。在職業生涯中,所有程式設計師都至少完成過一段“Hello,World!" 程式。在成長中,程式設計師通常會使用多種程式語言,大部分程式設計師甚至實現過十幾種”Hello,World!”版本。甚至還出現了一種衡量標準,叫做 TTHW,用於評估程式設計師用新的程式語言實現一段“Hello, World!”程式併成功執行所花費的時間 。但現在,如果我問你,你可以用多少種不同的程式語言編寫“Hello,World!”,你會給出怎樣的回答?為幫你回憶起來,我會向你展示怎樣用 50 種不同的程式語言編寫“Hello,World!”程式。這樣,也能讓你看到計算機程式語言多年的歷史演進。組合語言建立於 1949 年,本文中,我會向你展示一段經典的彙編程式,這是為 Intel 8080 平臺的 8 位處理器編寫的,這款處理器於 1974 年 4 月下旬釋出。
bdos equ 0005H ; BDOS entry point
start: mvi c,9 ; BDOS function: output string
lxi d,msg$ ; address of msg
call bdos
ret ; return to CCP
msg$: db 'Hello, world!$'
end start
Fortran 程式語言是 Formula Translation 的衍生版本。它是一種可編譯的通用指令式程式設計語言,特別適用於數值和科學計算。Fortran 語言建立於 1957 年,以下是使用該語言第一個版本編寫的“Hello, World!”程式:PROGRAM Hello
WRITE (*,*) 'Hello, World!'
STOP
END
在 Fortran 90 或者 95 版本中,“Hello, World!”程式可以寫為如下這樣:
PROGRAM Hello
WRITE (*,*) 'Hello, World!'
END PROGRAM Hello
Lisp 是最古老的程式語言家族,它既是命令式語言,又是函式式語言。Lisp 最初建立於 1958 年,當時是作為展示程式的實用模型釋出的。在 20 世紀 70 年代和 80 年代,Lisp 家族成為人工智慧領域非常受歡迎的語言。以下是用 Lisp 編寫的“Hello, World!”程式:(write-line "Hello, World!")
Cobol 正式建立於 1959 年,所以 Cobol 程式語言在 2019 年剛剛度過它的 60 週年紀念日。Cobol 是 COmmon Business Oriented Language 的縮寫,人們發明它是希望將其作為業務程式設計應用的通用語言。2019 年,Cobol 在銀行業和保險業中仍然應用廣泛。以下是用 Cobol 編寫的“Hello, World!”程式:IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
PROCEDURE DIVISION.
DISPLAY "Hello, World!"
STOP RUN.
BASIC 是 Beginner’s All-purpose Symbolic Instruction 的縮寫,它是一種高階程式語言,這種語言的主要目標是容易使用,正如以下“Hello, World!”程式所證實的這樣:Logo 語言很像 Lisp 語言,但比 Lisp 更容易使用,這正是 Logo 被發明出來的原因,正如人們通常所認為的那樣,Logo 是“沒有圓括號的 Lisp 語言”。
main()
{
putstr("Hello world!*n");
return(0);
}
B 語言發明於 1969 年,這種語言現在已經被廢棄,但它曾扮演了一個重要角色,它極大地促進了 C 語言的誕生,而現在 C 語言正被廣泛使用著。
begin
writeln('Hello, World!')
end.
Pascal 是一種指令式程式設計語言,建立於 1970 年。它是為教學而設計的,其特點是語法清晰、嚴謹,有助於生成良好的程式結構。begin
writeln('Hello, World!')
end.
Turbo Pascal 建立於 1983 年,它是為 Pascal 程式語言打造的整合開發環境。Turbo Pascal 在 20 世紀 80 年代和 90 年代取得巨大成功。以下是 Turbo Pascal 中的“Hello, World!”程式:
program HelloWorld(output);
begin
writeln('Hello, World!');
readln;
end.
Forth 是一種基於命令式堆疊的計算機程式語言,由 Charles H. Moore 在 20 世紀 60 年代建立,但是,它的第一個主要版本是在 1970 年釋出的。這門語言在 1994 年被 ANSI 標準化,並且在 1997 年被 ISO 採用。為這門語言送上美好的祝福吧,2014 年它甚至迎來了一個新版本,也就是 Forth 2012。以下是 Forth 1970 版本的“Hello, World!”程式:
: HELLO ( -- ) ." Hello, World!" CR ;
HELLO
貝爾實驗室的 Dennis Ritchie 和 Ken Thompson 在 1972 年開發 UNIX 時發明了 C 程式語言。Ken Thompson 之前已經發明瞭 B 語言。Dennis Ritchie 受到了 B 語言的啟發,決定發明一種新的語言,即 C 語言,在其中引入了型別概念。Smalltalk 是一種物件導向的,具有反身性和動態型別的程式語言,發明於 1972 年,當時主要是受到 Lisp 語言的啟發。Smalltalk 是最早一批具有整合開發環境的程式語言之一。Transcript show: 'Hello, world!'; cr.
Prolog 是一種與人工智慧和計算語言學相關的邏輯程式語言。Prolog 建立於 1972 年。:- write('Hello, World!'),nl.
ML 是 Meta Language 的縮寫,它是基於 Lisp 的函數語言程式設計語言。ML 通常被認為是帶有型別的 Lisp 語言。Scheme 建立於 1975 年,它是一種支援函式式和命令式的多正規化程式語言。它是 Lisp 語言的 3 大變種之一,另外兩個變種 Common Lisp 和 Clojure 的誕生要晚得多。(display "Hello, World!") (newline)
SQL 是 Structured Query Language 的縮寫,它是操作關係型資料庫的標準化計算機語言。儘管它不是用來建立簡單的“Hello, World!”程式的,但是,照下面這樣建立一個 SQL 程式卻是非常有趣。
CREATE TABLE message (text char(15));
INSERT INTO message (text) VALUES ('Hello, World!');
SELECT text FROM message;
DROP TABLE message;
C++ 最初由 Bjarne Stroustrup 建立於 1980 年,和 C 語言同名,但是包含了 class(類)這個概念。C++ 語言正式命名為 C++ 是在 1983 年。這門程式語言現在被 ISO 標準化了,在工業界以及其他領域被廣泛使用。Ada 是一種物件導向的程式語言,從 20 世紀 80 年代早期開始開發,並於 1983 年釋出正式版本,即 Ada 1983。“Ada”這個名字用來紀念 Ada Lovelace,她被認為很大可能是歷史上第一位女性電腦科學家。Ada 通常用於實時系統和嵌入式系統,這些系統要求高度的可靠性和安全性。
with Ada.Text_IO;
procedure Hello
isbegin
Ada.Text_IO.Put_Line ("Hello, World!");
end Hello;
Common Lisp 通常簡寫為 CL,是由 ANSI 標準化了的 Lisp 語言規範。MATLAB 是“Matrix Laboratory”的縮寫,它是一種指令碼語言,用於數值計算。MATLAB 在同名的開發環境中編寫。Eiffel 是一種圍繞一種設計方法而設計的物件導向程式語言。Eiffel 基於當今非常流行的概念,如契約程式設計或重用等。
class
HELLO_WORLD
create
make
feature
make
do
print ("Hello, world!%N")
end
end
Objective-C 是一種反身式的物件導向程式語言。它是 C 程式語言的擴充套件,就像 C++ 一樣,但是和 C++ 又不一樣,特別是在動態訊息分發或者動態載入方面與 C++ 很不一樣。當今,它主要用於蘋果作業系統:macOS 及其衍生的 iOS 系統中。Erlang 這種程式語言支援多種正規化:併發、實時和分散式。它獨具特色的層是基於參與者(actor)模型的,具有容錯和熱程式碼更新功能,允許開發具有極高可用性的應用程式。io:format("Hello world!~n").
Perl 程式語言由 Larry Wall 建立於 1987 年,是為更容易地處理基於文字的資訊而建立的。Perl 是一種解釋性語言,它受到了 C 語言的控制結構和列印結構的啟發,同時也受到了 shell 指令碼語言的啟發。Caml 是 Categorical Abstract Machine Language 的縮寫,它是一種面向程式安全性和可靠性的通用程式語言。Caml 支援函式式、命令式和麵向物件的程式設計風格。它也是一種非常獨特的語言。print_string "Hello, World!\n";;
Tcl 是 Tool Command Language 的縮寫,它是一種指令碼語言,由 John Ousterhout 在 1988 年開發出來的。這種動態型別語言是跨平臺的、可擴充套件的、易於學習的,並且基於 12 條語法規則。Tcl 很容易與 C 程式語言互動。在 1990 年,John Ousterhout 開發出了 Tcl 的一個擴充套件,叫做 Tk,它是一個用於建立可移植圖形介面的程式碼庫。現在,當我們談起 Tcl 時,我們更多地是在談論 Tcl/Tk 這個組合。Haskell 是一種函式式的程式語言,它基於 lambda 計算和組合邏輯。main = putStrLn "Hello, World!"
Python 是一種解釋性程式語言,具有多正規化、多平臺的特點。Python 支援結構化、函式式和麵向物件的指令式程式設計。這些年來, Python 變得非常流行,甚至在 2019 年成為最受歡迎的語言之一。以下是用 Python 3.0 或更高版本編寫的“Hello, World!”程式:28. Visual Basic - 1991 年Visual Basic,簡稱為 VB,它是第三代事件程式語言,也是微軟建立的整合開發環境,用於其 COM 程式設計模型。
Public Sub Main()
Debug.Print "Hello, World!"
End Sub
Lua 建立於 1993 年,它是一種反身式、命令式指令碼語言,用於嵌入在其他應用程式中來擴充套件這些應用程式的功能。由於對 Smalltalk 和 Lisp 的開發經歷感到失望,Yukihiro Matsumoto 於 1993 年開始用 Emacs 設計 Ruby 語言。他在 1995 年釋出了該語言的第一個版本。Ruby 是一種解釋性的、物件導向的多正規化語言。Java 是 James Gosling 在 1995 年建立的一種物件導向的程式語言,它至今仍然是工業界最受歡迎和使用最多的語言。你能夠使用 Java 做任何事情,從客戶端到 Web 應用無所不包;而且 Google 選擇 Java,用在 Android 作業系統上作為開發應用程式的語言,這又進一步擴充套件了 Java 能力。
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
JavaScript 是一種指令碼語言,主要用於 Web 開發,但現在可以用於服務端,比如 Node.js。JavaScript 是面向原型的程式語言,這種語言裡的函式是第一類物件。
document.write('Hello, World!');
1995 年絕對是程式語言非常重要的一年,因為在 Java 和 JavaScript 之後,PHP 也在這一年被發明出來。PHP 主要用於 Web,它是一種物件導向的命令式語言,能夠像其他任何解釋性語言一樣在本地執行。Rebol 是一種高階指令碼程式語言,建立在指代語義的基礎上,自稱為“訊息傳遞語言”。以下是用 Rebol 編寫的“Hello, World!”程式:35. ActionScript - 1998 年ActionScript 這種程式語言,可用於客戶端應用程式(例如 Adobe Flash 和 Adobe Flex)和伺服器(Flash 媒體伺服器,JRun 和 Macromedia Generator)。ActionScript 現在作為一種指令碼語言,用於 Unity 圖形引擎之中。
package {
public class HelloWorld {
public function HelloWorld() {
trace("Hello World !");
}
}
}
D 是一種命令式、物件導向的多正規化程式語言,用於系統程式設計。D 的發明受到許多語言的啟發,包括 C++、Java 和 Eiffel。儘管 D 語言有很多優點,但是它從未獲得其發明者所期望的成功。
import std.stdio;
void main () {
writefln("Hello, World!");
}
C# 是微軟於 2000 年與 Sun 就 Java 語言發生爭執後建立的。C# 是一種物件導向的程式語言,用於 Microsoft.Net 平臺上的開發工作。該語言派生自 C++ 和 Java,使用了它們的一些通用語法和其他許多概念。C# 也可以用於開發 ASP.Net 平臺上的 Web 應用程式。
using System;
internal static class HelloWorld {
private static void Main() {
Console.WriteLine("Hello, World!");
}
}
Groovy 是一種物件導向的程式語言,執行在 Java 平臺上。Groovy 是這個平臺的 Java 語言的替代品,受到了 Python 、 Ruby 或者是 Smalltalk 語言的啟發。Scala 是一種多正規化程式語言,被設計用於簡潔優雅地表示通用程式設計模型。Scala 採用靜態型別,整合了物件導向和函數語言程式設計正規化。
object HelloWorld extends App {
println("Hello, World!")
}
F# 是一種函式式、命令式和麵向物件的程式語言,由微軟為其.NET 平臺而開發。F# 從 OCaml 程式語言衍生而來,而且與 OCaml 具有高度相容性。這兩種程式語言與 ML 語言屬於同一種語系。41. Windows PowerShell - 2006 年Windows PowersShell 是由微軟開發的一套軟體,它包含了命令列介面、一種稱作 PowerShell 的指令碼語言和一個開發包。從 Window 7 開始,PowerShell 就作為微軟作業系統的標配。Clojure 是一種可編譯的、跨平臺的函數語言程式設計語言,用於建立安全的和易分散式執行的程式。Clojure 是 Lisp 語言的 3 大變種之一。Clojure 可轉換為 Java 位元組碼、JavaScript 程式碼和.NET 位元組碼。因此,Clojure 可以在 JVM、CLR、瀏覽器和 Node.js 上使用。
(println "Hello, World!")
Go 是一種可編譯的、併發式程式語言,受到了 C 和 Pascal 語言的啟發而發明的。這種語言是由谷歌開發的,它是從 Robert Griesemer、Rob Pike 和 Ken Thompson 最初提出的概念發展而來的。這位 Ken Thompson 正是在 1969 年創造了 B 語言的那位 Ken Thompson!
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
Rust 是由 Mozilla 開發的一種多正規化、可編譯的程式語言。Rust 被設計成為“安全的、併發的、實用的語言”,同時在某些方面支援純函數語言程式設計風格、參與者模型、程式式程式設計以及物件導向程式設計。Rust 通常被描述為 C++ 的潛在繼承者之一。
fn main() {
println("Hello, World!");
}
Dart 是谷歌開發的一種 Web 程式語言。它最初的目的是要替換 JavaScript。目前,Dart 還沒有達到它的目標,開發人員更喜歡將 Dart 轉換成與現代所有瀏覽器相容的 JavaScript 程式碼,Dart 還可以用於服務端程式設計。Dart 是 Flutter 用於開發移動應用程式的語言。
main() {
print('Hello, World!');
}
Kotlin 是一種物件導向的、函數語言程式設計語言,它具有靜態型別,允許針對 Java 虛擬機器、JavaScript 和本地的多種平臺進行編譯(多虧了 LLVM)。2017 年,谷歌繼 Java 之後,把 Kotlin 作為 Android 官方支援的第二種程式語言。
fun main(args: Array) {
println("Hello, World!")
}
Ceylon 是由紅帽(Red Hat)建立出來的,它是一種高階開源程式語言,具有強型別和靜態型別。它的語法和 Java 的很像。它能編譯為 Java 位元組碼或者 JavaScript。
void hello() {
print("Hello, World!");
}
TypeScript 是由微軟開發的免費開源的程式語言,旨在提升 JavaScript 程式碼的開發效率,保證 JavaScript 程式碼的安全性。TypeScript 語言是 JavaScript 的一個超集,它被轉換成 JavaScript,這樣任何 Web 瀏覽器或 JavaScript 引擎都可以解釋它。
console.log("Hello, World!");
Julia 是一種高階的、強大的和動態的程式語言,用於科學計算,熟悉其他開發環境(如 MATLAB、R 或者 Python)的使用者應該很瞭解 Julia 的語法。Swift 是一種可編譯的、多正規化的物件程式語言,其設計目標是簡單、高效能和安全。它是由蘋果公司開發的開源專案,這使得它與 Objective-C 一起成為了開發移動 iOS 應用程式的解決方案。這次在計算機程式語言世界裡進行的跨度達 70 年的時光旅行,向你介紹了用 50 種不同語言編寫的“Hello, World!”程式。以上程式語言清單隻佔到人們發明的所有程式語言的一小部分,我邀請你在評論區分享你最喜歡的語言所編寫的“Hello, World!”程式,但請不要和上面清單上的語言重複哦。