创建虚拟机/介绍
本书是一本关于创建多种不同类型虚拟机的教程。其目的是展示虚拟机设计和实现的基本原理。作者将尽力使程序代码简洁易懂。
本书不涉及的内容
本书假设您具有一定的编程经验,并了解 二进制数 和 十六进制表示法 的基础知识。熟悉一个 CPU 或其他 CPU 的 机器码 或 汇编语言 编程也将有所帮助,但并非严格必要。事实上,我发现研究虚拟机是学习汇编语言的有效方法。
为了编译和运行示例,您需要在计算机上安装某些软件。
对于 C 语言中的寄存器虚拟机,您需要有一个基本的 C 编译器(C++ 编译器也可以正常工作)。
- Windows 用户:我推荐 Quincy。它是免费的,易于使用。
- Linux 用户:如果您的系统中还没有安装 GCC,请安装它。Code::Blocks 也可以正常工作。
- Debian(及衍生版本)用户打开命令行,以 root 用户身份登录,并输入 apt-get install gcc。
- Mac 用户:从您计算机附带的额外磁盘或 通过 AppStore 安装 Xcode 软件包,免费。
对于 Swift 语言中的寄存器虚拟机,您需要有一个 Swift 解释器。
- Mac 用户:安装 Xcode(免费)。使用解释器的最简单方法是将代码粘贴到一个新的“游乐场”中。
- 其他平台:2015 年 6 月,Apple 宣布将“在今年晚些时候将 Swift 开源”。由于 Swift 语言中的寄存器虚拟机没有使用任何 Foundation、Cocoa 或 UIKit,因此它应该可以在任何符合标准的语言移植版本中运行。
对于 Java 语言中的栈寄存器虚拟机,您需要有一个相当新的 Java 编译器。
- Windows 用户:从 Sun 的 Java 下载页面 下载并安装 Java SE JDK。
- Linux 用户:您可以使用 OpenJDK,但我建议从 Sun 的 Java 下载页面 下载并安装 Java SE JDK。
- Mac 用户:您应该已经安装了 Java,或者从 java.com 下载。
对于 Erlang 语言中的寄存器虚拟机,您需要安装 Erlang。
- Windows 用户
- Linux 用户
- Mac 用户:(1) 安装 MacPorts,(2) 安装 Erlang
当计算机遵循程序指令时,据说它正在运行程序。运行在这种情况下的另一个术语是执行。执行这个词在这种情况下的意思是执行,使发生或实施。计算机程序员也谈论杀死或终止程序,但在这种情况下,永远不会使用执行这个词。
如果您做过任何 Java、C 或 C++ 编程,您会注意到,当程序进行任何计数时,它通常从 0 开始计数。我们将在这几个程序示例中做同样的事情,不是因为惯例,而是因为必要性。一些高级语言鼓励(或要求)从 0 开始计数,因为它们基于要求从 0 开始计数的机器语言。其原因与寄存器索引有关,随着您阅读本书,这一点应该会变得明了。
在编写像这样低级别的程序时,程序员经常谈论单词。单词在这种情况下的意思是数字,但它缺乏 基数 和 序数 在通常的数字意义上的含义。相反,一个数字单词包含 词典学 信息。单词通常用 十六进制 表示法来写。
在我们继续之前,我认为最好就该领域中一些容易混淆或被误用的术语达成共识。这与其说是为了强加我的意志于你,不如说是为了建立一个语境。
- 抽象机器
- 一些机器的定义,通常只存在于“纸面上”。
- 虚拟机
- 抽象机器的软件实现。
- 模拟器
- 真实机器的软件实现。
(自言自语:我认为这可能应该移到词汇表中并进行扩展。)