動態語言和靜態語言的區別

編譯型語言和解釋型語言

一、編譯型語言java

需經過編譯器(compiler)將源代碼編譯成機器碼,以後才能執行的語言。通常需通過編譯(compile)、連接(linker)這兩個步驟。python

編譯是把源代碼編譯成機器碼,編程

連接是把各個模塊的機器碼和依賴庫串連起來生成可執行文件。swift

優勢:編譯器通常會有預編譯的過程對代碼進行優化。由於編譯只作一次,運行時不須要編譯,因此編譯型語言的程序執行效率高。能夠脫離語言環境獨立運行。
缺點:編譯以後若是須要修改就須要整個模塊從新編譯。編譯的時候根據對應的運行環境生成機器碼,不一樣的操做系統之間移植就會有問題,須要根據運行的操做系統環境編譯不一樣的可執行文件。
表明語言:C、C++、Pascal、Object-C以及最近很火的蘋果新語言swift緩存

二、解釋型語言app

解釋性語言的程序不須要編譯,相比編譯型語言省了道工序,解釋性語言在運行程序的時候才逐行翻譯。
優勢:有良好的平臺兼容性,在任何環境中均可以運行,前提是安裝瞭解釋器(虛擬機)。靈活,修改代碼的時候直接修改就能夠,能夠快速部署,不用停機維護。
缺點:每次運行的時候都要解釋一遍,性能上不如編譯型語言。
表明語言:JavaScript、Python、Erlang、PHP、Perl、Ruby編程語言

三、混合型語言函數

既然編譯型和解釋型各有缺點就會有人想到把兩種類型整合起來,取其精華去其糟粕。就出現了半編譯型語言。好比C#,C#在編譯的時候不是直接編譯成機器碼而是中間碼,.NET平臺提供了中間語言運行庫運行中間碼,中間語言運行庫相似於Java虛擬機。.net在編譯成IL代碼後,保存在dll中,首次運行時由JIT在編譯成機器碼緩存在內存中,下次直接執行。Java先生成字節碼再在Java虛擬機中解釋執行。嚴格來講混合型語言屬於解釋型語言。C#更接近編譯型語言。性能

動態語言和靜態語言

一、動態語言優化

是一類在運行時能夠改變其結構的語言:例如新的函數、對象、甚至代碼能夠被引進,已有的函數能夠被刪除或是其餘結構上的變化。通俗點說就是在運行時代碼能夠根據某些條件改變自身結構。
主要動態語言:Object-C、C#、JavaScript、PHP、Python、Erlang

二、靜態語言

與動態語言相對應的,運行時結構不可變的語言就是靜態語言。如Java、C、C++

有三個名詞容易混淆:
Dynamic Programming Language (動態語言或動態編程語言)
Dynamically Typed Language (動態類型語言)
Statically Typed Language (靜態類型語言)

動態類型語言和靜態類型語言

一、動態類型語言

動態類型語言和動態語言是徹底不一樣的兩個概念。

動態類型語言:是指在運行期間纔去作數據類型檢查的語言,說的是數據類型,

動態語言:說的是運行是改變結構,說的是代碼結構。
動態類型語言的數據類型不是在編譯階段決定的,而是把類型綁定延後到了運行階段。
主要語言:Python、Ruby、Erlang、JavaScript、swift、PHP、Perl

二、靜態類型語言

靜態語言的數據類型是在編譯期間(或運行以前)肯定的,編寫代碼的時候要明確肯定變量的數據類型。
主要語言:C、C++、C#、Java、Object-C

原文連接:

https://blog.csdn.net/lvxiangan/article/details/78391281

 


動態語言和靜態語言的區別

識別圖中二維碼,領取python全套視頻資料

相關文章
相關標籤/搜索