Spec-Zone.ru › Elixir 1.9

Совместимость и устаревшие функции

Elixir имеет версионирование по схеме vMAJOR.MINOR.PATCH.

В настоящее время Elixir находится на основной версии v1. Каждый 6 месяцев происходит выпуск новой совместимой с предыдущими версиями ветви MINOR. Выпуски PATCH не планируются и выполняются при наличии исправления ошибок или патчей безопасности.

Elixir применяет исправления ошибок только к последней ветви MINOR. Патчи безопасности доступны для последних 5 ветвей MINOR:

Версия Elixir Поддержка
1.9 Исправления ошибок и патчи безопасности
1.8 Только патчи безопасности
1.7 Только патчи безопасности
1.6 Только патчи безопасности
1.5 Только патчи безопасности

О новых выпусках объявляется в списке рассылки объявлений. Все релизы безопасности будут помечены с [security].

В настоящее время нет планов на выпуск основной версии v2.

Совместимость между версиями Elixir (не основные)

Выпуски Elixir MINOR и PATCH совместимы с предыдущими версиями: хорошо определённые поведения и документированные API в данной версии будут продолжать работать в будущих версиях.

Хотя ожидается, что подавляющее большинство программ останется совместимыми со временем, невозможно гарантировать, что какие-либо будущие изменения не повлияют на работу программы. В некоторых маловероятных обстоятельствах мы можем внести изменения, которые повредят существующий код:

  • Безопасность: может возникнуть проблема безопасности в реализации, решение которой требует несовместимых с предыдущими версиями изменений. Мы оставляем за собой право устранять такие проблемы безопасности.

  • Ошибки: если у API есть нежелательное поведение, программа, которая зависит от ошибочного поведения, может выйти из строя, если ошибка будет исправлена. Мы оставляем за собой право исправлять такие ошибки.

  • Фронтенд компилятора: могут быть улучшены функции компилятора, добавляя новые предупреждения для неоднозначных режимов и предоставляя более подробные сообщения об ошибках. Это может привести к ошибкам компиляции (при запуске с --warning-as-errors) или сбоям инструментов при утверждении определённых сообщений об ошибках (хотя следует избегать такого подхода). Мы оставляем за собой право вносить такие улучшения.

  • Импорты: в модуль Kernel, который импортируется автоматически, могут быть добавлены новые функции. Они могут конфликтовать с локальными функциями, определёнными в ваших модулях. Конфликты можно разрешить с помощью import Kernel, except: [...] со списком всех функций, которые вы не хотите импортировать из Kernel. Мы оставляем за собой право добавлять такие функции.

Для продолжения эволюции языка без внесения несовместимых изменений Elixir будет использовать устаревание, чтобы снизить приоритет определённых практик и продвигать новые. Наша политика устаревания изложена в разделе "Устаревшие функции".

Единственным исключением из гарантий совместимости выше являются экспериментальные функции, которые будут явно отмечены как таковые и не предоставляют гарантии совместимости до стабилизации.

Совместимость между Elixir и Erlang/OTP

Версионирование Erlang/OTP независимо от версионирования Elixir. Каждая версия Elixir поддерживает определённый диапазон версий Erlang/OTP. Таблица совместимости показана ниже.

Версия Elixir Поддерживаемые версии Erlang/OTP
1.0 17 - 17 (и Erlang/OTP 18 с v1.0.5)
1.1 17 - 18
1.2 18 - 18 (и Erlang/OTP 19 с v1.2.6)
1.3 18 - 19
1.4 18 - 19 (и Erlang/OTP 20 с v1.4.5)
1.5 18 - 20
1.6 19 - 20 (и Erlang/OTP 21 с v1.6.6)
1.7 19 - 22
1.8 20 - 22
1.9 20 - 22

Хотя Elixir часто добавляет совместимость с новыми версиями Erlang/OTP в выпущенных ветвях, таких как поддержка Erlang/OTP 20 в v1.4.5, эти релизы обычно содержат минимальные изменения для работы Elixir без ошибок. Только следующий выпуск MINOR, в данном случае v1.5.0, эффективно использует новые возможности, предоставляемые последним выпуском Erlang/OTP.

Устаревшие функции

Политика

