編程語言的可移植性

  假如,你爲運行Windows 2000 的老式奔騰PC編寫了一個很好用的C++程序,而管理人員決定使用不一樣操做系統(如Mac OS X 或者 Linux)和處理器(如SPARC處理器)的計算機替換它。該程序代碼是否能夠在新平臺上運行呢?固然,必須使用爲新平臺設計的C++編譯器對程序從新編譯後再運行。若是在不修改代碼的狀況下,從新編譯程序後,程序運行良好,則說明程序是可移植的。不然反之。編程

  編程語言的可移植性,是指用一種編程語言在一個系統上編寫的程序通過不多改動或者不須要修改就能夠在其餘系統平臺上運行。編程語言

    要想了解可移植性必需要知道:1.什麼是程序?2.什麼是系統平臺?spa

  1. 什麼是程序?操作系統

  首先,咱們得知道程序的本質是什麼?程序的本質就是一連串能被CPU識別並執行的有0、1代碼組成的指令即目標代碼(由0、1組成的代碼)。不一樣類型的CPU指令集是不一樣的,相同的一段0、1代碼Intel CPU能識別,ARM CPU就不能識別產生錯誤。設計

  其次,咱們得知道程序的運行原理是什麼?你們都知道程序是運行在操做系統之上的,而你們可能不知道的是:程序要想在操做系統上運行就須要在程序的頭部嵌入一段啓動代碼,此代碼至關於程序和操做系統之間的接口。到這裏咱們能夠清楚的知道:程序 = 目標代碼 + 啓動代碼,二者缺一不可,只有這樣程序才能在系統上運行起來。blog

  不一樣的操做系統,它們的啓動代碼接口是不一樣的。例如,在Intel CPU上運行的XP和Linux的啓動代碼接口是不一樣的,因此同一種程序它們的啓動代碼多是不一樣的。可是由於都是Intel CPU,因此程序的目標代碼(0、1代碼)是相同的。接口

  什麼是程序呢?程序 = 目標代碼 + 啓動代碼編譯器

  2. 什麼是系統平臺?編譯

    這裏的系統平臺是指CPU + 操做系統的組合:如Intel CPU + Windows XP、Intel CPU + Mac Os X、Intel CPU + Linux 這是三個不一樣的系統平臺,ARM CPU + Linux 與 Intel CPU + Linux 也是不一樣的系統平臺。原理

    爲何系統平臺是CPU + 操做系統的組合呢?咱們從上面瞭解到 程序 = 目標代碼 + 啓動代碼。目標代碼隨着CPU類型的不一樣而不一樣,啓動代碼隨着操做系統的不一樣而不一樣。所以,系統平臺是CPU + 操做系統。

  3. 可移植性的本質

    那麼目標代碼和啓動代碼是怎麼生成的呢?答案是編譯器。編程語言編寫的程序首先要被編譯器編譯成目標代碼(0、1代碼),而後在目標代碼的前面插入啓動代碼,最終生成了一個完整的程序。因此編程語言的可移植性依賴於它們的編譯器是否強大,是否在多個平臺上都有這種編程語言的編譯器。例如,C編譯器在大約40種系統上可用,包括從8位微處理器的計算機到Cray超級計算機。

  要須要注意的是,程序中爲訪問特定設備(如顯示器等)或者操做系統(如Windows XP 的API)的特殊功能而專門編寫的部分一般是不能移植的。

    綜上所述,一個編程語言的可移植性強不強取決於:1.不一樣平臺編譯器的數量;2.對特殊硬件或操做系統的依賴性。

  爲了便於理解,附加一張可執行代碼的生成邏輯圖:

Good  Good  Study, Day Day Up.

順序  選擇  循環  總結

相關文章
相關標籤/搜索