編程之開發平台與運行平台

fans news 發佈 2021-11-26T18:12:10+00:00

編程是一項複雜性的工作,解決複雜性的思想就是分治,分層抽象。編程是一個系統性的工程,其所依託的平台也是如此。

編程是一項複雜性的工作,解決複雜性的思想就是分治,分層抽象。

編程是一個系統性的工程,其所依託的平台也是如此。

一、程序開發平台

程序開發平台也就是集成開發環境(IDE,Integrated Development Environment ),是用於提供程序開發環境的應用程式,一般包括代碼編輯器、編譯器調試器圖形用戶界面等工具。集成了代碼編寫功能、分析功能、編譯功能、調試功能等一體化的開發軟體服務套件。所有具備這一特性的軟體或者軟體套(組)都可以叫集成開發環境。如Visual Studio、Eclipse、JBuilder、PyCharm等。

開發平台除了提供編輯器、編譯器、連結器、調試器等主要工具以外,通常還提供圖形界面環境,可以集成一些應用程式開發框架。這樣寫代碼便可以利用現成的庫(函數庫、類庫),還可以通過框架去繼承一些已有的類,通過重載(如C++重載虛函數)去擴充一些功能。

標準C和C++定義了9個不同的翻譯階段。當然,實現沒有必要在代碼中分成9個獨立的階段,但是翻譯的結果必須好像已經這樣做了一樣,這9個階段是:

1 物理源字符被映射到源字符集中。其中包括三字符組合(trigraph)替換以及諸如把回車/換行映射到一個單獨的MSDOS環境下的換行字符那樣的東西。在C++程序中,任何不在基礎源字符集中的字符都被它的通用字符名替換。

2 所有以反斜槓結束的行都和它們接下來的行合併,並且刪去反斜槓(物理行轉換為邏輯行)。

3 源碼被分析成預處理標記,並且注釋被一個單獨的空字符所替換,C++雙字符被識別為標記。

4 調用預處理指令並且擴展宏,對於任何被包含的文件循環地重複步驟1到4。

5 源字符退出字符常量序列,普通字符名被映射成執行字符集成員(例如,'\a'將在ASCII環境下轉換成7的一個字節值)。

6 相鄰的字符串被連接。

7 傳統的編譯:詞彙和語義分析,並翻譯成彙編語言或機器碼。

8 執行任何待解決的模板實例(C++)。

9 連結:解決外部引用,準備好程序映像以便執行。

二、程序運行平台

作業系統是程序的運行平台。同一硬體平台能夠運行多用戶、多道程序是作業系統的功能,所以用戶程序需要在作業系統的調度下運行,以便統一多個程序的資源管理。作業系統既是用戶使用的界面接口,也是程序開發的接口。

如在顯示屏上顯示一串字符的hellowWord。

#include <stdio.h>
int main()
{
    puts("hello World");
    return 0;
}

編譯成連結成的應用程式helloWord.exe與作業系統的交互如下:

(以下文本用OS表示作業系統(Operating System),用EF(Executable File)表示可執行文件或需要運行的程序helloWord.exe)

1 用戶告知OS執行EF(點擊或輸入EF路徑);

2 OS檢索EF是否是可執行文件,並通過程序首部信息確定代碼和數據在EF中的位置並計算出對應的磁碟塊地址;

3 OS創建一個新的進程,並將EF映射到該進程結構,表示由該進程執行EF;

4 OS為EF設置CPU上下文環境,並跳到程序開始處;

5 OS的調度程序選中EF進程;

6 執行EF的第一條指令,發現缺頁異常,OS分配一頁物理內存,並將代碼從磁碟讀入內存,繼續執行;

7 EF執行puts()函數(系統調用);

8 OS找到要將字符串送往的顯示器,通常設備是由一個進程控制的,所以,OS將要寫的字符串送給那個進程;

9 OS控制設備的進程告訴設備的窗口系統它要顯示字符串,窗口系統確定這是一個合法的操作,然後將字符串轉換成像素,將像素寫入設備的存儲映像區;

10 視頻硬體將像素轉換成顯示器可接收的一組控制/數據信號;

11 顯示器解釋信號,激發顯示屏顯示字符;

-End-

關鍵字: