※ 本文為 terievv 轉寄自 ptt.cc 更新時間: 2019-05-03 21:52:35
看板 Gossiping
作者 標題 Re: [問卦] 為什麼只有C語言 A B語言呢?
時間 Fri Mar 29 06:18:41 2019
※ 引述《a1781781781 (嘎了給給)》之銘言:
: 胎嘎後啦
: 本肥正在學習吸語言,聽說發展很久了至今仍歷久不衰
: 但是啊學到一半突然想到
: 吸語言的發展是不是跟硬碟一樣先有AB後來式微了
: 但好像都沒聽過AB語言耶有沒有八卦?
Han3 Kiang O2 [0] (客家語四縣腔)
電腦程式語言的發展是個迷人的主題,畢竟人們一直都想駕馭著電腦,而程式語言就是
其中最關鍵的議題之一。為何我們該認真看待程式語言的歷史呢?因為即便某些程式
語言的名稱已被遺忘,但他們部份或全面地影響後繼者,豐富了現有通行使用的程式
語言的面貌。
語言的名稱已被遺忘,但他們部份或全面地影響後繼者,豐富了現有通行使用的程式
語言的面貌。
不少散落在網際網路的資訊令人無所適從,比方說,在國家教育研究院網站收錄的
「圖書館學與資訊科學大辭典」,針對「C程式語言」,做了以下解釋: [1]
> 稱之為 C 語言是由於它是 Basic 語言之後繼者。而在 Basic 語言之前,又有一個
> 稱為 BCPL (Basic Combined Programming Language) 的語言
這段描述顯然錯誤,C 語言「老爹」Dennis M. Ritchie 撰文 "The Development of
the C Language" [2] 提及:
> In 1971 I began to extend the B language by adding a character type and
> also rewrote its compiler to generate PDP-11 machine instructions instead
> of threaded code. ...
> I called the slightly-extended language NB, for `new B.'
C 語言應為 B 語言的後繼者,而且跟 BASIC 無關,後者是 1964 年 John G. Kemeny
教授 (後來擔任達特茅斯學院 [Dartmouth College] 第 13 任校長) 夥同 Thomas E.
Kurtz 教授,在 FORTRAN 程式語言的基礎上建構的高階語言,從全名 Beginner's
All-purpose Symbolic Instruction Code 可看出著眼點,最初他們設計 BASIC 程式
語言是讓達特茅斯學院的學生得以在該校的 Dartmouth 分時作業系統 (DTSS) [11] 上
開發程式,後來人們將最原始的 BASIC 語言形式稱為 Dartmouth BASIC。
C 語言僅管也是通用的程式語言,但追溯其發展源頭,要比 BASIC 更早。在探討前,
我們需要留意以下事實,這些直接或間接影響 C 語言和 UNIX 作業系統的設計決策:
(a) Dennis M. Ritchie 和 Ken Thompson 在 Bell Labs 服務時期,都投入 Multics
作業系統的開發工作,而這個前瞻的 Multics 作業系統對後來他們開發的 UNIX
有著直接且深遠的影響;
(b) 貝爾實驗室 (Bell Laboratories),最初是貝爾系統內從事包括電話交換機、電話
電纜、半導體等電信相關技術的研究開發機構。地點位於美國新澤西州聯合縣的
Murray Hill,這是為何 UNIX 會被稱為 "New Jersey style" [1],因為 UNIX 在
Bell Labs 所在地新澤西州開發,藉此對比 Multics 一類的 "MIT approach";
(c) Dennis M. Ritchie 和 Ken Thompson 在 Bell Labs 服務的前期,後者隸屬於
AT&T 旗下,Bell Labs 研發經費主要來自美國民眾繳納電話費的附加稅,因此
美國人不需花很多錢就可取得 Bell Labs 的專利技術授權,分享 Bell Labs 的
研究成果。正因這個特殊的時空背景,UNIX 早期發展可以相當自由地在大學院校
和公司行號間分享,當然也包含 C 語言和後來的 C++ 語言;
AT&T 旗下,Bell Labs 研發經費主要來自美國民眾繳納電話費的附加稅,因此
美國人不需花很多錢就可取得 Bell Labs 的專利技術授權,分享 Bell Labs 的
研究成果。正因這個特殊的時空背景,UNIX 早期發展可以相當自由地在大學院校
和公司行號間分享,當然也包含 C 語言和後來的 C++ 語言;
(d) 1996 年 Bell Labs 及 AT&T 的裝置製造部門脫離 AT&T,成為
Lucent Technologies, Inc.,這也是為何上述 "The Development of the C
Language" 一文署名單位是 Lucent Technologies。再過 20 年,Nokia 完成對
Alcatel-Lucent 的收購,於是 Nokia 現在是 Bell Labs 的擁有者;
無論是 C 語言、B 語言,還是 Pascal 語言,都可追溯到 ALGOL 60 [4]。ALGOL 是
Algorithmic Language (演算法使用的語言) 的縮寫,提出巢狀 (nested) 結構和一
系列程式流程控制,今日我們熟知的 if-else 語法,就在 ALGOL 60 出現。ALGOL 60
和 COBOL 程式語言並列史上最早工業標準化的程式語言。
系列程式流程控制,今日我們熟知的 if-else 語法,就在 ALGOL 60 出現。ALGOL 60
和 COBOL 程式語言並列史上最早工業標準化的程式語言。
1950 年代末期,為了滿足人們駕馭電腦所需,多種程式語言被提出,但這些程式語言
往往圍繞在 UNIVAC 電腦或 IBM 700 系列大型主機上,要跨越機器間交換或分享程式
(注意,當時尚未有 software 的概念) 相當困難,無形中限制工業發展。為此,1957
年 5 月 10 日國際電腦協會 (Association for Computing Machinery; ACM) 受理
往往圍繞在 UNIVAC 電腦或 IBM 700 系列大型主機上,要跨越機器間交換或分享程式
(注意,當時尚未有 software 的概念) 相當困難,無形中限制工業發展。為此,1957
年 5 月 10 日國際電腦協會 (Association for Computing Machinery; ACM) 受理
「研究與開發適用於電腦主機無關的科學應用程式語言」的要求,並指派隔年邀請相關
學者專家在瑞士蘇黎世舉辦首度程式語言會議,ALGOL 就是這背景的產物,最初的版本
叫做 ALGOL 58,源自於 1958 年 12 月的 ALGOL 報告,這啟發了頗多學術和工業圈
學者專家在瑞士蘇黎世舉辦首度程式語言會議,ALGOL 就是這背景的產物,最初的版本
叫做 ALGOL 58,源自於 1958 年 12 月的 ALGOL 報告,這啟發了頗多學術和工業圈
的程式語言發展,包含廣泛用於美國軍事系統的 JOVIAL [5],後者廣泛用於 B-52
同溫層堡壘轟炸機、F-15 鷹式戰鬥機、F-16 戰隼戰鬥機等等。
值得一提的是,電腦科學系學生接觸到的 Backus normal form (BNF) [6] 就是 John
Backus 為了ALGOL 58 特別發展,後來 BNF 在 Peter Naur 教授的改善後,成為
Backus-Naur form,後者的命名來自知名電腦科學家 Donald Knuth 教授的建議。
Backus 為了ALGOL 58 特別發展,後來 BNF 在 Peter Naur 教授的改善後,成為
Backus-Naur form,後者的命名來自知名電腦科學家 Donald Knuth 教授的建議。
ALGOL 60 是歐洲和美國境內科學家的共同創作,在 1960 年 1 月 11 日到 16 日之
間,以下出席者:
* 歐洲: Friedrich L. Bauer (慕尼黑工業大學,在北大西洋公約組織 [NATO] 1967
年的會議上,正式探討 'software engineering' 一詞,界定今日我們所見
軟體工程的議題), Peter Naur, Heinz Rutishauser (瑞士數學家,程式語言
常見的 for 迴圈就是他提出的,最初以德語介詞 fur,後來改寫為英語 for),
Klaus Samelson (在 ALGOL 58/60 扮演關鍵角色,程式的區塊結構和透過
常見的 for 迴圈就是他提出的,最初以德語介詞 fur,後來改寫為英語 for),
Klaus Samelson (在 ALGOL 58/60 扮演關鍵角色,程式的區塊結構和透過
堆疊來處理執行資訊的手法,就是他提出的), Bernard Vauquois,
Adriaan van Wijngaarden (Edsger W. Dijkstra 的博士班指導教授,兩人並肩
為荷蘭首款電腦 ARRA 投入軟體開發。W-grammar 也是 Wijngaarden 提出),
Michael Woodger (英國國家物理實驗室 [NPL] 的電腦科學家,曾和 Alan
Turing 合作開發 Pilot ACE 電腦,也是 Ada 程式語言共同設計者);
Turing 合作開發 Pilot ACE 電腦,也是 Ada 程式語言共同設計者);
* 美國: John W. Backus, Julien Green, Charles Katz (和 Grace Hopper 准將合作
在 UNIVAC 電腦上發展程式語言), John McCarthy (人工智慧領域的開創者,
在 1958 年提出 LISP 程式語言,和 Dennis Ritchie 同樣在 2011 年過世),
Alan J. Perlis (ACM 前主席,對編譯器設計有重大影響), Joseph Henry
在 1958 年提出 LISP 程式語言,和 Dennis Ritchie 同樣在 2011 年過世),
Alan J. Perlis (ACM 前主席,對編譯器設計有重大影響), Joseph Henry
Wegstein (投入 COBOL 程式語言的發展)
這華麗的出席者清單中,許多人是 Turing Award (圖靈獎,自 1966 年設立) 得主,
源自 ALGOL 的創新尚有 1966 年 Niklaus Wirth 與 C. A. R. Hoare 以 ALGOL X 為
基礎,提出改善的 ALGOL W,而 Niklaus Wirth 的研究成果最後導至他在 1970 年創造
Pascal 程式語言。
經典的 Hello World 程式在 ALGOL 60 長得像這樣:
BEGIN
FILE F(KIND=REMOTE);
WRITE(F, <"HELLO WORLD!">);
END.
需要留意到,ALGOL 60 在語言層面沒有內建的 I/O 處理機制,所以需要由編譯器和
執行環境提供對應的 I/O 處理常式,這意味著沒有放諸四海皆準的 Hello World 通用
程式。有沒有發現這樣的限制和 C 語言很像呢?
除了 ALGOL 60,直接影響 C 語言的程式語言是 BCPL,後者是劍橋大學的 Martin
Richards 於 1967 年訪問麻省理工學院時期所設計。BCPL 程式語言的提出,是回應
同樣是劍橋大學發展的 CPL (最初的意思是 Cambridge Programming Language,後來
由於和倫敦大學合作,更名為 "Combined Programming Language",也被戲稱為
同樣是劍橋大學發展的 CPL (最初的意思是 Cambridge Programming Language,後來
由於和倫敦大學合作,更名為 "Combined Programming Language",也被戲稱為
"Cambridge Plus London")。首篇提及 CPL 的論文發表於 1963 年,其設計接近硬體
,程式設計的門檻高,而且不容易實作其編譯器,拖到 1970 年才有首個 CPL 的編譯
器。
,程式設計的門檻高,而且不容易實作其編譯器,拖到 1970 年才有首個 CPL 的編譯
器。
BCPL 對 CPL 做了簡化,這個 "B" 字母就是 "Basic" 的意思,由於 BCPL 語言設計的
精簡,所以其編譯器可在 16 KB 的空間實作出來,也是最早 Hello World 程式出現的
程式語言 [7]。最初的 BCPL 編譯器被 Rudd Canaday 博士 (貢獻早期 UNIX 檔案系統
精簡,所以其編譯器可在 16 KB 的空間實作出來,也是最早 Hello World 程式出現的
程式語言 [7]。最初的 BCPL 編譯器被 Rudd Canaday 博士 (貢獻早期 UNIX 檔案系統
的實作,在 Bell Labs 退休後,創辦了三間公司,而且在 2015 年加入矽谷的新創公司
Entefy [8],還用 Ruby on Rails 撰寫程式,真是活到老、學到老的典範!) 和 Bell
Labs 的同事移植到 Multics 作業系統和 GE-635 主機中的 GECOS 作業系統 [9]
GE-635 是 1960 年代奇異電氣 (General Electric; GE) 發展的 GE-600 系列大型主機
的一項產品 [10],前述 BASIC 就在達特茅斯學院發展的 Dartmouth 分時作業系統
(DTSS) 上開發出來,當時使用 GE-600 系列的 GE-235 大型主機,而在 1965 年,DTSS
移植到 GE-635 大型主機 (當然也包含 BASIC 語言執行環境),並長期運作,直到 1999
年才關機。1960 年代,在美蘇冷戰的時空背景,作為 Project MAC [13] 的執行者,
移植到 GE-635 大型主機 (當然也包含 BASIC 語言執行環境),並長期運作,直到 1999
年才關機。1960 年代,在美蘇冷戰的時空背景,作為 Project MAC [13] 的執行者,
AT&T, GE 及 MIT 合作開發 Multics 作業系統。在 1960 年代初期,MIT 設計的 CTSS
(Compatible Time-Sharing System) 已相當成功,因此 1964 年啟動的 Multics 作業
系統專案大幅延伸 CTSS 的成果,Multics 也採用 GE-635 大型主機。
(Compatible Time-Sharing System) 已相當成功,因此 1964 年啟動的 Multics 作業
系統專案大幅延伸 CTSS 的成果,Multics 也採用 GE-635 大型主機。
值得一書的是,GE-635 採用 36 位元的電腦架構,等等,36 顯然不是 2 的 N 次方,
這到底是什麼魔法呢?電腦最初的用途就是為了運算,並可追溯到第二次世界大戰時期,
納粹德國、英國,和美國都有電子化計算機的發展。第二次世界大戰期間,美國賓州大學
和阿伯丁彈道研究實驗室共同負責為陸軍每日提供 6 張火力表,每張表都要計算幾百條
彈道,儘管改進了微分分析儀、聘用 200 多名計算員 (以前 "computer" 一詞是指「人
」,後來才改指「電腦」), 一張火力表仍要算兩、三個月。電子計算機發展的迫切需求
摧生了 ENIAC。
納粹德國、英國,和美國都有電子化計算機的發展。第二次世界大戰期間,美國賓州大學
和阿伯丁彈道研究實驗室共同負責為陸軍每日提供 6 張火力表,每張表都要計算幾百條
彈道,儘管改進了微分分析儀、聘用 200 多名計算員 (以前 "computer" 一詞是指「人
」,後來才改指「電腦」), 一張火力表仍要算兩、三個月。電子計算機發展的迫切需求
摧生了 ENIAC。
彈道研究實驗室發起 ENIAC 電腦,專案進行一年後,當時研究氫彈的 John von Neumann
注意到這台電腦,隨後他所屬的洛斯阿拉莫斯國家實驗室深入參與 ENIAC 專案,以至於
首度測試執行是計算氫彈相關資料,而非火力表。輸出資料是 100 萬張卡片。
注意到這台電腦,隨後他所屬的洛斯阿拉莫斯國家實驗室深入參與 ENIAC 專案,以至於
首度測試執行是計算氫彈相關資料,而非火力表。輸出資料是 100 萬張卡片。
在 1946 年 2 月公布的 ENIAC,作為第一台通用電子和機械的計算機,採用 10 進位的
設計,而不是像之前就存在的德國 Z3 計算機 (1941 年 5 月發表) 和美國 ABC 計算機
(1941 年夏季發表) 那般採用二進位,另外,在大一計算機概論提及的浮點數運算表達
標準 IEEE 754 則一直到 1985 年才初步定案,那麼從第二次世界大戰到 1985 年浮點
運算標準定案之間的四十餘年,到底人們如何表示數值系統呢?
設計,而不是像之前就存在的德國 Z3 計算機 (1941 年 5 月發表) 和美國 ABC 計算機
(1941 年夏季發表) 那般採用二進位,另外,在大一計算機概論提及的浮點數運算表達
標準 IEEE 754 則一直到 1985 年才初步定案,那麼從第二次世界大戰到 1985 年浮點
運算標準定案之間的四十餘年,到底人們如何表示數值系統呢?
36 位元在很長一段時間中被廣泛採納,直到 1970 年代才逐漸式微,為何有這麼特別的
數值,是因為過去所謂的「通用」電腦主要還是做科學運算為主、人口普查和商務處理為
輔,在相關的運算模型還未充分發展的狀況下,電腦處理器的製造商儘量追求最高的數值
處理精準度。考慮到將 36 位元其中 1 個位元挪來表示正負號,其他的 35 位元若全部
拿來表示整數的話,那麼可涵蓋正負 343 億的範圍。
數值,是因為過去所謂的「通用」電腦主要還是做科學運算為主、人口普查和商務處理為
輔,在相關的運算模型還未充分發展的狀況下,電腦處理器的製造商儘量追求最高的數值
處理精準度。考慮到將 36 位元其中 1 個位元挪來表示正負號,其他的 35 位元若全部
拿來表示整數的話,那麼可涵蓋正負 343 億的範圍。
另外,由於 36 = 6 * 6,當時有個名為 six-bit character code 的表示法,也就是用
6 個位元表示字元,其中 2 的 6 次方是 64,以 DEC SIXBIT 來說,就把大寫的 A-Z,
0-9, 四則運算和常見符號 (含空白) 列入編碼,這也是為何你在電影見到早期電腦主機
的顯示畫面充斥大寫字母,因為 6 位元字元編碼只允許上述組合。再者,由於處理器
0-9, 四則運算和常見符號 (含空白) 列入編碼,這也是為何你在電影見到早期電腦主機
的顯示畫面充斥大寫字母,因為 6 位元字元編碼只允許上述組合。再者,由於處理器
採用 36 位元的架構,也就是一次可存取 6 個以 six-bit character code 編碼的字元
,早期的作業系統甚至限制檔案名稱只能有 6 個字元,以確保檔名可存放在一個 word
中 (中央處理器的資料匯流排寬度,這裡就是說 36 位元)。
,早期的作業系統甚至限制檔案名稱只能有 6 個字元,以確保檔名可存放在一個 word
中 (中央處理器的資料匯流排寬度,這裡就是說 36 位元)。
也就是說,今天我們熟知的 1 byte 等於 8 bits 這樣的「事實」,是逐步演化,就像
許多工程規格是種妥協和取捨 (trade-off),在上述 1960 年代,1 個 byte 則是
6 bits,其中 byte 就是表達單一字元的最小空間。相較於 IEEE 754 浮點數表達法在
1985 年定案,「用 8 位元表達 1 個位元組 (byte)」對應的工業標準則在 ISO/IEC
2382-1:1993 進行正式文件表述,對,你沒看錯,在 1993 年。
要表達涵蓋 0, 1, 2, ..., 7 等 8 個數字,我們需要至少 3 個位元,再對照上述的
six-bit character code,不難發現,6 = 3 + 3,也就是說,像是 DEC SIXBIT 這樣
的編碼可用 2 個 8 進位數值表示,就像 16 進位系統和 8 位元表示 byte 的關係。
考慮到 UNIX 作業系統的設計受到 Multics 作業系統的啟發,不少原本在 1964 年就
在 Multics 存在的特徵,陸續以全新 (或簡化的) 姿態存在於 UNIX 作業系統,其中
就包含存取權限。
six-bit character code,不難發現,6 = 3 + 3,也就是說,像是 DEC SIXBIT 這樣
的編碼可用 2 個 8 進位數值表示,就像 16 進位系統和 8 位元表示 byte 的關係。
考慮到 UNIX 作業系統的設計受到 Multics 作業系統的啟發,不少原本在 1964 年就
在 Multics 存在的特徵,陸續以全新 (或簡化的) 姿態存在於 UNIX 作業系統,其中
就包含存取權限。
Multics 作業系統在 GE-645 大型主機上發展,在 GE 後續的機種還引入現在我們所知
的「保護模式」,也就是透過處理器切換不同的特權等級 (privilege levels,如
Intel x86 的 protection ring),實現作業系統核心和使用者層級的執行隔離,至於
檔案系統,Multics 的特徵還比後來的 UNIX 作業系統第 1 版複雜多了,是首個實作
檔案系統層級 Access Control Lists (ACL) 的作業系統,自然就包含「可讀」、
檔案系統,Multics 的特徵還比後來的 UNIX 作業系統第 1 版複雜多了,是首個實作
檔案系統層級 Access Control Lists (ACL) 的作業系統,自然就包含「可讀」、
「可寫」,和「可執行」等基本權限。
UNIX 作業系統汲取 Multics 的養分,並且拋開 Multics 眾多笨重且難以在當時中低階
大型主機上實作的特徵,諸如動態連結和資料庫 (史上首個商業關聯性資料庫就在
Multics 作業系統上開發)。上述的八進位不僅能表示 rwx (讀-寫-執行) 等排列組合,
還能用以表示「使用者」、「同一個群組」,還有「其他人」等身份,組合起來就是典型
UNIX 檔案權限的設定,而作為開發 UNIX 作業系統而生的 C 語言,也就順勢提供八進位
的支援,終身只在 Bell Labs 工作的 Dennis Ritchie 在 1972 年到 1973 年間發展了
C 語言及其編譯器,並在 1974 年發表經典論文 "The UNIX time-sharing system" [12]
還能用以表示「使用者」、「同一個群組」,還有「其他人」等身份,組合起來就是典型
UNIX 檔案權限的設定,而作為開發 UNIX 作業系統而生的 C 語言,也就順勢提供八進位
的支援,終身只在 Bell Labs 工作的 Dennis Ritchie 在 1972 年到 1973 年間發展了
C 語言及其編譯器,並在 1974 年發表經典論文 "The UNIX time-sharing system" [12]
,彼時 UNIX 作業系統已用 C 語言重寫,並在 DEC PDP-11 硬體上驗證,而 PDP-11
硬體採用 16 位元的處理器架構。1970 年代早期設計的 PDP-8 機種定址空間是 12-bit
address space,對應的指標當然也是 12-bit 的寬度,恰好可對應 4 個 3 位元表示的
八進位數值。
address space,對應的指標當然也是 12-bit 的寬度,恰好可對應 4 個 3 位元表示的
八進位數值。
於是,UNIX (及其相容的) 作業系統和 C 語言兩者都支援八進位,像是透過 chmod 命令
指定檔案存取權限時,用到 0777 這樣八進位表示法,但 C 語言沒有內建的二進位表示
法。
指定檔案存取權限時,用到 0777 這樣八進位表示法,但 C 語言沒有內建的二進位表示
法。
Bell Labs 的 Dennis Ritchie, Ken Thompson, Rudd Canaday 等人都在 1960 年代涉入
Multics 專案的開發工作,1969 年 2 月 Bell Labs 因為不滿 Multics 發展牛步化,決
定退出和 MIT 及 GE 的合作。我們不難發現,原來開發 UNIX 和 C 語言的這票 Bell
Labs 工程人員不僅熟悉 Multics,也掌握了 BCPL 程式語言。
BCPL 是首個引入 bracket (即 { } 和 [ ] 一類的表示法) 的程式語言,還提供了單行
註解 (即 // ),BCPL 的 Hello World 程式長得像以下: [14]
get "streams.d"
external
[
Ws
]
let Main() be
[
Ws("Hello World!*N")
]
其中開頭的 get "streams.d" 就如同 C 語言的 #include,而 external [Ws] 宣告
外部函式,這裡的 Ws 是 write string 的意思,再往下就可見到熟悉的 Main(),裡頭
的 *N 是 C 語言的 '\n',即換行符號。
BCPL 在 1967 年發表,而 Ken Thompson 和 Dennis Ritchie 在 1969 年又將 BCPL
簡化,稱為 B 語言,確保得以運作在 PDP-7 [15]。BCPL, B 和 C 語言都可歸類於
ALGOL 60 風格的程式語言,格外適合系統軟體的開發,短小精悍且易於撰寫對應的
編譯器,值得注意的是,BCPL 的若干語法和語言處理機制比 B 語言或 C 語言來得
嚴謹,所以不用仰賴分號 (;) 來區分個別敘述、資料聲明,和副程式。
編譯器,值得注意的是,BCPL 的若干語法和語言處理機制比 B 語言或 C 語言來得
嚴謹,所以不用仰賴分號 (;) 來區分個別敘述、資料聲明,和副程式。
從上面的 BCPL 程式可見,BCPL 使用 global vector 機制,讓個別編譯的單元間,得
以存取到副程式和資料,程式設計者需要自行計算偏移量 (offset),也就是把重新定位
(relocation) 的責任交給程式設計師,而後期的 B 語言和 C 語言則透過連結器
以存取到副程式和資料,程式設計者需要自行計算偏移量 (offset),也就是把重新定位
(relocation) 的責任交給程式設計師,而後期的 B 語言和 C 語言則透過連結器
(linker),避開 BCPL 的 global vector 使用的不便。
"The Development of the C Language" [2] 一文詳盡地介紹 BCPL -> B -> New B ->
C 程式語言間的演化和考量點,強烈建議閱讀。
Unix 在 PDP-7 上首次運行後,1969 年 Doug McIlroy 在這之上發展第一個編譯器定義
工具 TMG,得以開發 top-down, recursive-descent 風格的編譯器。同樣在 Bell Labs
的 Doug McIlroy 和 Robert (Bob) Morris 使用 TMG,為 Multics 開發早期的 PL/I
工具 TMG,得以開發 top-down, recursive-descent 風格的編譯器。同樣在 Bell Labs
的 Doug McIlroy 和 Robert (Bob) Morris 使用 TMG,為 Multics 開發早期的 PL/I
編譯器。Ken Thompson 則開始思考,既然有了 TMG,那麼 UNIX 上應該要有專門開發系統
軟體的程式語言,於是他著手簡化 BCPL 而開發出 B 語言,並搭配 TMG 工具來產生早期
的編譯器。
軟體的程式語言,於是他著手簡化 BCPL 而開發出 B 語言,並搭配 TMG 工具來產生早期
的編譯器。
Ken Thompson 嘗試用 B 語言重寫 B 語言編譯器 (為了 self-hosting [17]),PDP-7
機器上的 B 語言編譯器不會產生機械碼,而是透過一個簡單的 stack-based 虛擬機器
來執行轉換過的 opcode,又因為 PDP-7 硬體太慢又有嚴苛的空間限制,所以除了B 語言
執行環境外,只有很少的程式能用 B 語言開發。後來 Dennis Ritchie 出手相助,改寫
B 語言編譯器,允許輸出 GE-635 機械碼,也就是成為真正能用的編譯器,這也是 B
執行環境外,只有很少的程式能用 B 語言開發。後來 Dennis Ritchie 出手相助,改寫
B 語言編譯器,允許輸出 GE-635 機械碼,也就是成為真正能用的編譯器,這也是 B
語言編譯器支援 GCOS 作業系統的過程。
在 1970 年,這群 Bell Labs 的高手終於獲得 DEC PDP-11 主機,這個 16-bit 處理器
對於日後 UNIX 發展相當重要:他們遇到硬體相容性的議題,萌生再次發展新的程式語言
的念頭。原本 BCPL 和 B 語言都是 word-addressed,也就是無論處理什麼資料,都對應
到硬體資料匯流排的寬度 (即 word),但在 PDP-11 完全不是這回事,PDP-11 的設計是
byte 導向,因此 Dennis Ritchie 在 1971 年著手在 B 語言增添 char 型態,並改寫
原本不能產生真正機械碼的設計,這樣擴充過的 B 語言被稱為 "New B",簡稱 NB。
對於日後 UNIX 發展相當重要:他們遇到硬體相容性的議題,萌生再次發展新的程式語言
的念頭。原本 BCPL 和 B 語言都是 word-addressed,也就是無論處理什麼資料,都對應
到硬體資料匯流排的寬度 (即 word),但在 PDP-11 完全不是這回事,PDP-11 的設計是
byte 導向,因此 Dennis Ritchie 在 1971 年著手在 B 語言增添 char 型態,並改寫
原本不能產生真正機械碼的設計,這樣擴充過的 B 語言被稱為 "New B",簡稱 NB。
對應的 B 程式語言手冊可參照:
* "Users' Reference to B" [18]: 針對 16-bit 的 PDP-11
* "USERS' REFERENCE TO B ON MH-TSS" [19]: 針對 36-bit 的 Honeywell 6000 系列
[20] 大型主機
New B 沒有存在多久,很快就被後續的 C 語言取代,後者重新定義完整的資料類別,在
C 語言之前的 BCPL 和 B 語言都沒有型態 (type) 的觀念,但 C 語言明確規範,卻又
不會因為類別系統太複雜,導致對應的 C 編譯器不容易實作,這樣的設計也反映到指標
的變革。
C 語言之前的 BCPL 和 B 語言都沒有型態 (type) 的觀念,但 C 語言明確規範,卻又
不會因為類別系統太複雜,導致對應的 C 編譯器不容易實作,這樣的設計也反映到指標
的變革。
最後,引用 Dennis M. Ritchie 的話來解釋 C 語言的成功:
> C is quirky, flawed, and an enormous success. While accidents of history
> surely helped, it evidently satisfied a need for a system implementation
> language efficient enough to displace assembly language, yet sufficiently
> abstract and fluent to describe algorithms and interactions in a wide
> variety of environments.
(C 語言很彆扭又缺陷重重,卻異常成功。固然有歷史的巧合推波助瀾,但也的確是因
它能滿足於系統軟體實作的程式語言期待:既有相當的效率來取代組合語言,又可充分
達到抽象且流暢,能用於描述在多樣環境的演算法。」
在 C 語言之前就存在的「直系」親屬:
* A: ALGOL 60
* B: BCPL, B
就語法來說,C 語言的確長得很「古怪」,不若之前那些程式語言貼近數學表示法或英文
書寫方式,但得益於 C 語言做的許多取捨,可成功地運作在多種不同的硬體環境、支援
多樣的作業系統,從而讓 UNIX (或相容的) 作業系統及 C 語言編譯器的組合,深刻地
影響你我所處的數位世界。
書寫方式,但得益於 C 語言做的許多取捨,可成功地運作在多種不同的硬體環境、支援
多樣的作業系統,從而讓 UNIX (或相容的) 作業系統及 C 語言編譯器的組合,深刻地
影響你我所處的數位世界。
如果你讀到這裡,還對 C 語言和 UNIX 作業系統充滿興致,那麼不要錯過「Linux 核心
設計」課程:
http://wiki.csie.ncku.edu.tw/linux/schedule
這裡有大量線上教材、對 Linux 核心和相關實作的探討,還有跟你一同學習的小夥伴。
[0] 正妹教你說客語:
[0] 正妹教你說客語:
https://www.facebook.com/crystallin1288/videos/10152530692711925/
[2] https://www.bell-labs.com/usr/dmr/www/chist.html
[3] 出自 Richard P. Gabriel 的 "Worse is better":
https://en.wikipedia.org/wiki/Worse_is_better
[4] https://en.wikipedia.org/wiki/ALGOL_60
[5] https://en.wikipedia.org/wiki/JOVIAL
[6] https://en.wikipedia.org/wiki/Backus–Naur_form
[7] http://www.catb.org/jargon/html/B/BCPL.html
[8] https://www.prnewswire.com/news-releases/ \
All News Releases Distributed by PR Newswire
Current news releases distributed by PR Newswire including multimedia press releases, investor relations and disclosure, and company news. ...
Current news releases distributed by PR Newswire including multimedia press releases, investor relations and disclosure, and company news. ...
[9] https://en.wikipedia.org/wiki/General_Comprehensive_Operating_System
[10] https://en.wikipedia.org/wiki/GE-600_series
[11] DTSS: https://en.wikipedia.org/wiki/Dartmouth_Time_Sharing_System
[12] UNIX: https://dl.acm.org/citation.cfm?id=361061
[13] Project MAC: https://multicians.org/project-mac.html
Project MAC
The history of MIT Project MAC, 1963-2014. ...
The history of MIT Project MAC, 1963-2014. ...
[15] 重建過的 B 語言編譯器和在 PDP-7 上運作的 UNIX 原始程式碼,可見:
https://github.com/DoctorWkt/pdp7-unix
GitHub - DoctorWkt/pdp7-unix: A project to resurrect Unix on the PDP-7 from a scan of the original assembly code
A project to resurrect Unix on the PDP-7 from a scan of the original assembly code - DoctorWkt/pdp7-unix ...
A project to resurrect Unix on the PDP-7 from a scan of the original assembly code - DoctorWkt/pdp7-unix ...
b-compiler/pdp7 at master · sergev/b-compiler · GitHub
B language compiler. Contribute to sergev/b-compiler development by creating an account on GitHub. ...
B language compiler. Contribute to sergev/b-compiler development by creating an account on GitHub. ...
TMG
The source of Bob McClure's TMG. ...
The source of Bob McClure's TMG. ...
[18] https://www.bell-labs.com/usr/dmr/www/kbman.html
[19] https://www.bell-labs.com/usr/dmr/www/bref.html
[20] https://en.wikipedia.org/wiki/Honeywell_6000_series
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.246.163
※ 文章代碼(AID): #1SdKXN4t (Gossiping)
※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1553811543.A.137.html
推 : 為什麼要這麼認真1F 03/29 06:21
推 : 太認真了只能推2F 03/29 06:23
推 : 有神先拜3F 03/29 06:24
→ : @dohow, 我只是為了招生打廣告,順便回覆鄉民提問4F 03/29 06:24
推 : 為什麼連中文都看不懂5F 03/29 06:24
→ : 我文組,我驕傲!沈浸在程式語言發展的歷史中,好像程式6F 03/29 06:25
→ : 設計也會變強 (笑)
→ : 設計也會變強 (笑)
推 : 認真 推8F 03/29 06:26
→ : @tommy421, 大概是我刪去太多細節,讓你無從理解,之後補上9F 03/29 06:27
推 : 太猛了吧 早起回覆網友問題10F 03/29 06:30
推 : 竟然是jserv!我先跪惹11F 03/29 06:30
推 : QQ12F 03/29 06:31
→ : @ttff, 因為一旁的女兒睡不好,我照顧她的時候,練習打字13F 03/29 06:31
→ : B語言的資訊: https://www.lysator.liu.se/c/msb-on-b.html
→ : B語言的資訊: https://www.lysator.liu.se/c/msb-on-b.html
推 : 推15F 03/29 06:38
推 : 推16F 03/29 06:39
推 : 語言王?17F 03/29 06:40
推 : 先來推不然別人會以為我看不懂18F 03/29 06:49
推 : 老師早19F 03/29 06:50
推 : 八卦清流 發文當paper寫20F 03/29 06:51
推 : 有神先拜21F 03/29 06:51
推 : 太認真囉22F 03/29 06:52
推 : 推23F 03/29 06:54
※ 編輯: jserv (140.116.246.163), 03/29/2019 06:57:49推 : 推24F 03/29 06:55
推 : 推認真25F 03/29 06:55
推 : 老師早!26F 03/29 06:55
推 : 有神快拜27F 03/29 06:56
推 : 快點推 不然別人以為我看不懂28F 03/29 06:59
推 : 黃老師一大早來八卦板發專業文29F 03/29 06:59
推 : 推30F 03/29 07:01
推 : 老師早31F 03/29 07:06
推 : 讚!32F 03/29 07:08
推 : 嗯嗯嗯嗯嗯33F 03/29 07:08
推 : 早安34F 03/29 07:17
推 : 承蒙你35F 03/29 07:18
推 : 有神快拜!36F 03/29 07:18
推 : 你不要這麼專業好不好,推37F 03/29 07:19
推 : 太長= =晚點看38F 03/29 07:19
推 : 娘子,快出來看神啊!39F 03/29 07:20
推 : 神串留名40F 03/29 07:21
推 : 早~41F 03/29 07:23
推 : 好神 原來真的有 A,B語言42F 03/29 07:25
推 : 有神快推!43F 03/29 07:25
→ qazsedcft …
推 : 早起拜神45F 03/29 07:28
推 : 大神出現了 快推46F 03/29 07:29
推 : 有神快拜47F 03/29 07:30
推 : 好長...48F 03/29 07:30
→ : 早起拜一個www49F 03/29 07:33
推 : 一早仙氣煥發原來是這篇 邊吃早餐邊看好了50F 03/29 07:33
推 : 居然釣到黃老師回文了XD51F 03/29 07:33
推 : 你這是不是沒睡啊XDD52F 03/29 07:33
推 : 太厲害了 我都看不懂53F 03/29 07:34
推 : 推 來聽講古囉54F 03/29 07:34
→ : 沒睡的機率比較大XD55F 03/29 07:34
推 : 推客語也推文章56F 03/29 07:36
推 : 竟然是jserv,先推再看57F 03/29 07:37
推 : 有看有推58F 03/29 07:38
推 : 看的時候想說這是從哪抄來的,怎麼這麼詳細,往上一59F 03/29 07:38
→ : 拉才發現是Jserv,ORZ
→ : 拉才發現是Jserv,ORZ
推 : 這就叫專業61F 03/29 07:43
推 : 神了,小弟我文組,但也很想學程式語言… 打算從 Python62F 03/29 07:43
→ : 學起,適合嗎?
→ : 學起,適合嗎?
推 : 資工歷史系?64F 03/29 07:43
推 : 先跪了65F 03/29 07:46
推 : 我媽問我幹嘛一大早跪著66F 03/29 07:48
推 : 被釣魚67F 03/29 07:51
推 : 老師早XD68F 03/29 07:53
推 : 開完後我對客家語又有更深一層的了解69F 03/29 07:54
推 : U問70F 03/29 07:54
推 : 推神人71F 03/29 07:54
推 : 只能推了72F 03/29 07:54
推 : 我文組的有人能翻譯嗎?73F 03/29 07:56
推 : 老師安安74F 03/29 07:57
推 : 看內文想說懂這麼多該不會是jserv吧,結果還真的是75F 03/29 07:58
推 : 推76F 03/29 07:59
推 :77F 03/29 08:01
推 : 推78F 03/29 08:03
推 : 推 認真文79F 03/29 08:04
推 : 推,看不懂,但有看到外部「韓式」,是「函式」嗎?80F 03/29 08:04
推 : 推推 最近在看老師的新課程81F 03/29 08:04
推 : 推82F 03/29 08:06
推 : 推83F 03/29 08:06
推 : 謝謝大神老師,有機會希望能到成大跟你學習84F 03/29 08:07
推 : 還不推爆?85F 03/29 08:08
推 : 我看到外部「韓式」 腦袋突然浮現出韓式泡菜86F 03/29 08:09
→ : 我肯定是餓了xD
→ : 我肯定是餓了xD
推 : 有神快拜。88F 03/29 08:09
推 : 推89F 03/29 08:12
推 : 簡單講就是有A語言B語言90F 03/29 08:12
推 : 請收下我的膝蓋91F 03/29 08:12
推 : 也太屌92F 03/29 08:12
草蜢 - 限時專送 ABC / Express Delivery ABC (by Grasshopper) - YouTube 1990年,改編日文歌曲 ABC (by 少年隊) ======================================= 作詞:劉虞瑞,作曲:筒美京平,編曲:杜自持 =========================...
→ : 程式語言老師,真強者,我連VB都搞不定94F 03/29 08:13
推 : 推95F 03/29 08:13
推 : 有神快拜96F 03/29 08:14
推 : 先推97F 03/29 08:16
推 : jserv老師太認真了XD98F 03/29 08:16
推 : 推99F 03/29 08:16
推 : 嗯嗯嗯 跟我想的一樣100F 03/29 08:17
推 : 推101F 03/29 08:19
推 : 推102F 03/29 08:20
推 : 大神推103F 03/29 08:20
推 : 推,太專業了(已跪~104F 03/29 08:21
推 : 趕快推免得別人以為我看不懂105F 03/29 08:22
→ : 講了老半天,卻沒有提到C 語言最重要的特徵106F 03/29 08:23
推 : 有神快拜XD107F 03/29 08:24
推 : 推108F 03/29 08:24
推 : 推109F 03/29 08:25
推 : 神先推110F 03/29 08:25
※ 編輯: jserv (140.116.246.163), 03/29/2019 08:27:37推 : 文組表示崩潰111F 03/29 08:27
推 : 推!112F 03/29 08:27
推 : 有神先拜113F 03/29 08:27
→ : @feedback, 感謝告知,已修正114F 03/29 08:28
推 : 推115F 03/29 08:28
→ : @Arbin, 韓國人這十幾年對作業系統有重要影響,有機會再談116F 03/29 08:29
推 : fortran是哪邊的?記得很早就有啦117F 03/29 08:29
→ : @LightWorker, 這樣才能引導讀者看最後面的廣告呀118F 03/29 08:29
→ : 應該說是最早的119F 03/29 08:29
推 : 推120F 03/29 08:30
推 : 大師會這麼強就是用功的結果!!121F 03/29 08:30
推 : 太長了啦幹122F 03/29 08:30
推 : 你到底在認真啥啦123F 03/29 08:30
推 : 666124F 03/29 08:31
推 : 推專業125F 03/29 08:31
→ : @fragmentwing, ALGOL提出的用意之一,是修正FORTRAN已有的126F 03/29 08:32
→ : 問題,例如結構化設計的不足
→ : 問題,例如結構化設計的不足
推 : 老師早!128F 03/29 08:32
推 : 有神~129F 03/29 08:34
→ : 寫得這麼複雜 我怎麼看的懂…130F 03/29 08:34
推 : 跪了131F 03/29 08:35
推 : 老師早啊!132F 03/29 08:35
推 : 解答疑惑再推 這麼說 fortran最早的do和if沒法雙重133F 03/29 08:36
→ : 迴圈?
→ : 迴圈?
→ : Fortran是人類歷史第一個高階電腦語言, IBM 的John135F 03/29 08:36
→ : Backus 還因此拿到Turing Award
→ : Backus 還因此拿到Turing Award
推 : 我竟然看完了....老師早 期末白天手下留情!137F 03/29 08:37
推 : 推138F 03/29 08:37
→ : 拜託139F 03/29 08:37
推 : 推140F 03/29 08:38
推 : 推一下,假裝看得懂141F 03/29 08:39
→ : 很多人以為指標是C語言主要特性,但其實1967年的BCPL就有142F 03/29 08:40
推 : 大推143F 03/29 08:40
推 : 推144F 03/29 08:41
→ : 指標的設計,不過BCPL pointer(或BPTR)只能word導向操作145F 03/29 08:41
→ : byte-oriented pointer在1970年代是很新鮮的設計(取捨)
→ : byte-oriented pointer在1970年代是很新鮮的設計(取捨)
推 : 幹,怎麼那麼長啦…總之跟我想說的差不多147F 03/29 08:45
推 : 早148F 03/29 08:45
→ : @fragmentwing, Backus建立的團隊發展FORTRAN後,吸取過往149F 03/29 08:46
推 : 老師早150F 03/29 08:46
→ : 語言規範不精準的教訓,才有後來BNF,這是他在ALGOL 58/60151F 03/29 08:46
推 : 推詳解152F 03/29 08:47
→ : 的重大貢獻,自此也直接影響後來程式語言的規範及面貌153F 03/29 08:47
推 : 推154F 03/29 08:48
推 : 老師早155F 03/29 08:48
推 : 跟我想的一樣156F 03/29 08:48
推 : 推認真文158F 03/29 08:50
推 : 推159F 03/29 08:50
推 : 推老師 等等 原來是業配文...160F 03/29 08:50
推 : 太長了 但還是推161F 03/29 08:50
推 : 推162F 03/29 08:55
推 : 推163F 03/29 08:55
推 : 還是看不懂164F 03/29 08:55
推 : 推大神165F 03/29 08:56
→ : 太艱深了,按到送出浪費一行空間……orz166F 03/29 08:56
推 : 好認真167F 03/29 08:58
→ : C語言要學得好,data structure 跟計概,計組的底子168F 03/29 08:59
→ : 非常重要,否則會只知其然,不知其所以然,這也是去
→ : 坊間補習班補習的弊病,到業界根本不能用.
→ : 非常重要,否則會只知其然,不知其所以然,這也是去
→ : 坊間補習班補習的弊病,到業界根本不能用.
推 : 大神必推171F 03/29 09:00
推 : 快點推,不然會被笑不懂172F 03/29 09:00
推 : 哇……太神啦173F 03/29 09:01
推 : 看ID先拜174F 03/29 09:02
→ : 語言是工具,邏輯,演算法,系統架構才是真功夫,這175F 03/29 09:02
→ : 也是我對鼓吹小學生學程式設計大搖其頭的原因
→ : 也是我對鼓吹小學生學程式設計大搖其頭的原因
推 : 朝聖177F 03/29 09:04
推 : 老師早178F 03/29 09:05
推 : 推179F 03/29 09:07
推 : 你是計概教授吧180F 03/29 09:10
→ : 如果內功要更強大,formal language, compiler, sys181F 03/29 09:10
推 : 哈哈哈哈哈 推推182F 03/29 09:10
→ : tem programming, OS更是要必修183F 03/29 09:10
推 : 釣到大神啦184F 03/29 09:12
噓 : 的獨立守護者我大DPP這麼拉機跟賣國賊KMT一樣爛所以185F 03/29 09:12
推 : Fortran在黑人女計算員幫NASA上太空那部電影有提到186F 03/29 09:12
推 : 不推不行187F 03/29 09:12
推 : 謝謝大大分享 我提口試了188F 03/29 09:13
推 : 推!189F 03/29 09:13
→ : 那台機器就是IBM早期的系統,程式是FORTRAN, 打在卡190F 03/29 09:16
→ : 片上,用讀卡機輸入
→ : 片上,用讀卡機輸入
推 : 跪了192F 03/29 09:16
推 : <(_ _)>193F 03/29 09:17
推 : 大神!194F 03/29 09:18
推 : 跪著看195F 03/29 09:20
推 : 先跪再看~196F 03/29 09:24
推 : QQ好長197F 03/29 09:28
推 : 太長了吧 專業給推198F 03/29 09:30
推 : 問問小英統獨是不是假議題???199F 03/29 09:32
→ : 沒有基本功,直接學C語言,最常看到的是ㄧ看到**就200F 03/29 09:33
→ : 一臉茫然,解釋了老半天還是一知半解,然後亂用,ru
→ : n出來結果不對,自己根本不知道從何debug起,其他人
→ : 要幫忙也是痛苦萬分
→ : 一臉茫然,解釋了老半天還是一知半解,然後亂用,ru
→ : n出來結果不對,自己根本不知道從何debug起,其他人
→ : 要幫忙也是痛苦萬分
→ : 抱歉推錯204F 03/29 09:34
推 : 推205F 03/29 09:34
推 : 請問guts頻道上的是老師嗎206F 03/29 09:39
推 : ....................................207F 03/29 09:41
推 : 原本想說些什麼,還是算了先跪再說208F 03/29 09:42
推 : 一大早就po專業文是在幹什麼?209F 03/29 09:42
推 : 已跪210F 03/29 09:42
推 : 認真推211F 03/29 09:43
推 : 看不懂= =....212F 03/29 09:46
推 : 嗯嗯 講得還OK 中間那幾段再補充幾句會更好213F 03/29 09:47
推 : 早起拜神214F 03/29 09:50
推 : 看不懂啦QQ215F 03/29 09:51
推 : 老師又在回廢文了xd216F 03/29 10:00
推 : 很優秀的整理,推217F 03/29 10:02
推 : 幹 太神218F 03/29 10:04
推 : 不行 這文太認真 要給推219F 03/29 10:07
推 : 快拜快拜220F 03/29 10:13
推 : 跪著看老師文章221F 03/29 10:14
推 : 老師嗨222F 03/29 10:31
推 : 這是論文內容吧 太長了223F 03/29 10:34
推 : 只好推了224F 03/29 10:54
推 : 教授早225F 03/29 10:56
推 : 有神快拜226F 03/29 10:56
推 : 推!227F 03/29 11:01
推 : 不是assemble語言,再來basic然後C語言嗎228F 03/29 11:10
推 : 推229F 03/29 11:13
推 : 感謝 長知識!!光一個computer是指人就可以跟朋友屁很久了230F 03/29 11:16
推 : 推231F 03/29 11:24
推 : 有神快拜232F 03/29 11:26
推 : C語言歷史學家4ni?233F 03/29 11:33
推 : 整個看不懂…234F 03/29 11:37
推 : 這篇是文言文嗎235F 03/29 11:47
推 : 推 J老師好認真236F 03/29 11:52
推 : 早安...237F 03/29 11:58
推 : 太神啦238F 03/29 12:04
推 : 推239F 03/29 12:04
推 : 電腦其實是外星人科技吧240F 03/29 12:15
推 : 認真看完還是不懂...術業有專攻...老師早!有神快拜241F 03/29 12:20
推 : 老師被釣到了 推一下Linux 課程242F 03/29 12:25
推 : END = =243F 03/29 12:27
推 : ..244F 03/29 12:28
推 : 很長用心先推245F 03/29 12:41
推 : 推246F 03/29 12:46
推 : 推247F 03/29 12:48
推 : 推248F 03/29 12:53
推 : 請問有人可翻一下嗎,這外文看不懂249F 03/29 12:57
推 : 推250F 03/29 12:57
推 : 推j大 希望幾個月之後可以看到本人251F 03/29 13:07
推 : 推253F 03/29 13:13
→ : @Dreamerrr, 歡迎攻讀博士班 (咦?)254F 03/29 13:14
推 : 這一篇文章值 746 Ptt幣255F 03/29 13:19
→ : @iambillno1la, 感謝提醒,那我繼續等相關主題來回覆256F 03/29 13:19
推 : 666257F 03/29 13:21
→ : @nixing, 上面有幾個段落是從我的筆記本複製,沒計算到258F 03/29 13:23
→ : @icelagoon, 用程式寫文言文首推唐鳳 =>
→ : ::: https://github.com/audreyt/lingua-sinica-perlyuyan
→ : @icelagoon, 用程式寫文言文首推唐鳳 =>
→ : ::: https://github.com/audreyt/lingua-sinica-perlyuyan
GitHub - audreyt/lingua-sinica-perlyuyan: Perl in Classical Chinese in Perl
Perl in Classical Chinese in Perl. Contribute to audreyt/lingua-sinica-perlyuyan development by creating an account on GitHub. ...
Perl in Classical Chinese in Perl. Contribute to audreyt/lingua-sinica-perlyuyan development by creating an account on GitHub. ...
→ : 抱歉我智商不足,無法理解 @audreyt 的大作261F 03/29 13:33
→ : @henryyeh0731, 直接跟我說哪一段應該重寫就好
→ : @g3120c, 人在 116,入境隨俗發廢文
→ : @henryyeh0731, 直接跟我說哪一段應該重寫就好
→ : @g3120c, 人在 116,入境隨俗發廢文
推 : 專業264F 03/29 13:58
推 : 猛265F 03/29 14:09
→ : 看不是很懂但是給推266F 03/29 14:18
推 : 豪猛喔XDD267F 03/29 15:05
推 : 先推不然268F 03/29 15:28
推 : 跪了269F 03/29 15:40
推 : ……270F 03/29 16:04
推 : 推271F 03/29 16:16
推 : 推272F 03/29 16:33
推 : ok我懂了!273F 03/29 16:53
推 : 不推不行~~~274F 03/29 17:08
推 : 推 錯字 「摧」生275F 03/29 17:18
推 : 明明有?276F 03/29 17:30
推 : 知識好文277F 03/29 18:36
推 : 老師好278F 03/29 18:43
推 : push先推再看279F 03/30 01:48
推 : 高級業配...從發問鋪梗到回應揭露產品,一氣喝成280F 03/30 02:17
推 : 太神了281F 03/30 03:02
推 : 推推282F 03/30 09:54
推 : 推283F 03/30 11:17
推 : 太長,看不完。284F 03/30 19:43
推 : 太神啦285F 04/02 21:51
--
※ 看板: terievv 文章推薦值: 0 目前人氣: 0 累積人氣: 152
回列表(←)
分享