Всем привет! В этом выпуске мы поговорим о новом формате файла конфигурации ESLint, немного поболтаем о код-гольфинге, коснемся предложения добавить записи и кортежи в JS и ещё раз посмотрим на потоки в Node.js. Кроме того, мы поговорим о релиз-кандидате TypeScript 4.8, библиотеке size-limit и других релизах недели.
Интересные публикации
Выпуск начнёт цикл из трёх статей Николаса Закаса (Nicholas C. Zakas). Как член управляющего технического комитета ESLint он рассказал о новом формате конфигов, который появился в версии 8.21. Новый формат назвали «плоским» конфигом, потому что суть его в том, чтобы отойти от каскада многих файлов с конфигурациями ESLint в пользу одного. Новый конфиг будет использовать современные возможности JS для загрузки конфигурации, собирать в себе все правила проекта и необходимую информацию. Также файл будет иметь расширение .js. Первая часть цикла посвящена тому, какие именно проблемы были в старой системе и почему понадобилось задуматься о новой. Во второй части Николас подробно описывает саму концепцию «плоского» конфига, а в третьей рассказывает о том, как начать их использовать уже сегодня. У фичи статус Developer preview. Пока ей нельзя пользоваться через CLI, но можно через API. Так что попробуйте – может быть, у вас будет какое-то хорошее предложение для разработчиков.
Стэнли Улили (Stanley Ulili) в разделе тьюториалов Digital Ocean опубликовал статью об использовании многопоточности в Node.js. Недавно уже был подобный материал, который был скорее вводным, а этот – уже более практический. Тут тоже есть небольшое вступление с пояснением о том, что такое процессы и что такое потоки, как они работают и какие у них особенности. Здесь же рассматривается демо-проект – в нём есть работа с промисами, worker tread’ами и демонстрация того, как это всё соотносится с ядрами процессора. Довольно наглядный пример, хорошая возможность разобраться.
Около двух лет назад появилось предложение добавить в JavaScript новые составные примитивы: записи (Records) и кортежи (Tuples). Это иммутабельные составные примитивы, которые должны будут сравниваться по значению. Если проще, записи — это неизменяемые объекты, а кортежи — массивы. Один из авторов пропозала Робин Рикард (Robin Ricard) недавно рассказывал о предложении на конференции JSNation. Я не очень следил за движением фичи по стадиям принятия, но пропозал уже имеет статус Stage-2. Записи и кортежи сделают более полезными Set и Map, позволят делать эффективное глубокое сравнение и в принципе могут быть много чем полезными, лишь бы фантазии хватило. К выпуску я приложу ссылку на репозиторий пропозала и на перевод старого обзора от Акселя Раушмайера (Axel Rauschmayer). Вполне возможно, что мы увидим эту фичу в JS если не в ES2023, то в ES2024.
Темани Афиф (Temani Afif) продолжает, как тот горшочек, варить статьи по CSS Grid. На этот раз он начал серию статей о том, как с CSS Grid и несложными математическими выражениями создавать сложные геометрические формы. Это первая часть, в ней он создаёт сетку из шестиугольных изображений, ромбов, треугольников, кусочков пазла и других форм. Создание каждой сопровождается комментариями, объяснением геометрической основы и работающими примерами. Понятно, что, развивая мысль, к элементам можно самостоятельно применить эффекты, трансформации и в принципе поэкспериментировать. Выглядит классно, посмотрим, что будет во второй части.
Кнопка «Назад» — очень важный элемент пользовательского интерфейса. Но как правильно спроектировать кастомную кнопку «Назад» и создать хороший пользовательский опыт? На этот вопрос пытается ответить в своей статье Виталий Фридман в Smashing Magazine. Для начала –– зачем это нужно? Затем, что кнопка «Назад» браузера может привести к нежелательному результату, а своей кнопкой «Назад» мы можем делать то, что нужно. Например, рассматриваются желательное расположение кнопки, её вид и некоторые предложения по корректной логике её работы, а также по расположению кнопки таким образом, чтобы избежать мискликов и не запутать пользователя.
Следующий материал о штуке, про которую не услышишь на каждом углу. Речь пойдёт про код-гольфинг. Это соревновательное программирование, в котором нужно создать кратчайший исходный код, выполняющий поставленную задачу. Например, подобное соревнование есть по CSS. А эта статья посвящена конкретно приëмам код-гольфинга в JavaScript. И их в этой статье много — практически для каждого основного раздела JS, и для переменных, и для функций, и для циклов и много чего ещё. В каждом разделе вы найдёте более привычную длинную запись и варианты сокращений с небольшими пояснениями. На проде это, конечно, ухудшит читаемость кода, но это хороший сборник всевозможных вариантов записей в языке, который поможет лучше читать код и понятнее его писать. Бонусом — отличное развлечение.
Завершит рубрику ещё одна статья в Smashing Magazine. В ней Кристин Вэлор (Christine Vallaure) рассказывает о том, что было бы хорошо знать разработчику при работе с дизайнерами в Figma. Например, здесь такие нюансы, как отсутствие других единиц измерения кроме пикселей, не очень умные CSS-стили элементов, что в Figma нет брейкпоинтов и другие. Почитайте, возможно эта статья поможет вам проще находить общий язык с дизайнерами.
Новости релизов
Доступен релиз-кандидат TypeScript 4.8. В новой версии есть, пожалуй, одно изменение, которое нужно учитывать. Если вы используете новую конструкцию Error.cause, то теперь, если возникнет исключение, TS выведет тип не Error, а unknown. Скорее всего, дело в том, что во время исключения автор какого-то кода мог вернуть совсем не объект класса Error, а в принципе что угодно, поэтому логичнее выяснить, что внутри, самостоятельно. Это просто безопаснее для системы в целом. В остальном всё как обычно: улучшается поддержка типов, немного оптимизируется компиляция, производительность, расширяются возможности существующих конструкций. Других очень важных изменений нет, но обновляться, конечно же, стоит. Ждём полноценного релиза.
Команда разработки Google Chrome выпустила патч 104-ой версии с устранением критической уязвимости. Детали пока не раскрываются — известно, что уязвимость позволяет обойти все уровни защиты браузера и связана с обращением к уже освобождëнной памяти. Кроме неё были устранены ещё 9 уязвимостей разной степени опасности.
Я уже говорил о новой системе конфигов ESLint в начале выпуска. Как раз ей в основном и были посвящены релизы 8.21.0 и 8.22.0 ESLint. В 21-ой версии новая система как раз появилась, а в 22-ой для неё добавили поддержку кэширования. Также была дополнена документация и внесены другие небольшие изменения.
Вышел патч Ubuntu 22.04.1 LTS. Это выпуск, который стабилизирует новую LTS-версию. Как раз после этого патча пользователям Ubuntu 20.04 будет предложено обновиться до 22-ой версии.
Вышла восьмая версия библиотеки size-limit. Это open-source библиотека за авторством хорошо известного вам Андрея Ситника. Инструмент предназначен для контроля «бюджета» производительности на JS, т.е. размера, длительности загрузки и других показателей. Недавно вышла восьмая мажорная версия библиотеки и патч 8.0.1. В новой версии была удалена поддержка Node.js 12, а в патче обновлена версия esbuild. Библиотека поддерживает ES-модули, встраивается в CI/CD-системы и помогает контролировать изменения размера вашего JS-кода. Если не пробовали — посмотрите.
Также на этой неделе отмечу релизы Playwright 1.25.0, Fastify 4.4.0 и Lerna 5.4.3.
Другие новости
Есть порция новостей от Deno. Райан Даль (Ryan Dahl) и Элон Бондер (Alon Bonder) в блоге Deno рассказали о предстоящих крупных изменениях. В течение следующих трёх месяцев Deno начнёт поддерживать импорт npm-пакетов, и, как обещается, большая часть из них будет без проблем работать с Deno. Команда разработки продолжает движение в сторону разработки самого быстрого JS-рантайма и уже в следующем релизе представит новый HTTP-сервер, который должен быть самым быстрым веб-сервером на JS, который когда-либо был написан. Кроме того, была запущена линия поддержки для компаний, которые пользуются Deno. Больше подробностей — в блоге проекта, ссылку вы найдёте в описании выпуска.
В конце выпуска — новости из августовского рейтинга TIOBE. Напомню, это рейтинг популярности языков программирования, в котором выводы строятся на основании статистики запросов в поисковых системах. По сравнению с августом 2021 года Python вырвался на первое место, соответственно на второе и третье места сместились языки C и Java. При подготовке выпуска мне в голову закралась шальная мысль. А что, если языки гуглят чаще, если они просто непонятные? Или там просто много новичков? Т.е. правда ли говорит такой рейтинг о популярности языка? Хороший вопрос. Тем не менее не сильно верьте рейтингам и пишите на том, на чём вам нравится или хочется.