摘 要:C語(yǔ)言是作為一個(gè)程序員來(lái)說(shuō),必須要掌握也是最基礎(chǔ)的編程語(yǔ)言。在編程語(yǔ)言發(fā)展的歷史長(zhǎng)河里,出現(xiàn)了各種各樣的編程語(yǔ)言,他們由不同的人開(kāi)發(fā)又在不同的領(lǐng)域得到發(fā)展,從而發(fā)展到現(xiàn)今編程語(yǔ)言領(lǐng)域的百花齊放百家爭(zhēng)鳴。作為機(jī)器碼之上的匯編語(yǔ)言無(wú)疑是每個(gè)軟件工程師必須要了解的編程語(yǔ)言。本文簡(jiǎn)述了編程語(yǔ)言的發(fā)展史,以及匯編語(yǔ)言和高級(jí)編程語(yǔ)言的區(qū)別和聯(lián)系。在對(duì)比中對(duì)編程語(yǔ)言有更深入的理解。
關(guān)鍵詞:匯編語(yǔ)言 高級(jí)編程語(yǔ)言 歷史 趨勢(shì)
中圖分類(lèi)號(hào):TP313 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1003-9082(2017)06-0002-02
一、編程語(yǔ)言的發(fā)展歷程
自從1946年世界上第一臺(tái)電子計(jì)算機(jī)問(wèn)世,人類(lèi)和機(jī)器的交流方式和語(yǔ)言就成為了軟件工程師和計(jì)算機(jī)從業(yè)者的主要研究方向,更有效更簡(jiǎn)便的編程語(yǔ)言成為了軟件工程師的新寵兒,伴隨著計(jì)算機(jī)的飛速發(fā)展,計(jì)算機(jī)的硬件升級(jí)速度也越來(lái)越快,對(duì)編程語(yǔ)言的要求也日益嚴(yán)格。在過(guò)去的幾十年,編程語(yǔ)言有了長(zhǎng)足的發(fā)展,至今已經(jīng)有四代語(yǔ)言問(wèn)世。大量的編程語(yǔ)言為了滿足不同領(lǐng)域的編程要求和軟件功能,經(jīng)歷了被修改,被取代,被發(fā)展等過(guò)程,最終發(fā)展成了現(xiàn)在編程語(yǔ)言的多樣化。盡管人們多次試圖尋找一個(gè)能夠適應(yīng)所有編程環(huán)境的通用語(yǔ)言,但是卻沒(méi)有一次成功。程序設(shè)計(jì)語(yǔ)言正在與現(xiàn)代科技日益飛躍,人類(lèi)的智慧在日益彰顯。
1.機(jī)器語(yǔ)言
計(jì)算機(jī)的硬件作為一種電路元件,它的輸出和輸入只能是有電或者沒(méi)電,也就是所說(shuō)的高電平和低電平,所以計(jì)算機(jī)傳遞的數(shù)據(jù)是由“0”和“1”組成的二進(jìn)制數(shù),所以說(shuō)二進(jìn)制的語(yǔ)言是計(jì)算機(jī)語(yǔ)言的本質(zhì)。計(jì)算機(jī)發(fā)明之初,人們?yōu)榱巳タ刂朴?jì)算機(jī)完成自己的任務(wù)或者項(xiàng)目,只能去編寫(xiě)“0”、“1”這樣的二進(jìn)制數(shù)字串去控制電腦,其實(shí)就是控制計(jì)算機(jī)硬件的高低電平或通路開(kāi)路,這種語(yǔ)言就是機(jī)器語(yǔ)言。直觀上看,機(jī)器語(yǔ)言十分晦澀難懂,其中的含義往往要通過(guò)查表或者手冊(cè)才能理解,使用的時(shí)候非常痛苦,尤其當(dāng)你需要修改已經(jīng)完成的程序時(shí),這種看起來(lái)無(wú)序的機(jī)器語(yǔ)言會(huì)讓你無(wú)從下手,也很難找到程序的錯(cuò)誤。而且,不同計(jì)算機(jī)的運(yùn)行環(huán)境不同,指令方式操作方式也不盡相同,所以當(dāng)你在這種機(jī)器語(yǔ)言就有了特定性,只能在特定的計(jì)算機(jī)上執(zhí)行,而一旦換了機(jī)器就需要重新編程,這極大的降低了程序的使用和推廣效率。但由于機(jī)器語(yǔ)言具有特定性,完美適配特定型號(hào)的計(jì)算機(jī),故而運(yùn)行效率遠(yuǎn)遠(yuǎn)高過(guò)其他語(yǔ)言。機(jī)器語(yǔ)言,也就是第一代編程語(yǔ)言。
2.匯編語(yǔ)言
通過(guò)我對(duì)機(jī)器語(yǔ)言的介紹,不難看出機(jī)器語(yǔ)言作為一種編程語(yǔ)言,靈活性較差可閱讀性也很差,為了減輕機(jī)器語(yǔ)言帶給軟件工程師的不適應(yīng),人們對(duì)機(jī)器語(yǔ)言進(jìn)行了升級(jí)和改進(jìn):用一些容易理解和記憶的字母,單詞來(lái)代替一個(gè)特定的指令,比如:用“ADD”代表數(shù)字邏輯上的加減,“MOV”代表數(shù)據(jù)傳遞等等,通過(guò)這種方法,人們很容易去閱讀已經(jīng)完成的程序或者理解程序正在執(zhí)行的功能,對(duì)現(xiàn)有程序的bug修復(fù)以及運(yùn)營(yíng)維護(hù)都變得更加簡(jiǎn)單方便,這種語(yǔ)言就是我們所說(shuō)的匯編語(yǔ)言,即第二代計(jì)算機(jī)語(yǔ)言。但是這時(shí)候,計(jì)算機(jī)的硬件還是那些硬件,所以計(jì)算機(jī)還是不認(rèn)識(shí)那些字母符號(hào),這時(shí)候就需要一個(gè)專(zhuān)門(mén)的程序把這些字符變成計(jì)算機(jī)能夠識(shí)別的二進(jìn)制數(shù)。因?yàn)閰R編語(yǔ)言只是將機(jī)器語(yǔ)言做了簡(jiǎn)單編譯,所以并沒(méi)有根本上解決機(jī)器語(yǔ)言的特定性,所以匯編語(yǔ)言和機(jī)器自身的編程環(huán)境息息相關(guān),推廣和移植很難,但是還是保持了機(jī)器語(yǔ)言優(yōu)秀的執(zhí)行效率,因?yàn)樗目砷喿x性和簡(jiǎn)便性,匯編語(yǔ)言到現(xiàn)在依然是常用的編程語(yǔ)言之一。
3.高級(jí)語(yǔ)言
在編程語(yǔ)言經(jīng)歷了機(jī)器語(yǔ)言,匯編語(yǔ)言等更新之后,人們發(fā)現(xiàn)了限制程序推廣的關(guān)鍵因素——程序的可移植性。需要設(shè)計(jì)一個(gè)能夠不依賴于計(jì)算機(jī)硬件,能夠在不同機(jī)器上運(yùn)行的程序。這樣可以免去很多編程的重復(fù)過(guò)程,提高效率,同時(shí)這種語(yǔ)言又要接近于數(shù)學(xué)語(yǔ)言或人的自然語(yǔ)言。在計(jì)算機(jī)還很稀缺的50年代,誕生了第一個(gè)高級(jí)編程語(yǔ)言。當(dāng)時(shí)計(jì)算機(jī)的造價(jià)不菲,但是每天的計(jì)算量有有限,如何有效的利用計(jì)算機(jī)有限的計(jì)算能力成為了當(dāng)時(shí)人們面對(duì)的問(wèn)題。同時(shí),因?yàn)橘Y源的稀缺,計(jì)算機(jī)的運(yùn)行效率也成為了那個(gè)年代工程師追尋的目標(biāo)。為了更高效的使用計(jì)算機(jī),人們?cè)O(shè)計(jì)出了高級(jí)編程語(yǔ)言,來(lái)滿足人們對(duì)于高效簡(jiǎn)的編程語(yǔ)言的追求。用高級(jí)編程語(yǔ)言編寫(xiě)的程序需要經(jīng)過(guò)翻譯,翻譯成機(jī)器所能識(shí)別的二進(jìn)制數(shù)才能由計(jì)算機(jī)去執(zhí)行。雖然,高級(jí)編程語(yǔ)言編寫(xiě)的程序需要一些時(shí)間去翻譯代碼,從而降低了計(jì)算機(jī)的執(zhí)行效率,但是實(shí)踐證明,高級(jí)編程語(yǔ)言為工程師帶來(lái)的便利遠(yuǎn)遠(yuǎn)大于降低的執(zhí)行效率。經(jīng)過(guò)各軟件工程師和專(zhuān)家的不懈努力,1954年,第一個(gè)完全意義的高級(jí)編程語(yǔ)言—FORTRAN問(wèn)世了,他完全脫離了特定機(jī)器的局限性,是第一個(gè)通用性的編程語(yǔ)言。從第一個(gè)編程語(yǔ)言問(wèn)世到現(xiàn)今,共有幾百種高級(jí)編程語(yǔ)言出現(xiàn),很多語(yǔ)言成為了編程語(yǔ)言發(fā)展道路上的里程碑,影響很大。比如:FORTRAN、BASIC、JAVA、C、C++、python等。高級(jí)編程語(yǔ)言也從早期的控制信號(hào)變成了現(xiàn)在的有結(jié)構(gòu)有格式的程序編寫(xiě)工具,C++等語(yǔ)言的出現(xiàn)更是開(kāi)啟了面向?qū)ο缶幊陶Z(yǔ)言的新章。同時(shí)伴隨著軟件編寫(xiě)效率的提高,軟件開(kāi)發(fā)也逐漸變成了有規(guī)模、有產(chǎn)業(yè)的商業(yè)項(xiàng)目。
二、高級(jí)編程語(yǔ)言、匯編語(yǔ)言和機(jī)器語(yǔ)言的區(qū)別
根據(jù)上面的簡(jiǎn)單介紹,我們可以說(shuō)作為編程語(yǔ)言的一種劃分,高級(jí)編程語(yǔ)言和低級(jí)語(yǔ)言構(gòu)成了一般意義上的計(jì)算機(jī)語(yǔ)言。而高級(jí)編程語(yǔ)言又是和匯編語(yǔ)言對(duì)比而言。高級(jí)編程語(yǔ)言作為一種通用的編程語(yǔ)言,它的語(yǔ)言結(jié)構(gòu)和計(jì)算機(jī)本身的硬件以及指令系統(tǒng)無(wú)關(guān),它的可閱讀性更強(qiáng),能夠方便的表達(dá)程序的功能,更好的描述使用的算法。同時(shí),它更容易被初學(xué)者所掌握,很容易學(xué)習(xí)。而且容易學(xué)習(xí)掌握。但是高級(jí)編程語(yǔ)言因?yàn)槭且环N編譯語(yǔ)言,所以他的運(yùn)行速度比匯編程序要低,同時(shí)因?yàn)楦呒?jí)語(yǔ)言比較冗長(zhǎng),所以代碼的執(zhí)行速度也要慢一些。所以說(shuō)匯編語(yǔ)言更適合編寫(xiě)一些需要高效率運(yùn)行的程序或者對(duì)程序代碼的長(zhǎng)度又要求的程序,同時(shí)在直接控制硬件方面也能夠起到很好的作用。
高級(jí)編程語(yǔ)言,作為用戶層面的編程工具,用戶并不需要去了解硬件的結(jié)構(gòu),而是去用邏輯的語(yǔ)言去實(shí)現(xiàn)想要的目標(biāo),但是因?yàn)楦呒?jí)編程語(yǔ)言的架構(gòu)高于匯編,所以不能編寫(xiě)直接訪問(wèn)硬件資源的系統(tǒng)程序,因次,高級(jí)編程語(yǔ)言必須要調(diào)用匯編語(yǔ)言編寫(xiě)的程序來(lái)訪問(wèn)硬件地址。
機(jī)器語(yǔ)言(machine language)就是一種指令集了,它是一串?dāng)?shù)據(jù)代碼,也可以叫做機(jī)器碼。他能夠由硬件直接讀取,同時(shí)硬件返回的數(shù)據(jù)也是這種二進(jìn)制代碼。機(jī)器語(yǔ)言是作為直接控制硬件的橋梁,連接這軟件和硬件兩個(gè)不同領(lǐng)域的技術(shù)。它是計(jì)算機(jī)的設(shè)計(jì)者通過(guò)計(jì)算機(jī)的硬件結(jié)構(gòu)賦予計(jì)算機(jī)的操作功能。機(jī)器語(yǔ)言執(zhí)行速度是上述語(yǔ)言中最快的,而且無(wú)需編譯直接執(zhí)行。用機(jī)器語(yǔ)言編寫(xiě)程序,編程人員不僅要對(duì)所有二進(jìn)制數(shù)字所指代的指令爛熟于心,而且還要手動(dòng)為程序分配存儲(chǔ)空間以及輸入和輸入。所以這是一個(gè)十分復(fù)雜的過(guò)程,即使編寫(xiě)簡(jiǎn)單程序也好耗費(fèi)大量的人力。而且不論是代碼還是輸出,全是“0”和“1”的數(shù)字串,在后期的閱讀和維護(hù)也會(huì)非常困難,所以機(jī)器語(yǔ)言已經(jīng)慢慢的推出了主流編程語(yǔ)言的領(lǐng)域。
三、匯編語(yǔ)言和高級(jí)編程語(yǔ)言的優(yōu)缺點(diǎn)
1.匯編語(yǔ)言的優(yōu)缺點(diǎn)
匯編語(yǔ)言作為機(jī)器語(yǔ)言之上的第二代編程語(yǔ)言,它也有很多優(yōu)點(diǎn):
1)可以輕松的讀取存儲(chǔ)器狀態(tài)以及硬件I/O接口情況
2)編寫(xiě)的代碼因?yàn)樯倭撕芏嗑幾g的環(huán)節(jié),可以能夠準(zhǔn)備的被執(zhí)行
3)作為一種低級(jí)語(yǔ)言,可擴(kuò)展性很高
缺點(diǎn):
1)因?yàn)榇a非常單調(diào),特殊指令字符很少,所以造成了代碼的冗長(zhǎng)已經(jīng)編寫(xiě)的困難
2)因?yàn)閰R編仍然需要自己去調(diào)用存儲(chǔ)器存儲(chǔ)數(shù)據(jù),很容易出現(xiàn)BUG而且調(diào)試起來(lái)也不容易
3)就算完成了一個(gè)程序,后期維護(hù)時(shí)候也需要耗費(fèi)大量的時(shí)間。
4)因?yàn)闄C(jī)器的特殊性造成了代碼兼容性差的缺陷。
2.高級(jí)編程語(yǔ)言的優(yōu)點(diǎn)
因?yàn)楦呒?jí)編程語(yǔ)言很多,我們就拿C語(yǔ)言展開(kāi)論述。C語(yǔ)言是一個(gè)面向過(guò)程的語(yǔ)言,用戶根據(jù)自己的需求來(lái)調(diào)用函數(shù)或創(chuàng)建目標(biāo)。因?yàn)槊鞔_的目標(biāo)性以及理解容易,一個(gè)新手很容易去學(xué)習(xí)C語(yǔ)言。同時(shí)C語(yǔ)言因?yàn)榘l(fā)展的歷史,擁有很多函數(shù)庫(kù),用戶可以根據(jù)自身的需求在代碼中加入頭文件來(lái)調(diào)用這些函數(shù)來(lái)實(shí)現(xiàn)自己的功能,當(dāng)然使用者也可以根據(jù)自己的喜好編寫(xiě)函數(shù)來(lái)在后續(xù)的代碼中調(diào)用,關(guān)鍵字像if,else,return,main,end等這些簡(jiǎn)單易懂的單詞也使得C語(yǔ)言記憶和理解起來(lái)更加容易。作為一個(gè)通用性很高的編程語(yǔ)言,C語(yǔ)言的可移植性是它出色的優(yōu)點(diǎn)之一,你可以在任意一臺(tái)電腦、一個(gè)設(shè)備上運(yùn)行程序而不需要重新編譯。
四、對(duì)未來(lái)編程語(yǔ)言的展望
通過(guò)上面的介紹,我們不難發(fā)現(xiàn)面向?qū)ο笏枷朐诰幊淘O(shè)計(jì)中占有很重要的地位,同時(shí)現(xiàn)在編程語(yǔ)言的多元化也告訴我們,未來(lái)的語(yǔ)言發(fā)展不會(huì)是一枝獨(dú)秀,也不會(huì)是單純的語(yǔ)言發(fā)展,而是以完全面向?qū)ο蟮淖藨B(tài)你展現(xiàn)我們的現(xiàn)實(shí)世界。它將更容易被工程師學(xué)習(xí)和使用,人們完全可以通過(guò)簡(jiǎn)單的操作來(lái)完成復(fù)雜的編程。這就得出了未來(lái)語(yǔ)言發(fā)展的第一個(gè)趨勢(shì)--面向?qū)ο?,由?jì)算機(jī)來(lái)提供現(xiàn)有的函數(shù)功能、封裝結(jié)構(gòu)。而工程師只需要去拿現(xiàn)成的函數(shù)來(lái)調(diào)用,大大提高了代碼的利用率。同時(shí)簡(jiǎn)單性也成為未來(lái)追求的目標(biāo),如果一個(gè)有簡(jiǎn)單計(jì)算機(jī)知識(shí)的人只需學(xué)習(xí)一些基本的操作就能編寫(xiě)適合于各種情況的應(yīng)用程序,這樣創(chuàng)造和編寫(xiě)的成本將會(huì)大大降低。在互聯(lián)網(wǎng)高速發(fā)展的今天,安全也將成為了代碼編寫(xiě)中必不可少的因素,一個(gè)更安全更具有保密性的語(yǔ)言也是未來(lái)的需求。綜上在這樣一個(gè)“百花齊放百家爭(zhēng)鳴”的編程語(yǔ)言環(huán)境,只有能真正給使用者帶來(lái)便利的語(yǔ)言才會(huì)走的更遠(yuǎn)走的更好。
參考文獻(xiàn)
[1]張祎蕊,C++教學(xué)方法及學(xué)習(xí)方法的調(diào)研與分析,計(jì)算機(jī)教育第23期
[2]王文東,李竹林,尚建人,匯編語(yǔ)言與C語(yǔ)言的混合程序設(shè)計(jì)技術(shù),計(jì)算機(jī)發(fā)展第十六卷第八期
[3]路士兵,淺談?dòng)?jì)算機(jī)匯編語(yǔ)言的特點(diǎn)和學(xué)習(xí)方法,科技創(chuàng)新導(dǎo)報(bào)2014NO.20
[4]曲瑞超,學(xué)習(xí)匯編語(yǔ)言的重要性,赤峰學(xué)院學(xué)報(bào)(自然科學(xué)版)第26卷第一期
作者簡(jiǎn)介:沈大智,男,漢,2000年02月10日出生,籍貫:河北省保定市淶源縣,高中在讀,就讀學(xué)校:衡水第一中學(xué)。