日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言概念辨析

發(fā)布時(shí)間:2025/3/8 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言概念辨析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

編譯型與解釋型、動(dòng)態(tài)語言與靜態(tài)語言、強(qiáng)類型語言與弱類型語言概念辨析

轉(zhuǎn)自:https://blog.csdn.net/u010533843/article/details/76215487

編譯型和解釋型

我們先看看編譯型,其實(shí)它和匯編語言是一樣的:也是有一個(gè)負(fù)責(zé)翻譯的程序來對(duì)我們的源代碼進(jìn)行轉(zhuǎn)換,生成相對(duì)應(yīng)的可執(zhí)行代碼。這個(gè)過程說得專業(yè)一點(diǎn),就稱為編譯(Compile),而負(fù)責(zé)編譯的程序自然就稱為編譯器(Compiler)。如果我們寫的程序代碼都包含在一個(gè)源文件中,那么通常編譯之后就會(huì)直接生成一個(gè)可執(zhí)行文件,我們就可以直接運(yùn)行了。但對(duì)于一個(gè)比較復(fù)雜的項(xiàng)目,為了方便管理,我們通常把代碼分散在各個(gè)源文件中,作為不同的模塊來組織。這時(shí)編譯各個(gè)文件時(shí)就會(huì)生成目標(biāo)文件(Object file)而不是前面說的可執(zhí)行文件。一般一個(gè)源文件的編譯都會(huì)對(duì)應(yīng)一個(gè)目標(biāo)文件。這些目標(biāo)文件里的內(nèi)容基本上已經(jīng)是可執(zhí)行代碼了,但由于只是整個(gè)項(xiàng)目的一部分,所以我們還不能直接運(yùn)行。待所有的源文件的編譯都大功告成,我們就可以最后把這些半成品的目標(biāo)文件“打包”成一個(gè)可執(zhí)行文件了,這個(gè)工作由另一個(gè)程序負(fù)責(zé)完成,由于此過程好像是把包含可執(zhí)行代碼的目標(biāo)文件連接裝配起來,所以又稱為鏈接(Link),而負(fù)責(zé)鏈接的程序就叫……就叫鏈接程序(Linker)。鏈接程序除了鏈接目標(biāo)文件外,可能還有各種資源,像圖標(biāo)文件啊、聲音文件啊什么的,還要負(fù)責(zé)去除目標(biāo)文件之間的冗余重復(fù)代碼,等等,所以……也是挺累的。鏈接完成之后,一般就可以得到我們想要的可執(zhí)行文件了。

上面我們大概地介紹了編譯型語言的特點(diǎn),現(xiàn)在再看看解釋型。噢,從字面上看,“編譯”和“解釋”的確都有“翻譯”的意思,它們的區(qū)別則在于翻譯的時(shí)機(jī)安排不大一樣。打個(gè)比方:假如你打算閱讀一本外文書,而你不知道這門外語,那么你可以找一名翻譯,給他足夠的時(shí)間讓他從頭到尾把整本書翻譯好,然后把書的母語版交給你閱讀;或者,你也立刻讓這名翻譯輔助你閱讀,讓他一句一句給你翻譯,如果你想往回看某個(gè)章節(jié),他也得重新給你翻譯。

兩種方式,前者就相當(dāng)于我們剛才所說的編譯型:一次把所有的代碼轉(zhuǎn)換成機(jī)器語言,然后寫成可執(zhí)行文件;而后者就相當(dāng)于我們要說的解釋型:在程序運(yùn)行的前一刻,還只有源程序而沒有可執(zhí)行程序;而程序每執(zhí)行到源程序的某一條指令,則會(huì)有一個(gè)稱之為解釋程序的外殼程序?qū)⒃创a轉(zhuǎn)換成二進(jìn)制代碼以供執(zhí)行,總言之,就是不斷地解釋、執(zhí)行、解釋、執(zhí)行……所以,解釋型程序是離不開解釋程序的。像早期的BASIC就是一門經(jīng)典的解釋型語言,要執(zhí)行BASIC程序,就得進(jìn)入BASIC環(huán)境,然后才能加載程序源文件、運(yùn)行。解釋型程序中,由于程序總是以源代碼的形式出現(xiàn),因此只要有相應(yīng)的解釋器,移植幾乎不成問題。編譯型程序雖然源代碼也可以移植,但前提是必須針對(duì)不同的系統(tǒng)分別進(jìn)行編譯,對(duì)于復(fù)雜的工程來說,的確是一件不小的時(shí)間消耗,況且很可能一些細(xì)節(jié)的地方還是要修改源代碼。而且,解釋型程序省卻了編譯的步驟,修改調(diào)試也非常方便,編輯完畢之后即可立即運(yùn)行,不必像編譯型程序一樣每次進(jìn)行小小改動(dòng)都要耐心等待漫長(zhǎng)的Compiling…Linking…這樣的編譯鏈接過程。不過凡事有利有弊,由于解釋型程序是將編譯的過程放到執(zhí)行過程中,這就決定了解釋型程序注定要比編譯型慢上一大截,像幾百倍的速度差距也是不足為奇的。

