十一【理解】計(jì)算機(jī)語(yǔ)言
1.語(yǔ)言是什么?
在日常生活中,語(yǔ)言是我們?nèi)伺c人之間溝通交流的一種方式。
既然語(yǔ)言有溝通交流的功能,那么:我們?cè)趺锤?jì)算機(jī)進(jìn)行交流呢?
我們的計(jì)算機(jī)只認(rèn)識(shí)電,因?yàn)樾枰咫姡?jì)算機(jī)才能啟動(dòng)。所以,如果我們想跟計(jì)算機(jī)交流,就是通過(guò)電流來(lái)交流的!
在計(jì)算機(jī)中,電流有強(qiáng)有弱,所以我們稱之為高低電平,所以如果我們跟計(jì)算機(jī)交流可以通過(guò)控制電流的強(qiáng)弱進(jìn)行。但是,我們覺(jué)得每次說(shuō)高電平,低電平說(shuō)起來(lái)很麻煩,所以干脆就用0和1來(lái)分別代表低電平和高電平(這也是我們傳說(shuō)中的二進(jìn)制)。
再然后,我們通過(guò)0和1的各種不同組合,約定出計(jì)算機(jī)設(shè)備該完成什么功能。就像你跟你女朋友約定用數(shù)字1314代表一生一世,用520代表我愛(ài)你一樣,所以此時(shí),我們把這種跟計(jì)算機(jī)以0,1的對(duì)話方式稱之為機(jī)器語(yǔ)言。
如,用機(jī)器語(yǔ)言描述1+1的方式為00000001
00000110001100000001 (不準(zhǔn)確)
再再然后,人們覺(jué)得用01的不同組合如:0010011100011011010010000這樣的方式看起來(lái)太復(fù)雜太不容易理解,于是聰明又智慧的人們兒又發(fā)明了一種更接近人類語(yǔ)言的跟計(jì)算機(jī)交流的語(yǔ)言:匯編語(yǔ)言
mov ax,1
add
ax,1
匯編語(yǔ)言使用了一些日常生活中的英文單詞如:add
jump等用來(lái)代表不同的01組合,因此大大簡(jiǎn)化了跟計(jì)算機(jī)交流開(kāi)發(fā)新功能的方式。
但是呢,因?yàn)閰R編語(yǔ)言對(duì)硬件依賴大,不同的CPU架構(gòu)需要編寫(xiě)不同的匯編指令,再加上其語(yǔ)言也不是特別接近人類語(yǔ)言所以人們又開(kāi)始思考:能不能使計(jì)算機(jī)語(yǔ)言再更加接近人類語(yǔ)言呢?
再再再然后,于是高級(jí)語(yǔ)言誕生了!!
此時(shí)高級(jí)語(yǔ)言描述1+1就為:1 + 1
無(wú)論是匯編語(yǔ)言還是高級(jí)語(yǔ)言,其本質(zhì)最終都是轉(zhuǎn)換為機(jī)器語(yǔ)言來(lái)運(yùn)行的。
但是流程有所不同:
匯編語(yǔ)言:
匯編 --> 匯編器 --> 機(jī)器語(yǔ)言
高級(jí)語(yǔ)言(以C為例):
C語(yǔ)言--> 編譯器--> 匯編--> 匯編器--> 機(jī)器語(yǔ)言
十二【了解】C語(yǔ)言的前世今生
1、C語(yǔ)言的誕生
1969年,那是一個(gè)春天……在貝爾實(shí)驗(yàn)室里有一個(gè)叫做Ken Thompson的人,他長(zhǎng)得雖然沒(méi)有果凍妹紙可愛(ài),但是人極度聰明。
當(dāng)時(shí)貝爾實(shí)驗(yàn)室正在跟美國(guó)麻省理工大學(xué)以及美國(guó)通用電氣公司合伙開(kāi)發(fā)一款操作系統(tǒng)叫Multics,然后Ken Thompson便利用空閑時(shí)間基于Multics上開(kāi)發(fā)了一款游戲叫<Star Travel>,可是怎么著?
最終幾大公司覺(jué)得Multics項(xiàng)目進(jìn)度太慢,而且不看好前景,于是突然撤資不打算搞了。Ken Thompson好不容易寫(xiě)的游戲都要沒(méi)地方運(yùn)行了,他可不愿意就此放棄,于是找來(lái)貝爾實(shí)驗(yàn)室里幾乎要報(bào)廢的一臺(tái)電腦“PDP-7”,想把游戲移植到這臺(tái)電腦上,但是沒(méi)有系統(tǒng)怎么辦?
這難不倒他,他打算干脆自己寫(xiě)一個(gè)適用于這臺(tái)電腦的操作系統(tǒng),于是他把Multics項(xiàng)目中的一些思想和一些自己想的一些功能加入到開(kāi)發(fā)里面,憑著這股子蠻勁,終于研發(fā)成功,系統(tǒng)名字叫UNIX。
但是一開(kāi)始,這套系統(tǒng)是用匯編語(yǔ)言寫(xiě)的,然而用匯編語(yǔ)言寫(xiě)的操作系統(tǒng)十分難以調(diào)試和改進(jìn),于是Thompson意識(shí)到需要一種更高級(jí)的編程語(yǔ)言來(lái)負(fù)責(zé)完成UNIX系統(tǒng)未來(lái)的開(kāi)發(fā),于是乎,他設(shè)計(jì)出了一種語(yǔ)言叫B語(yǔ)言(在BCPL語(yǔ)言基礎(chǔ)上發(fā)展來(lái)的)
再然后,貝爾實(shí)驗(yàn)室意識(shí)到UNIX可能會(huì)成為一款十分優(yōu)秀的系統(tǒng),于是派了一個(gè)叫Dennis Ritchie的人(注意,這才是主角)也加入到了UNIX的開(kāi)發(fā)中!
并且在1970年為UNIX項(xiàng)目爭(zhēng)取到一臺(tái)PDP-11計(jì)算機(jī),但是這時(shí)候Dennis Ritchie發(fā)現(xiàn)B語(yǔ)言十分不適合用來(lái)編寫(xiě)適合PDP-11計(jì)算機(jī)的UNIX系統(tǒng),
因此Dennis Ritchie決定開(kāi)發(fā)B語(yǔ)言的升級(jí)版,一開(kāi)始他覺(jué)得這門語(yǔ)言肯定會(huì)火,所以起來(lái)了個(gè)十分牛逼的名字:NB(New B),
再到后來(lái),隨著對(duì)NB語(yǔ)言的不斷改進(jìn),發(fā)現(xiàn)這門新語(yǔ)言已經(jīng)越來(lái)越脫離B語(yǔ)言,于是他決定改名叫C語(yǔ)言(取BCPL中的第二個(gè)字符)。
一直到1973年,C語(yǔ)言足夠穩(wěn)定,Dennis Ritchie就用C語(yǔ)言來(lái)重新編寫(xiě)UNIX系統(tǒng)了。重新編寫(xiě)過(guò)的UNIX系統(tǒng)有一個(gè)非常重要的好處:可移植性!
要知道,在那之前不管是什么系統(tǒng),都是得為電腦專門匹配設(shè)計(jì)的!!而現(xiàn)在,因?yàn)槿碌腢NIX用C語(yǔ)言編寫(xiě),當(dāng)其他計(jì)算機(jī)想要使用UNIX操作系統(tǒng)時(shí),只需要為其他類型計(jì)算機(jī)編寫(xiě)C語(yǔ)言編譯器就行了!
C語(yǔ)言的誕生是偶然的,它僅僅只是UNIX系統(tǒng)的附加產(chǎn)物。但是也絲毫掩蓋不了它王者的地位,看看2014年的語(yǔ)言排行榜:歷經(jīng)40多年的洗禮,多少語(yǔ)言隨大浪東去,輝煌一陣又迅速湮滅,唯有C語(yǔ)言,傲視群雄!
2、C語(yǔ)言的標(biāo)準(zhǔn)化
由于C語(yǔ)言原本就是用來(lái)編寫(xiě)傳統(tǒng)的由匯編語(yǔ)言編寫(xiě)的應(yīng)用程序,所以用C語(yǔ)言編寫(xiě)的程序十分的高效,另外又由于C語(yǔ)言的編譯器規(guī)模小并且還容易編寫(xiě),所以當(dāng)C語(yǔ)言橫空出世后已經(jīng)超越了UNIX的界限,運(yùn)行在不同的操作系統(tǒng)下的多種類型的計(jì)算機(jī)都開(kāi)始使用C語(yǔ)言編譯器。
但是,由于缺乏編譯器翻譯標(biāo)準(zhǔn),因此不同的計(jì)算機(jī)常常會(huì)根據(jù)某些特性做不同的處理結(jié)果,如果這個(gè)時(shí)候,放任這種情況的出現(xiàn)最終會(huì)導(dǎo)致C語(yǔ)言有各種分支,也即不同的“方言”。
在這個(gè)時(shí)候,美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)(ANSI)看不下去了,決定出手為C語(yǔ)言制定標(biāo)準(zhǔn)。
正是因?yàn)闃?biāo)準(zhǔn)的出現(xiàn),才防止了C語(yǔ)言沒(méi)有被分裂成不兼容的多種分支!
附:以下是C語(yǔ)言幾個(gè)重要標(biāo)準(zhǔn)的時(shí)間表
1983年,美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)(ANSI)成立了一個(gè)委員會(huì),根據(jù)C語(yǔ)言問(wèn)世以來(lái)各種版本對(duì)C語(yǔ)言
的發(fā)展和擴(kuò)充,制定了第一個(gè)C語(yǔ)言標(biāo)準(zhǔn)草案(83 ANSI C)。
1989年,ANSI公布了一個(gè)完整的C語(yǔ)言標(biāo)準(zhǔn)—ANSI
X3.159-1989(常稱ANSI C,或C89)。
1990年,國(guó)際標(biāo)準(zhǔn)化組織ISO(International
Standard Organization) 接受C89作為國(guó)際標(biāo)準(zhǔn)ISO/IEC 9899:1990,它和ANSI的C89基本上是相同的。
1995年,ISO對(duì)C90作了一些修訂,
1999年,ISO又對(duì)C語(yǔ)言標(biāo)準(zhǔn)進(jìn)行修訂,在基本保留原來(lái)的C語(yǔ)言特征的基礎(chǔ)上,針對(duì)應(yīng)用的需要,增加了一些功能,尤其是C++中的一些功能,命名為
ISO/IEC 9899:1999。
2001、2004年先后進(jìn)行了兩次技術(shù)修正(TC1和TC2)。
ISO/IEC
9899:1999(及其技術(shù)修正)被稱為 C99。
C99是C89(及1995基準(zhǔn)增補(bǔ)1)的擴(kuò)充。
C11 :在2011年12月,ANSI
采納了 ISO/IEC 9899:2011 標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)通常即C11,它是C程序語(yǔ)言的最新標(biāo)準(zhǔn)