查看源代码 Kernel.ParallelCompiler (Elixir v1.16.2)

负责并行编译和加载文件的模块。

概述

函数

async(fun) 已弃用

启动并行编译的任务。

编译给定的文件。

编译给定的文件并将生成的 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()}

函数

此函数已弃用。请使用 `pmap/2` 代替。

启动并行编译的任务。

链接到此函数

compile(files, options \\ [])

查看源代码 (自 1.6.0 起)
@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 起) - 返回包含信息的映射,而不是警告列表,并将诊断信息作为映射返回,而不是元组

链接到此函数

compile_to_path(files, path, options \\ [])

查看源代码 (自 1.6.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

链接到此函数

pmap(collection, fun)

查看源代码 (自 1.16.0 起)

使用 fun 并行编译 collection

如果你有一个文件需要并行编译其他模块,则生成的进程需要了解编译器环境。此函数允许开发人员执行此类任务。

链接到此函数

require(files, options \\ [])

查看源代码 (自 1.6.0 起)
@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 - 对于每个编译的模块,调用回调并将文件、模块和模块字节码传递给它