編程語言的可移植性


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

  編程語言的可移植性,是指用一種編程語言在一個系統上編寫的程序經過很少改動或者不需要修改就可以在其他系統平台上運行。

    要想了解可移植性必須要知道:1.什么是程序?2.什么是系統平台?

  1. 什么是程序?

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

  其次,我們得知道程序的運行原理是什么?大家都知道程序是運行在操作系統之上的,而大家可能不知道的是:程序要想在操作系統上運行就需要在程序的頭部嵌入一段啟動代碼,此代碼相當於程序和操作系統之間的接口。到這里我們可以清楚的知道:程序 = 目標代碼 + 啟動代碼,兩者缺一不可,只有這樣程序才能在系統上運行起來。

  不同的操作系統,它們的啟動代碼接口是不同的。例如,在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.

順序  選擇  循環  總結


免責聲明!

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



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