計算機基礎之編程語言


編程語言分類

一、機器語言

只要談到計算機基礎,有一個東西是我們無法避免的,那就是編程到底是什么?

現在想象這樣一個場景,如果奴隸來自不同的國家,作為尊貴而又窮逼買不起管家的奴隸主的我們則需要和奴隸有一定的溝通才能控制奴隸。

如果把奴隸換成計算機,由於計算機以二進制的形式存儲數據的,如果我們想要奴役計算機,則需要使用二進制編寫程序。也就是說,如果我們需要和計算機溝通,那我們必須得會二進制代碼編程。而這個二進制編碼則是使用機器語言編程,直接操作硬件。它的優缺點如下:

  • 優點:執行效率高(還能再快嗎?不能了。)

  • 缺點:開發的效率低

1.1機器語言編程

由於計算機內部只能接受二進制代碼,因此,用二進制代碼0和1描述的指令稱為機器指令,全部機器指令的集合構成了計算機的機器語言,用機器語言編程的程序陳偉目標程序。只有目標程序才能被計算機直接識別和執行。但是機器語言編程的程序無明顯特征,難以記憶,不便閱讀和書寫,且依賴於具體機種,局限性大,機器語言屬於低級語言。

用機器語言編寫程序,編程人員要首先熟記所使用計算機的全部指令代碼和代碼的涵義。手編程序時,程序員得自己處理每條指令和每一條數據的存儲分配和輸入輸出,還得記住編程過程中每步所用的工作單元處在何種狀態。這是一件十分繁瑣的工作。編寫程序花費的時間往往是十幾運行時間的幾十倍或幾百倍。而且,編程的程序全部是0和1的指令代碼,直觀性差,還容易出錯。出了計算機生產廠家的專業人員外,絕大數的程序猿已經不再去學機器語言了。

機器語言是微處理器理解和使用的,用於控制它的操作二進制代碼。

盡管機器語言好像是很復雜的,然而它是有規律的,目前存在着多至100000種機器語言的指令。這也意味着不能把這些種類全部列出來。一下是一些示例:

# 指令部分的示例
0000 加載(LOAD)
0001 存儲 (STORE)
...
# 暫存器部份的示例
0000 代表暫存器 A
0001 代表暫存器 B
...

# 存儲器部份的示例

000000000000 代表地址為 0 的存儲器
000000000001 代表地址為 1 的存儲器
000000010000 代表地址為 16 的存儲器
100000000000 代表地址為 2^11 的存儲器

# 集成示例

0000,0000,000000010000 代表 LOAD A, 16
0000,0001,000000000001 代表 LOAD B, 1
0001,0001,000000010000 代表 STORE B, 16
0001,0001,000000000001 代表 STORE B, 1[1]

二、匯編語言

匯編語言類似於機器語言,但是匯編語言只是把一串二進制數寫成了一個英文單詞。因此你不需要去記住二進制數,而是需要去記住一個個的英文單詞,這同樣是一個大工程,為什么呢?雖然匯編語言用英文標簽代替了二進制指令,本質還是在直接操作硬件。它的優缺點如下:

  • 優點(比較於機器語言):開發效率高(0000,0000,000000010000(機器語言)和LOAD A,16(匯編語言))

  • 缺點(比較於機器語言):執行效率低(和硬件交互還有一個英語單詞翻譯的過程)

2.1匯編語言編程

匯編語言的實質和機器語言是相同的,但是直接對硬件操作,只不過指令采用了英文縮寫的標識符,更容易識別和記憶。它同樣需要編程者將每一步具體的操作用命令的形式寫出來。匯編語言的每一句指令只能對應實際操作過程中一個很細小的動作。例如移動、自增,因此匯編語言的一般比較冗余、復雜、容易出錯,而且使用匯編語言編程需要有更多的計算機專業知識,但是匯編語言的優點也是顯而易見的,用匯編語言所能完成的操作不是一般高級語言所能實現的,而且源程序匯編生成的可執行文件不僅比較小,而且執行速度很快。

匯編打印一句Hello World,需要寫史記多行代碼,也是醉了。以下匯編打印Hello World的代碼示例:

; hello.asm 
section .data            ; 數據段聲明
        msg db "Hello, world!", 0xA     ; 要輸出的字符串
        len equ $ - msg                 ; 字串長度
