ECMAScript 2026: Promise.try и Float16Array - новые методы массивов
-
ECMAScript 2026 принесла полезные обновления для JavaScript-разработчиков. Среди них выделяются Promise.try и Float16Array. Эти фичи упрощают работу с асинхронным кодом и данными высокой производительности.
Promise.try позволяет обрабатывать синхронные и асинхронные функции через Promise. Float16Array добавляет поддержку 16-битных чисел с плавающей запятой для экономии памяти. Они решают проблемы смешанных API и больших массивов данных, делая код чище и быстрее.
Promise.try: единый подход к sync и async
Promise.try - это статический метод Promise, который принимает функцию и аргументы, выполняет её синхронно и всегда возвращает Promise. Если функция возвращает значение - Promise fulfilled. Если бросает ошибку - rejected. Если возвращает другой Promise - следует за ним. Это избавляет от ручных оберток вроде new Promise или Promise.resolve().then().
Раньше для унификации приходилось писать boilerplate: try/catch для sync и .catch для async. Теперь один вызов Promise.try() решает всё. Метод работает с любыми аргументами, передавая их в функцию. Это особенно удобно в библиотеках с mixed API, где не знаешь заранее - sync функция или async.
Вот базовый синтаксис:
- Promise.try(func)
- Promise.try(func, arg1, arg2, …)
Ключевые преимущества:
- Синхронное выполнение без лишнего микротаска.
- Автоматический catch синхронных ошибок.
- Поддержка аргументов без лишних замыканий.
Сценарий До Promise.try С Promise.try Sync успех new Promise(resolve(value)) Promise.try(() => value) Sync ошибка try { fn() } catch {} Promise.try(fn).catch() Async функция Promise.resolve().then(fn) Promise.try(fn) Пример использования:
function processData(input) { return Promise.try(validate, input) .then(data => transform(data)) .catch(err => logError(err)); }Float16Array: компактные массивы для производительности
Float16Array - новый TypedArray для хранения чисел с плавающей запятой в 16 битах (половина от Float32). Это позволяет хранить в два раза больше данных в памяти, что критично для графики, ML-моделей и больших датасетов. ECMAScript 2026 также добавила методы DataView.getFloat16 и setFloat16 для бинарных буферов.
Раньше для экономии использовали Uint16Array с ручным преобразованием, но это приводило к ошибкам точности. Float16Array хранит значения от -65504 до 65504 с 11-битной мантиссой. Поддерживает стандарт IEEE 754 half-precision. Идеально для WebGL, тензоров и аудио-обработки, где память на первом месте.
Основные характеристики:
- Размер элемента: 2 байта.
- Диапазон: примерно ±6.55e4.
- Точность ниже Float32, но приемлемая для многих задач.
Тип массива Байт на элемент Применение Float32Array 4 Общая точность Float16Array 2 Графика, ML Uint16Array 2 Целые числа Пример создания и работы:
const floats16 = new Float16Array([1.5, 3.14, -2.7]); console.log(floats16); // 1.5 // Интеграция с DataView const buffer = new ArrayBuffer(4); const view = new DataView(buffer); view.setFloat16(0, 1.23);Методы массивов: что ещё важно знать
Хотя фокус на Promise.try и Float16Array, ECMAScript 2026 усиливает работу с массивами косвенно. Float16Array интегрируется с существующими методами вроде map, filter, reduce. Promise.try упрощает асинхронные трансформации массивов - например, Promise.all с mixed функциями.
Эти фичи дополняют экосистему TypedArray: теперь 16-бит float нативно. Для Promise.try синтаксис лаконичен, но помни о синхронном выполнении - нет микрозадержки. Тестируй на edge-кейсах: NaN, Infinity в Float16.
Практические советы:
- Используй Float16Array в WebGPU для вершинных буферов.
- Promise.try в утилитах для API-клиентов.
- Проверяй поддержку: baseline в 2026 движках.
Пример комбо:
function processGraphics(data) { return Promise.try(toFloat16, data) .then(arr => arr.slice(0, 1000)); }Взгляд на перспективы обновлений
ECMAScript 2026 сделала JavaScript ещё мощнее для реальных задач. Promise.try унифицирует async-код, Float16Array оптимизирует память. Осталось добавить поддержку в polyfill’ы и инструменты вроде Babel.
Дальше ждём уточнений по производительности Float16 на ARM-устройствах и интеграцию с WebAssembly. Эти фичи уже тестируются в V8 и SpiderMonkey - пора экспериментировать в проектах.
© 2024 - 2026 ExLends, Inc. Все права защищены.