Вебня – Telegram
Вебня
4.68K subscribers
89 photos
2 videos
3 files
2.08K links
JS VMs, спецификации, пропозалы, встречи #TC39, #WebAssembly, #W3C, браузеры, нёрдство.
Download Telegram
Еще интересный факт о spread operator: никакого спред оператора не существует. Вот так. Бум 🤯
По спецификации спред относится к пунктуаторам и является просто синтаксисом. Забавно, но даже Jordan Harband, один из активных участников TC39 и чемпион нескольких предложений в спецификацию, кажется не знал об этом.
https://github.com/kangax/compat-table/pull/1331#discussion_r206703275

Там же по ссылке мои пояснения на эту тему, а также ссылка на SO, где также это все объясняется.
Пример того, как можно заинлайнить вебассембли прямо в JS коде.

https://github.com/dcodeIO/long.js/blob/master/src/long.js#L9-L11

long.js — библиотека, которая позволяет работать с 64-битными целыми числами. WebAssembly умеет работать с int64/uint64 из коробки, поэтому если WebAssembly доступен в браузере (или nodejs), то он будет использоваться для математических операций.

Кстати, в ECMAScript есть пропозал BigInt (https://github.com/tc39/proposal-bigint), который находится на stage 3 и уже заимплеменчен в хроме, начиная с версии 67.
Меня тут попросили рассказать о том, как создать и продвигать свой пропозал в ECMAScript. У меня как раз есть один, но надо еще найти время оформить. Пропозал довольно простой, но требует погружения в семантику. Посмотрим что из этого выйдет.
#ecmanoscriptproposal

Недавно появился вот такой пропозал:
https://github.com/jasonwilliams/proposal-promise-allSettled

Promise.allSettled — это такой аналог Promise.all, который не реджектится если один из промисов зареджектился. Я хотел бы предложить добавить еще два метода для работы с промисами — Promise.any и Promise.some. Типичный юзкейс Promise.any — у нас есть несколько разных URL и мы хотим получить ответ от быстрейшего. Может показаться, что для такой задачи подойдет Promise.race, но это не так. Promise.race возвращает любой fulfilled промис, будь он resolved или reject. Мы же хотим вернуть именно успешный, разрезолвленный промис и реджектнуть только если все промисы реджектнулись. Promise.some принимает iterable первым параметром и число вторым. Он возвращает массив разрезолвленных промисов указанной во втором параметре длины. Если зареджектилось слишком много промисов (количество оставшихся промисов меньше, чем количество требуемых), то Promise.some сразу же реджектится.

Давайте для начала разберемся с Promise.any. Как мы можем реализовать это сейчас?

function any(promises) {
return Promise.all(
promises.map(promise =>
promise.then(val => {
throw val;
}, _ => _),
),
).then(() => {
throw Error('no successful connections');
}, _ => _);
}


Используем инверсию Promise.all, который реджектится с первым же реджектом любого из промисов, которые мы передаем в any. Поэтому делаем все наоборот — если промис успешный, то реджектим его, если неуспешный, то резолвим.

В следующей серии #ecmanoscriptproposal будем разбираться как такой пропозал оформить и предложить комитету. Stay tuned.
Если кто-то еще не в курсе, Apple прекращает поддержку OpenGL и OpenCL начиная с macOS Mojave и iOS 12. В этих версиях операционных систем данные API все еще будут работать, но не будут обновляться и впоследствии могут быть удалены. Apple предлагает вместо них использовать Metal 2. Официальной поддержки Vulkan API (пришедшему на смену OpenGL) на macOS и iOS нет, но есть опенсорс проект MoltenVK от Khronos Group (создателей OpenGL и Vulkan), который позволяет биндить Vulkan в Metal. Но как это все отразится на WebGL, который основан на OpenGL ES? Сотрудники Apple обещают, что WebGL в Safari продолжит работать (https://forums.developer.apple.com/message/314676#314676). В Chrome и Firefox (а также в Qt Framework) уже использется слой совместимости ANGLE, который позволяет транспилировать язык шейдеров GLSL (OpenGL) в HLSL (Direct3D) на платформах Windows. Вероятно им придется использовать нечто подобное на операционках от Apple. Для совместимости OpenGL ES и Metal существует MoltenGL от всё тех же Khronos Group, правда, в отличие от MoltenVK, он платный и проприетарный.
@maxgraey предложил написать также о WebGPU.
WebGPU — это новый API, предложенный Apple, который будет работать поверх DirectX 12, Metal и Vulkan.
https://webkit.org/blog/7380/next-generation-3d-graphics-on-the-web/
WebGPU публично поддерживается такими компаниями как Apple, Microsoft, Mozilla, Google, Intel, AMD, Яндекс (карты), Epic (Unreal Engine), Unity Technologies (Unity3D). В данный момент рабочая имплементация существует в виде experimental feature (включается в разделе develop) в Safari. В июне Google объявил о своем намерении заимплементить WebGPU в Chrome.
https://groups.google.com/a/chromium.org/forum/m/#!topic/blink-dev/dxqWTSvyhDg

Основной репозиторий WebGPU находится здесь: https://github.com/gpuweb/gpuweb

А вот ANGLE-подобный слой совместимости для Chromium’ов: https://github.com/google/nxt-standalone
16 августа пройдет встреча TC39 по спецификации ECMA402. Это спецификация интернационализации (aka Intl). Повестка дня тут.
Вчера оказывается был созвон по пропозалу декораторов. Вот стенограмма (еще не влита в мастер ветку, может незначительно меняться)
https://github.com/tc39/proposal-decorators/blob/master/meetings/2018-08-07.md

update: влили в том же виде, ссылку обновил
Object rest / spread не попадут в Edge 18. Печально ☹️
https://github.com/Microsoft/ChakraCore/pull/5268#issuecomment-411438657
Ко мне доехал мой Oculus Go. Так что возможно теперь буду еще писать про эксперименты с WebVR. Кстати, если знаете что там за браузер такой, на основе чего он, и можно ли установить туда нормальные хром / файрфокс, то напишите мне пожалуйста (@chicoxyzzy).

Если что, цены на модель 64 Гб в России доходят до 30 килорублей. Я заказывал с Амазона за ~$280 ($249 + приоритетная доставка). Шло 4 суток.

-------------------

upd: нашел вот такую инфу. Хромиум 61 (такой же как в Electron 2). Неплохо. Значит даже WebAssembly должен быть.
https://developer.oculus.com/documentation/vrweb/latest/concepts/carmel-getting-started/
Между тем, вышел Babel 7 RC. До релиза осталось совсем недолго.
https://github.com/babel/babel/releases
Думаю, что можно не переводить. Ну и фолловьте меня в твиттере заодно.

https://twitter.com/chicoxyzzy/status/1027881659998371841

upd: заслал пулл реквест Surma, и он уже даже задеплоил изменения на https://ishoudinireadyyet.com
В эти выходные видимо без новостей. Так случилось, что у меня день рождения. До понедельника.
W3C CSS Working Group опубликовала 2 новых Candidate Recommendation (https://www.w3.org/TR/2018/CR-css-scroll-snap-1-20180814/ и https://www.w3.org/TR/2018/CR-css-values-3-20180814/), а также First Public Working Draft новой версии последней (https://www.w3.org/TR/2018/WD-css-values-4-20180814/)

Также W3C опубликовала Candidate Recommendation TTML2 для синхронизации текста во времени
https://www.w3.org/blog/news/archives/7243
Девненько ничего не писал, да и до середины сентября вообще с этим будет сложно. Тем не менее, какие-то новости буду пытаться писать время от времени не смотря ни на что. И вот очень горячая новость: релиз Babel 7 запланирован на пятницу, но я вам ничего не рассказывал 🙊