【譯】教你用50種語言寫Hello, World
當我們學習一門新的語言時,“Hello, World!“通常是我們所寫的第一個程式。相信作為一名程式設計師的你,職業生涯中至少完成了一個“Hello, World!“程式。程式設計師一般也都會使用多門語言,甚至有多數人都會使用十幾種語言。
甚至有一個名為TTHW的指標來衡量一個程式設計師接觸一門新的程式語言時,成功寫出“Hello, World!“並執行所需要的時間。
然而,如果我問你,你會用多少種程式語言寫“Hello, World!“?你的答案會是多少?
為了重新整理你的記憶,我會帶你經歷一段計算機程式設計領域的時空之旅。為此,我將向你展示50種不同的程式語言的
“Hello, World!“程式的寫法。你也會了解計算機語言隨著時間的推進發生了哪些變化。
1. 組合語言 - 1949
組合語言誕生於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
2. Fortran - 1957
Fortran是Formula Translation的衍生物,這是一種通用的互動式程式語言,特別適合於數值和科學計算。Fortran創建於1957年,下面是它的第一個“Hello, World!”程式:
PROGRAM Hello WRITE (*,*) 'Hello, World!' STOP END
Fortran 90 或 95的寫法有所不同:
PROGRAM Hello WRITE (*,*) 'Hello, World!' END PROGRAM Hello
3. Lisp - 1958
Lisp是最古老的程式語言系列,它既是互動式的又是函式式的。1958年,Lisp作為一種實用的演示程式模型被創建出來,但是直到1970和1980年代,Lisp才成為人工智慧世界中非常流行的語言。
下面是Lisp的“Hello, World!”程式:
(write-line "Hello, World!")
4. Cobol - 1959
Cobol語言於1959年正式創立,並且在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.
5. BASIC - 1964
BASIC是Beginner’s All-purpose Symbolic Instruction Code(初學者通用符號說明程式碼)的縮寫。它是一門高階程式語言,其主要目標在於易用。它的“Hello, World!”程式如下:
PRINT "Hello, World!" END
6. Logo - 1968
Logo旨在成為易用的Lisp,通常被稱為“Lisp without brackets”,Logs並不是面向物件程式語言,但它可以幫助你入門計算機程式設計。
print [Hello World !]
7. B - 1969
B語言創建於1969年,它現在已經過時了,但它的計算機程式語言的發展史上發揮著重要的作用。因為正是B語言啟發了現在廣泛應用的C語言。
main() { putstr("Hello world!*n"); return(0); }
是不是語法層面就非常像C語言了。
8. Pascal - 1970
Pascal是一種互動式程式語言,它創建於1970年。它被設計出來主要出於教學目的,因為這個語言的特點是清晰,且嚴格的語法有助於良好的程式結構。
begin writeln('Hello, World!') end.
Turbo Pascal是Pascal語言的整合開發環境,在1983年被建立,並在1980年代和1990年代取得了巨大的成功。
Turbo Pascal的“Hello, World!“程式如下:
program HelloWorld(output); begin writeln('Hello, World!'); readln; end.
9. Forth - 1970
Forth是一門基於棧的互動式程式語言,由Charles H. Moore在1960年代發明。但它的第一個大版本是在1970年釋出的。它於1994年被ANSI標準化,並於1997年被ISO採納。2014年的Forth2012為語言的發展又煥發了生機。
下面是1970年版本Forth語言的“Hello, World!” 程式:
: HELLO ( -- ) ." Hello, World!" CR ; HELLO
10. C - 1972
1972年的貝爾實驗室中,Dennis Ritchie和Ken Thompson兩位大佬為了開發UNIX發明了C語言。Ken Thompson曾開發過B語言,Dennis Ritchie決定通過對B語言新增型別來創造C語言。所以說B語言為C語言提供了靈感。
#include <stdio.h> int main(void) { printf("Hello, World!\n"); return 0; }
11. Smalltalk - 1972
Smalltalk受到Lisp的啟發,它是一門面向物件的,動態型別的程式語言,它被髮明於1972年。Smalltalk是最早具有整合開發環境的程式語言之一。
Transcript show: 'Hello, world!'; cr.
12. Prolog - 1972
Prolog是與人工智慧和計算語言學相關的邏輯程式語言,被創建於1972年。
:- write('Hello, World!'),nl.
13. ML - 1973
ML是Meta Language的簡稱,是一種以Lisp為基礎的函式型程式語言。ML通常以Lisp為特徵,具有型別。
print "Hello, World!\n";
14. Scheme - 1975
Scheme創建於1975年,是一種多正規化程式語言,支援函式式和互動式程式設計。它是Lisp三種重要的變種之一,由Common Lisp和Clojure共同開發。
(display "Hello, World!") (newline)
15. SQL - 1978
SQL即結構化查詢語言,是用於操作關係資料庫的標準計算機程式語言。雖然在設計時不能建立簡單的“Hello, World!“程式,但我想寫出來應該是一個有趣的程式,如果你想學習SQL,這裡有一些推薦課程(http://hackernoon.com/top-5-sql-and-database-courses-to-learn-online-48424533ac61?source=user_profile---------3------------------)。
CREATE TABLE message (text char(15)); INSERT INTO message (text) VALUES ('Hello, World!'); SELECT text FROM message; DROP TABLE message;
16. C++ - 1980
C++是由Bjarne Stroustrup在1980年建立,他為C語言增加了類,在1983年得名C++。現在C++已經通過了ISO標準化,並廣泛應用於工業和其他領域。如果你想要學習C++,這裡有一些推薦課程(http://hackernoon.com/top-5-free-c-courses-to-learn-programming-in-2019-d27352277da0)。
#include <iostream> using namespace std; int main() { cout << "Hello, World!" << endl; return 0; }
17. Ada - 1983
Ada是一種面向物件程式語言,其開發始於1980年初,並在1983年完成釋出。之所以叫做Ada是為了紀念Ada Lovelace,這可能是歷史上第一位女性電腦科學家。
Ada通常用於需要很高可靠性和安全性的實時系統和嵌入式系統中。
with Ada.Text_IO; procedure Hello is begin Ada.Text_IO.Put_Line ("Hello, World!"); end Hello;
18. Common Lisp - 1984
Common Lisp,通常縮寫為CL,是ANSI標準化的Lisp語言規範。
(princ "Hello, World!")
19. MATLAB - 1984
MATLAB是一種用於數值計算的指令碼語言,被用於“Matrix Laboratory”。MATLAB是由同名的開發環境模擬的。
disp('Hello, World!')
20. Eiffel - 1985
Eiffel是一種圍繞設計方法設計的面向物件程式語言,它具有當下非常流行的概念,例如“按約定程式設計”或複用。
class HELLO_WORLD create make feature make do print ("Hello, world!%N") end end
21. Objective-C - 1986
Objective-C是一種面向物件程式語言,它像C++一樣,是C語言的擴充套件,而與C++的區別在於它的動態訊息分發或動態載入。
現在,它主要用於Apple作業系統:macOS以及iOS的衍生品。
#import <Foundation/Foundation.h> int main() { @autoreleasepool { NSLog(@"Hello, World!"); } }
22. Erlang - 1986
Erlang是一種支援多種正規化的程式語言:併發、實時、分散式。它基於Actor Model,具有容錯能力以及程式碼熱更新能力,所以Erlang開發的應用可用性通常很高。
io:format("Hello world!~n").
23. Perl - 1987
Perl是由Larry Wall在1987年建立的程式語言,它可以輕鬆處理基於文字的訊息。Perl是一種解釋型語言,它受C語言的控制和列印結構以及shell指令碼的啟發。
print "Hello, World!\n";
24. Caml - 1987
Caml代表Categorical Abstract Machine Language(分類抽象機器語言),是一種通用的程式語言,旨在提高程式的安全性和可靠性。Caml是一種致力於函式式、互動式和麵向物件風格,這也是一種非常獨特的語言。
print_string "Hello, World!\n";;
25. Tcl - 1988
Tool Command Language(工具命令列語言),是John Ousterhout在1988年開發的一種指令碼語言。它是一種動態型別語言,具有跨平臺、可擴充套件、易學習等特點。並且可以輕鬆和C語言進行互動。
在1990年, John Ousterhout又開發了Tcl的擴充套件——Tk,這是一個可移植的用於建立圖形介面的庫。我們今天所討論的Tcl,多數情況是指Tcl和Tk的組合。
puts "Hello, World!"
26. Haskell - 1990
Haskell是一種基於lambda計算和組合邏輯的函數語言程式設計語言。
main = putStrLn "Hello, World!"
27. Python - 1991
相信大家對Python都比較熟悉,即使沒有過,基本上也都聽說過。它是一門解釋型語言,可以跨平臺。Python支援結構體,函式和麵向物件的互動式程式設計。隨著AI的發展,近幾年Python的熱度也是持續上漲。
如果你想學Python,可以參考這份課程推薦(http://medium.com/better-programming/top-5-courses-to-learn-python-in-2018-best-of-lot-26644a99e7ec)。
下面是Python3.0以後版本“Hello, World“程式的寫法。
print("Hello, World!")
28. Visual Basic - 1991
Visual Basic,通常簡稱為VB,是第三代事件程式語言。微軟也為其建立了整合開發環境。
Public Sub Main() Debug.Print "Hello, World!" End Sub
29. Lua - 1993
Lua創建於1993年,是互動式程式語言。它專注於嵌入其他應用程式以對其進行擴充套件。
譯者注:我們之前介紹過Lua在Redis中的應用,不知道你是否還記得。
print("Hello, World!")
30. Ruby - 1995
由於對Smalltalk和Lisp的開發感到沮喪,Yukihiro Matsumoto從1993年起開始在Emacs上設計Ruby語言,並於1995年釋出了第一版。Ruby是解釋型、面向物件、多正規化的程式語言。如果你感興趣,可以看一下這些課程(http://www.java67.com/2018/02/5-free-ruby-and-rails-courses-to-learn-online.html)。
puts 'Hello, World!'
31. Java - 1995
Java是James Gosling(我們常說的高司令)在1995年時建立的一門面向物件程式語言,到目前為止,Java仍然是業界最流行、使用最廣泛的語言。使用Java可以開發從客戶端到服務端到各種應用,Google選擇Java作為Android開發語言這件事使得Java得到了更進一步的發展。想要學習Java的話可以關注這幾門課程(http://medium.com/javarevisited/10-free-courses-to-learn-java-in-2019-22d1f33a3915)。
class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }
32. JavaScript - 1995
JavaScript是一門主要用於開發Web頁面的指令碼語言,但現在也可以用作服務端開發,如Nodejs。JS是一門面向過程的語言,推薦課程在這裡(http://www.java67.com/2018/04/top-5-free-javascript-courses-to-learn.html)。
document.write('Hello, World!');
33. PHP - 1995
1995年對於程式語言而言絕對是非常重要的一年,在Java和JavaScript之後,PHP也於同年誕生。PHP是一門解釋型的面向物件程式語言。
<? echo "Hello, World!" ?>
34. Rebol - 1997
Rebol是一種高階指令碼語言,自稱“訊息傳遞語言”。
print "Hello, World!"
35. ActionScript — 1998
ActionScript可以用於開發客戶端應用程式,如Adobe Flash和Adobe Flex;也可以用於服務端開發(Flash media server, JRun, Macromedia Generator)。現在,ActionScript在Unity圖形引擎中被當作指令碼語言使用。
package { public class HelloWorld { public function HelloWorld() { trace("Hello World !"); } } }
36. D - 1999
D語言是一門面向物件程式語言,它的設計借鑑於許多語言,包括C++、Java和Eiffel。D語言是一門優秀的語言,但是一直都沒有像它的創造者期望的那樣獲得成功。
import std.stdio; void main () { writefln("Hello, World!"); }
37. C# - 2000
2000年,微軟就Java語言與Sun公司發生爭議,隨後便創造了C#,C#是一種被設計為在Microsoft.NET平臺上開發的面向物件的程式語言,它是由C++和Java派生而來,使用了許多它們的通用特性和概念。C#也可以用來在ASP.NET平臺上開發Web應用。C#課程(http://www.java67.com/2019/03/5-free-c-net-courses-to-learn-online.html)自取。
using System; internal static class HelloWorld { private static void Main() { Console.WriteLine("Hello, World!"); } }
38. Groovy - 2003
Groovy是執行在Java虛擬機器上的一門面向物件程式語言,它是Java的超集,其設計受到了Python、Ruby和Smalltalk的啟發。這裡有一些學習書籍(http://medium.com/javarevisited/70-years-of-hello-world-with-50-programming-languages-2400de893a97)可以參考。
println "Hello, World!"
39. Scala - 2003
Scala是一種多正規化程式語言,旨在以簡潔、優雅的形式表達常見的程式設計模型。Scala通過靜態型別集成了面向物件和函數語言程式設計的範例。Scala課程(http://javarevisited.blogspot.com/2019/01/5-free-scala-programming-courses-for-java-programmers-learn-online.html)。
object HelloWorld extends App { println("Hello, World!") }
40. F# - 2005
F#是一門在.NET平臺上開發的函式式、面向物件程式語言。F#源自與它高度相容的OCaml,它們都屬於ML語言這一系列的。
printfn "Hello, World!"
41. Windows PowerShell - 2006
Windows PowerShell是Microsoft開發的軟體套件,包括命令列介面,稱為PowerShell的指令碼語言和開發套件。從Windows 7開始,PowerShell已作為標準配置提供。
echo "Hello, World!"
42. Clojure - 2007
Clojure是編譯型、跨平臺的函數語言程式設計語言,它可以安全、簡單的開發分散式系統。Clojure是Lisp的三種主要方言之一。Clojure可以編譯成Java位元組碼,JavaScript程式碼或者是.NET位元組碼,因此它可以執行在JVM、CLR和瀏覽器上。
(println "Hello, World!")
43. Go - 2009
Go是一種編譯型的支援併發的程式語言,它的設計受到了C和Pascal的啟發,該語言由Google從Robert Griesemer,Rob Pike和Ken Thompson的最初概念開發而來。沒錯,這個Ken Thompson就是在1969年設計B語言的人!
package main import "fmt" func main() { fmt.Println("Hello, World!") }
44. Rust - 2010
Rust是由Mozilla設計並開發的一門多正規化的編譯型程式語言。Rust被設計為“安全、併發、實用的語言”,在某些方面支援函數語言程式設計風格,面向物件程式設計。Rust被認為有望替代C++。
fn main() { println("Hello, World!"); }
45. Dart - 2011
Dart是由Google開發的用於web應用的程式語言,它最初的目標是替代JavaScript。目前,Dart的目標還沒有實現,開發人員的首要任務是可以將Dart轉換成與所有現代瀏覽器相容的JavaScript程式碼。Dart也可以用於服務端的開發。
Dart最近的勢頭很猛,主要是因為它是手機端流行框架Flutter的開發語言。
main() { print('Hello, World!'); }
46. Kotlin — 2011
Kotlin是一門面向物件程式語言,支援靜態型別,可以被編譯成位元組碼執行在Java虛擬機器上。也可以編譯成JavaScript語言,或者在其他多個平臺執行的語言。(感謝LLVM)2017年,Google使Kotlin成為繼Java之後Android正式支援的第二種語言。如果你想學Kotlin,可以參考這些課程(http://javarevisited.blogspot.com/2018/02/5-courses-to-learn-kotlin-programming-java-android.html)。
fun main(args: Array<String>) { println("Hello, World!") }
47. Ceylon - 2011
Ceylon是由“紅帽”建立的開源的強型別和靜態型別的高階程式語言,它的語法類似於Java。可以將其編譯成Java位元組碼和JavaScript。
void hello() { print("Hello, World!"); }
48. TypeScript - 2012
TypeScript是由微軟開發的免費、開源的程式語言。用於改善和保護JavaScript程式碼的生產。TypeScript是JavaScript的超集,可以轉換為JavaScript,以便由任何Web瀏覽器或JavaScript引擎解釋。
console.log("Hello, World!");
49. Julia - 2012
Julia是用於科學計算的高階、強大、動態的程式語言,使用的是其他類似開發環境(例如MATLAB、R或Python)的使用者熟悉的語法。
println("Hello, World!")
50. Swift - 2014
Swift是一門編譯型、多正規化的程式語言,它簡單、高效、安全。它由蘋果開發並開源。使其成為與Objective-C一樣開發iOS移動應用的解決方案。
print("Hello, World!")
結論
我們的旅行到此就要告一段落了,我想你介紹了50種語言的“Hello, World!“程式的寫法。本文所提供的程式語言列表遠非詳盡。希望你能和我分享你喜歡的語言的“Hello, World!“程式。
譯者注
50種語言的發展來看,大多數語言的設計思想都是互相借鑑的。語言的發展也是逐漸演進的,但不是越強大的語言就越流行。一門語言想要變得流行也是需要一定的機遇的(例如Python),或者是需要有個優質的大腿(例如Java和Dart)。
我們把時間粒度再放粗一點,程式語言的發展趨勢是逐漸趨近於自然語言的,這也說明 程式設計首先是給人看的,然後才是指導計算機應該做什麼操作。 所以,請盡力寫出整潔的程式碼。避免同事罵人。
為了響應作者,我先來一個,最近剛剛創造出來的文言文程式設計的“Hello, World!“程式。
吾有一言。曰「「問天地好在。」」。書之。
原文地址
http://medium.com/javarevisited/70-years-of-hello-world-with-50-programming-languages-2400de893a97
- Elasticsearch原始碼解析:環境搭建
- Elasticsearch從入門到放棄:再聊搜尋
- 如何更好的使用Gson
- Rust入坑指南:萬物初始
- Rust入坑指南:居安思危
- Rust入坑指南:齊頭並進(上)
- 【譯】推薦你使用Vim的三個半理由
- Rust入坑指南:智慧指標
- Rust入坑指南:朝生暮死
- 【譯】教你用16個小時從0構建一個Rust應用
- Rust入坑指南:步步為營
- 【譯】感謝你的Code Review
- 吐血推薦珍藏的IDEA外掛
- Rust入坑指南:海納百川
- 【譯】教你用50種語言寫Hello, World
- Rust入坑指南:亡羊補牢
- antirez:Redis6真的來了
- 程式碼檢查又一利器:ArchUnit
- 【譯】淺談SOLID原則
- Rust入坑指南:鱗次櫛比