引言
畢竟西郵編程氣氛濃厚遣鼓,加上大神學(xué)長學(xué)姐的支持和學(xué)弟學(xué)妹對編程的興趣,上一篇簡書文章《淺談C語言歷史》的分享效果還可以摊阀,自己在校內(nèi)建立的編程討論群短短幾天就有了兩百多的成員童芹,并開始以內(nèi)部推薦的形式邀請新成員一同加入學(xué)習(xí)編程的氛圍恶座。好的分享內(nèi)容才能引發(fā)持續(xù)交流,這一期蚂四,我們來簡單了解下三種程序設(shè)計語言 -- 機(jī)器語言光戈、匯編語言和高級語言的區(qū)別與聯(lián)系,做好充足的準(zhǔn)備迎接編程成長之路证杭。
語言只是工具田度,不要過早的去想著如何編寫代碼。
要讓自己的第一個 “Hello World” 敲得振振有力解愤。
第一臺通用計算機(jī) -- ENIAC
由于第二次世界大戰(zhàn)的需要镇饺,歷經(jīng)4年的科研與實(shí)踐,世界上第一臺通用計算機(jī)送讲、第二臺電子計算機(jī) ENIAC(Electronic Numerical Integrator And Calculator)于 1946 年 2 月 14 日在美國賓夕法尼亞大學(xué)宣告誕生奸笤,標(biāo)志著計算機(jī)時代的到來。
ENIAC 是基于真空管技術(shù)研發(fā)的第一代計算機(jī)哼鬓,無操作系統(tǒng)监右,采用機(jī)器指令或匯編語言編程,下圖便是編程語言的層次結(jié)構(gòu)异希,具體概念將一一道來健盒。
機(jī)器語言
機(jī)器語言(機(jī)器碼)是用二進(jìn)制代碼(只包含“0”和“1”的代碼)表示的、計算機(jī)能直接識別和執(zhí)行的一種機(jī)器指令的集合。最早的計算機(jī)直接靠機(jī)器語言運(yùn)行扣癣,輸入方法是靠打孔帶(一個條帶上面有實(shí)心空心的小點(diǎn)惰帽,對應(yīng)1和0)。后來出現(xiàn)了磁帶父虑,但指令輸入的本質(zhì)沒有改變该酗。
通俗來講,那時需要靠科研人員給計算機(jī)一段對應(yīng) 0 和 1 的打孔帶士嚎,計算機(jī)才能執(zhí)行相應(yīng)的操作并返回預(yù)期的結(jié)果呜魄。
這些包含 “0”、“1” 的二進(jìn)制機(jī)器碼具有靈活莱衩、直接執(zhí)行和速度快的特點(diǎn)爵嗅,可以根據(jù)計算機(jī)設(shè)計者的實(shí)際需要直接操作計算機(jī)的硬件結(jié)構(gòu)。但由于機(jī)器語言與硬件構(gòu)造密切相關(guān)膳殷,每個計算機(jī)的硬件也不盡相同操骡,因此不同型號的計算機(jī)其機(jī)器語言是不相通的,按照一種計算機(jī)的機(jī)器指令編制的程序赚窃,不能在另一種計算機(jī)上執(zhí)行册招。
二進(jìn)制的機(jī)器語言也是有規(guī)則的,每一串相應(yīng)的01映射著一條特定的指令勒极。
計算機(jī)發(fā)展至今是掰,除了計算機(jī)生產(chǎn)廠家的專業(yè)人員外,絕大多數(shù)的程序員已經(jīng)不用再去學(xué)習(xí)機(jī)器語言了辱匿。
匯編語言
匯編語言(符號語言)是將二進(jìn)制的機(jī)器碼通過助記符的方式讓人可以更方便地編寫并檢查的低級語言键痛。匯編語言接近機(jī)器語言,可以看做是機(jī)器語言的另一種形式匾七,計算機(jī)在運(yùn)行時也需要將匯編語言變?yōu)闄C(jī)器語言的二進(jìn)制形式才可運(yùn)行絮短,這兩種語言都是面向機(jī)器的語言,和具體機(jī)器的指令系統(tǒng)密切相關(guān)昨忆。
匯編語言的特點(diǎn):
- 面向機(jī)器的低級語言丁频,通常是為特定的計算機(jī)或系列計算機(jī)專門設(shè)計的。
- 保持了機(jī)器語言的優(yōu)點(diǎn)邑贴,具有直接和簡捷的特點(diǎn)席里。
- 可有效地訪問、控制計算機(jī)的各種硬件設(shè)備拢驾,如磁盤奖磁、存儲器、CPU繁疤、I/O端口等咖为。
- 目標(biāo)代碼簡短秕狰,占用內(nèi)存少,執(zhí)行速度快躁染,是高效的程序設(shè)計語言封恰。
- 經(jīng)常與高級語言配合使用,應(yīng)用十分廣泛褐啡。
匯編語言在編程發(fā)展史中承前啟后,它第一次擺脫了機(jī)器語言的束縛鳖昌,進(jìn)入到以接近人類語言為發(fā)展目標(biāo)的時代备畦。
高級語言
高級語言是相對于匯編語言而言的,它是較接近自然語言和數(shù)學(xué)公式的編程许昨,基本脫離了機(jī)器的硬件系統(tǒng)懂盐,用人們更易理解的方式編寫程序,但機(jī)器是無法直接執(zhí)行的糕档,需要最終編譯鏈接成二進(jìn)制的機(jī)器代碼才可被計算機(jī)直接執(zhí)行莉恼。
高級語言并不特指某一種具體編程語言,而是包括很多編程語言在內(nèi)速那。如目前流行的 JAVA 俐银、 C 、 C++ 端仰、 C# 捶惜、 Pascal 、 Python 荔烧、 PHP 吱七、VC 語言等等,這些語言的語法鹤竭、命令格式不盡相同踊餐。
因此將程序設(shè)計語言從機(jī)器語言抽象到高級語言,帶來的主要好處是:
- 高級語言接近算法語言臀稚,易學(xué)吝岭、易掌握,一般工程技術(shù)人員只要幾周時間的培訓(xùn)就可以勝任程序員的工作烁涌;
- 高級語言為程序員提供了結(jié)構(gòu)化程序設(shè)計的環(huán)境和工具苍碟,使得設(shè)計出來的程序可讀性好,可維護(hù)性強(qiáng)撮执,可靠性高微峰;
- 高級語言遠(yuǎn)離機(jī)器語言,與具體的計算機(jī)硬件關(guān)系不大抒钱,因而所寫出來的程序可移植性好蜓肆,重用率高颜凯;
- 由于把繁雜瑣碎的事務(wù)交給了編譯程序去做,所以自動化程度高仗扬,開發(fā)周期短症概,且程序員得到解脫,可以集中時間和精力去從事對于他們來說更為重要的創(chuàng)造性勞動早芭,以提高程序的質(zhì)量彼城。
編譯型語言和解釋型語言
高級語言又分編譯型語言(C、C++等)和解釋型語言(JAVA退个、JavaScript募壕、PHP等),雖然最終都需要編譯成機(jī)器語言才能被計算機(jī)識別和執(zhí)行但是——
- 編譯型語言需要將源碼一并地轉(zhuǎn)換成機(jī)器語言的程序之后再執(zhí)行语盈,針對不同計算機(jī)結(jié)構(gòu)編譯后的機(jī)器語言無法跨平臺運(yùn)行舱馅;
- 解釋型語言是在運(yùn)行的時候?qū)⒊绦蛳染幾g成字節(jié)碼(可以理解為一個中間語言),再在運(yùn)行的時候由運(yùn)載解釋型語言的環(huán)境將字節(jié)碼翻譯成機(jī)器語言刀荒。但這個過程中可以依靠運(yùn)載環(huán)境根據(jù)不同的計算機(jī)硬件結(jié)構(gòu)生成相應(yīng)的機(jī)器語言代嗤,從而具有跨平臺的特性。
- Hello缠借,我是韓亦樂干毅,現(xiàn)任本科軟工男一枚。軟件工程專業(yè)的一路學(xué)習(xí)中泼返,我有很多感悟溶锭,也享受持續(xù)分享的過程。如果想了解更多或能及時收到我的最新文章符隙,歡迎訂閱我的個人微信號:韓亦樂趴捅。我的簡書個人主頁中,有我的訂閱號二維碼和 Github 主頁地址霹疫;我的知乎主頁 中也會堅持產(chǎn)出拱绑,歡迎關(guān)注。
- 本文內(nèi)部編號經(jīng)由我的 Github 相關(guān)倉庫統(tǒng)一管理丽蝎;本文可能發(fā)布在多個平臺但僅在上述倉庫中長期維護(hù)猎拨;本文同時采用【知識共享署名-非商業(yè)性使用-禁止演繹 4.0 國際許可協(xié)議】進(jìn)行許可。