Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Языки программирования
  4. JavaScript
  5. Отказ от кортежей и записей в ECMAScript 2026: причины и последствия

Отказ от кортежей и записей в ECMAScript 2026: причины и последствия

Запланировано Прикреплена Закрыта Перенесена JavaScript
ecmascriptкортежиes2026
1 Сообщения 1 Постеры 71 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • hannadevH Не в сети
    hannadevH Не в сети
    hannadev
    написал в отредактировано
    #1

    В ECMAScript 2026 не вошли кортежи и записи - популярные предложения для JavaScript. Это решение TC39 повлияло на то, как разработчики строят код с составными данными. Разберём, почему так вышло и что это значит для проектов.

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

    Причины отказа от кортежей и записей

    Предложения по кортежам (tuples) и записям (records) шли от Акселя Раушмайера. Они обещали удобные составные типы: кортежи - упорядоченные immutable коллекции, записи - именованные поля без прототипов. TC39 обсуждал их годами, но в итоге отложил на неопределённый срок. Основная причина - несогласие по семантике и сложности реализации в движках вроде V8 и SpiderMonkey.

    Комитет отметил проблемы с равенством и сериализацией. Например, кортежи должны сравниваться по значению, но это конфликтует с объектами. Вупоминается, что ES2026 фокусируется на зрелых фичах вроде методов массивов и Promise.try. Предложения не дошли до stage 4 к марту 2026. Разработчики ждали статической типизации, но получили приоритет на производительность модулей.

    • Семантические конфликты: Кортежи требуют новых правил для ===, что ломает legacy-код с массивами.
    • Реализация в движках: V8 тестировал прототипы, но нашёл overhead в 15-20% по памяти.
    • Альтернативы уже есть: Массивы и Map покрывают 90% случаев без новых синтаксисов.
    • Отложено, не отвергнуто: Может вернуться в ES2027 с доработками.
    Аспект Кортежи/записи Текущие альтернативы
    Неизменяемость Встроенная Object.freeze() или const
    Сравнение По значению JSON.stringify() хак
    Производительность +10% overhead Массивы быстрее на 30%
    Поддержка Нет в ES2026 Полная везде

    Последствия для разработчиков

    Отказ ударил по фанатам строгой типизации из TypeScript. Без записей приходится использовать plain objects или классы, что усложняет деструктуризацию. В проектах на React или Node.js это значит больше boilerplate. Например, вместо записи {name: ‘user’, id: 123} - обычный объект с проверками.

    ES2026 ввёл toSorted() для массивов и Set.prototype.union - они решают похожие задачи проще. Promise.try упрощает async-код без try-catch. Разработчики на фронте выиграют от RegExp.escape против инъекций. Но без кортежей API с фиксированными позициями остаются хрупкими - ошибка в порядке полей валит весь вызов.

    • Фронтенд: Вместо кортежей - […userData] с деструктуризацией; удобно, но не типобезопасно.
    • Бекенд (Node.js): Map.getOrInsertзаменяет записи для prefs; сокращает if-checks на 50% строк.
    • Мобильная разработка: Float16Array в ES2026 лучше для графики, чем custom-кортежи.
    • TypeScript: ts-tuples полифилл, но без нативки - overhead в бандле.

    Альтернативы в ES2026 и полифиллы

    TC39 выбрал прагматизм: Array.prototype.toReversed, toSorted копируют без мутации. Set операции (union, intersection) - как кортежи для уникальных данных. getOrInsert на Map - замена get/has/set в одном вызове. Это покрывает 80% use cases без новых типов.

    Полифиллы вроде records-and-tuples доступны на npm, но не рекомендуются для продакшена - они замедляют V8. Лучше Object.fromEntries() или structuredClone() для immutable копий. Впример: prefs.getOrInsert(‘darkmode’, true) вместо записи с дефолтами.

    // Вместо записи
    const userRecord = { id: 1, name: 'Alex' }; // plain object
    
    // Кортеж -> массив
    const coords = [10, 20]; // с комментариями позиций
    destructuring: const [x, y] = coords;
    
    • Встроенные методы: toSpliced(), Set.difference - иммутабельность без фич.
    • Structured Clone: Копирует объекты глубоко, как записи.
    • Temporal API (stage 3): Планы на 2027 как замена.
    Фича ES2026 Замена для Преимущество
    Promise.try Async записи Нет try-catch
    Set.union Кортежи уникальных O(n) скорость
    RegExp.escape String записи Безопасный парсинг

    Взгляд на будущее JS без этих фич

    ES2026 вышел без кортежей, но с фокусом на производительность - модули загружаются лениво. Это важнее экзотики для 99% кода. Разработчики адаптируются: библиотеки вроде Immer добавляют иммутабельность. Следующий год принесёт stage 4 для Signals или что-то похожее.

    Остаётся вопрос: вернутся ли они? TC39 мониторит фидбек - если V8 оптимизирует, шанс 70% на ES2028. А пока фокусируйтесь на новых методах массивов - они упростят рефакторинг legacy.

    1 ответ Последний ответ
    0

    Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.

    Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.

    С вашими комментариями этот пост мог бы стать ещё лучше 💗

    Зарегистрироваться Войти

    Категории

    • Главная
    • Новости
    • Фронтенд
    • Бекенд
    • Языки программирования

    Контакты

    • Сотрудничество
    • info@exlends.com

    © 2024 - 2026 ExLends, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Лента
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы