performance - 如何最小化编程语言的编译时间?

标签 performance compiler-construction language-design

我更多地考虑了我正在设计的编程语言。我想知道,有什么方法可以最大限度地减少其编译时间?

最佳答案

您今天的主要问题是 I/O。您的 CPU 比主存快很多倍,而内存比访问硬盘快 1000 倍左右。
因此,除非您对源代码进行大量优化,否则 CPU 将花费大部分时间等待读取或写入数据。
试试这些规则:

  • 设计您的编译器以在多个独立的步骤中工作。目标是能够在不同的线程中运行每个步骤,以便您可以利用多核 CPU。它还有助于并行化整个编译过程(即同时编译多个文件)
    它还允许您提前加载许多源文件并对其进行预处理,以便实际编译步骤可以更快地工作。
  • 尝试允许独立编译文件。例如,为项目创建一个“缺失符号池”。缺少符号不应导致编译失败。如果您在某处找到丢失的符号,请将其从池中删除。编译完所有文件后,检查池是否为空。
  • 创建包含重要信息的缓存。例如:文件 X 使用文件 Y 中的符号。这样,当 Y 更改时,您可以跳过编译文件 Z(它不引用 Y 中的任何内容)。如果您想更进一步,请将所有定义的符号放在池中的任何位置。如果文件以添加/删除符号的方式更改,您将立即知道哪些文件受到影响(甚至无需打开它们)。
  • 在后台编译。启动编译器进程,该进程检查项目目录的更改并在用户保存文件后立即编译它们。这样,您每次只需要编译几个文件而不是所有文件。从长远来看,你会编译更多,但对于用户来说,周转时间会更短(=用户必须等到她可以在更改后运行编译结果的时间)。
  • 使用“及时”编译器(即在使用时编译文件,例如在导入语句中)。然后以源代码形式分发项目并在第一次运行时进行编译。 Python 就是这样做的。要执行此操作,您可以在安装编译器期间预编译库。
  • 不要使用头文件。将所有信息放在一个地方,并在必要时从源生成头文件。也许将头文件只保存在内存中,永远不要将它们保存到磁盘。
  • 关于performance - 如何最小化编程语言的编译时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/576693/

    相关文章:

    regex - 为什么字符类比交替更快?

    python - 在 Python 中将值转换为各自数据类型的最快方法

    c - 将目录上下文传递给编译器

    performance - Where-Object或Compare-Object哪个更好?

    插入文件时,MySQL 查询速度变慢

    c - 为构建你自己的 Lisp 书滚动一个解析器?

    ruby - 使用什么机制允许从该范围调用 ruby​​ root 范围中定义的方法?

    ruby - 为什么 'super' 在 Ruby 中是关键字而不是方法?

    visual-studio-2010 - VC++ cl.exe —找不到DLL

    c++ - asin 使用 Clang 在不同的平台上产生不同的答案