Kernel.ParallelCompiler
Модуль, отвечающий за компиляцию и загрузку файлов параллельно.
Типы
Функции
- async(fun)
Запускает задачу для параллельной компиляции.
- compile(files, options \\ [])
Компилирует заданные файлы.
- compile_to_path(files, path, options \\ [])
Компилирует заданные файлы и записывает получившиеся BEAM-файлы в путь.
- require(files, options \\ [])
Загружает заданные файлы параллельно.
error()Source
@type error() :: {file :: Path.t(), Code.position(), message :: String.t()} info()Source
@type info() :: %{
runtime_warnings: [Code.diagnostic(:warning)],
compile_warnings: [Code.diagnostic(:warning)]
} warning()Source
@type warning() :: {file :: Path.t(), Code.position(), message :: String.t()} async(fun)Source
Запускает задачу для параллельной компиляции.
Если у вас есть файл, который должен параллельно компилировать другие модули, запущенные процессы должны быть осведомлены об окружении компилятора. Эта функция позволяет разработчику создать задачу, которая осведомлена об этих средах.
См. Task.async/1 для получения дополнительной информации. Запущенная задача должна всегда ожидаться, вызывая Task.await/1
compile(files, options \\ [])Source
@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 \\ [])Source
@spec compile_to_path([Path.t()], Path.t(), keyword()) ::
{:ok, [atom()], [warning()] | info()}
| {:error, [error()] | [Code.diagnostic(:error)], [warning()] | info()} Компилирует заданные файлы и записывает получившиеся BEAM-файлы в путь.
См. compile/2 для получения дополнительной информации.
require(files, options \\ [])Source
@spec require(
[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_module- для каждого скомпилированного модуля вызывается обратный вызов, передающий файл, модуль и байткод модуля
© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.15.4/Kernel.ParallelCompiler.html