Spec-Zone.ru › Elixir 1.13

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

Версии Elixir имеют схему vMAJOR.MINOR.PATCH.

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

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

Версия Elixir Поддержка
1.13 Исправления ошибок и патчи безопасности
1.12 Только патчи безопасности
1.11 Только патчи безопасности
1.10 Только патчи безопасности
1.9 Только патчи безопасности

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

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

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

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

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

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

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

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

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

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

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

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

Версии Erlang/OTP независимы от версий Elixir. Erlang выпускает новую основную версию ежегодно. Наша цель — поддерживать последние три основные версии Erlang к моменту выпуска Elixir. Таблица совместимости представлена ниже.

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

Обратите внимание, что Elixir может добавить совместимость с новыми версиями Erlang/OTP в выпусках patch, например, поддержку 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. Функция удаляется. Это может произойти только в выпусках major. Это означает, что устаревшие функции в Elixir v1.x будут удалены только в Elixir v2.x.

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

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

Версия Устаревшая функция Заменена на (доступно с)
END_OF_DOCUMENT_MARKER
v1.13 ! и != в требованиях к версии ~> или >= (v1.0)
v1.13 Mix.Config Config (v1.9)
v1.13 :strip_beam конфигурацию в mix escript.build :strip_beams (v1.9)
v1.13 Macro.to_string/2 Macro.to_string/1 (v1.0)
v1.13 System.get_pid/0 System.pid/0 (v1.9)
v1.12 ^^^/2 bxor/2 (v1.0)
v1.12 @foo() для чтения атрибутов модуля Удалить скобки (v1.0)
v1.12 use EEx.Engine Явно делегировать в EEx.Engine (v1.0)
v1.12 :xref компилятора в Mix Ничего (он всегда выполняется как часть компилятора сейчас)
v1.11 Mix.Project.compile/2 Mix.Task.run("compile", args) (v1.0)
v1.11 Supervisor.Spec.worker/3 и Supervisor.Spec.supervisor/3 Новые спецификации дочерних процессов, описанные в Supervisor (v1.5)
v1.11 Supervisor.start_child/2 и Supervisor.terminate_child/2 DynamicSupervisor (v1.6)
v1.11 System.stacktrace/1 __STACKTRACE__ в try/catch/rescue (v1.7)
v1.10 Code.ensure_compiled?/1 Code.ensure_compiled/1 (v1.0)
v1.10 Code.load_file/2 Code.require_file/2 (v1.0) или Code.compile_file/2 (v1.7)
v1.10 Code.loaded_files/0 Code.required_files/0 (v1.7)
v1.10 Code.unload_file/1 Code.unrequire_files/1 (v1.7)
v1.10 Передача значений, не являющихся строками, в Logger.log/2 Явно преобразовать в строку с помощью to_string/1 (v1.0)
v1.10 :compile_time_purge_level в приложении Logger :compile_time_purge_matching в приложении Logger (v1.7)
v1.10 Supervisor.Spec.supervise/2 Новые спецификации дочерних процессов, описанные в Supervisor (v1.5)
v1.10 :simple_one_for_one стратегия в Supervisor DynamicSupervisor (v1.6)
v1.10 :restart и :shutdown в Task.Supervisor.start_link/1 :restart и :shutdown в Task.Supervisor.start_child/3 (v1.6)
v1.9 Ключи Enumerable в 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 Передача :insert_replaced в String.replace/4 Используйте :binary.replace/4 (v1.0)
v1.8 Передача непустого списка в Collectable.into/1 Kernel.++/2 или Keyword.merge/2 (v1.0)
v1.8 Передача непустого списка в :into в for Kernel.++/2 или Keyword.merge/2 (v1.0)
v1.8 Передача непустого списка в Enum.into/2 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.9 --detached в Kernel.CLI --erl "-detached" (v1.0)
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 Возвращение {:ok, contents} или :error из обратного вызова Mix.Compilers.Erlang.compile/6 Возврат {:ok, contents, warnings} или {:error, errors, warnings} (v1.6)
v1.8 System.cwd/0 и System.cwd!/0 File.cwd/0 и File.cwd!/0 (v1.0)
v1.7 Code.get_docs/2 Code.fetch_docs/1 (v1.7)
v1.7 Enum.chunk/2,3,4 Enum.chunk_every/2 и Enum.chunk_every/3,4 (v1.5)
v1.7 Вызов super/1 вGenServer обратных вызовах Реализация поведения явно без вызова super/1 (v1.0)
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 и Stream.chunk_every/3,4 (v1.5)
v1.6 Enum.partition/2 Enum.split_with/2 (v1.4)
v1.6 Macro.unescape_tokens/1,2 Используйте Enum.map/2 для обхода аргументов (v1.0)
v1.6 Module.add_doc/6 @doc модуль атрибут (v1.0)
v1.6 Range.range?/1 Сопоставление с образцом для _.._ (v1.0)
v1.5 () означает nil nil (v1.0)
v1.5 char_list/0 тип charlist/0 тип (v1.3)
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);<br/>GenStage (v1.3);<br/>:gen_event (Erlang/OTP 17)
v1.5 <%= в средних и конечных выражениях в EEx Используйте <% (<%= разрешено только в начальных выражениях) (v1.0)
v1.5 :as_char_lists значение в Inspect.Opts.t/0 типе :as_charlists значение (v1.3)
v1.5 :char_lists ключ в Inspect.Opts.t/0 типе :charlists ключ (v1.3)
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)
v1.5 List.Chars.to_char_list/1 List.Chars.to_charlist/1 (v1.3)
v1.5 @compile {:parse_transform, _} в Module Нет
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.lstrip/1 и String.rstrip/1 String.trim_leading/1 и String.trim_trailing/1 (v1.3)
END_OF_DOCUMENT_MARKER
v1.5 String.lstrip/2 и String.rstrip/2 Используйте String.trim_leading/2 и String.trim_trailing/2 с бинарным значением во втором аргументе (v1.3)
v1.5 String.strip/1 и String.strip/2 String.trim/1 и String.trim/2 (v1.3)
v1.5 String.to_char_list/1 String.to_charlist/1 (v1.3)
v1.4 Анонимные функции без выражения после -> Используйте выражение или явно верните nil (v1.0)
v1.4 Поддержка переопределения приватных функций Используйте публичные функции (v1.0)
v1.4 Переменная, используемая как вызов функции Используйте скобки (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 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 Многобуквенные псевдонимы в OptionParser Используйте однобуквенные псевдонимы (v1.0)
v1.4 Set модуль MapSet (v1.1)
v1.4 Stream.uniq/2 Stream.uniq_by/2 (v1.2)
v1.3 \x{X*} внутри строк/сигилов/списков символов \uXXXX или \u{X*} (v1.1)
v1.3 Dict модуль Keyword (v1.0) или Map (v1.2)
v1.3 :append_first опция в Kernel.defdelegate/2 Определите функцию явно (v1.0)
v1.3 Map/dictionary как второй аргумент в Enum.group_by/3 Enum.reduce/3 (v1.0)
v1.3 Keyword.size/1 Kernel.length/1 (v1.0)
v1.3 Map.size/1 Kernel.map_size/1 (v1.0)
v1.3 /r опция в Regex /U (v1.1)
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 Не-map как второй аргумент в URI.decode_query/2 Используйте map (v1.0)
v1.2 Dict поведение MapSet структура данных (v1.1)
v1.1 ?\xHEX 0xHEX (v1.0)
v1.1 Access протокол Access поведение (v1.1)
v1.1 as: true | false в alias/2 и require/2 Нет
← Предыдущая страница Справочник по API
Следующая страница → Руководство по библиотеке

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

Spec-Zone.ru

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