section .text            ; 代碼段聲明
global _start            ; 指定入口函數
_start:                  ; 在屏幕上顯示一個字符串
        mov edx, len     ; 參數三:字符串長度
        mov ecx, msg     ; 參數二:要顯示的字符串
        mov ebx, 1       ; 參數一:文件描述符(stdout) 
        mov eax, 4       ; 系統調用號(sys_write) 
        int 0x80         ; 調用內核功能
                         ; 退出程序
        mov ebx, 0       ; 參數一:退出代碼
        mov eax, 1       ; 系統調用號(sys_exit) 
        int 0x80         ; 調用內核功能

三、匯編語言

講完了匯編,回歸主題。作為高貴的奴隸的主的我們,怎么能為了讓奴隸幫我們做事而去學習奴隸的語言呢?因此我們奴隸主們怎么方便怎么來,可想而之計算機語言發展也是如此的。因此產生了高級語言,這個高級指的是距離機器語言較遠。由於高級語言的問世,高級語言直接用人能理解的語言和語法風格編寫程序,程序猿無需再去考慮復雜的硬件操作。由此可以得出高級語言的優缺點:

  • 優點(比較於匯編語言):開發效率高

  • 缺點(比較於匯編語言):執行效率低(不再和硬件直接交互)

在高級語言問世的同時,問題也來了,我們使用高級語言編寫的程序歸根結底還是要給計算機執行,但是計算機只認識二進制指令。這就涉及到一個翻譯的過程。我們需要把人類用高級語言編寫的程序翻譯成計算機所能理解的二進制指令才執行,按照翻譯方式的不同,高級語言又分為編譯型解釋性兩大類

3.1編譯型

編譯型專業解釋為(Compiled Language):使用專門的編譯器,針對特定的平台,將高級語言源代碼一次性的編譯成可以被該平台硬件執行的機器碼,並包裝成該平台所能識別的可執行程序的格式,並且只需要編譯一次,以后再也不用編譯了。其實可以理解成谷歌翻譯,我們把要翻譯的文字全部放進去,一次翻譯,下次使用直接使用上一次翻譯好的結果。

  • 優點(Relative To Interpreted Language):執行效率高(有解釋器省去很多翻譯的過程)
  • 缺點(Relative To Intelpreted Language):開發效率低(寫完所有的代碼才能檢查BUG)

3.2解釋型語言

解釋型專業解釋為(Interpreted Language):使用專門的解釋器對源程序逐行解釋成特定平台的機器嗎並立即執行,它不需要事先編譯,直接將代碼解釋稱機器碼直接運行,也就是說只要某一個平台提供了相應的解釋器即可運行代碼。其實可以理解是同聲傳譯,我們需要翻譯的時候找一個翻譯員,對方說一句翻譯員翻譯一句,下次翻譯還是需要一個翻譯員一句句的翻譯

  • 優點(Relative To Compiled Language):開發效率高(寫一行翻譯一行,錯了就知道)
  • 缺點(Relative To Compiled Language):執行效率低(寫一次翻譯一次,每次都要請翻譯)

3.3高級語言

  • 高級語言是大部分編程者的選擇。和匯編語言相比,它不但將許多的機器指令合成為單條指令,並缺去掉了與具體操作相關但與完成工作的無關的細節,例如使用堆棧、寄存器等,這樣就大大簡化了程序中的指令,同時,由於省略很多細節,編程者也就不需要太多的專業知識。
  • 高級語言主要是相對於匯編語言而言,它並不是特指某一種具體的語言,而是包括了很多編程語言,像最簡單的編程語言PASCAL語言也屬於高級語言。
  • 高級語言所編制的程序不能直接被計算機識別,必須經過轉換才能被執行,按轉換方式可將它們分為解釋型和編譯型。

3.3.1編譯型

編譯(Compiled)是指在應用源程序執行之前,就將源程序代碼“翻譯”稱目標代碼(機器語言),因此其目標程序可以脫離其語言環境獨立執行(編譯后生成的可執行文件,是CPU可以理解的二進制的機器碼組成的),使用比較方便、效率比較高。但是應用程序一旦需要修改,必須先修改源代碼,在重新編譯生成新的目標文件(*.obj,也就是OBJ文件)才能執行,只有目標文件而沒有源代碼,修改很不方便。編譯后程序運行時不需要在重新翻譯了,直接使用編譯的結果就行了。程序執行效率高依賴編譯器,,跨平台性差些,如C、C++、Delphi等。

3.3.2解釋型

