| 程序执行（英语：） |
| --- |
| 
基础概念 |
| * 代码
* 翻译器
	+ 編譯器
	+ 优化编译器
* 中間語言
* 程序执行（英语：）
	+ 运行时系统
		- 執行期
	+ 執行檔
	+ 
	+ 虛擬機器
 |
| 
代码类型 |
| * 源代码
* 目标代码
* 字节码
* 机器代码
* 微程序
 |
| 
编译策略 |
| * 即時編譯（JIT）
	+ 跟踪即时编译（英语：）
* 提前编译（英语：）（AOT）
* 源代码至源代码编译器
* 动态重编译
 |
| 
知名运行环境 |
| * Android Runtime（ART）
* 通用語言運行庫（CLR）
* crt0
* Java虚拟机（JVM）
* V8
	+ Node.js
* PyPy
* Zend引擎
 |
| 
著名编译器及工具链 |
| * GNU编译器套裝（GCC）
* LLVM
	+ Clang
 |
| * 
* 论
* 编
 |

**解释器**（英語：），是一种计算机程序，能够把解释型语言解释执行。解释器就像一位「中間人」。解释器边解释边执行，因此依赖于解释器的程序运行速度比较缓慢。解释器的好处是它不需要重新编译整个程序，从而减轻了每次程序更新后编译的负担。相对的编译器一次性将所有源代码编译成二进制文件，执行时无需依赖编译器或其他额外的程序。

历史
--

第一个解释器是由史帝芬·罗素（Steve Russell）写成的LISP的解释器，基于IBM 704的机器码。

解释器与编译器
-------

解释器执行程序的方法有：

1. 直接执行高级编程语言（如Shell内建的编译器）
2. 转换高级编程语言到更有效率的字节码，并执行字节码
3. 用解释器包含的编译器对高级语言进行编译，並指示中央处理器执行编译后的程序（例如：JIT）

Perl，Python，MATLAB，與Ruby是屬於第二種方法，而UCSD Pascal則是屬於第三種方式。在轉譯的過程中，這組高階語言所寫成的程式仍然維持在原始碼的格式（或某種中繼語言的格式），而程式本身所指涉的動作或行為則由直譯器來表現。

使用直譯器來執行程式會比直接執行編譯過的機器碼來得慢，但是相對的這個直譯的行為會比編譯再執行來得快。這在程式開發的雛型化階段和只是撰寫試驗性的程式碼時尤其來得重要，因為這個「編輯-直譯-除錯」的循環通常比「編輯-編譯-執行-除錯」的循環來得省時許多。

在直譯器上執行程式比直接執行編譯過的程式碼來得慢，是因為直譯器每次都必須去分析並轉譯它所執行到的程式行，而編譯過的程式就只是直接執行。這個在執行時的分析被稱為"直譯式的成本"。在直譯器中，變數的存取也是比較慢的，因為每次要存取變數的時候它都必須找出該變數實際儲存的位置，而不像編譯過的程式在編譯的時候就決定好了變數的位置了。

在使用直譯器來達到較快的開發速度和使用編譯器來達到較快的執行進度之間是有許多妥協的。有些系統（例如有一些LISP）允許直譯和編譯的程式碼互相呼叫並共享變數。這意味著一旦一個子程式在直譯器中被測試併除錯過之後，它就可以被編譯以獲得較快的執行進度。許多直譯器並不像其名稱所說的那樣執行原始程式碼，反而是把原始程式碼轉換成更壓縮的內部格式。舉例來說，有些BASIC的直譯器會把保留字取代成可以用來在转移表中找出相對應指令的單一字节符號。直譯器也可以使用如同編譯器一般的文字分析器和語法分析器然後再轉譯產生出來的抽象語法樹。

直譯式程式相較於編譯式程式有較佳的可攜性，可以容易的在不同軟硬體平台上執行。而編譯式程式經過編譯後的程式則只限定於執行在開發環境平台。

字节码直譯器
------

考量程式執行之前所需要分析的時間，存在了一個介於直譯與編譯之間的可能性。例如，用Emacs Lisp所撰寫的原始碼會被編譯成一種高度壓縮且最佳化的另一種Lisp原始碼格式，這就是一種字节码（bytecode），而它並不是機器碼（因此不會被綁死在特定的硬體上）。這個"編譯過的"碼之後會被字节码直译器（使用C寫成的）轉譯。在這種情況下，這個"編譯過的"碼可以被說成是虚拟机（不是真的硬體，而是一種字节码直譯器）的機器碼。這個方式被用在Open Firmware系統所使用的Forth程式碼中：原始程式將會被編譯成"F code"（一種字节码），然後被一個特定平台的虛擬機器直譯和執行。

即時編譯
----