編譯型與解釋型,兩者各有利弊。前者由于程序執(zhí)行速度快,同等條件下對(duì)系統(tǒng)要求較低,因此像開發(fā)操作系統(tǒng)、大型應(yīng)用程序、數(shù)據(jù)庫(kù)系統(tǒng)等時(shí)都采用它,像C/C++、Pascal/Object Pascal(Delphi)、VB等基本都可視為編譯語言,而一些網(wǎng)頁(yè)腳本、服務(wù)器腳本及輔助開發(fā)接口這樣的對(duì)速度要求不高、對(duì)不同系統(tǒng)平臺(tái)間的兼容性有一定要求的程序則通常使用解釋性語言,如Java、JavaScript、VBScript、Perl、Python等等。

但既然編譯型與解釋型各有優(yōu)缺點(diǎn)又相互對(duì)立,所以一批新興的語言都有把兩者折衷起來的趨勢(shì),例如Java語言雖然比較接近解釋型語言的特征,但在執(zhí)行之前已經(jīng)預(yù)先進(jìn)行一次預(yù)編譯,生成的代碼是介于機(jī)器碼和Java源代碼之間的中介代碼,運(yùn)行的時(shí)候則由JVM(Java的虛擬機(jī)平臺(tái),可視為解釋器)解釋執(zhí)行。它既保留了源代碼的高抽象、可移植的特點(diǎn),又已經(jīng)完成了對(duì)源代碼的大部分預(yù)編譯工作,所以執(zhí)行起來比“純解釋型”程序要快許多。而像VB6(或者以前版本)、C#這樣的語言,雖然表面上看生成的是.exe可執(zhí)行程序文件,但VB6編譯之后實(shí)際生成的也是一種中介碼,只不過編譯器在前面安插了一段自動(dòng)調(diào)用某個(gè)外部解釋器的代碼(該解釋程序獨(dú)立于用戶編寫的程序,存放于系統(tǒng)的某個(gè)DLL文件中,所有以VB6編譯生成的可執(zhí)行程序都要用到它),以解釋執(zhí)行實(shí)際的程序體。C#(以及其它.net的語言編譯器)則是生成.net目標(biāo)代碼,實(shí)際執(zhí)行時(shí)則由.net解釋系統(tǒng)(就像JVM一樣,也是一個(gè)虛擬機(jī)平臺(tái))進(jìn)行執(zhí)行。當(dāng)然.net目標(biāo)代碼已經(jīng)相當(dāng)“低級(jí)”,比較接近機(jī)器語言了,所以仍將其視為編譯語言,而且其可移植程度也沒有Java號(hào)稱的這么強(qiáng)大,Java號(hào)稱是“一次編譯,到處執(zhí)行”,而.net則是“一次編碼,到處編譯”。呵呵,當(dāng)然這些都是題外話了??傊?#xff0c;隨著設(shè)計(jì)技術(shù)與硬件的不斷發(fā)展,編譯型與解釋型兩種方式的界限正在不斷變得模糊。

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

通常我們所說的動(dòng)態(tài)語言、靜態(tài)語言是指動(dòng)態(tài)類型語言和靜態(tài)類型語言。

(1)動(dòng)態(tài)類型語言:動(dòng)態(tài)類型語言是指在運(yùn)行期間才去做數(shù)據(jù)類型檢查的語言,也就是說,在用動(dòng)態(tài)類型的語言編程時(shí),永遠(yuǎn)也不用給任何變量指定數(shù)據(jù)類型,該語言會(huì)在你第一次賦值給變量時(shí),在內(nèi)部將數(shù)據(jù)類型記錄下來。python和Ruby就是一種典型的動(dòng)態(tài)類型語言,其他的各種腳本語言如VBScript也多少屬于動(dòng)態(tài)類型語言。

(2)靜態(tài)類型語言:靜態(tài)類型語言與動(dòng)態(tài)類型語言剛好相反,它的數(shù)據(jù)類型是在編譯其間檢查的,也就是說在寫程序時(shí)要聲明所有變量的數(shù)據(jù)類型,C/C++是靜態(tài)類型語言的典型代表,其他的靜態(tài)類型語言還有C#、JAVA等。