Устаревание функций в Elixir происходит в 3 этапа:

  1. Функция мягко устаревает. Это означает, что в CHANGELOG и документации функция должна быть указана как устаревшая, но при выполнении кода никакого предупреждения не выдаётся. Мягкое устаревание функции необязательно.

  2. Функция эффективно устаревает, выдавая предупреждения при использовании. Это также известно как жёсткое устаревание. Для того, чтобы устареть, предложенная альтернатива ДОЛЖНА существовать ПО КРАЙНЕЙ МЕРЕ в течение трёх версий MINOR. Например, Enum.uniq/2 была мягко устаревшей в пользу Enum.uniq_by/2 в Elixir v1.1. Это означает, что предупреждение об устаревании может быть выведено только Elixir v1.4 или более поздней версии.

  3. Функция удаляется. Это может произойти только в крупных выпусках. Это означает, что устаревшие функции в Elixir v1.x будут удалены только в Elixir v2.x.

Таблица устаревших функций

Первый столбец — версия, в которой функция была жёстко устаревшей. Второй столбец кратко описывает устаревшую функцию, а третий столбец объясняет замену и с какой версии доступна замена.

Версия Устаревшая функция Заменена на (доступна с)
END_OF_DOCUMENT_MARKER
v1.9 Передача :insert_replaced в String.replace/4 Используйте :binary.replace/4 (v1.0)
v1.9 Ключи перечисления в Map.drop/2, Map.split/2 и Map.take/2 Вызовите Enum.to_list/1 на втором аргументе предварительно (v1.0)
v1.9 Mix.Project.load_paths/1 Mix.Project.compile_path/1 (v1.0)
v1.9 --detached в командной строке --erl "-detached" (v1.0)
v1.8 Передача непустого списка в Enum.into/2 Kernel.++/2 или Keyword.merge/2 (v1.0)
v1.8 Передача непустого списка в :into в for Kernel.++/2 или Keyword.merge/2 (v1.0)
v1.8 :seconds, :milliseconds, и т. д. в качестве единиц времени :second, :millisecond, и т. д. (v1.4)
v1.8 Inspect.Algebra.surround/3 Inspect.Algebra.concat/2 и Inspect.Algebra.nest/2 (v1.0)
v1.8 Inspect.Algebra.surround_many/6 Inspect.Algebra.container_doc/6 (v1.6)
v1.8 Kernel.ParallelCompiler.files/2 Kernel.ParallelCompiler.compile/2 (v1.6)
v1.8 Kernel.ParallelCompiler.files_to_path/2 Kernel.ParallelCompiler.compile_to_path/2 (v1.6)
v1.8 Kernel.ParallelRequire.files/2 Kernel.ParallelCompiler.require/2 (v1.6)
v1.8 System.cwd/0 и System.cwd!/0 File.cwd/0 и File.cwd!/0 (v1.0)
v1.8 Возврат {:ok, contents} или :error из обратного вызова Mix.Compilers.Erlang.compile/6 Возврат {:ok, contents, warnings} или {:error, errors, warnings} (v1.6)
v1.7 Code.get_docs/2 Code.fetch_docs/1 (v1.7)
v1.7 Вызов super/1 для обратных вызовов GenServer Реализация поведения явно без вызова super/1 (v1.0)
v1.7] Enum.chunk/2[/3/4 Enum.chunk_every/2/3/4 (v1.5)
v1.7 not left in right left not in right (v1.5)
v1.7 Registry.start_link/3 Registry.start_link/1 (v1.5)
v1.7] Stream.chunk/2[/3/4 Stream.chunk_every/2/3/4 (v1.5)
v1.6 Enum.partition/2 Enum.split_with/2 (v1.4)
v1.6 Keyword.replace/3 Keyword.fetch/2 + Keyword.put/3 (v1.0)
v1.6 Macro.unescape_tokens/1/2 Используйте Enum.map/2 для обхода аргументов (v1.0)
v1.6 Module.add_doc/6 @doc атрибут модуля (v1.0)
v1.6 Map.replace/3 Map.fetch/2 + Map.put/3 (v1.0)
v1.6 Range.range?/1 Сопоставьте шаблон с _.._ (v1.0)
v1.5 Atom.to_char_list/1 Atom.to_charlist/1 (v1.3)
v1.5 Enum.filter_map/3 Enum.filter/2 + Enum.map/2 или for (v1.0)
v1.5 Float.to_char_list/1 Float.to_charlist/1 (v1.3)
v1.5 GenEvent модуль Supervisor и GenServer (v1.0);
GenStage (v1.3);
:gen_event (Erlang/OTP 17)
v1.5 Integer.to_char_list/1/2 Integer.to_charlist/1 и Integer.to_charlist/2 (v1.3)
v1.5 Kernel.to_char_list/1 Kernel.to_charlist/1 (v1.3)
END_OF_DOCUMENT_MARKER
v1.5 List.Chars.to_char_list/1 List.Chars.to_charlist/1 (v1.3)
v1.5 Stream.filter_map/3 Stream.filter/2 + Stream.map/2 (v1.0)
v1.5 String.ljust/3 и String.rjust/3 Используйте String.pad_leading/3 и String.pad_trailing/3 с бинарным заполнением (v1.3)
v1.5 String.strip/1 и String.strip/2 String.trim/1 и String.trim/2 (v1.3)
v1.5 String.lstrip/1 и String.rstrip/1 String.trim_leading/1 и String.trim_trailing/1 (v1.3)
v1.5 String.lstrip/2 и String.rstrip/2 Используйте String.trim_leading/2 и String.trim_trailing/2 с бинарным аргументом (v1.3)
v1.5 String.to_char_list/1 String.to_charlist/1 (v1.3)
v1.5 () означает nil nil (v1.0)
v1.5 char_list/0 тип charlist/0 тип (v1.3)
v1.5 :char_lists ключ в Inspect.Opts.t/0 типе :charlists ключ (v1.3)
v1.5 :as_char_lists значение в Inspect.Opts.t/0 типе :as_charlists значение (v1.3)
v1.5 @compile {:parse_transform, _} в Module Ничего
v1.5 EEx: <%= в выражениях middle и end Используйте <% (<%= разрешено только в начальных выражениях) (v1.0)
v1.4 Access.key/1 Access.key/2 (v1.3)
v1.4 Behaviour модуль @callback атрибут модуля (v1.0)
v1.4 Enum.uniq/2 Enum.uniq_by/2 (v1.2)
v1.4 Float.to_char_list/2 :erlang.float_to_list/2 (Erlang/OTP 17)
v1.4 Float.to_string/2 :erlang.float_to_binary/2 (Erlang/OTP 17)
v1.4 HashDict модуль Map (v1.2)
v1.4 HashSet модуль MapSet (v1.1)
v1.4 Многобуквенные псевдонимы в OptionParser Используйте однобуквенные псевдонимы (v1.0)
v1.4 Set модуль MapSet (v1.1)
v1.4 Stream.uniq/2 Stream.uniq_by/2 (v1.2)
v1.4 IEx.Helpers.import_file/2 IEx.Helpers.import_file_if_available/1 (v1.3)
v1.4 Mix.Utils.camelize/1 Macro.camelize/1 (v1.2)
v1.4 Mix.Utils.underscore/1 Macro.underscore/1 (v1.2)
v1.4 Переменная используется как вызов функции Используйте скобки (v1.0)
v1.4 Анонимные функции без выражения после -> Используйте выражение или явно верните nil (v1.0)
v1.4 Поддержка создания перекрываемых частных функций Используйте публичные функции (v1.0)
v1.3 Dict модуль Keyword (v1.0) или Map (v1.2)
v1.3 Keyword.size/1 Kernel.length/1 (v1.0)
v1.3 Map.size/1 Kernel.map_size/1 (v1.0)
v1.3 Set поведение MapSet структура данных (v1.1)
v1.3 String.valid_character?/1 String.valid?/1 (v1.0)
v1.3 Task.find/2 Использование прямого сопоставления сообщений (v1.0)
v1.3 :append_first параметр в Kernel.defdelegate/2 Явное определение функции (v1.0)
v1.3 /r параметр в Regex /U (v1.1)
v1.3 \x{X*} внутри строк/сигилов/символьных списков \uXXXX или \u{X*} (v1.1)
v1.3 Карта/словарь в качестве 2-го аргумента в Enum.group_by/3 Enum.reduce/3 (v1.0)
v1.3 Не-карта в качестве 2-го аргумента в URI.decode_query/2 Используйте карту (v1.0)
v1.2 Dict поведение MapSet структура данных (v1.1)
v1.1 Access протокол Access поведение (v1.1)
v1.1 as: true | false в alias/2 и require/2 Ничего
v1.1 ?\xHEX 0xHEX (v1.0)

© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.9.4/compatibility-and-deprecations.html

Spec-Zone.ru

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