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

Temporal API на Rust: как Kiesel меняет разработку

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

    Temporal - это долгожданная замена устаревшему Date объекту в JavaScript. Он предоставляет правильную работу с временем, часовыми поясами и календарями без головной боли. Проблема в том, что каждый браузерный движок раньше разрабатывал это отдельно - было много дублирования и багов.

    Вот в чём суть: вместо того чтобы писать одно и то же несколько раз, разработчики смогли создать общую библиотеку на Rust, которую используют сразу несколько движков. Это экономит время и делает код более надёжным.

    Почему Temporal был нужен столько лет

    Дата в JavaScript - это одна из самых неудачных частей языка. Объект Date был создан в спешке, как копия Java, и с тех пор считается кошмаром разработчика. Он мутирует значения, работает только с UTC внутри, и вообще не понимает временные зоны. Если вы когда-нибудь пытались правильно вывести дату в местном часовом поясе - знаете, о чём речь.

    Зато Temporal вводит отдельные типы для разных ситуаций. Нужно хранить только дату без времени? Используйте PlainDate. Нужно время в конкретной зоне? ZonedDateTime вам поможет. Нужна длительность? Duration справится. Каждый тип делает одно, но делает правильно.

    Вот что изменилось:

    • PlainDate - только дата, без времени и часового пояса
    • ZonedDateTime - дата и время в конкретной временной зоне
    • Instant - абсолютный момент времени на глобальной шкале
    • Duration - промежуток времени между двумя моментами
    • Immutability - все операции возвращают новые значения вместо изменения старых

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

    Как Rust помог решить проблему дублирования

    Представьте ситуацию: Chrome, Firefox, Safari и остальные браузеры решили внедрить Temporal. Без координации каждый написал бы своё решение на C++, JavaScript, своём языке - полный хаос. Результат: разные версии API, несовместимые друг с другом, горы багов.

    Вместо этого сообщество разработчиков создало temporal_rs - библиотеку на Rust, которая реализует весь Temporal API согласно спецификации ECMAScript. Это похоже на создание единого стандартного решения, которое все могут использовать.

    Теперь вот что происходит:

    • Boa (JavaScript движок на Rust) использует temporal_rs напрямую
    • Kiesel (JavaScript движок на Zig) подключает её через FFI
    • V8 (Chrome и Node.js) тоже интегрировал temporal_rs

    Это первый раз, когда в V8 появился код на Rust. Раньше V8 был полностью на C++. Решение оказалось настолько удачным, что команда Chrome решила его использовать вместо разработки своей версии.

    Преимущества такого подхода очевидны:

    • Экономия труда - не нужно писать одно и то же три раза
    • Меньше багов - один хорошо протестированный код вместо трёх разных реализаций
    • Совместимость - все браузеры используют одинаковое поведение
    • Быстрое развитие - новые фичи добавляются один раз для всех

    Состояние Temporal в браузерах: что уже доступно

    Temporal уже появился в реальных браузерах. Firefox 139 и Chrome 144 уже поддерживают этот API полностью. Safari работает над внедрением, но пока только в Technical Preview.

    Однако Temporal ещё не финализирован как стандарт. Он находится на Stage 3 в процессе TC39, что значит: черновик достаточно стабилен для реализации, но может ещё измениться. Следующий шаг - Stage 4, когда его официально добавят в стандарт ECMAScript. По плану это должно произойти на встрече TC39 в марте 2026 года в Нью-Йорке в офисе Google.

    Что это означает на практике:

    • Вы уже можете использовать Temporal в современных браузерах без полифилов
    • Но для production нужно учитывать, что поддержка в Safari пока неполная
    • Финализация в стандарте сделает API окончательным и даст полную гарантию совместимости
    • После Stage 4 можно будет забыть о Date и писать код только с Temporal

    Тестовое покрытие поразительно: 4000+ тестов для Temporal. Для сравнения - добавление ES6 было примерно на эту же величину. Это показывает масштаб функциональности.

    Почему Rust - удачный выбор для shared кода

    Вы наверное удивитесь: почему именно Rust? Ответ прост - это язык, который естественно решает проблемы, которые были в JavaScript и C++.

    В JavaScript нет настоящей типизации, поэтому сложно выразить строгие требования Temporal спецификации. В C++ всё дело в управлении памятью - можно написать быстро, но легко получить утечки и ошибки. Rust даёт типизацию, безопасность памяти и хорошую производительность одновременно.

    Ещё один плюс - FFI (Foreign Function Interface). temporal_rs поставляется с FFI слоем, который позволяет другим языкам вызывать Rust код как обычную библиотеку. Kiesel на Zig и V8 на C++ могут подключить temporal_rs с минимальными усилиями.

    Это создало интересный паттерн:

    • Сложная логика работает на Rust
    • Другие языки просто вызывают готовые функции
    • Все получают исправления багов одновременно
    • Браузеры экономят ресурсы разработки

    Конформность очень высокая: Boa, Kiesel и V8 показывают более 95% совместимости с тестами. Это потому что все используют один и тот же код.

    Перспективы развития и что дальше

    Хотя Temporal уже в браузерах, это только начало. Когда спецификация достигнет Stage 4, начнётся массовое внедрение в реальных проектах. Сейчас большинство разработчиков ещё используют полифиллы вроде Day.js или Moment.js, но со временем этот код можно будет переписать на нативный Temporal.

    Разработчики говорят о temporal_rs как об удачном примере реиспользуемых Rust библиотек в браузерных движках. Это может открыть путь для подобных проектов в будущем. Если другие части JavaScript API будут сложны для реализации, почему бы не написать их на Rust? Главное - правильно спроектировать FFI слой.

    Одна из потенциальных проблем - размер пакетов. temporal_rs включает свои данные о часовых поясах и календарях, что может увеличить WASM бандл. Но это компромисс между удобством и размером - всегда можно оптимизировать потом.

    Текущий момент интересный тем, что разработка JavaScript экосистемы становится более скоординированной. Когда на выходе Stage 4 и все браузеры будут с Temporal, это серьёзно упростит работу с датами для миллионов разработчиков. Старый Date останется только для обратной совместимости, но основной фокус сместится на новый API.

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

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

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

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

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

    Категории

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

    Контакты

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

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

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

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

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