Spec-Zone.ru › Elixir 1.17

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

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

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

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

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

О новых выпусках объявляется в списке рассылки объявлений с только для чтения доступом. Все выпуски с исправлениями безопасности будут помечены с помощью [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

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

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

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

Версия Устаревшая функция Заменена на (доступно с версии)
v1.17 Список символов в одинарных кавычках ('foo') ~c"foo" (v1.0)
v1.17 left..right в шаблонах и охранных условиях left..right//step (v1.11)
v1.17 ExUnit.Case.register_test/4 register_test/6 (v1.10)
v1.17 :all в IO.read/2 и IO.binread/2 :eof (v1.13)
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)
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 Передача не-chardata в 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 Перечисляемые ключи в 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)
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)
END_OF_DOCUMENT_MARKER
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 Карта/словарь в качестве второго аргумента в 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 Не-карта в качестве второго аргумента в 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.34.1) для языка программирования Elixir

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

Spec-Zone.ru

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