Spec-Zone.ru › Elixir 1.15

Kernel.ParallelCompiler

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

Типы

error()
info()
warning()

Функции

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

Spec-Zone.ru

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