編譯型語言杜漠、解釋型語言、靜態(tài)類型語言察净、動(dòng)態(tài)類型語言概念與區(qū)別

編譯型語言和解釋型語言

1驾茴、編譯型語言

需通過編譯器(compiler)將源代碼編譯成機(jī)器碼,之后才能執(zhí)行的語言氢卡。一般需經(jīng)過編譯(compile)锈至、鏈接(linker)這兩個(gè)步驟。編譯是把源代碼編譯成機(jī)器碼译秦,鏈接是把各個(gè)模塊的機(jī)器碼和依賴庫串連起來生成可執(zhí)行文件峡捡。

優(yōu)點(diǎn):編譯器一般會(huì)有預(yù)編譯的過程對(duì)代碼進(jìn)行優(yōu)化。因?yàn)榫幾g只做一次筑悴,運(yùn)行時(shí)不需要編譯们拙,所以編譯型語言的程序執(zhí)行效率高「罅撸可以脫離語言環(huán)境獨(dú)立運(yùn)行砚婆。

缺點(diǎn):編譯之后如果需要修改就需要整個(gè)模塊重新編譯。編譯的時(shí)候根據(jù)對(duì)應(yīng)的運(yùn)行環(huán)境生成機(jī)器碼突勇,不同的操作系統(tǒng)之間移植就會(huì)有問題装盯,需要根據(jù)運(yùn)行的操作系統(tǒng)環(huán)境編譯不同的可執(zhí)行文件。

代表語言:C甲馋、C++埂奈、Pascal、Object-C以及最近很火的蘋果新語言swift

2定躏、解釋型語言

解釋性語言的程序不需要編譯账磺,相比編譯型語言省了道工序芹敌,解釋性語言在運(yùn)行程序的時(shí)候才逐行翻譯。

優(yōu)點(diǎn):有良好的平臺(tái)兼容性垮抗,在任何環(huán)境中都可以運(yùn)行氏捞,前提是安裝了解釋器(虛擬機(jī))。靈活借宵,修改代碼的時(shí)候直接修改就可以,可以快速部署矾削,不用停機(jī)維護(hù)壤玫。

缺點(diǎn):每次運(yùn)行的時(shí)候都要解釋一遍,性能上不如編譯型語言哼凯。

代表語言:JavaScript欲间、Python、Erlang断部、PHP猎贴、Perl、Ruby

3蝴光、混合型語言

既然編譯型和解釋型各有缺點(diǎn)就會(huì)有人想到把兩種類型整合起來她渴,取其精華去其糟粕。就出現(xiàn)了半編譯型語言蔑祟。比如C#,C#在編譯的時(shí)候不是直接編譯成機(jī)器碼而是中間碼趁耗,.NET平臺(tái)提供了中間語言運(yùn)行庫運(yùn)行中間碼,中間語言運(yùn)行庫類似于Java虛擬機(jī)疆虚。.net在編譯成IL代碼后苛败,保存在dll中,首次運(yùn)行時(shí)由JIT在編譯成機(jī)器碼緩存在內(nèi)存中径簿,下次直接執(zhí)行(博友回復(fù)指出)罢屈。我個(gè)人認(rèn)為拋開一切的偏見C#是這個(gè)星球上最好的編程語言∑ぃ可惜微軟的政策限制了C#的推廣缠捌。

Java先生成字節(jié)碼再在Java虛擬機(jī)中解釋執(zhí)行。

嚴(yán)格來說混合型語言屬于解釋型語言译蒂。C#更接近編譯型語言鄙币。

動(dòng)態(tài)語言和靜態(tài)語言

1、動(dòng)態(tài)語言

是一類在運(yùn)行時(shí)可以改變其結(jié)構(gòu)的語言:例如新的函數(shù)蹂随、對(duì)象十嘿、甚至代碼可以被引進(jìn),已有的函數(shù)可以被刪除或是其他結(jié)構(gòu)上的變化岳锁。通俗點(diǎn)說就是在運(yùn)行時(shí)代碼可以根據(jù)某些條件改變自身結(jié)構(gòu)绩衷。

主要?jiǎng)討B(tài)語言:Object-C、C#、JavaScript咳燕、PHP勿决、Python、Erlang招盲。

2低缩、靜態(tài)語言

與動(dòng)態(tài)語言相對(duì)應(yīng)的,運(yùn)行時(shí)結(jié)構(gòu)不可變的語言就是靜態(tài)語言曹货。如Java咆繁、C、C++顶籽。

3玩般、注意:

很多人認(rèn)為解釋型語言都是動(dòng)態(tài)語言,這個(gè)觀點(diǎn)是錯(cuò)的礼饱!Java是解釋型語言但是不是動(dòng)態(tài)語言坏为,Java不能在運(yùn)行的時(shí)候改變自己結(jié)構(gòu)。反之成立嗎镊绪?動(dòng)態(tài)語言都是解釋型語言匀伏。也是錯(cuò)的!Object-C是編譯型語言蝴韭,但是他是動(dòng)態(tài)語言帘撰。得益于特有的run time機(jī)制(準(zhǔn)確說run time不是語法特性是運(yùn)行時(shí)環(huán)境,這里不展開)OC代碼是可以在運(yùn)行的時(shí)候插入万皿、替換方法的摧找。

