Spec-Zone.ru › Elixir 1.16

Исходный код Совместимость и устаревшие функции

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

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

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

Версия Elixir Поддержка
1.16 Исправления ошибок и обновления безопасности
1.15 Только обновления безопасности
1.14 Только обновления безопасности
1.13 Только обновления безопасности
1.12 Только обновления безопасности

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

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

Между неглавными версиями Elixir

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

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

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

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

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

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

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

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

Между Elixir и Erlang/OTP

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

Версия Elixir Поддерживаемые версии Erlang/OTP
1.16 24 - 26
1.15 24 - 26
1.14 23 - 25 (и Erlang/OTP 26 с v1.14.5)
1.13 22 - 24 (и Erlang/OTP 25 с v1.13.4)
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 при выпусках исправлений, например, поддержку 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.4 или более поздней версии.

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

Таблица устареваний

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

Версия Устаревшая функция Заменена на (доступна с)
v1.16 ~R/.../ ~r/.../ (v1.0)
v1.16 Диапазоны с отрицательными шагами в Enum.slice/2 Явные шаги в диапазонах (v1.11)
v1.16 Диапазоны с отрицательными шагами в String.slice/2 Явные шаги в диапазонах (v1.11)
v1.15 Calendar.ISO.day_of_week/3 Calendar.ISO.day_of_week/4 (v1.11)
v1.15 Exception.exception?/1 Kernel.is_exception/1 (v1.11)
v1.15 Regex.regex?/1 Kernel.is_struct/2 (Kernel.is_struct(term, Regex)) (v1.11)
v1.15 Logger.warn/2 Logger.warning/2 (v1.11)
v1.14 use Bitwise import Bitwise (v1.0)
v1.14 ~~~/1 bnot/2 (v1.0)
v1.14 Application.get_env/3 и аналогичные в теле модуля Application.compile_env/3 (v1.10)
v1.14 Скомпилированные шаблоны в String.starts_with?/2 Передайте список строк вместо этого (v1.0)
v1.14 Mix.Tasks.Xref.calls/1 Трейсеры компиляции (описанные в Code) (v1.10)
v1.14 $levelpad в Logger Нет
v1.14 <|> как пользовательский оператор Другой пользовательский оператор (v1.0)
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)
END_OF_DOCUMENT_MARKER
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 ++/2 или Keyword.merge/2 (v1.0)
v1.8 Передача непустого списка в :into в for/1 ++/2 или Keyword.merge/2 (v1.0)
v1.8 Передача непустого списка в Enum.into/2 ++/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)
END_OF_DOCUMENT_MARKER
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/1 выражения (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 to_char_list/1 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)
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 опция в defdelegate/2 Определите функцию явно (v1.0)
v1.3 Словарь/массив в качестве 2-го аргумента в Enum.group_by/3 Enum.reduce/3 (v1.0)
v1.3 Keyword.size/1 length/1 (v1.0)
v1.3 Map.size/1 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 Не-словарь в качестве 2-го аргумента в URI.decode_query/2 Использовать словарь (v1.0)
v1.2 Dict поведение Map и Keyword (v1.0)
v1.1 ?\xHEX 0xHEX (v1.0)
v1.1 Access протокол Access поведение (v1.1)
v1.1 as: true | false в alias/2 и require/2 Нет
← Предыдущая страница Настройка и релизы
Следующая страница → Руководство по библиотекам

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

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

© 2012-2024 The Elixir Team
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.16.3/compatibility-and-deprecations.html

Spec-Zone.ru

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