<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Temporal API на Rust: как Kiesel меняет разработку]]></title><description><![CDATA[<p dir="auto">Temporal - это долгожданная замена устаревшему Date объекту в JavaScript. Он предоставляет правильную работу с временем, часовыми поясами и календарями без головной боли. Проблема в том, что каждый браузерный движок раньше разрабатывал это отдельно - было много дублирования и багов.</p>
<p dir="auto">Вот в чём суть: вместо того чтобы писать одно и то же несколько раз, разработчики смогли создать общую библиотеку на Rust, которую используют сразу несколько движков. Это экономит время и делает код более надёжным.</p>
<h2>Почему Temporal был нужен столько лет</h2>
<p dir="auto">Дата в JavaScript - это одна из самых неудачных частей языка. Объект Date был создан в спешке, как копия Java, и с тех пор считается кошмаром разработчика. Он мутирует значения, работает только с UTC внутри, и вообще не понимает временные зоны. Если вы когда-нибудь пытались правильно вывести дату в местном часовом поясе - знаете, о чём речь.</p>
<p dir="auto">Зато Temporal вводит <strong>отдельные типы для разных ситуаций</strong>. Нужно хранить только дату без времени? Используйте PlainDate. Нужно время в конкретной зоне? ZonedDateTime вам поможет. Нужна длительность? Duration справится. Каждый тип делает одно, но делает правильно.</p>
<p dir="auto">Вот что изменилось:</p>
<ul>
<li><strong>PlainDate</strong> - только дата, без времени и часового пояса</li>
<li><strong>ZonedDateTime</strong> - дата и время в конкретной временной зоне</li>
<li><strong>Instant</strong> - абсолютный момент времени на глобальной шкале</li>
<li><strong>Duration</strong> - промежуток времени между двумя моментами</li>
<li><strong>Immutability</strong> - все операции возвращают новые значения вместо изменения старых</li>
</ul>
<p dir="auto">Иммутабельность - это вообще ключевой момент. Старый Date изменял себя в процессе работы, что приводило к ошибкам. Temporal не делает ничего подобного.</p>
<h2>Как Rust помог решить проблему дублирования</h2>
<p dir="auto">Представьте ситуацию: Chrome, Firefox, Safari и остальные браузеры решили внедрить Temporal. Без координации каждый написал бы своё решение на C++, JavaScript, своём языке - полный хаос. Результат: разные версии API, несовместимые друг с другом, горы багов.</p>
<p dir="auto">Вместо этого сообщество разработчиков создало <strong>temporal_rs</strong> - библиотеку на Rust, которая реализует весь Temporal API согласно спецификации ECMAScript. Это похоже на создание единого стандартного решения, которое все могут использовать.</p>
<p dir="auto">Теперь вот что происходит:</p>
<ul>
<li>Boa (JavaScript движок на Rust) использует temporal_rs напрямую</li>
<li>Kiesel (JavaScript движок на Zig) подключает её через FFI</li>
<li>V8 (Chrome и Node.js) тоже интегрировал temporal_rs</li>
</ul>
<p dir="auto">Это первый раз, когда в V8 появился код на Rust. Раньше V8 был полностью на C++. Решение оказалось настолько удачным, что команда Chrome решила его использовать вместо разработки своей версии.</p>
<p dir="auto">Преимущества такого подхода очевидны:</p>
<ul>
<li><strong>Экономия труда</strong> - не нужно писать одно и то же три раза</li>
<li><strong>Меньше багов</strong> - один хорошо протестированный код вместо трёх разных реализаций</li>
<li><strong>Совместимость</strong> - все браузеры используют одинаковое поведение</li>
<li><strong>Быстрое развитие</strong> - новые фичи добавляются один раз для всех</li>
</ul>
<h2>Состояние Temporal в браузерах: что уже доступно</h2>
<p dir="auto">Temporal уже появился в реальных браузерах. Firefox 139 и Chrome 144 уже поддерживают этот API полностью. Safari работает над внедрением, но пока только в Technical Preview.</p>
<p dir="auto">Однако Temporal ещё не финализирован как стандарт. Он находится на <strong>Stage 3 в процессе TC39</strong>, что значит: черновик достаточно стабилен для реализации, но может ещё измениться. Следующий шаг - Stage 4, когда его официально добавят в стандарт ECMAScript. По плану это должно произойти на встрече TC39 в марте 2026 года в Нью-Йорке в офисе Google.</p>
<p dir="auto">Что это означает на практике:</p>
<ul>
<li>Вы уже можете использовать Temporal в современных браузерах без полифилов</li>
<li>Но для production нужно учитывать, что поддержка в Safari пока неполная</li>
<li>Финализация в стандарте сделает API окончательным и даст полную гарантию совместимости</li>
<li>После Stage 4 можно будет забыть о Date и писать код только с Temporal</li>
</ul>
<p dir="auto">Тестовое покрытие поразительно: <strong>4000+ тестов</strong> для Temporal. Для сравнения - добавление ES6 было примерно на эту же величину. Это показывает масштаб функциональности.</p>
<h2>Почему Rust - удачный выбор для shared кода</h2>
<p dir="auto">Вы наверное удивитесь: почему именно Rust? Ответ прост - это язык, который естественно решает проблемы, которые были в JavaScript и C++.</p>
<p dir="auto">В JavaScript нет настоящей типизации, поэтому сложно выразить строгие требования Temporal спецификации. В C++ всё дело в управлении памятью - можно написать быстро, но легко получить утечки и ошибки. Rust даёт типизацию, безопасность памяти и хорошую производительность одновременно.</p>
<p dir="auto">Ещё один плюс - <strong>FFI (Foreign Function Interface)</strong>. temporal_rs поставляется с FFI слоем, который позволяет другим языкам вызывать Rust код как обычную библиотеку. Kiesel на Zig и V8 на C++ могут подключить temporal_rs с минимальными усилиями.</p>
<p dir="auto">Это создало интересный паттерн:</p>
<ul>
<li>Сложная логика работает на Rust</li>
<li>Другие языки просто вызывают готовые функции</li>
<li>Все получают исправления багов одновременно</li>
<li>Браузеры экономят ресурсы разработки</li>
</ul>
<p dir="auto">Конформность очень высокая: Boa, Kiesel и V8 показывают более 95% совместимости с тестами. Это потому что все используют один и тот же код.</p>
<h2>Перспективы развития и что дальше</h2>
<p dir="auto">Хотя Temporal уже в браузерах, это только начало. Когда спецификация достигнет Stage 4, начнётся массовое внедрение в реальных проектах. Сейчас большинство разработчиков ещё используют полифиллы вроде Day.js или Moment.js, но со временем этот код можно будет переписать на нативный Temporal.</p>
<p dir="auto">Разработчики говорят о temporal_rs как об удачном примере <strong>реиспользуемых Rust библиотек в браузерных движках</strong>. Это может открыть путь для подобных проектов в будущем. Если другие части JavaScript API будут сложны для реализации, почему бы не написать их на Rust? Главное - правильно спроектировать FFI слой.</p>
<p dir="auto">Одна из потенциальных проблем - размер пакетов. temporal_rs включает свои данные о часовых поясах и календарях, что может увеличить WASM бандл. Но это компромисс между удобством и размером - всегда можно оптимизировать потом.</p>
<p dir="auto">Текущий момент интересный тем, что разработка JavaScript экосистемы становится более скоординированной. Когда на выходе Stage 4 и все браузеры будут с Temporal, это серьёзно упростит работу с датами для миллионов разработчиков. Старый Date останется только для обратной совместимости, но основной фокус сместится на новый API.</p>
]]></description><link>https://forum.exlends.ru/topic/1312/temporal-api-na-rust-kak-kiesel-menyaet-razrabotku</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 03:53:49 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/1312.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 07 Mar 2026 12:03:42 GMT</pubDate><ttl>60</ttl></channel></rss>