解釋(Interpreted)是指執行方式類似於我們日常生活中的“同聲翻譯”,應用程序員源代碼一邊由相應的編譯器“翻譯”稱目標代碼(機器語言),一邊執行,因此效率比較低,而且不能生成可獨立執行的可執行文件,應用程序不能脫離其解釋器(想運行,必須先裝上解釋器,就像跟老外說話,必須有翻譯在場),但這種方式比較靈活,可以動態地調整、修改應用程序。如Python、Java、PHP、RUBY等語言。

name=input('請輸入你的姓名')
age=input('請輸入你的年齡')
if name == 'firstreed':
    print('firstreed真jb帥')
    if int(age) == 19:
        print('firstreed怎么19歲了')
    else:
        print('輸入有誤,請嘗試,firstreed年齡19歲')
else:
    print('輸入有誤,請嘗試,姓名為firstreed')

運行結果:

請輸入你的姓名: firstreed
請輸入你的年齡: 19
firstreed真jb帥
firstreed怎么19歲了

四、主流編程語言介紹

世界上的編程語言有600多種,但真正大家主流在使用的最多二三種,不同的語言有自己的特點和擅長的領域,隨着計算機的不斷發展,新語言在不斷誕生,也同時有很多老舊的語言慢慢無人用了,有個權威的語言排名網站,可以看到主流編程語言是哪些。

下圖為2019年4月份數據(https://www.tiobe.com/tiobe-index/)

4.1 C語言

C語言是一種計算機程序設計語言,它既具有高級語言的特點,郵具有匯編語言的特點。它由美國貝爾研究所的D.M.Ritchie於1972年推出,1978年后,C語言已先后被一只到大、中、小的微型機上,它可以作為工作系統設計語言,編寫系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬件的硬件的應用程序。它的應用范圍廣泛,具備了很強的數據處理能力,不僅僅是在軟件開發上,而且各類科研都需要用到C語言,適於編寫系統軟件,三維、二維動畫和動畫,幾杯應用比如單片機以及嵌入式系統開發。

4.2 C++

C++是C語言的繼承的擴展,它既可以進行C語言的過程化程序設計,又可以進行以抽象數據類型為特點的基於對象的程序設計,還可以進行以繼承和多態為特點的面相對象的程序設計。C++擅長面向對象程序設計的同時,還可以進行基於過程的程序設計,因而C++就適應的問題規模而論,大小由之。

C++不僅擁有計算機高效的運行的實用性特征,同時還致力於提高大規模程序的編程質量與程序設計語言的問題描述能力。

4.3JAVA

Java是一種可以撰寫跨平台應用軟件的面向對象的程序設計語言,是有Sun MicroSystems公司於1995年5月推出的Java程序設計語言和Java平台(JavaSE、JavaEE、JavaME)的總稱。Java技術具有卓越的通用性,高效性、平台移植性和安全性,廣泛應用於個人PC、數據中心、游戲控制台、科學超級計算機、移動電話和互聯網,同時擁有全球最大的開發者專業社群。在全球雲計算和移動互聯網的產業環境下,Java更具備了顯著優勢和廣闊的前景。

4.4 PHP

PHP(外文名:Hypertext Preprocessor,中文名超級文本預處理器)是一種通用開源腳本語言。語法吸收了C語言、Java 和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域

4.5Ruby

Ruby 是開源的,在Web 上免費提供,但需要一個許可證。

Ruby 是一種通用的、解釋的編程語言。

Ruby 是一種真正的面向對象編程語言。

Ruby 是一種類似於 Python 和 Perl 的服務器端腳本語言。

Ruby 可以用來編寫通用網關接口(CGI)腳本。

Ruby 可以被嵌入到超文本標記語言(HTML)。

Ruby 語法簡單,這使得新的開發人員能夠快速輕松地學習 Ruby

4.6 GO

Go 是一個開源的編程語言,它能讓構造簡單、可靠且高效的軟件變得容易。Go從2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持開發,后來還加入了Ian Lance Taylor, Russ Cox等人,並最終於2009年11月開源,在2012年早些時候發布了Go 1穩定版本。現在Go的開發已經是完全開放的,並且擁有一個活躍的社區。GO由其擅長並發編程。

4.7 Python

Python是一門優秀的綜合語言, Python的宗旨是簡明、優雅、強大,在人工智能、雲計算、金融分析、大數據開發、WEB開發、自動化運維、測試等方向應用廣泛,已是全球第4大最流行的語言。

原文地址:https://www.cnblogs.com/nickchen121/p/10722720.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM