看板 Gossiping
作者 jserv (松鼠)
標題 Re: [問卦] 寫程式語言的語言是怎麼來的?
時間 Fri Sep 28 18:48:47 2018


※ 引述《greattower (一劍定江湖)》之銘言:
: 小弟最近離開了SAS S+轉到C++軌道,
: 有一個問題一直困擾小弟很久,
: 寫出程式語言的語言到底是什麼?
: 一切的起源是怎麼來的,
: 又是誰規定,print hello world就一定是印出呢?
: 有沒有理組歷史系的大大來解釋一下?

這問題困擾我超過 25 年,身為「文組」的我,希望可以解答部分提問。
致力於人文和科學教育的 Crash Course [1] 有部很棒的短片,可在十分鐘內
回覆上述大部分問題,請見:

    https://www.youtube.com/watch?v=RU1u-js7db8
The First Programming Languages: Crash Course Computer Science #11 - YouTube Get your first two months of CuriosityStream free by going to  and using the promo code “crashcourse”. So we ended last...

 

短片中提及人類史上第一個編譯器,A-0 System [2] 開發於 1951-52 年間,注意
到當時的用語是 "System",而且名稱 A-0 代表 Arithmetic Language version 0,
與其說是今天我們提及的高階語言編譯器,不如說是程式的載入器 (loader) 或連結器
(linker)。

A-0 System 背後的人物非常關鍵,是 Grace Murray Hopper 準將 [3],以下摘錄自
單維彰教授撰寫的介紹 [4]:

* 本姓 Murray,Hopper 是夫家的姓
* 1941 年,Grace 在她的人生中產生了極大的改變。 當時歐戰爆發,Grace 有了
  從軍的念頭,她想加入海軍。當時女人從軍都是做後備軍人,大部分都是護士,

  再不然就是擔任後勤。 如果是受過高等教育的女性,就會被分配要去做有關計算的

  工作,例如: 計算彈道,讓前線的砲兵知道如何使用砲彈。
* 她被分派到哈佛大學的一個後勤的計算局。當時的主持人是 Howard Aiken,也是
  Mark I, II, III 這一系列電機計算機的設計及製造者
* 1945 年 9 月 9 日,發生了一樁對電腦界而言非常重要的軼事。那天因為天氣很
  熱,他們都把窗戶給打開了,飛進來一隻蛾,結果那隻蛾被打死在一支繼電器裡面,
  造成電路不通,讓機器當機,使他們沒辦法算出他們要的結果。經過了近一天的
  檢查,Hopper 找到了那隻蛾,她用她的髮夾去把那隻蛾給弄出來,還把那隻蛾的
  屍體貼在她的管理日誌上,上面寫著:

  「就是這個 bug,害我們今天的工作無法完成。」
  這個消息傳開之後,那個實驗室裡的人每逢老闆詢問為何還沒做出結果時,都把
  過錯推給 bug。爾後,在電腦界中,遇到程式中有錯,就稱之為  bug。 除錯叫做
  debug
* 最大的貢獻是發明了全世界第一套編譯器,叫做 A-0。 在當時是沒有任何組合語言
  及程式語言存在的,所有的程式設計人員,都是要把程式翻譯成機器碼,就是翻成

  0011000101.. 這樣的形式,在紙上打洞,再送到機器裡面去讀。 ... 她便有了一種

  想法,她想設計一種程式,讓人可以用類似英文的語法,把想做的事寫下來, 然後
  用這個程式把英文翻譯成機器的語法,交給機器去執行。這個想法就是今日的編譯器
* 她提出這樣的構想時,眾人皆曰不可。所有人都告訴她電腦只能做計算,只能加減

  乘除,只能處理數字,電腦是不懂英文的 ... 1950 年代,大部分人尚未意識到電腦
  是用來處理資訊的工具,所有的人就是認為電腦是個計算機而已。