對(duì)于動(dòng)態(tài)語言與靜態(tài)語言的區(qū)分,套用一句流行的話就是:Static typing when possible, dynamic typing when needed。

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

(1)強(qiáng)類型定義語言:強(qiáng)制數(shù)據(jù)類型定義的語言。也就是說,一旦一個(gè)變量被指定了某個(gè)數(shù)據(jù)類型,如果不經(jīng)過強(qiáng)制轉(zhuǎn)換,那么它就永遠(yuǎn)是這個(gè)數(shù)據(jù)類型了。舉個(gè)例子:如果你定義了一個(gè)整型變量a,那么程序根本不可能將a當(dāng)作字符串類型處理。強(qiáng)類型定義語言是類型安全的語言。

(2)弱類型定義語言:數(shù)據(jù)類型可以被忽略的語言。它與強(qiáng)類型定義語言相反, 一個(gè)變量可以賦不同數(shù)據(jù)類型的值。

強(qiáng)類型定義語言在速度上可能略遜色于弱類型定義語言,但是強(qiáng)類型定義語言帶來的嚴(yán)謹(jǐn)性能夠有效的避免許多錯(cuò)誤。另外,“這門語言是不是動(dòng)態(tài)語言”與“這門語言是否類型安全”之間是完全沒有聯(lián)系的!

例如:Python是動(dòng)態(tài)語言,是強(qiáng)類型定義語言(類型安全的語言); VBScript是動(dòng)態(tài)語言,是弱類型定義語言(類型不安全的語言); JAVA是靜態(tài)語言,是強(qiáng)類型定義語言(類型安全的語言)。

總結(jié)

以上是生活随笔為你收集整理的编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言概念辨析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91 在线观看 | 欧美成人午夜精品久久久 | 好吊色视频一区二区三区 | 国产学生美女无遮拦高潮视频 | 日韩黄色在线 | 日韩成人免费观看 | 超碰免费在 | 亚洲最大福利视频 | 靠逼网站 | 不卡视频一区二区三区 | 日日不卡av | 欧美色性视频 | 久久久久久一区二区 | 久久影院国产 | 免费在线看黄网址 | 农村寡妇一区二区三区 | 性色AV无码久久一区二区三 | 黑人巨大精品欧美一区二区免费 | 欧美乱妇一区二区三区 | 波多野结衣视频网址 | 青青综合网| 久久久久99精品成人片试看 | 欧美精品乱码 | 四虎影视在线播放 | 第一色影院 | 亚洲国产精品国自产拍av | 豆花在线观看 | 欧美14sex性hd摘花 | 93久久精品日日躁夜夜躁欧美 | 久久精品97 | 日韩毛片一区 | 香蕉成人网 | 久久99久久99精品 | 在线天堂www在线国语对白 | 成年人在线视频网站 | 国产精品自拍av | 国产精品美女主播 | 银杏av| 国产免费av一区二区三区 | 国产真人做爰毛片视频直播 | 精品自拍视频在线观看 | 福利姬在线观看 | 在线免费观看一区二区三区 | 一级在线 | 亚洲第一狼人区 | xxxxx在线视频| av电影在线播放 | 日本公妇乱偷中文字幕 | 久久五月综合 | 91亚色视频在线观看 | 8x8x永久免费视频 | 国产乱淫a∨片免费视频 | 香蕉尹人网 | 亚洲爆爽av | 日日夜夜一区二区 | 东京热一本视频一区 | www色视频 | 二区三区在线观看 | 欧美日韩一区二区三区不卡视频 | 久艹av| 成人在线观看网 | 尤物视频在线免费观看 | 伊人色综合久久久 | 精品黑人一区二区三区在线观看 | 美女大逼 | 天天操天天射天天舔 | 一区二区美女视频 | 草莓视频18免费观看 | 极品另类| 三级av在线免费观看 | 中文字幕丰满乱子伦无码专区 | 九九色综合网 | 国产欧美日韩精品在线观看 | 亚洲天堂视频在线观看 | 成人免费av| 羞羞的软件| 亚州av免费| av老司机在线 | 日本福利一区 | 在线观看日韩av | 伊人久久大香线蕉综合75 | 三上悠亚影音先锋 | jizz欧美大片 | 黄色大片一级 | 国产资源在线看 | 日韩第一页在线观看 | 久久久久久香蕉 | 美女隐私无遮挡免费 | 日韩a级黄色片 | 人人狠狠 | 小俊大肉大捧一进一出好爽 | 欧美一区二区三区观看 | 大地资源影视在线播放观看高清视频 | 国产精品探花在线观看 | 欧美综合在线观看 | 免费大片黄在线观看视频网站 | 隔壁邻居是巨爆乳寡妇 | 成人午夜影片 | 欧美日本韩国一区 |