[請益] 想不通直譯器vs編譯器vs機器碼的問題

看板Soft_Job作者 (梅長蘇)時間6年前 (2018/05/08 20:26), 6年前編輯推噓6(6041)
留言47則, 19人參與, 6年前最新討論串1/9 (看更多)
請問一下 為何直譯器將source code轉譯成機器碼, 不會產生不同電腦的機器語言不同 而無法執行的問題??? 反觀同樣把source code轉譯成機器碼的編譯器 卻會有此類問題呢??? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.242.107 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1525782413.A.89A.html ※ 編輯: dragoncfe168 (220.134.242.107), 05/08/2018 20:28:21

05/08 20:32, 6年前 , 1F
因為前者轉譯的時間點是執行時阿幹
05/08 20:32, 1F

05/08 20:38, 6年前 , 2F
不懂耶 不管執不執行 機器碼難道會有兩種標準?
05/08 20:38, 2F

05/08 20:40, 6年前 , 3F
同樣的指令在不同機器上是不同的機器碼
05/08 20:40, 3F

05/08 20:41, 6年前 , 4F
不懂你的問題 你是遇到什麼狀況?
05/08 20:41, 4F

05/08 20:41, 6年前 , 5F
難道同樣的指令在直譯器與編譯器上是兩套標準??
05/08 20:41, 5F

05/08 20:43, 6年前 , 6F
我的問題是編譯器會受制於機器語言 為何直譯器不會?
05/08 20:43, 6F

05/08 20:44, 6年前 , 7F
為何直譯器不管任何機器語言都可以run??
05/08 20:44, 7F

05/08 20:46, 6年前 , 8F
直譯器本身也是binary阿,怎麼不會
05/08 20:46, 8F

05/08 20:51, 6年前 , 9F
某程式指令用機器a的語言表示是0000;用機器b可能是0010;
05/08 20:51, 9F

05/08 20:51, 6年前 , 10F
所以機器a編譯好機器b是看不懂的,直譯器是執行時才決定
05/08 20:51, 10F

05/08 20:51, 6年前 , 11F
用0000還是0010
05/08 20:51, 11F

05/08 21:24, 6年前 , 12F
直譯器是讀程式碼執行,不是編機械碼
05/08 21:24, 12F

05/08 21:27, 6年前 , 13F
你在a機器裝b直譯器也不能跑呀
05/08 21:27, 13F

05/08 21:37, 6年前 , 14F
去拿現成程式語言去研究他的設計不是更快
05/08 21:37, 14F

05/08 21:38, 6年前 , 15F
書上講的只是大概的概念而已 硬著頭皮吸收你也不明白人家怎
05/08 21:38, 15F

05/08 21:38, 6年前 , 16F
麼幹
05/08 21:38, 16F

05/08 21:54, 6年前 , 17F
多看點書...
05/08 21:54, 17F

05/08 22:02, 6年前 , 18F
不同平台要用對應的直譯器
05/08 22:02, 18F

05/08 22:19, 6年前 , 19F
請去看LLVM相關說明在問吧
05/08 22:19, 19F

05/08 22:48, 6年前 , 20F
編譯器就像你都不知道眼前這個人懂什麼語言就開始把腦
05/08 22:48, 20F

05/08 22:48, 6年前 , 21F
中的概念轉換成某個語言講給他聽,假設是中文好了
05/08 22:48, 21F

05/08 22:49, 6年前 , 22F
萬一他不會中文就GG了,直譯器則是當你知道他只會講英
05/08 22:49, 22F

05/08 22:49, 6年前 , 23F
文的時候才把腦袋中想講的東西翻成英文講給他聽
05/08 22:49, 23F

05/08 22:49, 6年前 , 24F
萬一你不會講英文那也是GG,所以直譯器也是會有同樣的
05/08 22:49, 24F

05/08 22:49, 6年前 , 25F
問題拉
05/08 22:49, 25F

05/08 22:52, 6年前 , 26F
程式語言就只是給人類看的 編譯器就是把人類看的語言轉
05/08 22:52, 26F

05/08 22:52, 6年前 , 27F
成機器看得懂的語言 但是每種機器懂的語言不同
05/08 22:52, 27F

05/08 22:52, 6年前 , 28F
所以編譯器就自動轉成相對應的機器馬
05/08 22:52, 28F

05/09 00:07, 6年前 , 29F
呃這...多看點書+1
05/09 00:07, 29F

05/09 09:13, 6年前 , 30F
直譯器: 一份英文稿 交給日本人跟台灣人翻
05/09 09:13, 30F

05/09 09:13, 6年前 , 31F
編譯器: 一份英文稿 米果人翻好 給日本人跟台灣人看
05/09 09:13, 31F

05/09 09:13, 6年前 , 32F
因為直譯器沒有轉機器碼 是直接執行
05/09 09:13, 32F

05/09 09:14, 6年前 , 33F
跨平台的問題 直譯器已經幫你做了 不是不用做
05/09 09:14, 33F

05/09 16:07, 6年前 , 34F
不同架構的電腦上的直譯器 binary 不同,所以產生的
05/09 16:07, 34F

05/09 16:07, 6年前 , 35F
指令也不同,每個平台的直譯器都是用那個平臺的 comp
05/09 16:07, 35F

05/09 16:07, 6年前 , 36F
iler 編出來的
05/09 16:07, 36F

05/09 19:59, 6年前 , 37F
直譯器語言寫給直譯器看的與系統或平台無關,反之c++編
05/09 19:59, 37F

05/09 19:59, 6年前 , 38F
譯器就是寫給系統看的,就算是win gcc 最後system call
05/09 19:59, 38F

05/09 19:59, 6年前 , 39F
還是呼叫到os,所以才有平台寫法的差別。但go也算是你所
05/09 19:59, 39F

05/09 19:59, 6年前 , 40F
謂直譯器的概念,雖然它是編譯式?
05/09 19:59, 40F

05/11 22:43, 6年前 , 41F
沒說到點,直譯器說實在就是提供一套 API 介面供你呼叫
05/11 22:43, 41F

05/11 22:44, 6年前 , 42F
你寫的程式碼能夠跨平台是因為他在不同平台都實做了一套
05/11 22:44, 42F

05/11 22:45, 6年前 , 43F
相同 API 介面的直譯器,才讓你同份 code 能在不同平台
05/11 22:45, 43F

05/11 22:46, 6年前 , 44F
上面跑,編譯器只是根據每個平台先編成那個平台專用語言
05/11 22:46, 44F

05/11 22:50, 6年前 , 45F
像 python 直譯器實做就有 cpython jypthon ironpython
05/11 22:50, 45F

05/11 22:51, 6年前 , 46F
分別是用 C, java, C# 實做的,但是他們都能看懂一樣
05/11 22:51, 46F

05/11 22:52, 6年前 , 47F
的語法
05/11 22:52, 47F
文章代碼(AID): #1QyPUDYQ (Soft_Job)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 9 篇):
文章代碼(AID): #1QyPUDYQ (Soft_Job)