C#也是動(dòng)態(tài)語言,通過C#的反射機(jī)制可以動(dòng)態(tài)的插入一段代碼執(zhí)行牢硅。所以我說C#是這個(gè)星球最好的編程語言蹬耘。

動(dòng)態(tài)類型語言和靜態(tài)類型語言

1、動(dòng)態(tài)類型語言

很多網(wǎng)上資料把動(dòng)態(tài)類型語言和動(dòng)態(tài)語言混為一談减余,簡(jiǎn)直是誤人子弟综苔。動(dòng)態(tài)類型語言和動(dòng)態(tài)語言是完全不同的兩個(gè)概念。動(dòng)態(tài)類型語言是指在運(yùn)行期間才去做數(shù)據(jù)類型檢查的語言位岔,說的是數(shù)據(jù)類型如筛,動(dòng)態(tài)語言說的是運(yùn)行是改變結(jié)構(gòu),說的是代碼結(jié)構(gòu)抒抬。

動(dòng)態(tài)類型語言的數(shù)據(jù)類型不是在編譯階段決定的杨刨,而是把類型綁定延后到了運(yùn)行階段。

主要語言:Python擦剑、Ruby妖胀、Erlang芥颈、JavaScript、swift赚抡、PHP爬坑、Perl。

2涂臣、靜態(tài)類型語言

靜態(tài)語言的數(shù)據(jù)類型是在編譯其間確定的或者說運(yùn)行之前確定的盾计,編寫代碼的時(shí)候要明確確定變量的數(shù)據(jù)類型。

主要語言:C赁遗、C++署辉、C#、Java吼和、Object-C涨薪。

3骑素、注意:

相當(dāng)一部分程序員炫乓,也包括曾經(jīng)的我,認(rèn)為解釋型語言都是動(dòng)態(tài)類型語言献丑,編譯型語言都是靜態(tài)類型語言末捣。這個(gè)也是錯(cuò)的。swift是編譯型語言但是它也是動(dòng)態(tài)類型語言创橄。C#和Java是解釋型語言也是靜態(tài)類型語言箩做。

強(qiáng)類型語言和弱類型語言

1、強(qiáng)類型語言:

強(qiáng)類型語言妥畏,一旦一個(gè)變量被指定了某個(gè)數(shù)據(jù)類型邦邦,如果不經(jīng)過強(qiáng)制類型轉(zhuǎn)換,那么它就永遠(yuǎn)是這個(gè)數(shù)據(jù)類型醉蚁。你不能把一個(gè)整形變量當(dāng)成一個(gè)字符串來處理燃辖。

主要語言:Java、C#网棍、Python黔龟、Object-C、Ruby

2滥玷、弱類型語言:

數(shù)據(jù)類型可以被忽略氏身,一個(gè)變量可以賦不同數(shù)據(jù)類型的值。一旦給一個(gè)整型變量a賦一個(gè)字符串值惑畴,那么a就變成字符類型蛋欣。

主要語言:JavaScript、PHP如贷、C豁状、C++(C和C++有爭(zhēng)議捉偏,但是確實(shí)可以給一個(gè)字符變量賦整形值,可能初衷是強(qiáng)類型泻红,形態(tài)上接近弱類型)

3夭禽、注意:

一個(gè)語言是不是強(qiáng)類型語言和是不是動(dòng)態(tài)類型語言也沒有必然聯(lián)系。Python是動(dòng)態(tài)類型語言谊路,是強(qiáng)類型語言讹躯。JavaScript是動(dòng)態(tài)類型語言,是弱類型語言缠劝。Java是靜態(tài)類型語言潮梯,是強(qiáng)類型語言。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末惨恭,一起剝皮案震驚了整個(gè)濱河市秉馏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌脱羡,老刑警劉巖萝究,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異锉罐,居然都是意外死亡帆竹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門脓规,熙熙樓的掌柜王于貴愁眉苦臉地迎上來栽连,“玉大人,你說我怎么就攤上這事侨舆∶虢簦” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵挨下,是天一觀的道長(zhǎng)熔恢。 經(jīng)常有香客問我,道長(zhǎng)复颈,這世上最難降的妖魔是什么绩聘? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮耗啦,結(jié)果婚禮上凿菩,老公的妹妹穿的比我還像新娘。我一直安慰自己帜讲,他們只是感情好衅谷,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著似将,像睡著了一般获黔。 火紅的嫁衣襯著肌膚如雪蚀苛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天玷氏,我揣著相機(jī)與錄音堵未,去河邊找鬼。 笑死盏触,一個(gè)胖子當(dāng)著我的面吹牛渗蟹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赞辩,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼雌芽,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了辨嗽?” 一聲冷哼從身側(cè)響起世落,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎糟需,沒想到半個(gè)月后屉佳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡篮灼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年忘古,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了徘禁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诅诱。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖送朱,靈堂內(nèi)的尸體忽然破棺而出娘荡,到底是詐尸還是另有隱情,我是刑警寧澤驶沼,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布炮沐,位于F島的核電站,受9級(jí)特大地震影響回怜,放射性物質(zhì)發(fā)生泄漏大年。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一玉雾、第九天 我趴在偏房一處隱蔽的房頂上張望翔试。 院中可真熱鬧,春花似錦复旬、人聲如沸垦缅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壁涎。三九已至凡恍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間怔球,已是汗流浹背嚼酝。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留竟坛,地道東北人革半。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像流码,于是被迫代替她去往敵國(guó)和親又官。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容