天天看點

腳本語言與編譯型語言

不同

  • 編譯型語言:
    • 編譯型程式所生成的指令時二進制形式的機器碼和操作數, 就是所謂的二進制流, 二進制程式是CPU可以直接識别執行的
  • 解釋性語言:
    • 腳本語言的解釋器是二進制形式的, 可以被CPU直接識别的, 但是腳本解釋器的輸入是腳本語言字元串, CPU執行腳本語言解釋器, 而腳本語言解釋器去執行腳本語言, 中間隔了一層, 腳本程式是通過CPU間接運作的
    • 腳本語言的兩大類:
      • 一邊解釋一邊執行-->是以不會有opcode生成
      • 分析整個檔案後建立抽象文法樹生成opcode, 有了指令之後讓解釋器去執行opcode(包括操作碼和操作數), 這就相當于CPU執行彙編語言一樣
      • ==== 華麗的分割線 =====
      • 解釋器可以了解為一個虛拟機, 虛拟機的有兩類, 一個是類似于Python的虛拟機一樣隻模拟CPU; 另一個是類似于VMware一樣, 用來虛拟作業系統的, 使用數組作為寄存器, 檔案作為硬體

為什麼腳本語言會慢

  • 腳本語言需要兩次IO, 而編譯型則需要一次IO
    • 在腳本語言中, CPU将腳本解釋器從硬碟加載到記憶體中, 腳本解釋器又将腳本程式從硬體中加載到記憶體中; 而編譯型語言本身就是一個二進制程式, CPU将其加載到記憶體中, CPU就直接執行了
    • 另一個原因還跟腳本語言的解釋方式
      • 在一邊解釋一邊執行的腳本語言中:
        • CPU操作的是字元串, 沒有編譯的操作, 我們隻要比較字元串需要時間複雜度為O(n), 而數字為O(1), 是以需要比較n次才能确定一個操作碼, 太慢了
      • 在先編譯再執行中(Python)
        • 将檔案編譯, 裡面的字元串都轉換為數字, 這樣時間複雜度就是O(1)了, 更快了