簡介
源程式,是指未經編譯的,按照一定的程式設計語言規範書寫的,人類可讀的文本檔案。通常由高級語言編寫。源程式可以是以書籍或者磁帶或者其他載體的形式出現,但最常用的格式是文本檔案,這種典型格式的目的是為了編譯出電腦程式。源程式檔案類型是指源程式存儲時使用的殊編碼方式,便於讀取、識別。文本檔案是最常用的一種檔案類型,但很多高級語言和彙編語言都有自己的檔案類型,一般習慣以高級語言或彙編語言的檔案類型保存,主要是為了以後編譯器編譯方便。
檔案類型
檔案類型(或檔案格式)是指電腦為了存儲信息而使用的對信息的特殊編碼方式,是用於識別內部儲存的資料。比如有的儲存圖片,有的儲存程式,有的儲存文字信息。每一類信息,都可以一種或多種檔案格式保存在電腦存儲中。每一種檔案格式通常會有一種或多種擴展名可以用來識別,但也可能沒有擴展名。擴展名可以幫助應用程式識別的檔案格式。
對於硬碟機或任何電腦存儲來說,有效的信息只有0和1兩種。所以電腦必須設計有相應的方式進行信息-位元的轉換。對於不同的信息有不同的存儲格式。
有些檔案格式被設計用於存儲特殊的數據,例如:圖像檔案中的JPEG檔案格式僅用於存儲靜態的圖像,而GIF既可以存儲靜態圖像,也可以存儲簡單動畫;Quicktime格式則可以存儲多種不同的媒體類型。文本類的檔案有:text檔案一般僅存儲簡單沒有格式的ASCII或Unicode的文本;HTML檔案則可以存儲帶有格式的文本;PDF格式則可以存儲內容豐富的,圖文並茂的文本。
同一個檔案格式,用不同的程式處理可能產生截然不同的結果。例如Word 檔案,用Microsoft Word觀看的時候,可以看到文本的內容,而以無格式方式在音樂播放軟體中播放,產生的則是噪聲。一種檔案格式對某些軟體會產生有意義的結果,對另一些軟體來看,就像是毫無用途的數字垃圾。
源程式
源程式(也稱為原始碼),是指一系列人類可讀的計算機語言指令。在現代程式語言中,原始碼可以是以書籍或者磁帶的形式出現;但最常用的格式是文本檔案,這種典型格式的目的是為了編譯出電腦程式。計算機原始碼的最終目的是將人類可讀的文本翻譯成為計算機可以執行的二進制指令,這種過程叫做編譯,通過編譯器完成。
作用
原始碼主要功用有如下2種作用:
生成目標代碼,即計算機可以識別的代碼。
對軟體進行說明,即對軟體的編寫進行說明。為數不少的初學者,甚至少數有經驗的程式設計師,都忽視軟體說明的編寫;因為這部分雖然不會在生成的程式中直接顯示,也不參與編譯。但是說明對軟體的學習、分享、維護和軟體復用都有巨大的好處。因此,書寫軟體說明在業界被認為是能創造優秀程式的良好習慣,一些公司也硬性規定必須書寫。
需要指出的是,對於編譯語言來說,例如C/C++/Java,原始碼的修改不能改變已經生成的目標代碼。如果需要目標代碼做出相應的修改,必須重新編譯。但是目前有許多流行的腳本語言,例如Perl/Python都不需要重新編譯,修改完代碼可以直接執行看到修改的結果。
代碼組合
原始碼作為軟體的特殊部分,可能被包含在一個或多個檔案中。一個程式不必用同一種格式的原始碼書寫。例如,一個程式如果有C語言庫的支持,那么就可以用C語言;而另一部分為了達到比較高的運行效率,則可以用彙編語言編寫。就目前的情況而言,很少有需要直接用彙編語言來編寫的軟體了,因為很多時候編譯器生成的最佳化程式的運行效率已經很好了,更多的時候是用C/C++這樣的編譯語言來寫核心需要速度的部分,用Perl/Python/Lua等這樣的動態語言來做核心的擴展,例如界面,管理配置等等。這樣既不會損失效率,也增加了程式的靈活性。
較為複雜的軟體,一般需要數十種甚至上百種的原始碼的參與。為了降低種複雜度,必須引入一種可以描述各個原始碼之間聯繫,並且如何正確編譯的系統。在這樣的背景下,版本控制系統(VCS)誕生了,並成為研發者對代碼修訂的必備工具之一。
還有另外一種組合:將為一種平台編寫的軟體移植到另外一種平台上,例如將Windows下的軟體移植到Linux或者MacOS下,專業術語叫做軟體移植。一般可以運行在多個平台下的軟體叫做跨平台軟體。
質量與效率
對於計算機而言,並不存在真正意義上的“好”的原始碼;好的源程式,首先要是正確的代碼。然後是源程式的可維護性,好的程式風格將可以增強代碼的可維護性。原始碼是否具有可讀性,成為代碼質量/質量的標準之一。也有人將程式的效率放在可維護性之前。根據程式所要實現的功能和套用領域很多人對原始碼質量/質量有著不同的看法。但是普遍達成一致的是質量/質量高的源程式就是正確的程式。
雖然我們可以通過不同的語言來實現計算機的同一功能,但在執行效率上則存在不同。普遍規律是:越高級的語言,其執行效率越低。這也是為什麼彙編語言生成的檔案比用VB語言生成檔案普遍要小的原因。然而,使用低級語言雖可提高運行效率,卻會大大降低程式的開發效率,可能導致開發工作變得非常困難,因此多數程式設計師並不在意高級語言帶來的運行效率損失,最多只在關鍵處使用低級語言。
常見的源程式檔案類型
文本檔案
文本檔案是一種計算機檔案,它是一種典型的順序檔案,其檔案的邏輯結構又屬於流式檔案。
特別的是,文本檔案是指以ASCII碼方式(也稱文本方式)存儲的檔案,更確切地說,英文、數字等字元存儲的是ASCII碼,而漢字存儲的是機內碼。文本檔案中除了存儲檔案有效字元信息(包括能用ASCII碼字元表示的回車、換行等信息)外,不能存儲其他任何信息。
格式
ASCII
ASCII標準使得只含有ASCII字元的文本檔案可以在Unix、Macintosh、MicrosoftWindows、DOS和其它作業系統之間自由互動,而其它格式的檔案是很難做到這一點的。但是,在這些作業系統中,換行符並不相同,處理非ASCII字元的方式也不一致。
MIME
文本檔案在MIME標準中的類型為“text/plain”,此外,它通常還附加編碼的信息。在Mac OS X出現前,當Resource fork指定某一個檔案的類型為“TEXT”時,Mac OS就認為這個檔案是文本檔案。在Windows中,當一個檔案的擴展名為“txt”時,系統就認為它是一個文本檔案。此外,處於特殊的目的,有些文本檔案使用其它的擴展名。例如,計算機的原始碼也是文本檔案,它們的後綴是用來指明它的程式語言的。
.txt
.txt是包含極少格式信息的文字檔案的擴展名。.txt格式並沒有明確的定義,它通常是指那些能夠被系統終端或者簡單的文本編輯器接受的格式。任何能讀取文字的程式都能讀取帶有.txt擴展名的檔案,因此,通常認為這種檔案是通用的、跨平台的。
在英文文本檔案中,ASCII字元集是最為常見的格式,而且在許多場合,它也是默認的格式。對於帶重音符號的和其它的非ASCII字元,必須選擇一種字元編碼。在很多系統中,字元編碼是由計算機的區域設定決定的。常見的字元編碼包括支持許多歐洲語言的ISO 8859-1。
由於許多編碼只能表達有限的字元,通常它們只能用於表達幾種語言。Unicode制定了一種試圖能夠表達所有已知語言的標準,Unicode字元集非常大,它囊括了大多數已知的字元集。Unicode有多種字元編碼,其中最常見的是UTF-8,這種編碼能夠向後兼容ASCII,相同內容的的ASCII文本檔案和UTF-8文本檔案完全一致。
Objective-C原始碼檔案類型
Objective-C是C語言的擴展, 所以對於Objective-C編譯器來說,C的源檔案格式也是支持的,C的源檔案格式有.h和.c。
對於Objective-C編譯器來說,也對C語言的另一個擴展C++的源檔案格式也是支持的,C++的源檔案格式有.h和.cpp。
Objective-C也是有頭檔案和實現檔案之分,頭檔案的擴展名也是.h,實現檔案的擴展名是.m
Objective-C還支持與C++混寫, 混寫的檔案格式是.mm。
所以總結起來如下表:
檔案後綴名 | 說明 |
.h | 頭檔案,用於聲明宏、變數、函式,定義類等 |
.c | C語言實現檔案 |
.cpp | C++語言實現檔案 |
.m | Objective-C語言實現檔案 |
.mm | Objective-C與C++混合實現檔案 |
對於Objective-C的編譯器來說,不僅認識Objective-C自己的語法,還認識C的語法,也認識C++的語法,所以為了兼容這些語法,難免會出現一些新的語法,學習Objective-C的語法的時候,能從寫編譯器的角度考慮問題,將有助於理解這些語法。