“Hello, World” 的歷史

“Hello, World!” —— 初學者進入編程世界的第一步

Cover image for Say Hello to Programming: Writing "Hello, World!" in 50 Different Languages

由布萊恩·柯林漢 撰寫的“Hello, world”程序 (1978年)
在這里插入圖片描述

布萊恩·W.克尼漢(Brian W. Kernighan)—— Unix 和 C 語言背后的巨人

在這里插入圖片描述

布萊恩·W.克尼漢

布萊恩·W.克尼漢在 1942 年出生在加拿大多倫多,他在普林斯頓大學取得了電氣工程的博士學位,2000 年之后取得普林斯頓大學計算機科學的教授教職。

他與 Shen Lin 合作共同完成了兩個知名的 NP-complete 優化問題的解決方案:圖劃分問題和旅行推銷員問題。旅行推銷員問題(Travelling Salesman Problem, 又稱為旅行商問題、貨郎擔問題、TSP 問題)是一個多局部最優的最優化問題:有 n 個城市,一個推銷員要從其中某一個城市出發,唯一走遍所有的城市,再回到他出發的城市,求最短的路線。

布萊恩·W.克尼漢除了和丹尼斯?里奇撰寫了《C 程序設計語言》之外,還撰寫了《UNIX 編程環境》,這本書對 UNIX 操作系統的編程環境做了詳細而深入的討論,內容包括 UNIX 的文件系統、Shell、過濾程序、I/O 編程、系統調用等,并對 UNIX 中的程序開發方法做了有針對性的指導。

布萊恩·W.克尼漢在普林斯頓大學為非計算機專業學生開設了一門介紹計算機技術基礎的課程,根據課程講義編寫《D is for digital》—— 中文譯名《世界是數字的》。書中解釋了當今計算和通信領域的工作方式,包括硬件、軟件、因特網等,討論了新技術帶來的社會、政治和法律問題。

Hello World

1972 年,在貝爾實驗室成員布萊恩·W.克尼漢撰寫的內部技術文件《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 語言中的每個字符常量只能容納 4 個 ASCII 字符。

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

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

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

自此,Hello World 成為了電腦程序員學習新的編程語言的傳統。但是,也有些人認為 hello, world 的字符串早于 1966 年的 BCPL 語言出現的時候已經出現。雖然相關的字詞確實在發明者記錄的文件出現,但是可以肯定的是,Hello World 在當時確實沒有流行。因此,人們公認為布萊恩·W.克尼漢是令該字符串走進公眾目光的人。

K&R
起初,C 語言沒有官方標準。1978 年貝爾實驗室正式發表了 C 語言。布萊恩·W.克尼漢(Brian Kernighan)和丹尼斯?里奇(Dennis Ritchie)出版了《The C Programming Language》。這本書被 C 語言開發者們稱為 K&R,很多年來被當作 C 語言的非正式的標準說明。人們稱這個版本的 C 語言為 K&R C。
至此,布萊恩·W.克尼漢(Brian Kernighan)和丹尼斯?里奇(Dennis Ritchie)兩人簡稱 K&R。

via : Hello World https://zh.wikipedia.org/wiki/Hello_World

縱觀編程歷史,“Hello World” 在向初學者介紹編碼世界方面發揮了至關重要的作用。
雖然 “Hello World” 看似微不足道,但它不僅是一個承載著編程教育的歷史和文化意義的簡單程序,也是初學者進入編程世界的第一步,代表了編碼無限可能性之旅的開始。

擴展閱讀

  1. “Hello, World”的歷史 —— The History of ‘Hello, World’ - HackerRank Blog

    https://www.hackerrank.com/blog/the-history-of-hello-world/

  2. 300 種編程語言的 Hello World 程序列表 —— List of Hello World Programs in 300 Programming Languages – MYCPLUS

    https://www.mycplus.com/featured-articles/hello-world-programs-in-300-programming-languages/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/35032.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/35032.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/35032.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OS中斷機制-嵌套和競爭

