<?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[ECMAScript 2026 финализирован: Promise.try, Float16Array и RegExp.escape в действии]]></title><description><![CDATA[<p dir="auto">ECMAScript 2026 официально финализирован. Это обновление добавляет Promise.try, Float16Array и RegExp.escape, которые упрощают работу с асинхронностью, графикой и регулярными выражениями.</p>
<p dir="auto">Эти фичи решают повседневные проблемы разработчиков. Promise.try предотвращает ошибки при обертке функций, Float16Array экономит память в WebGL, а RegExp.escape защищает от уязвимостей в паттернах. Теперь код становится чище и надежнее без лишних библиотек.</p>
<h2>Promise.try: безопасная обертка операций</h2>
<p dir="auto">Promise.try - это новый статический метод Promise, который безопасно оборачивает любую функцию в промис. Он ловит синхронные ошибки и возвращает resolved промис с результатом или rejected с ошибкой. Без него вызов Promise.resolve(nonPromise) кидает TypeError, если функция не имеет метода then.</p>
<p dir="auto">Рассмотрим типичный сценарий: обработка пользовательского ввода или вызов API. Раньше приходилось писать try-catch внутри async функции или использовать библиотеки вроде Bluebird. Promise.try упрощает это, делая код декларативным. Например, при чтении файла или вычислении данных оно автоматически превращает синхронный код в асинхронный без крашей.</p>
<ul>
<li><strong>Автоматическая обработка ошибок</strong>: Promise.try(fn) всегда возвращает промис, даже если fn кидает ошибку синхронно.</li>
<li><strong>Поддержка async/await</strong>: Идеально сочетается с await, упрощая цепочки промисов.</li>
<li><strong>Совместимость</strong>: Работает с любыми функциями, включая стрелочные, без проверки типов.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Сценарий</th>
<th>Без Promise.try</th>
<th>С Promise.try</th>
</tr>
</thead>
<tbody>
<tr>
<td>Синхронная функция</td>
<td>try { await fn() } catch {}</td>
<td>await Promise.try(fn)</td>
</tr>
<tr>
<td>Ошибка в fn</td>
<td>TypeError</td>
<td>Rejected промис</td>
</tr>
<tr>
<td>Успех</td>
<td>Работает</td>
<td>Resolved промис</td>
</tr>
</tbody>
</table>
<p dir="auto"><em>Важно</em>: Метод не меняет поведение async функций, но спасает от неожиданных исключений в колбэках.</p>
<h2>Float16Array: экономия памяти для графики</h2>
<p dir="auto">Float16Array - новый TypedArray для 16-битных чисел с плавающей записью. Он хранит значения в формате half-precision float, занимая вдвое меньше места, чем Float32Array. Это критично для приложений с большими массивами данных, как шейдеры в WebGL или машинное обучение в браузере.</p>
<p dir="auto">Представьте обработку изображений или 3D-моделей: стандартный Float32Array жрет память, особенно на мобильных устройствах. Float16Array снижает потребление вдвое без сильной потери точности - достаточно для большинства графических задач. В движках вроде V8 или SpiderMonkey оно уже тестируется для ускорения рендеринга.</p>
<ul>
<li><strong>Компактность</strong>: 2 байта на элемент против 4 у Float32.</li>
<li><strong>WebGL-интеграция</strong>: Прямо используется в буферах для вершин и текстур.</li>
<li><strong>Производительность</strong>: Быстрее на GPU, где память - bottleneck.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Тип</th>
<th>Размер (байт)</th>
<th>Точность</th>
<th>Применение</th>
</tr>
</thead>
<tbody>
<tr>
<td>Float16Array</td>
<td>2</td>
<td>~3-4 знака</td>
<td>Графика, ML</td>
</tr>
<tr>
<td>Float32Array</td>
<td>4</td>
<td>~7 знаков</td>
<td>Общие вычисления</td>
</tr>
<tr>
<td>Float64Array</td>
<td>8</td>
<td>~15 знаков</td>
<td>Финансы</td>
</tr>
</tbody>
</table>
<p dir="auto"><em>Нюанс</em>: Конвертация из Float32 может привести к округлению, тестируйте на точность.</p>
<h2>RegExp.escape: защита от инъекций в паттернах</h2>
<p dir="auto">RegExp.escape - статический метод, который экранирует специальные символы в строке для безопасного использования в RegExp. Без него символы вроде . или * интерпретируются как метасимволы, что приводит к ошибкам или уязвимостям при пользовательском вводе.</p>
<p dir="auto">Допустим, поиск по токену с точкой: /user.token/ит не только ‘user.token’, но и ‘userXtoken’. RegExp.escape(‘user.token’) вернет ‘user.token’, делая паттерн точным. Это стандартный способ защиты от ReDoS или неверных матчей в валидаторах и роутерах.</p>
<ul>
<li><strong>Автоматическая экранировка</strong><div class="plugin-markdown"><input type="checkbox" />( ) { } |.</div></li>
<li><strong>Пользовательский ввод</strong>: Безопасно для поисковых форм и фильтров.</li>
<li><strong>Производительность</strong>: Быстрее ручного экранирования через replace.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Строка</th>
<th>Без escape</th>
<th>С RegExp.escape()</th>
</tr>
</thead>
<tbody>
<tr>
<td>user.*</td>
<td>Любая последовательность</td>
<td>user.*</td>
</tr>
<tr>
<td>[test]</td>
<td>Класс символов</td>
<td>[test]</td>
</tr>
<tr>
<td>.com</td>
<td>Любой символ + com</td>
<td>.com</td>
</tr>
</tbody>
</table>
<p dir="auto"><em>Подсказка</em>: Используйте с new RegExp для динамических паттернов.</p>
<h2>Методы Set и итераторы: множества на стероидах</h2>
<p dir="auto">ECMAScript 2026 расширяет Set новыми методами: union, intersection, difference, symmetricDifference. Они позволяют выполнять операции над множествами без ручных циклов или lodash. Плюс глобальный Iterator с методами вроде concat для объединения итераторов.</p>
<p dir="auto">Это упрощает работу с данными: фильтрацию пользователей, обработку уникальных ID или анализ логов. Раньше union требовал forEach и new Set, теперь один вызов. Iterator.concat склеивает последовательности без генераторов, как в Python.</p>
<ul>
<li><strong>union()</strong>: Объединение множеств.</li>
<li><strong>intersection()</strong>: Пересечение.</li>
<li><strong>difference()</strong>: Разность.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Операция</th>
<th>Пример</th>
<th>Результат</th>
</tr>
</thead>
<tbody>
<tr>
<td>union</td>
<td>set1.union(set2)</td>
<td>Все элементы</td>
</tr>
<tr>
<td>intersection</td>
<td>set1.intersection(set2)</td>
<td>Общие</td>
</tr>
<tr>
<td>difference</td>
<td>set1.difference(set2)</td>
<td>Только в set1</td>
</tr>
</tbody>
</table>
<p dir="auto"><em>Фича</em>: Работает с любыми iterable, включая строки и массивы.</p>
<h2>Что добавит ECMAScript 2026 в практику</h2>
<p dir="auto">Эти обновления финализированы и скоро появятся в Node.js и браузерах. Promise.try и RegExp.escape решат 80% болей с асинхронностью и валидацией, Float16Array ускорит графику. За кадром остались Temporal API и Math.sumPrecise - они сделают дату и математику надежнее.</p>
<p dir="auto">Стоит протестировать в V8 с флагами или Babel. Дальше ждем оптимизаций для TypeScript и новых API для данных - JavaScript эволюционирует быстро.</p>
]]></description><link>https://forum.exlends.ru/topic/967/ecmascript-2026-finalizirovan-promise.try-float16array-i-regexp.escape-v-dejstvii</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 03:53:05 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/967.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 Mar 2026 09:43:22 GMT</pubDate><ttl>60</ttl></channel></rss>