翻譯高階語言成機器語言-Python採用的方式
在這篇介紹了編譯器與直譯器,而Python在被翻譯的過程,同時使用了兩者。
Python 同時使用了編譯器以及直譯器,但外顯的行為較近似於使用直譯器實作的語言:Runtime 時進行 parse,執行效率較緩慢,每次的執行是一行程式,若是程式存在語法錯誤,則程式會執行到語法錯誤的那行程式碼才會無法繼續,可以即時測試局部的程式,除錯速度通成較快……
Python 所採用的方式是首先將 source code 編譯成 bytecode*,bytecode再經過直譯器(Python Virtual Machine, PVM)直譯成 machine code。而Python的直譯器是被編譯過得執行檔,透過不同語言也有不同的實作版本,最通用也是官方的版本是透過 C 實作直譯器,稱作 Cpython,透過 Java 實作的稱作 Jython,透過 C# 實作的是IronPython,透過 Python 實作的是 PyPy。而其他同時使用到編譯器以及直譯器的「直譯語言」包括Lisp,Pascal 與 BASIC等等。
*類似於machine code,但實際上無法被cpu執行的 binary。Python 的 bytecode 存放於
_pycache__
目錄底下的.pyc
。
Source code in python:
1 | print("hello world\n") #executable |
Output:
1 | hello world #executable |