View Source Kernel.ParallelCompiler (Elixir v1.13.1)
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() | {line(), 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_thresholdoption) 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_compilationcallback 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 to10seconds.:profile- if set to:timemeasure 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/3instead.: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