条目：即時編譯
即时编译（Just-in-time compilation）是指一種在執行時期把字节码編譯成原生機器碼的技術;這項技術是被用來改善虛擬機器的效能的。該技術在近幾年來才開始獲得重視，而它後來模糊了直譯、字节码直譯及編譯的差異性。在.NET和Java的平台上都有用到JIT的技術。大約在1980年代Smalltalk語言出現的時候JIT的技術就存在了。

一個簡單的直譯器的例子
-----------

在文學編程文章中有一個簡單的程式和一個直譯器。

打孔卡讀卡機
------

"interpreter"這個字眼有時候是指一些可以讀取打孔卡的機器。這些機器可以讀取卡片上的孔並以人們讀得懂的格式列印出來。IBM 550數字讀卡機和IBM 557字母讀卡機是主要的兩個例子。

有编译器的高级语言
---------

* AWK
* BASIC
* JavaScript
* LISP
* Racket
* Scheme
* Haskell
* Idris
* Clojure
* Shell
* Perl
* Prolog
* Ruby
* Python
* PHP Hypertext Preprocessor
* C
* C++
* Java

参考文献
----

參閱
--

* 计算机科学主题
* icon计算机程序设计主题
* icon软件主题

* partial evaluation（英语：）
* 直譯語言
* 编译语言
* 動態編譯
* Threaded code（英语：）, a compact form of code that depends on a simple interpreter.
* Metacircular Interpreter（英语：）

外部链接
----

* IBM Card Interpreters （页面存档备份，存于） page at Columbia University


|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
计算机科学的主要领域 |
| --- |
|  |
| 注：该模板大致遵循ACM 电脑分类系统。 |
|  |
| 计算机硬件 | 
* 印刷电路板
* 外部设备
* 集成电路
* 超大规模集成电路
* 绿色计算
* 電子設計自動化

 |
|  |
| 系统架构组织 | 
* 電腦系統架構
* 嵌入式系统
* 实时计算

 |
|  |
| 网络 | 
* 网络传输协议
* 路由
* 网络拓扑
* 网络服务

 |
|  |
| 软件组织 | 
* 直譯器
* 中间件
* 虛擬機器
* 操作系统
* 软件质量

 |
|  |
| 软件符号和工具 | 
* 编程范型
* 编程语言
* 編譯器
* 领域特定语言
* 軟體框架
* 集成开发环境
* 软件配置管理
* 函式庫

 |
|  |
| 软件开发 | 
* 软件开发过程
* 需求分析
* 软件设计
* 软件部署
* 軟體維護
* 开源模式

 |
|  |
| 计算理论 | 
* 自动机
* 可计算性理论
* 計算複雜性理論
* 量子计算
* 数值计算方法
* 计算机逻辑
* 形式语义学

 |
|  |
| 算法 | 
* 算法分析
* 算法设计
* 算法效率
* 随机化算法
* 计算几何

 |
|  |
| 计算数学 | 
* 离散数学
* 信息与计算科学
* 统计学
* 数学软件
* 数理逻辑
* 集合论
* 数论
* 图论
* 类型论
* 范畴论
* 信息论
* 数值分析
* 数学分析

 |
|  |
| 信息系统 | 
* 数据库管理系统
* 電腦數據
* 企业信息系统（英语：）
* 社会性软件
* 地理信息系统
* 决策支持系统
* 过程控制
* 数据挖掘
* 數位圖書館
* 系统平台
* 數位行銷
* 万维网
* 信息檢索

 |
|  |
| 安全 | 
* 密码学
* 形式化方法
* 入侵检测系统
* 网络安全
* 信息安全

 |
|  |
| 人机交互 | 
* 计算机辅助功能
* 用户界面
* 可穿戴计算机
* 普适计算
* 虚拟现实
* 聊天機器人

 |
|  |
| 并发性 | 
* 并发计算
* 并行计算
* 分布式计算
* 多线程
* 多元處理

 |
|  |
| 人工智能 | 
* 自动推理
* 计算语言学
* 计算机视觉
* 进化计算
* 专家系统
* 自然语言处理
* 机器人学

 |
|  |
| 机器学习 | 
* 監督式學習
* 無監督學習
* 强化学习
* 交叉驗證

 |
|  |
| 计算机图形学 | 
* 计算机动画
* 可视化
* 渲染
* 修飾照片
* 圖形處理器
* 混合现实
* 虚拟现实
* 图像处理
* 图像压缩
* 实体造型

 |
|  |
| 应用计算 | 
* 电子商务
* 企业级软件
* 计算数学
* 计算物理学
* 计算化学
* 计算生物学
* 計算社會科學
* 医学信息学
* 数字艺术
* 電子出版
* 網絡戰
* 电子游戏
* 文字处理器
* 運籌學
* 教育技术学
* 生物信息学
* 认知科学
* 文件管理系统（英语：）

 |
|  |
| 
* 分类 **分类**
* 主题 **主题**
* 专题**专题**
* 共享资源页面 **维基共享**

 |

 |

本條目部分或全部内容出自以GFDL授權發佈的《自由線上電腦詞典》（FOLDOC）。