對于FreeRTOS最好不去用中斷嵌套,中斷嵌套會增加堆棧空間的使用,因為每個中斷服務程序都需要保存和恢復寄存器狀態,這可能會耗盡有限的堆棧空間,從而導致系統故障。以及中斷嵌套時,不同的中斷服務程序可能會競爭訪問共享資源,從而增加死鎖的風險。這可能會導致系統出現故…

Verilog進行結構描述(structural modeling)(一):基本概念

目錄 1.結構描述(structural modeling)的內容:2.實例 微信公眾號獲取更多FPGA相關源碼: 1.結構描述(structural modeling)的內容: 用門來描述器件的功能基于基本元件和底層模塊例化語句最接近實際的硬件結構主要使用元件的定義、使用聲明以…

Flink——最流批的大數據框架(流批一體)

Apache Flink基礎教程 資料來源:Apache Flink Tutorial (tutorialspoint.com) Apache Flink是Apache Hadoop的開源本地分析數據庫。它由Cloudera、MapR、Oracle和Amazon等供應商提供。本教程中提供的示例是使用Cloudera Apache Flink開發的。 本教程是為那些想要學…

fork 是一個創建新進程的系統調用

在計算機科學中,fork 是一個創建新進程的系統調用。具體來說,fork 調用會創建一個與當前進程幾乎完全相同的副本,包括父進程的內存布局、環境變量、打開的文件描述符等。這個新的進程被稱為子進程,而原始進程被稱為父進程。 以下…

光伏開發有沒有難點?如何解決?

隨著全球對可再生能源的日益重視,光伏技術作為其中的佼佼者,已成為實現能源轉型的關鍵手段。然而,光伏開發并非一帆風順,其過程中也面臨著諸多難點和挑戰。本文將對這些難點進行探討,并提出相應的解決策略。 一、光伏開…

12 學習總結:操作符

目錄 一、操作符的分類 二、二進制和進制轉換 (一)概念 (二)二進制 (三)進制轉換 1、2進制與10進制的互換 (1)2進制轉化10進制 (2)10進制轉化2進制 2…

解決vs2022scanf報錯問題

vs2022scanf報錯問題 大家下完vs2022之后,開心的寫下一段簡單的代碼: #include <stdio.h> #include <stdlib.h>int main() {int a;scanf("%d", &a);printf("%d", a);return 0; } vs2022會毫不猶豫的報錯,下面是報錯信息: 翻譯過來就是v…

探究InnoDB Compact行格式背后

目錄 一、InnoDB 行格式數據準備 二、COMPACT行格式整體說明 三、記錄的額外信息 &#xff08;一&#xff09;變長字段長度列表 數據結構 存儲過程 讀取過程 變長字段長度列表存儲示例 &#xff08;二&#xff09;NULL 值位圖 數據結構 存儲過程 讀取過程 NULL 值…

【MySQL進階之路 | 高級篇】索引的聲明與使用

1. 索引的分類 MySQL的索引包括普通索引&#xff0c;唯一性索引&#xff0c;全文索引&#xff0c;單列索引和空間索引. 從功能邏輯上說&#xff0c;索引主要分為普通索引&#xff0c;唯一索引&#xff0c;主鍵索引和全文索引.按物理實現方式&#xff0c;索引可以分為聚簇索引…

蘋果電腦清理垃圾怎么清理 macbook怎么清理電腦垃圾文件 macos優化軟件 cleanmymac怎么使用

在選擇電腦時&#xff0c;不少人都會選擇擁有高性能和輕薄機身的mac。一開始&#xff0c;它確實如我們所期待的那樣健步如飛&#xff0c;然而&#xff0c;隨著時間的流逝&#xff0c;有沒有覺得您的Mac有時候像是需要一個好的春季大掃除一樣&#xff1f;隨著我們不斷使用電腦&a…

Lobe Chat openai claude

