我更多地考虑了我正在设计的编程语言。我想知道,有什么方法可以最大限度地减少其编译时间?
您今天的主要问题是 I/O。您的 CPU 比主存快很多倍,而内存比访问硬盘快 1000 倍左右。
因此,除非您对源代码进行大量优化,否则 CPU 将花费大部分时间等待读取或写入数据。
试试这些规则:
设计您的编译器以在多个独立的步骤中工作。目标是能够在不同的线程中运行每个步骤,以便您可以利用多核 CPU。它还有助于并行化整个编译过程(即同时编译多个文件)
它还允许您提前加载许多源文件并对其进行预处理,以便实际编译步骤可以更快地工作。
尝试允许独立编译文件。例如,为项目创建一个“缺失符号池”。缺少符号不应导致编译失败。如果您在某处找到丢失的符号,请将其从池中删除。编译完所有文件后,检查池是否为空。
创建包含重要信息的缓存。例如:文件 X 使用文件 Y 中的符号。这样,当 Y 更改时,您可以跳过编译文件 Z(它不引用 Y 中的任何内容)。如果您想更进一步,请将所有定义的符号放在池中的任何位置。如果文件以添加/删除符号的方式更改,您将立即知道哪些文件受到影响(甚至无需打开它们)。
在后台编译。启动编译器进程,该进程检查项目目录的更改并在用户保存文件后立即编译它们。这样,您每次只需要编译几个文件而不是所有文件。从长远来看,你会编译更多,但对于用户来说,周转时间会更短(=用户必须等到她可以在更改后运行编译结果的时间)。
使用“及时”编译器(即在使用时编译文件,例如在导入语句中)。然后以源代码形式分发项目并在第一次运行时进行编译。 Python 就是这样做的。要执行此操作,您可以在安装编译器期间预编译库。
不要使用头文件。将所有信息放在一个地方,并在必要时从源生成头文件。也许将头文件只保存在内存中,永远不要将它们保存到磁盘。