* 她的名言有很多,她自己最喜歡的:
  "A ship in port is safe, but that is not what ships are built for."
   (船泊港灣是安全的,但那並不是我們造船的目的)

延伸閱讀:
* Grace Hopper's compiler: Computing's hidden hero [5]
  By Tim Harford BBC World Service, 50 Things That Made the Modern Economy

如果你對編譯器的實作議題有興趣,歡迎參閱以下教材 (有錄影):
* 編譯器和最佳化原理篇: https://hackmd.io/s/Hy72937Me
你所不知道的 C 語言:編譯器和最佳化原理篇 - HackMD
# [你所不知道的 C 語言]( *以 GNU Toolchain 為探討對象,簡述[編譯器如何運作,以及如何實現最佳 ...

 
* 編譯器原理和案例分析: https://hackmd.io/s/H1ZzeiCIQ
你所不知道的 C 語言:編譯器原理和案例分析 - HackMD
# [你所不知道的 C 語言]( Copyright (**慣C**) 2018 [宅色夫]( ...

 

另外,printf (注意後面的 "f") 背後有很多學問,可以追溯到 1960 年代。下次如果
還有其他網友討論到 C 語言的歷史時,我再來整理分享。

[1] https://thecrashcourse.com/

 
[2] https://en.wikipedia.org/wiki/A-0_System
 
[3] https://en.wikipedia.org/wiki/Grace_Hopper
 
[4] https://bcc16.ncu.edu.tw/pool/3.06.shtml

 
[5] https://www.bbc.com/news/business-38677721
Grace Hopper's compiler: Computing's hidden hero - BBC News
[圖]
The story behind the compiler, a remarkable innovation that made modern computing possible. ...

 

