Spec-Zone.ru › Elixir 1.15

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

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

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

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

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

О новых выпусках объявляется в списке рассылки объявлений с только для чтения. Все выпуски с исправлениями безопасности будут помечены как [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 в выпусках с исправлениями, таких как поддержка 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.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 Передача не-символьных данных в 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)
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 Map/dictionary как 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 Не-карта в качестве второго аргумента в 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 Нет
← Предыдущая страница Справочник по API
Следующая страница → Руководство по библиотекам

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

Spec-Zone.ru

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