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