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