查看源代码 Kernel.ParallelCompiler (Elixir v1.16.2)
负责并行编译和加载文件的模块。
概述
函数
启动并行编译的任务。
编译给定的文件。
编译给定的文件并将生成的 BEAM 文件写入 path。
使用 fun
并行编译 collection
。
并行加载给定的文件。
类型
@type error() :: {file :: Path.t(), Code.position(), message :: String.t()}
@type info() :: %{ runtime_warnings: [Code.diagnostic(:warning)], compile_warnings: [Code.diagnostic(:warning)] }
@type warning() :: {file :: Path.t(), Code.position(), message :: String.t()}
函数
启动并行编译的任务。
@spec compile( [Path.t()], keyword() ) :: {:ok, [atom()], [warning()] | info()} | {:error, [error()] | [Code.diagnostic(:error)], [warning()] | info()}
编译给定的文件。
这些文件将并行编译,并且可以自动检测它们之间的依赖关系。一旦找到依赖项,当前文件将停止编译,直到依赖项解决。
它默认返回 {:ok, modules, warnings}
或 {:error, errors, warnings}
,但我们建议使用 return_diagnostics: true
,这样它会返回诊断信息作为映射,以及编译信息的映射。该映射的形状如下:
%{
runtime_warnings: [warning],
compile_warnings: [warning]
}
选项
:each_file
- 对于每个编译的文件,调用回调并将文件传递给它:each_long_compilation
- 对于每个编译时间超过给定超时(请参阅:long_compilation_threshold
选项)的文件,调用此回调并将文件作为其参数传递:each_module
- 对于每个编译的模块,调用回调并将文件、模块和模块字节码传递给它:each_cycle
- 在编译完给定文件后,调用此函数,该函数应返回以下值{:compile, modules, warnings}
- 以要编译的更多模块列表继续编译{:runtime, modules, warnings}
- 停止编译并验证模块列表,因为依赖模块已更改
:long_compilation_threshold
- 检查模块编译时间过长的超时(以秒为单位)。对于每个超过阈值的文件,将调用:each_long_compilation
回调。从 Elixir v1.11 开始,仅将编译实际模块所花费的时间考虑在阈值内,等待时间不计。默认值为10
秒。:profile
- 如果设置为:time
,则测量每个编译周期的编译时间和分组传递检查器:dest
- BEAM 文件的目标目录。当使用compile/2
时,此信息仅用于在 BEAM 文件加载到内存之前正确地对它们进行注释。如果你希望将文件实际写入dest
,请使用compile_to_path/3
代替。:beam_timestamp
- 给所有 BEAM 文件的修改时间戳:return_diagnostics
(自 v1.15.0 起) - 返回包含信息的映射,而不是警告列表,并将诊断信息作为映射返回,而不是元组
@spec compile_to_path([Path.t()], Path.t(), keyword()) :: {:ok, [atom()], [warning()] | info()} | {:error, [error()] | [Code.diagnostic(:error)], [warning()] | info()}
编译给定的文件并将生成的 BEAM 文件写入 path。
有关更多信息,请参阅 compile/2
。
使用 fun
并行编译 collection
。
如果你有一个文件需要并行编译其他模块,则生成的进程需要了解编译器环境。此函数允许开发人员执行此类任务。
@spec require( [Path.t()], keyword() ) :: {:ok, [atom()], [warning()] | info()} | {:error, [error()] | [Code.diagnostic(:error)], [warning()] | info()}
并行加载给定的文件。
与 compile 相反,不会尝试在文件之间自动解决依赖关系。
它默认返回 {:ok, modules, warnings}
或 {:error, errors, warnings}
,但我们建议使用 return_diagnostics: true
,这样它会返回诊断信息作为映射,以及编译信息的映射。该映射的形状如下:
%{
runtime_warnings: [warning],
compile_warnings: [warning]
}
选项
:each_file
- 对于每个编译的文件,调用回调并将文件传递给它:each_module
- 对于每个编译的模块,调用回调并将文件、模块和模块字节码传递给它