從直譯器的角度看, Java 和 Python 的解釋過程原理是一樣的吧?

Python James369 • at 2021-02-22 16:05:56 • 7 Views
以前一直覺得 python 是邊解釋邊執行的,今天看到 pyc 位元組碼,原來 python 也是有位元組碼的。(既然如此,python 就可以直接部屬 pyc,從而隱藏原始碼?)
那麼,python 不是也跟 java 一樣了?,先轉換成中間位元組碼,再做解釋執行.

只不過,java 通常稱為虛擬機器,似乎比直譯器更加高大上一些?
我有一個類比,用來比喻它是玩具:
C++語言可以用來實現多種其它語言,比如 C++實現的 js 直譯器,C++實現的 python,C++實現的 java 虛擬機器。
--- 就好比一把鑰匙可以開好多鎖,這是一把萬能鑰匙。
Python 可以被多種語言實現,比如 c 語言實現的 cpython,java 實現的 jython,c#實現的 IronPython 。
--- 就好比一把鎖可以被多把鑰匙開啟,說明這把鎖壞了。。
Total: 38
  • James369 2021-02-22 15:15:30
    我總感覺 python 只是個玩具一樣的語言
  • Patrick95 2021-02-22 15:15:30
    只能說是相似的,Python 也是有虛擬機器來跑位元組碼的吧。
  • echo1937 2021-02-22 15:15:30
    Java 是編譯型語言還是解釋型語言? - RednaxelaFX 的回答 - 知乎
    https://www.zhihu.com/question/19608553/answer/18628779
  • misaka19000 2021-02-22 15:15:30
    是一樣的,都是虛擬機器
  • 1490213 2021-02-22 15:09:31
    建議先看下基礎知識,比如瀏覽一下 engineering a compiler 2ed (編譯器設計第二版)的第一章。
  • RockShake 2021-02-22 17:15:03
    樓主說的沒問題,只不過 Java 把這個過程顯示出來,Python 隱藏起來了而已,看起來 Python 像是解釋型語言
  • amimo 2021-02-22 20:14:00
    一樣。
    一般語言不區分編譯或解釋。比如你可以用 llvm 把 c 編譯成位元組碼(.bc),然後使用 llvm 直譯器執行,也可以直接編譯成二執行(.exe),直接執行。
  • DoctorCat 2021-02-22 21:12:36
    @James369 玩具? 生產環境大面積應用了好吧。btw 沒準你看 LISP 後更覺得是玩具了…
  • fiveelementgid 2021-02-22 21:14:36
    @DoctorCat 啊這
    我們的 python 真的是太厲害啦
    弱型別語言啥時候ヘ(。□°)ヘ覺得自己不是玩具了
  • lpts007 2021-02-22 21:15:36
    @fiveelementgid 但是 python 不是弱型別啊
  • mayx 2021-02-22 21:15:37
    @fiveelementgid 好傢伙,js 都成玩具了?
  • Lemeng 2021-02-22 21:15:37
    嗯,差不多
  • DoctorCat 2021-02-22 22:14:37
    @fiveelementgid 不想跟你口水戰,但如果是個聰明人,為支援你自己的觀點首先請自證:弱型別語言不該存在的意義 /為何不應在生產環境中使用 …

    張口就來可不是個好習慣呢 ヘ(。□°)ヘ
  • 009694 2021-02-23 00:16:37
    @James369 語言都是為了解決特定的問題而生,不要因為某個語言解決不了自己的問題就說它玩具,沒意義
  • 009694 2021-02-23 00:16:37
    @DoctorCat 你被他帶坑裡去了。py 是強型別語言。 顯然他連強弱型別動態靜態都分不清只聽說了就來談論好不好
  • Mohanson 2021-02-23 01:12:25
    關於 py 是虛擬機器還是直譯器看這篇
    http://accu.cc/content/gameboy/history/runtime/
  • DOLLOR 2021-02-23 01:16:25
    @009694
    用了萬能的 void*,C 語言也是弱型別。😉
  • ipwx 2021-02-23 02:12:25
    java 比 python 牛逼的地方在於 jit 。樓主可以去了解一下
  • ipwx 2021-02-23 02:13:25
    @James369
    @fiveelementgid

    哦,玩具語言支援了最近十年深度學習的發展,催生了幾千億的產業(你去看看憑啥螞蟻金服能讓銀行出 98% 的錢和它搞聯合貸款,結果利潤大頭還給螞蟻金服)。支援了大型虛擬化雲的運維。就這兩點就不能是玩具。

    結果到你倆這裡就是玩具咯
  • felixcode 2021-02-23 02:14:25
    要是有人把 js python C Go PHP C++ rust 統統說成玩具了,你們會不會覺得他特別特別強大?

    或者僅僅是無知而自大?
  • lraining 2021-02-23 02:15:25
    Java 的虛擬機器有多種,每種都是不同的直譯器實現,Python 也有多種直譯器實現,理論上你可以生成 Python 位元組碼讓 Python 執行在 Java 虛擬機器上
  • LeeReamond 2021-02-23 04:16:25
    @fiveelementgid 先問是不是,再問為什麼,首先 python 是強型別語言不是弱型別語言,你連動態型別和強弱型別都分不清楚就來噴人了,這。。
  • Osk 2021-02-23 09:12:38
    python 是動態強型別

    C 語言是弱型別,原來是玩具 /狗頭 /


    python 在執行前一般會生成 __pycache__ 資料夾,裡面是 pyc 。有了對應的 pyc,你把 py 原始檔刪了也能跑。
    釋出時可以用 compileall 模組編譯出 pyc, 只發布 pyc,但注意:印象中 pyc 和直譯器版本繫結了,另外有些商業軟體會魔改直譯器,這樣它生成的 pyc 一般工具難以反編譯一些。
  • catsoul 2021-02-23 09:16:38
    能說出 python 是弱型別這種話的就沒必要繼續討論了吧

    這種就是郭德綱說的那個“火箭該用精煤”的情況
  • vipppppp 2021-02-23 09:17:38
    @fiveelementgid 啊這
    陰陽怪氣的時候要先調查清楚,不然就很多人看笑話
  • XIVN1987 2021-02-23 10:15:38
    差遠了,,Java 有 JIT,,
  • zone10 2021-02-23 10:15:38
    @fiveelementgid 不好意思 Python 是強型別, C 語言才是弱型別, 玩具罷了, 隔壁 JS 表示躺著也中槍
  • defclass 2021-02-23 10:09:38
    @DoctorCat 為啥覺得 lisp 更是玩具 ?
  • acmore 2021-02-23 11:12:38
    是不是玩具,是不是生產工具都是**無聊且無用**的爭論。
    不過 Python 是強型別 & 動態型別語言。即 “不能隱式轉換型別,且型別在執行時推定”。

    1 + '1' = Error => 強型別;
    1 + '1' = '11' => 弱型別;
  • James369 2021-02-23 11:12:38
    @XIVN1987 特意查了一下,python 也有 JIT 了,比如 pypy 和 cpython
Add a reply
For Commenting you need to Login. If you dont have a Account you need to Register.