iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 2
0

昨天有提到 編譯跟直譯是取決於使用它的方法。但如果更深入的講法,這觀念其實只有對一半 因為這還關係到『本身』語言的特性。像原本python是直譯的 而透過外加的功能改變它原本程式結構,就可像c語言一樣編譯成執行檔直接執行

編譯型語言

一種通過編譯器(compiler)將原始碼編譯成機器碼,透過鏈結或中間代碼將雙邊串聯才能執行的語言。
特色: 編譯器一般會有預編譯的過程對代碼進行優化,所以速度快。但一般來講可移植性較低 因為有些只能在預設的環境才能執行

直譯型語言

直接寫程式就可以不需編譯,但每次要執行都要解釋一遍才能執行。
特色: 有良好的兼容性,可移植到任何環境中執行。前提是必須有解釋器(直譯器或虛擬機器) 但其靈活部署快速仍然是好的選擇

----------------------------------------------------------

靜態語言

一般來說靜態語言都為編譯型語言(有例外),運行時不可改變其結構
主要有 C, C++, basic…

動態語言

一般來說動態語言都為直譯型語言(有例外),運行時可以改變其結構(如新的函數、功能、代碼可以被改變)
主要有 JS, python, c#…

以python 直譯語言舉例,我現在想編譯成java檔案可以嗎? 可以使用jpythonC的編譯器把.py原代碼編成.class即可 又因為它是動態語言 程式結構可被改變(程式概念有點像java的混編),自然代碼也可被引入而不會執行失敗。

  • 有例外??

就是混和型語言~
最代表性的就是Java跟c#。先來講java這個特殊結構,java雖運作結構較像直譯型語言但是屬靜態語言。但你一定想說為何java也是透過直譯器直譯成binary code。為何不是直譯型語言呢?因為java運作是比較特別的(先編譯再直譯) 但他的直譯不是直接編成執行檔喔,而是類似c#中間代碼的位元組java關聯檔案 之後才能直接透過Java環境譯成binary code。而c#的機制跟java也有點像,並非直接編成binary code 而是先編成c#關聯檔案(如.dll動態庫...) 之後執行時在轉換成binary code給電腦,因為每次執行會耗資源,所以.net語言特色就是可以回存 這樣下次就可直接執行了。

  • Java 直譯靜態
  • c# 編譯動態
    看圖說故事:
    https://ithelp.ithome.com.tw/upload/images/20190906/20117399BkZgN6iok2.png
    https://ithelp.ithome.com.tw/upload/images/20190906/201173994LkyB83f7E.png

上一篇
[D1] 程式語言的運作
下一篇
[D3] 基礎資料結構(概論)
系列文
從寫程式到脫離菜雞的歷練(以python為主的資處與檔案權限)32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言