Spec-Zone.ru › Elixir 1.8

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

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

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

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

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

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

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

Совместимость между версиями Elixir без изменения основной версии

Дополнения и исправления к версиям Elixir совместимы с предыдущими версиями: определённые поведения и документированные 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 - 21
1.8 20 - 21

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

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

Политика

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

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

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

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

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

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

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

Spec-Zone.ru

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