看板 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
短片中提及人類史上第一個編譯器,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
* 編譯器原理和案例分析:
https://hackmd.io/s/H1ZzeiCIQ
另外,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
--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.245.162
※ 文章代碼(AID): #1RhWSNPG (Gossiping)
※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1538131735.A.650.html
推 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
推 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
推 ShinRuei: 你程射系?54F 110.26.99.59 台灣 09/28 19:12
二戰期間,賓州大學和阿伯丁彈道研究實驗室共同負責為陸軍每日提供6張火力表,
每張表都要計算幾百條彈道,儘管改進了微分分析儀、聘用 200 多名計算員, 一張
火力表仍要算兩、三個月。電子計算機發展的迫切需求摧生了 ENIAC。
彈道研究實驗室發起 ENIAC 電腦,專案進行一年後,當時研究氫彈的 John von
Neumann 注意到這台電腦,隨後他所屬的洛斯阿拉莫斯國家實驗室深入參與 ENIAC
專案,以至於首度測試執行是計算氫彈相關資料,而非火力表。輸出資料是 100 萬
張卡片。
※ 編輯: jserv (140.116.245.162), 09/28/2018 19:16:41
推 freedls: 有神快拜58F 113.196.176.124 台灣 09/28 19:14
推 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
推 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
推 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
→ jserv: @rongyaya, 餵奶換尿布的過程,我都在放空82F 140.116.245.162 台灣 09/28 19:30
推 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
推 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
[7]
http://www.piercefuller.com/library/ctss.html
※ 編輯: jserv (140.116.245.162), 09/28/2018 19:51:48
推 jahfone: 召喚成功376F 223.140.224.143 台灣 09/29 15:58
→ 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
--