Spec-Zone.ru › Elixir 1.18

Исходный код Kernel.ParallelCompiler

Модуль, отвечающий за параллельную компиляцию и загрузку файлов.

Краткое описание

Типы

error()
info()
warning()

Функции

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)Исходный код

Данная функция устарела. Используйте `pmap/2` вместо неё.

Запускает задачу для параллельной компиляции.

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.

Скачать версию ePub

Создано с помощью ExDoc (v0.36.1) для языка программирования Elixir

© 2012-2024 The Elixir Team
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.18.1/Kernel.ParallelCompiler.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API