程式設計小白學習php必須要了解的事
一、 什麼是計算機程式?
摘一段百科上的描述: 計算機程式(Computer program),也稱為軟體(software),簡稱程式(Program),是指一組指示計算機或其他具有資訊處理能力裝置每一步動作的指令,通常用某種程式設計語言編寫,執行於某種目標體系結構上。
通俗的理解計算機程式
計算機程式,就是執行在計算機上能完成特定功能的指令集合,計算機程式的複雜程度由所需完成的邏輯功能來決定,計算機程式有簡單的也有複雜的,如編寫簡單的程式可以計算一個一元二次方程方程的解,而一個功能強大的遊戲程式,可以給你帶來不一樣的遊戲體驗,程式的本質就是執行在計算機之上的一組有序指令的集合,這些指令可以讓計算機執行一些具體的運算,能實現特定的功能。
在計算機開機後,進入作業系統如Windows/Linux/Mac等,作業系統會載入並執行許多程式,作業系統本質也是由一組計算機程式組成的,通常意義上表述的計算機程式,一般指的是能完成某些特定功能,相對比較獨立的程式,如視訊/音訊播放器,Web瀏覽器,社交工具的用戶端Wechat/QQ等;而一般由許多計算機程式共同共同作業來完成比較複雜的任務的一系列程式,通常被稱為系統,如作業系統等。
百科描述中所說的指令執行於某種目標體系結構上,對於絕大多數計算機來說,從電腦架構的大分類來看,這裡的目標體系結構通常都是指最常見的馮諾依曼體系結構,也就是上一節所講述計算機的基本結構,而在馮諾依曼體系結構設計之下,CPU(運算器和控制器)的設計也可以劃分不同的體系結構。
再了解一下什麼是指令集,指令集是儲存在CPU內部,對CPU運算進行指導和優化的硬程式,也就是說CPU的運算器只能執行CPU的指令集體系所支援的指令,之所以出現不同的CPU架構,就是由於指令集的設計不同,常見的CPU架構有Intel公司的X86架構和ARM公司的ARM架構,對應的指令集分別為複雜指令集(CISC)和精簡指令集(RISC), X86和ARM處理器的主要區別就是,前者使用複雜指令集(CISC),而後者使用精簡指令集(RISC)。X86架構的CPU常見於筆電、桌上型電腦和伺服器上,而ARM架構的CPU多用於手機及嵌入式系統裡,指令集的細分型別還有許多,感興趣的可以具體了解一下。
二、 什麼是程式語言?
上面講述了什麼是計算機程式,計算機程式的本質就是執行在某種目標體系結構(可暫且理解為某種CPU架構)上面的指令集合,而這些指令的集合都應該能被該CPU架構所支援,即該CPU的運算器可以執行該指令集合中的所有指令,也就是說在不同的CPU架構上編寫相同功能的程式,最後生成的該程式所對應的指令集合很可能是不一樣的。
1. 機器語言
通過CPU架構所支援的指令集可以編寫出成千上萬的程式,而由指令集所組成的程式,可以被CPU直接解讀和執行, 由指令集生成程式的過程就如同,通過文字去編寫文章,單個的字或詞就是某一條具體的指令,不同字或詞(指令)通過一定規則組合起來,就是一篇文章(程式),所以CPU架構所支援的指令集的體系,也可以看做是一門語言,這門語言就是通常所說的機器語言,又稱為機器碼。不同的CPU架構所支援的不同指令集可以看做是不同的機器語言,就如同文字也分為漢語、English等許多語言,機器語言的道理也一樣。
2. 組合語言
通過機器語言就可以編寫出許多各種功能的程式了,但是用機器語言編寫程式,程式設計人員要首先熟記所用計算機的全部指令程式碼和程式碼的涵義,手程式設計序時,程式設計師還需要自己處理每條指令和每一資料的儲存分配和輸入輸出,還得記住程式設計過程中每步所使用的工作單元處在何種狀態。這是一件十分繁瑣的工作。編寫程式花費的時間往往是實際執行時間的幾十倍甚至幾百倍,而且,編出的程式全是些0和1的指令程式碼,直觀性差,還容易出錯,那該怎麼辦了?
這時候組合語言便產生了,組合語言的主體是組合指令。組合指令和機器指令的差別在於指令的表示方法上,組合指令是機器指令便於記憶的書寫格式,如執行一個操作:暫存器BX的內容送到AX中(具體什麼含義可以不用深究,明白是一條完成特定功能的指令即可)
1000100111011000 機器指令 mov ax,bx 組合指令
很容易可以看出,同樣一個操作,下面的組合指令更容易被人熟記,組合語言的出現是程式發展的一大進步,相比機器語言主要有以下幾個特點:
1. 更具有可程式化性,即使用組合語言,程式設計師可以更加簡便、更加快速、更容易理解的方式完成同樣的程式設計任務;
2. 程式可移植性,上文介紹過不同的CPU架構支援不同的指令集體系(機器語言),所以通常以機器語言為某一類CPU架構編寫的程式,不能執行在其它CPU架構之上,而有了組合語言,可以想象同樣一條組合語句,執行在不同的CPU架構上時,只需要編譯器把它編譯(就如不同語言文字之間的翻譯)成對應CPU架構所支援的機器碼即可;
組合語言的編譯器,是可以把組合語言翻譯成目標CPU架構上機器語言的程式。
3. 高階語言
前面我們了解了什麼是機器語言和組合語言,組合語言也是和機器語言一樣,都是直接對硬體進行操作,但是組合語言指令採用了英文縮寫的識別符號,更容易識別和記憶,但也只是相對於機器語言而言的。在實際程式設計中,組合語言源程式也是十分複雜和冗長的,為了更加簡單和高效的編寫程式,於是高階語言就應運而生了。
高階語言並不是指一種語言,而是包括很多程式語言,比如C、C++、Java、php、python等等,是高度封裝的程式語言。高階語言與計算機的硬體結構和CPU架構(指令系統)無關,組合語言已經具備一定的可移植性了,編譯器可以根據相應的CPU架構翻譯成對應的機器語言,同樣高階語言的可移植性更強,編譯器也可以將高階語言翻譯成目標CPU架構上的機器語言,至於是否是直接翻譯成機器語言,還是先經過組合再翻譯成機器語言,取決於編譯器的實現。
如今我們一般不需要學會如何用機器語言,組合語言來進行程式設計,我們最多知道能如何看懂組合語言就可以了。我們所編寫的高階語言,被翻譯成目標語言時,編譯器會自動進行一些優化的處理。
4. 高階語言的分類
高階語言的分類方式很多,根據設計思想特點可以劃分為程序導向型(命令式)語言、物件導向型語言、函數式語言和邏輯式語言,而根據程式碼在執行之前被翻譯的時間,劃分為兩類: 直譯語言和編譯型語言。
程序導向型(命令式)語言
這種語言的語意基礎是模擬「資料儲存/資料操作」的圖靈機可計算模型,十分符合現代電腦架構的自然實現方式。其中產生操作的主要途徑是依賴語句或命令產生的副作用。現代流行的大多數語言都是這一型別,比如 Fortran、Pascal、Cobol、C、C++、Basic、Ada、Java、C# 等,各種指令碼語言也被看作是此種型別。
物件導向語言
現代語言中的大多數都提供物件導向的支援,但有些語言是直接建立在物件導向基本模型上的,語言的語法形式的語意就是基本物件操作。主流的支援物件導向的語言有 C++ 、Java、C#、PHP、Python等,一般的語言也都支援程序導向(命令式)的程式設計方式。
函數式語言
這種語言的語意基礎是基於數學函數概念的值對映的λ運算元可計算模型。這種語言非常適合於進行人工智慧等工作的計算。典型的函數式語言如 Lisp、Haskell、ML、Scheme 、F#等。
邏輯式語言
這種語言的語意基礎是基於一組已知規則的形式邏輯系統。這種語言主要用在專家系統的實現中,最著名的邏輯式語言是 Prolog。
雖然各種語言屬於不同的型別,但它們各自都不同程度地對其他型別語言的運算模式都有所支援。
5. 直譯語言
直譯語言又可以根據語言的主動和被動特點劃分為: 標示語言和指令碼語言。標示語言時被動的等待解釋,不主動向計算機發出指令,指令碼語言一般主動發出指令讓計算機執行任務。
標示語言
標示語言,是一種將文字(Text)以及文字相關的其他資訊結合起來,展現出關於文件結構和資料處理細節的電腦文字編碼。與文字相關的其他資訊(包括文字的結構和表示資訊等)與原來的文字結合在一起,但是使用標記進行標識。
例如: xml, html, xhtml
指令碼語言
指令碼語言是為了縮短傳統的編寫-編譯-連結-執行(edit-compile-link-run)過程而建立的計算機程式語言。它的命名起源於一個指令碼「screenplay」,每次執行都會使對話方塊逐字重複。早期的指令碼語言經常被稱為批次處理語言或工作控制語言。一個指令碼通常是解釋執行而非編譯。指令碼語言通常都有簡單、易學、易用的特性,目的就是希望能讓程式設計師快速完成程式的編寫工作。
例如: JavaScript、VBScript、PHP、Python
6. 編譯型語言
編譯型語言:程式在執行之前需要一個專門的編譯過程,把程式編譯成為機器語言的檔案,執行時不需要重新翻譯,直接使用編譯的結果就行了。程式執行效率高,依賴編譯器,跨平台性差些。
例如: C、C++、c#、java等
7. 不同型別高階語言的區別
1. 標示語言不用於向計算機發出指令,常用於格式化和連結。
2. 指令碼語言介於標示語言和程式語言之間,指令碼語言指令碼語言不需要編譯,可以直接用,由直譯器來負責解釋。
3. 編譯型語言寫的程式執行之前,需要一個專門的編譯過程,把程式編譯成為機器語言的檔案,比如exe檔案,以後要執行的話就不用重新翻譯了,直接使用編譯的結果就行了(exe檔案),因為翻譯只做了一次,執行時不需要翻譯,所以編譯型語言的程式執行效率高。
8. 高階語言的一般性特點
1. 高階語言接近演算法語言,易學、易掌握,一般工程技術人員只要幾週時間的培訓就可以勝任程式設計師的工作;
2. 高階語言為程式設計師提供了結構化程式設計的環境和工具,使得設計出來的程式可讀性好,可維護性強,可靠性高;
3. 高階語言遠離機器語言,與計算機的硬體結構及指令系統無關,有更強的表達能力,因而所寫出來的程式可移植性好,重用率高;
4. 由於把繁雜瑣碎的事務交給了編譯程式去做,所以自動化程度高,開發週期短,且程式設計師得到解脫,可以集中時間和精力去從事對於他們來說更為重要的創造性勞動,以提高程式的品質;
5. 高階語言編譯生成的程式程式碼一般比用組合程式語言設計的程式程式碼要長,執行的速度也慢。所以組合語言適合編寫一些對速度和程式碼長度要求高的程式和直接控制硬體的程式,高階語言程式「看不見」機器的硬體結構,不能用於編寫直接存取機器硬體資源的系統軟體或裝置控制軟體。為此,一些高階語言提供了與組合語言之間的呼叫介面。用組合語言編寫的程式,可作為高階語言的一個外部過程或函數,利用堆疊來傳遞引數或引數的地址。
感謝大家的閱讀,希望大家收益多多。
原文連結:https://blog.csdn.net/abc_1225/article/details/80237929
以上就是程式設計小白學習php必須要了解的事的詳細內容,更多請關注TW511.COM其它相關文章!