Objective-C 是不是動態(tài)語言 ?

一、動態(tài)語言和靜態(tài)語言的概念

首先,我們了解一個概念:動態(tài)語言和靜態(tài)語言的概念;

靜態(tài):編譯期間
動態(tài):運行期間

動態(tài)語言:是指程序運行時,可以改變程序結(jié)構(gòu),引入新的函數(shù)(方法)、已有的函數(shù)可以被刪除等在結(jié)構(gòu)上的變化;程序運行期間才去做數(shù)據(jù)類型檢查的語言,即在動態(tài)類型的語言編程時,永遠不要給任何變量指定數(shù)據(jù)類型,該語言在你第一次賦值給變量時,在內(nèi)部將數(shù)據(jù)類型記錄下來;

舉例:JavaScript、Ruby、Python … 都屬于動態(tài)語言;

靜態(tài)語言:在編譯時,變量的數(shù)據(jù)類型已經(jīng)確定,多數(shù)靜態(tài)類型語言要求在使用變量之前必須聲明數(shù)據(jù)類型;
舉例:C、C++ 、Java、C# … 等語言靜態(tài)語言;

二、Objective-C 是不是動態(tài)語言 ?

這需要從 Objective-C 的發(fā)展歷史說起:
Tom Love 和 Brad Cox 這兩名開發(fā)人員在 ITT 公司接觸到 Smalltalk ,Cox 想要在 C 語言中加入面相對象功能,只用 C 語言就可以進行面相對象編程,將文件擴展名命名為:COOPC,表示用 C 語言實現(xiàn)面向?qū)ο?。后來兩人成了一家公司,新語言被命名為 Objective-C 。若干年后,Steve Jobs 領(lǐng)導(dǎo)的一家名為 NeXT 的小型創(chuàng)業(yè)公司,獲準(zhǔn)使用并標(biāo)準(zhǔn)化 Objective - C 語言,以作為 NeXT - step 操作系統(tǒng)的主要語言,NeXT 最終被蘋果收購,NeXTstep 操作系統(tǒng)最終發(fā)展為 Mac OS 系統(tǒng)。
由此可見,Objective-C 是對 C 語言進行擴展,具備靜態(tài)語言的特性;
Smalltalk 是動態(tài)語言的始祖,因此 Objective - C 是具備動態(tài)語言的特性的,可以說 Objective-C 是動態(tài)語言。

    Objective - C 在純靜態(tài)語言和純動態(tài)語言之間實現(xiàn)了平衡,是少有的幾種通常進行編譯的語言,不僅能從類似 C 和 C++ 在編譯時對語法進行檢查,還能從負責(zé)處理動態(tài)對象類型的動態(tài)運行時受益;

因此,可以說 Objective - C 是動態(tài)語言,但是是比較特殊的動態(tài)語言;

Java 和 Objective-C 為何有很多的共同點:

Objective-C 實際上影響了很多的其他編程技術(shù),比如 Java 語言和 Objective-C 具有很多共同點。原因是:在 Objective-C 的早期,NeXT 和 Sun Microsystems 合作開發(fā) OpenStep 平臺,用來開發(fā)這種技術(shù)的語言就是 Objective-C 。當(dāng) NeXT 計算機的表現(xiàn)沒有達到 Sun 公司的預(yù)期要求是,NeXT 走向了失敗;
Sun 公司決定自己開發(fā)語言和跨平臺的開發(fā)包 —— Java ,Java 工程師都是通曉 Objective-C 的,因為 Objective - C 是他們在使用 Java 之前的首選語言。后來一些較好的功能被引入 Java 中 ,因此,Java 和 Objective-C 具有很多的共同點。

舉例以更好的說明 Objective-C 是具備動態(tài)特性和靜態(tài)特性于一身的語言:

C 語言(靜態(tài)語言特性),函數(shù)的調(diào)用在編譯的時候,會決定調(diào)用那個函數(shù);

Objective - C (靜態(tài)語言特性):在編譯時,并不能決定真正調(diào)用哪個函數(shù),但是 Objective-C 會檢查調(diào)用函數(shù);

于是就出現(xiàn)了一種特殊情況:
在編譯階段,C 語言調(diào)用為實現(xiàn)的函數(shù),就會報錯;
在編譯階段,OC 時可以調(diào)用任何函數(shù)的,即使這個函數(shù)并未實現(xiàn),只要聲明過就不會報錯;

OC 語言,具有動態(tài)調(diào)用的過程,僅當(dāng)真正運行時,才能會根據(jù)函數(shù)名找到對應(yīng)的函數(shù)來調(diào)用。此時,函數(shù)如果仍然沒有實現(xiàn),就會報錯了;

C 語言程序的執(zhí)行過程:

源程序 - 預(yù)處理 - 編譯器 - 匯編器 - 鏈接器 - 可執(zhí)行目標(biāo)程序(二進制)

關(guān)于執(zhí)行效率:靜態(tài)語言執(zhí)行效率要比動態(tài)語言高;

解釋:因為一部分 CPU 計算損耗在 RunTime 過程中,而靜態(tài)語言生成的機器指令更簡潔;正是因為這個原因,所以開發(fā)語言的人付出了很大一部分努力保持 Runtime 小巧;

Objective-C 語言是 C 語言的超集 + 一個小巧的 Runtime 環(huán)境

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容