View Source Kernel.ParallelCompiler (Elixir v1.14.0)
A module responsible for compiling and requiring files in parallel.
Link to this section Summary
Functions
Starts a task for parallel compilation.
Compiles the given files.
Compiles the given files and writes resulting BEAM files into path.
Prints a warning returned by the compiler.
Requires the given files in parallel.
Link to this section Types
@type line() :: non_neg_integer()
The line. 0 indicates no line.
@type location() :: line() | {pos_integer(), column :: non_neg_integer()}
Link to this section Functions
Starts a task for parallel compilation.
If you have a file that needs to compile other modules in parallel, the spawned processes need to be aware of the compiler environment. This function allows a developer to create a task that is aware of those environments.
See Task.async/1
for more information. The task spawned must be
always awaited on by calling Task.await/1
@spec compile([Path.t()], keyword()) :: {:ok, [atom()], [warning()]} | {:error, [error()], [warning()]}
Compiles the given files.
Those files are compiled in parallel and can automatically detect dependencies between them. Once a dependency is found, the current file stops being compiled until the dependency is resolved.
It returns {:ok, modules, warnings}
or {:error, errors, warnings}
.
Both errors and warnings are a list of three-element tuples containing the file, line and the formatted error/warning.
Options
:each_file
- for each file compiled, invokes the callback passing the file:each_long_compilation
- for each file that takes more than a given timeout (see the:long_compilation_threshold
option) to compile, invoke this callback passing the file as its argument:each_module
- for each module compiled, invokes the callback passing the file, module and the module bytecode:each_cycle
- after the given files are compiled, invokes this function that should return the following values:{:compile, modules, warnings}
- to continue compilation with a list of further modules to compile{:runtime, modules, warnings}
- to stop compilation and verify the list of modules because dependent modules have changed
:long_compilation_threshold
- the timeout (in seconds) to check for modules taking too long to compile. For each file that exceeds the threshold, the:each_long_compilation
callback is invoked. From Elixir v1.11, only the time spent compiling the actual module is taken into account by the threshold, the time spent waiting is not considered. Defaults to10
seconds.:profile
- if set to:time
measure the compilation time of each compilation cycle and group pass checker:dest
- the destination directory for the BEAM files. When usingcompile/2
, this information is only used to properly annotate the BEAM files before they are loaded into memory. If you want a file to actually be written todest
, usecompile_to_path/3
instead.:beam_timestamp
- the modification timestamp to give all BEAM files
@spec compile_to_path( [Path.t()], Path.t(), keyword() ) :: {:ok, [atom()], [warning()]} | {:error, [error()], [warning()]}
Compiles the given files and writes resulting BEAM files into path.
See compile/2
for more information.
@spec print_warning(warning()) :: :ok
Prints a warning returned by the compiler.
@spec require([Path.t()], keyword()) :: {:ok, [atom()], [warning()]} | {:error, [error()], [warning()]}
Requires the given files in parallel.
Opposite to compile, dependencies are not attempted to be automatically solved between files.
It returns {:ok, modules, warnings}
or {:error, errors, warnings}
.
Both errors and warnings are a list of three-element tuples containing the file, line and the formatted error/warning.
Options
:each_file
- for each file compiled, invokes the callback passing the file:each_module
- for each module compiled, invokes the callback passing the file, module and the module bytecode