iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 1
3

因為是重新報名 所以這幾天要做的事就不重新說明了

緣起與說明:第0天


在了解程式之前 一定要先了解程式是怎麼交給電腦運作的,我們先從認識程式語言開始:
程式語言的基礎分類如下

高階語言 == (python,java,c++…)
低階語言 == 組合語言(assembly)
機器語言 == 2進制代碼 人類看不懂

何謂寫程式,寫程式是寫讓人看得懂的 因為真正的01機械碼是看不懂的 但如果要讓機器看得懂 就必須要先『翻譯』給電腦看。
而不同語言有合適的翻譯方式 這就取決於不同程度的語言

組譯 A

其實低階語言與機器語言的距離其實很近 是一種與硬體有密切關係的低階語言 像機械碼的000011 就相當於組合語言的add(加) 算是一種直接對應(但不是直譯)的手段,這就是它還可以叫彙編的原因 把全部程式碼一起翻譯。所以,組譯 基本上就是給組合語言翻譯用的
https://ithelp.ithome.com.tw/upload/images/20190905/20117399gdSLNBUFlS.png
...................................................................
為何用虛線分開呢? 因為直譯與編譯才是給高階語言用的 而翻譯方式就不是作對應那麼簡單了 而是把它打散(類似加密)或按照機械碼的語法

直譯 D

這種方法其實跟真正的翻譯員有點像 就是把聽到的語言翻譯成另一人看得懂的 無法一口氣把全部翻譯出來 而且因為此特性加上還需要一個程式替他邊執行邊翻譯 所以速度是最慢的。常見的語言有(JavaScript , Python…)

編譯 C

同時也是最多被採用的一種方法 透過編譯器(編譯程式) 把指定程式轉變成機械語言供電腦執行 所以其軟體也不用再通過翻譯機進行翻譯 像電腦上的執行檔 就是編譯完成的程式 如果沒有編譯 則必須還要透過翻譯機才能執行呢~ 常見的語言有(c++,VB…)
直譯和編譯常常依程式需求來選擇需要哪一個 但基本上兩者還是有很大的區別

  • 編譯和直譯

前面有提到依程式需求;意思是其實只要是高階語言。就沒有所謂的只能直譯或編譯的語言,因為兩者各有優缺點 所以須依使用者需求來看 會被歸類成編譯直譯 只是較常被用到。 就用python來舉個例子:
https://ithelp.ithome.com.tw/upload/images/20190905/201173994qFDAVHc0R.png


下一篇
[D2] 動靜態語言
系列文
從寫程式到脫離菜雞的歷練(以python為主的資處與檔案權限)32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
fillano
iT邦超人 1 級 ‧ 2019-09-12 10:22:04

直譯跟編譯中間,可能還可以插入一種就是編譯(或直譯)成一種中間表示式,然後在虛擬機器中執行。Java或Common Language Runtime都是代表。

小雨 iT邦新手 3 級 ‧ 2019-09-15 15:26:45 檢舉

中間代碼嗎?一般都用在c類語言身上(當然java也有) 但這種代碼其實也有沾到彙編的成分 所以VM才可快速透過中間代碼做轉譯

我要留言

立即登入留言