claude-3-5-sonnet-20240620 $ docker run -d -p 3210:3210 \-e OPENAI_API_KEYsk-xxxx \-e OPENAI_PROXY_URLhttps://api-proxy.com/v1 \-e ACCESS_CODElobe66 \--name lobe-chat \lobehub/lobe-chatDocker 部署 更新 docker ps CONTAINER ID IMAGE …

1590. 【中山市第十二屆義務教育段學生信息學邀請賽】除法運算(divide)

時間限制: 1 s 空間限制: 256 MB 題目描述 Jimmy 開始學習除法啦&#xff01;一開始他學習了余數為 0 的除法&#xff08;也就是我們常說的整除&#xff09;&#xff0c;后來又學習了余數不為 0 的除法&#xff0c;所以 Jimmy 對被除數、除數、商、余數這些概念都已經了如指…

C語言學習步驟

C語言學習步驟 學習C語言是一個系統化的過程&#xff0c;以下是一些基本的步驟和建議&#xff1a; 1. 理解基礎概念&#xff1a;首先&#xff0c;了解編程的基本概念&#xff0c;比如變量常量、數據類型、指針、控制結構&#xff08;順序語句、分支語句、循環語句&#xff09;、…

神經網絡參數-----學習率(Learning Rate)

學習率 學習率是訓練神經網絡的重要超參數之一&#xff0c;它代表在每一次迭代中梯度向損失函數最優解移動的步長。它的大小決定網絡學習速度的快慢。在網絡訓練過程中&#xff0c;模型通過樣本數據給出預測值&#xff0c;計算代價函數并通過反向傳播來調整參數。重復上述過程…

Geoserver源碼解讀四 REST服務

文章目錄 文章目錄 一、概要 二、前置知識點-FreeMarker 三、前置知識點-AbstractHttpMessageConverter 3.1 描述 3.2 應用 四、前置知識點-AbstractDecorator 4.1描述 4.2 應用 五、工作空間查詢解讀 5.1 模板解讀 5.2 請求轉換器解讀 一、概要 關于geoserver的r…

zabbix-agent2啟動失敗報錯Unit zabbix-agent2.service entered failed state.

文章目錄 1&#xff0c;用systemctl status zabbix-agent2查看報錯狀態2&#xff0c;用journalctl -xe查看一下報錯日志3&#xff0c;再看一下zabbix的日志。4&#xff0c;錯誤修改5&#xff0c; 再次重啟zabbix-agent2 1&#xff0c;用systemctl status zabbix-agent2查看報錯…

高考季-計算機相關專業與所學核心課程介紹以及高考報考學校推薦

計算機相關專業通常包括計算機科學與技術、軟件工程、信息安全、網絡工程、人工智能等。以下是對這些專業的詳細介紹、所學課程內容以及一些推薦的學校和專業。 1. 計算機科學與技術 專業介紹 計算機科學與技術是研究計算機系統及其相關技術的學科&#xff0c;包括計算機硬件…

ref與reactive

在Vue 3中&#xff0c;ref 和 reactive 是兩種用于創建響應式狀態的API。它們在實現方式和使用場景上有所不同。下面是對 ref 和 reactive 的深度解析&#xff1a; 1. ref 解析 ref 用于創建一個單一的響應式引用&#xff0c;可以用來包裹基本類型&#xff08;如字符串、數字…

Word如何在頁眉中插入和刪除橫線

你平常是否遇見到Word的頁眉中有一條橫線&#xff0c;怎么也刪不了&#xff01;&#xff01;&#xff01; 今天劉小生分享如何在頁眉中插入和刪除橫線&#xff0c;我們一起操練起來吧&#xff01; 1、Word頁眉插入橫線 選擇【插入】-【頁眉頁腳】&#xff0c;在“頁眉頁腳”…

00_Python核心編程

Python入門 一 Python初識 1 Python的歷史 Python的歷史python是蟒蛇的含義python是一種解釋型的,面向對象的,帶有動態語義的高級程序設計語言. python是一種使你在編程時能夠保持自己的風格的程序設計語言,你不用費什么勁就可以實現你想要的功能,并且編寫的程序清晰易懂. …