Hello World

让电脑萤幕显示“Hello, World!”字串的电脑程式

「Hello, World!」程式通常指一類輸出或顯示「Hello, World!」(你好,世界!)字串的電腦程式。在大多數通用程式語言中,這樣的程式只有一小段代碼,因此可以用來展示該程式語言的基本語法英語Syntax (programming languages)[1]。「Hello, World!」往往是初學者學習某種程式語言所接觸的第一個程式內容[2][3][4],同時它也是用來確認原始碼編譯器、程式開發或執行環境是否已經安裝妥當並被操作者理解的常用手段。

Hello World 於Windows Vista中的執行結果

歷史

 
布萊恩·柯林漢 撰寫的「Hello, world」程式 (1978年)

1972年,在貝爾實驗室成員布萊恩·柯林漢撰寫的內部技術檔案《A Tutorial Introduction to the Language B》中首次提到了Hello World這一字串。當時,他使用B語言撰寫了一個用於演示外部變數的範例程式:

main( ) {
    extern a, b, c;
    putchar(a); putchar(b); putchar(c); putchar('!*n');
}
 
a 'hell';
b 'o, w';
c 'orld';

這個程式將在終端列印出「hello, world」,然後附上一個換行符。之所以這一短語被拆分成多個變數記錄,是因為B語言中的每個字元常數只能容納四個ASCII字元[5]

1974年,時值C語言取代B語言,在貝爾實驗室的又一內部備忘錄《Programming in C: A Tutorial》中,柯林漢用C語言再次編寫了一個Hello World程式作為教學範例。這一程式在他和丹尼斯·里奇於1978年出版的《C程式設計語言》中得到繼承:

main( ) {
        printf("hello, world\n");
}

在上例中,main( )函式定義了程式開始執行的位置。其主體由一條語句組成,即對printf函式的呼叫,意思是「列印格式化」(print formatted)。這個函式將使程式輸出以參數傳遞給它的任何內容,在本例中是字串hello, world

自此,Hello World成為了電腦程式設計師學習新的程式語言的傳統[6]。但是,也有些人認為 hello, world 的字串早於1966年的BCPL語言出現的時候已經出現[7]。雖然相關的字詞確實在發明者記錄的檔案出現,但是可以肯定的是,Hello World在當時確實沒有流行。因此,人們公認為布萊恩·柯林漢是令該字串走進公眾目光的人。

衍生影響

 
Sony 的 PSP 掌機執行 Hello World 代碼。

對電腦文化的影響

Debian以及系統的進階包裝工具當中包含了「hello, world」安裝工具。使用者只需要於終端(Linux 系統的Terminal)輸入「apt-get install hello」便能夠安裝此工具及其相關部件。雖然看似沒用,但卻可作為測試工具使用。同時,這亦能夠向新使用者展示安裝工具的方法。對開發者來說,這個工具展現了建立.deb安裝工具的方法。這個工具,連同GNU Hello便成為了撰寫GNU程式的教學軟體。[2]

對其他電子產品的影響

雖然Hello World在單晶片微電腦、現場可程式化邏輯閘陣列複雜可程式邏輯裝置中不能展現出來,一盞細小的微型LED燈會代替Hello World的作用,以表示安裝成功、相關程式功能已實現[8][9][10][11][12]

 
以「Hello, World!」測試LED光影系統是否正常運作。

對流行文化的影響

Hello World已經成為流行文化的一部分,例如以Hello World命名首個運用純人工智慧完成的專輯。[13] 虛擬YouTuber公司hololive productionHololive Alternative企劃預告PV末使用"//Hello,Δlternative World"來致敬此文化。[14]同時,亦有若干公司以Hello World命名,例如位於澳洲的Helloworld旅遊公司[15]、Hello World Consulting[16]等。

單晶片中的「Hello World!」

對於學習單晶片的學習者而言,他們會使用操作IO口的方式作為Hello World的代替,用以展示嵌入式編程的基本方法和單晶片的基本操作邏輯,代表自己編寫了這個單晶片的第一個程式。

例如:

8051系列單晶片:P0^0 = 1;

STM32單晶片:HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET) ;

到Hello World的時間

「到Hello World的時間」(英語:Time to hello world,TTHW)是指用給定的程式語言編寫一個「Hello, World!」程式所需的時間,這是衡量一個程式語言易用性的標準之一。由於「Hello, World!」程式主要的介紹對象是不熟悉該語言的人,「Hello, World!」程式越複雜可能越表明該程式語言不太容易接近。這個概念現已不限於程式語言,在API層面同樣適用,成為衡量一個新開發者使一個基本範例運作的難易程度。時間越短,說明開發者越容易採用該API。

參見

參考來源

  1. ^ James A Langbridge. Professional Embedded ARM Development. [2018-04-30]. (原始內容存檔於2017-02-05). 
  2. ^ 2.0 2.1 Hello - GNU Project - Free Software Foundation. gnu.org. GNU Project. [2017-07-07]. (原始內容存檔於2014-05-29). 
  3. ^ W3schools. Tryit Editor about Hello World. [2018-04-30]. (原始內容存檔於2018-05-08). 
  4. ^ Hello World. 普林斯頓大學. [2018-04-30]. (原始內容存檔於2017-10-12). 
  5. ^ The Programming Language B. [2018-04-30]. (原始內容存檔於2015-06-11). 
  6. ^ Kernighan, Brian W.; Ritchie, Dennis M. The C Programming Language 1st. Englewood Cliffs, NJ: Prentice Hall. 1978. ISBN 0-13-110163-3. 
  7. ^ BCPL頁面存檔備份,存於網際網路檔案館), Jargon File
  8. ^ Silva, Mike. Introduction to Microcontrollers - Hello World. EmbeddedRelated.com. 2013-09-11 [2015-05-19]. (原始內容存檔於2015-05-22). 
  9. ^ George, Ligo. Blinking LED using Atmega32 Microcontroller and Atmel Studio. electroSome. [2015-05-19]. (原始內容存檔於2014-11-05). 
  10. ^ PT, Ranjeeth. 2. AVR Microcontrollers in Linux HOWTO. The Linux Documentation Project. [2015-05-19]. (原始內容存檔於2015-05-02). 
  11. ^ Andersson, Sven-Åke. 3.2 The first Altera FPGA design. RTE. Realtime Embedded AB. 2012-04-02 [2015-05-19]. (原始內容存檔於2015-05-21). 
  12. ^ Fabio, Adam. CPLD Tutorial: Learn programmable logic the easy way. Hackaday. 2014-04-06 [2015-05-19]. (原始內容存檔於2015-05-20). 
  13. ^ BBC. Is this the World's first good robot alblum. (原始內容存檔於2018-05-13). 
  14. ^ Hololive Alternative官方PV. (原始內容存檔於2021-05-10).  已忽略未知參數|archive-ur1= (幫助)
  15. ^ Helloworld 旅遊公司的網站. (原始內容存檔於2018-05-13). 
  16. ^ Hello World Consulting公司的網站. (原始內容存檔於2018-04-30). 

外部鏈結