--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.245.162
※ 文章代碼(AID): #1RhWSNPG (Gossiping)
※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1538131735.A.650.html
stevekevin10: 有神先拜1F 223.137.120.191 台灣 09/28 18:49
ruokcnn: 有神先推2F 223.140.66.142 台灣 09/28 18:49
james732: 推認真回覆3F 111.71.213.48 台灣 09/28 18:49
Asbarla: 就知道會釣出來4F 36.226.176.179 台灣 09/28 18:50
saiulbb: 樓下碰到成大資工教授想趟麻?5F 61.56.143.149 台灣 09/28 18:50
jellyfishuan: 太神啦釣到大神了
求教授讓我過啊不然要幹嘛6F 140.118.147.228 台灣 09/28 18:50
abian: bug8F 153.151.204.29 日本 09/28 18:51
ts05593818: 推9F 42.72.82.52 台灣 09/28 18:51
james80351: 推10F 180.217.210.236 台灣 09/28 18:51
Nitricacid: 你文學系?11F 111.82.199.15 台灣 09/28 18:51
aa23512b: 有神快拜12F 140.113.65.203 台灣 09/28 18:51
imanda0324: 推推,終於知道bug由來13F 111.252.200.14 台灣 09/28 18:52
tw88: 大推宅瑟夫!!!!!!!!!14F 223.141.87.144 台灣 09/28 18:53
chrisgod: 太神啦15F 175.98.20.168 台灣 09/28 18:53
fs78123q: 先推再說16F 61.228.153.223 台灣 09/28 18:53
storyu59: 太神啦17F 223.137.28.159 台灣 09/28 18:53
kaj1983: bug原來是真的bug...18F 218.173.141.181 台灣 09/28 18:54
g5637128: 推19F 36.237.160.83 台灣 09/28 18:54
heinse: 先推20F 1.163.112.118 台灣 09/28 18:54
netio: 有神快拜21F 123.204.70.104 台灣 09/28 18:54
seeking214: 大推!!22F 217.86.187.75 德國 09/28 18:55
beypola: 這ID還不拜個23F 36.225.45.112 台灣 09/28 18:55
Lamuneforty: 推  原來debug是這麼回事24F 111.248.144.59 台灣 09/28 18:56
jerryzero: 有神快推25F 114.42.40.219 台灣 09/28 18:57
cangyisu: 推 我理組我還沒研究過26F 42.77.188.42 台灣 09/28 18:58
jserv: @Nitricacid, 是啊,我致力於「文C雕龍」27F 140.116.245.162 台灣 09/28 18:59
iapf: 知識文!28F 82.132.223.134 英國 09/28 18:59
kis28519: 有神快拜29F 220.137.2.85 台灣 09/28 18:59
cmcmcmcm2: XD 推推30F 42.74.58.155 台灣 09/28 19:00
Ericz7000: 推 這個故事我有聽過31F 59.127.81.29 台灣 09/28 19:00
chuegou: 有神先拜32F 223.140.195.35 台灣 09/28 19:01
kevin28: 大神33F 117.19.104.120 台灣 09/28 19:02
akway: 程式語言是女人發明的34F 114.42.159.252 台灣 09/28 19:02
shiyeh: 你啾啾鞋?            跪求啾啾鞋做這集XD35F 118.167.139.236 台灣 09/28 19:02
silentence: 語言  文組無誤(O36F 101.10.104.85 台灣 09/28 19:02
GTR12534: 一個語言最重要的是 compiler 吧嗎?37F 101.13.0.247 台灣 09/28 19:03
BaGaJohn5566: 程式語言也是語言 算文組科目38F 39.9.42.101 台灣 09/28 19:04
KirkSynder: 先推再看39F 49.214.191.68 台灣 09/28 19:04
cj010811: 先推再說40F 49.214.32.43 台灣 09/28 19:05
c00823ue: 每個人都把過錯推給bugXD41F 111.185.93.106 台灣 09/28 19:05
hni: 最近在寫這方面的小說,程式語言的起源跟駭客42F 114.34.153.120 台灣 09/28 19:06
jserv: @hni, 期待!43F 140.116.245.162 台灣 09/28 19:06
hni: 有很大的關係44F 114.34.153.120 台灣 09/28 19:06
saint01: 好45F 1.170.209.127 台灣 09/28 19:07
apflake: 有一句話的語法怪怪的,所謂資訊就是0與1的集合,怎麼會沒有人知道電腦是用來處理資訊46F 218.164.182.217 台灣 09/28 19:07
GUANYA: !49F 115.82.69.20 台灣 09/28 19:09
thomaskov: 推個50F 27.246.231.102 台灣 09/28 19:09
followwar: J大51F 140.113.203.61 台灣 09/28 19:10
KLSAKKOCK: 有神先拜52F 39.10.30.62 台灣 09/28 19:10
capdie159753: 原來Bug是這樣來的53F 223.138.83.222 台灣 09/28 19:12
ShinRuei: 你程射系?54F 110.26.99.59 台灣 09/28 19:12

二戰期間,賓州大學和阿伯丁彈道研究實驗室共同負責為陸軍每日提供6張火力表,
每張表都要計算幾百條彈道,儘管改進了微分分析儀、聘用 200 多名計算員, 一張
火力表仍要算兩、三個月。電子計算機發展的迫切需求摧生了 ENIAC。

彈道研究實驗室發起 ENIAC 電腦,專案進行一年後,當時研究氫彈的 John von
Neumann 注意到這台電腦,隨後他所屬的洛斯阿拉莫斯國家實驗室深入參與 ENIAC
專案,以至於首度測試執行是計算氫彈相關資料,而非火力表。輸出資料是 100 萬
張卡片。

bbo6uis122: 推55F 61.223.31.188 台灣 09/28 19:12
StNeverRush: 喬瑟夫 推推56F 223.137.107.82 台灣 09/28 19:13
※ 編輯: jserv (140.116.245.162), 09/28/2018 19:16:41
AuroraSkyFox: 是真神人 快拜57F 42.75.162.163 台灣 09/28 19:14
freedls: 有神快拜58F 113.196.176.124 台灣 09/28 19:14
a122112259: 推59F 39.12.203.44 台灣 09/28 19:16
kevin31a2: 高級打字員沒那麼好當60F 223.136.58.149 台灣 09/28 19:17
a2470abc: 有神快拜61F 114.136.125.174 台灣 09/28 19:17
jserv: @ShinRuei, 先補上火力表計算驅策電腦發展62F 140.116.245.162 台灣 09/28 19:18
s890510: 推63F 27.242.224.234 台灣 09/28 19:18
jserv: @apflake, 應該是資訊「價值」認定不同所致好比說現在研究生多半是為了畢業證書而學64F 140.116.245.162 台灣 09/28 19:19
bochengchen: 推推推66F 1.174.135.46 台灣 09/28 19:19
xianyuyu:67F 111.71.97.43 台灣 09/28 19:20
jserv: 忽略了研究所的「研究」一詞背後的意義68F 140.116.245.162 台灣 09/28 19:20
※ 編輯: jserv (140.116.245.162), 09/28/2018 19:21:36
wkunhui: 有神必推69F 180.204.193.139 台灣 09/28 19:21
game610006: 推推70F 219.85.140.102 台灣 09/28 19:22
coolda: 跪下 你們這些凡人71F 36.224.239.249 台灣 09/28 19:23
yuting90: 推72F 111.240.87.194 台灣 09/28 19:24
fuhu66: 先拜再說73F 140.114.26.178 台灣 09/28 19:24
Neisseria: 我跪著看這篇文章74F 1.171.132.156 台灣 09/28 19:25
pig250907: 有神快拜75F 36.226.11.226 台灣 09/28 19:25
asmiocv: 原來bug是這樣阿76F 61.227.205.252 台灣 09/28 19:25
darkmn0131: 有神快拜!77F 223.137.214.13 台灣 09/28 19:26
tkc7: 娘子阿 快和牛魔王出來看上帝78F 220.135.116.91 台灣 09/28 19:28
APC: 推79F 180.217.155.194 台灣 09/28 19:29
rongyaya: 老師最近很有空發文80F 114.136.179.126 台灣 09/28 19:29
woaifafewen: 釣到了XD81F 182.155.130.246 台灣 09/28 19:30
jserv: @rongyaya, 餵奶換尿布的過程,我都在放空82F 140.116.245.162 台灣 09/28 19:30
tony5361627: 推 優文83F 36.238.93.77 台灣 09/28 19:32
LOWJ: 神84F 101.137.35.31 台灣 09/28 19:33
ThreeNG: 程式語言之女神!85F 49.214.175.90 台灣 09/28 19:34
Boyzone: 跪86F 223.137.56.14 台灣 09/28 19:35
appleball200: 推87F 115.82.197.168 台灣 09/28 19:36
no4: 我媽問我為什麼要跪著用電腦88F 118.167.119.14 台灣 09/28 19:37
asglay: 拜!89F 114.27.170.181 台灣 09/28 19:38
kiwi0530: 老師如果是文組,那理組都要撞牆了90F 118.160.3.115 台灣 09/28 19:38
gR7P4zXH: 現在加選來得及嗎91F 180.217.102.2 台灣 09/28 19:39
louis0724: 這句話好讚喔 真的很有遠見92F 1.200.62.54 台灣 09/28 19:40
shinobunodok: 膝蓋這東西本來就要貼在地上的93F 1.172.108.84 台灣 09/28 19:41
dvdplayer: 推94F 42.72.190.38 台灣 09/28 19:41
froce: 自從上次推jserv的文後,我的伺服器就不會當機了95F 1.200.36.172 台灣 09/28 19:41
Gold740716: 比較想聽 printf 的故事,有資源嗎?97F 140.116.252.148 台灣 09/28 19:42

1960 年代初期 MIT 開發的 CTSS 作業系統 [6] 中,終端機命令就包含了 printf,
後者一路從 Multics 和 Unix 繼承至今

在 CTSS 原始程式碼 [7] 的檔案 com3 中可見到這行:
    STMTDC PRINTF,11,T,T25

前一行註解寫 "The following tables are the dictionaries of statement types"

檔案 com4 有其用法:
    OR WHENEVER E.($PRINTF$,$O$)

[6] https://multicians.org/thvv/7094.html
The IBM 7094 and CTSS
The IBM 7094 computer, and MIT Computation Center's CTSS timesharing system. ...

 
[7] http://www.piercefuller.com/library/ctss.html

soheadsome: 跪惹98F 223.136.86.228 台灣 09/28 19:43
ljsnonocat2:99F 42.75.136.206 台灣 09/28 19:43
※ 編輯: jserv (140.116.245.162), 09/28/2018 19:51:48
jahfone: 召喚成功376F 223.140.224.143 台灣 09/29 15:58
thehoodguy: 推啊377F 59.115.122.51 台灣 09/29 16:35
smallcar801: 現在計概不教這些了嗎?378F 42.72.247.111 台灣 09/29 17:46
mike5312: 有神 快出來看379F 39.12.13.193 台灣 09/29 19:07
calamus: 好文推~有閒時細看覺得好有意思 謝謝分享380F 101.9.201.196 台灣 09/29 20:50

--
--
作者 jserv 的最新發文:
  • +38 Re: [問卦] 有GNU/Linux那有BSD/Linux嗎? - Gossiping 板
    作者: 140.116.246.163 (台灣) 2022-06-12 12:30:49
    回答這問題之前,我們應該先思考「什麼是 BSD?」 依據 FreeBSD 網站 的描述,FreeBSD 衍生自 BSD,後者則是 "the version of UNIX developed …
    49F 38推
  • +404 Re: [問卦] 要怎麼用針在光碟上戳出一個作業系統 - Gossiping 板
    作者: 140.116.246.163 (台灣) 2021-09-04 04:54:37
    「既然你誠心誠意地發問了,我們就大發慈悲地告訴你」(語出「火箭隊」) 這則笑話在 2010 年就出現巴哈姆特電玩資訊站 ,內容改寫自中國網友的創作, 已有十餘年,不過該笑話的弊端在於「針」。DVD 燒 …
    499F 407推 3噓
  • +83 Re: [問卦] 如何在Linux底下自幹win3.1系統? - Gossiping 板
    作者: 140.116.246.163 (台灣) 2021-09-03 12:41:58
    我是跟鄉民進來看熱鬧的,我跳進來了,我又跳出去了,打我啊笨蛋! (取自方唐鏡 名言) 學校老師應該忙著開學事宜,我幫他們回覆你的提問。 原題「在 Linux 系統底下要怎麼自己搞 win3.1 呢?」 …
    101F 83推
  • +230 Re: [問卦] 在卡上打洞寫程式是什麼感覺 - Gossiping 板
    作者: 140.116.246.163 (台灣) 2021-04-23 06:37:27
    剛好我需要跟學生解釋為何 Linux 核心原始程式碼的風格規範 中,限制一行至多 80 個字元,其典故跟「打孔卡」(punched card) 有關。 1890 年代,美國人口普查就使用新發明的穿孔卡 …
    247F 230推
  • +439 Re: [問卦] 原來上 ptt 可以學 linux 操作.. - Gossiping 板
    作者: 140.116.246.163 (台灣) 2021-04-23 00:01:26
    這恰好連結台灣特有的 BBS (電子布告欄) 文化及早期 Linux (和 BSD) 文字編輯器的 關聯。也讓我想起一年前過世的陳昇瑋博士,他的舊名是陳寬達,並以 Xshadow 的名號 馳名於早期的 …
    512F 444推 5噓
點此顯示更多發文記錄
(jserv.): Re: [問卦] 寫程式語言的語言是怎麼來的? - Gossiping板