Новости о макросах и сериализации данных в Dart

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

За последние пару лет мы вложили немало времени и ресурсов на прототипирование макросов. К сожалению, всякий раз, когда мы преодолевали одно серьезное техническое препятствие, всплывало еще несколько новых. В настоящий момент, мы не видим, чтобы макросы в ближайшее время приблизились к той функциональности, которую мы были бы готовы выпустить, с тем качеством и developer-time performance, которые мы бы хотели получить.

Рассмотрев альтернативные издержки, в частности тех функций, которые мы бы могли предоставить сообществу взамен, мы приняли трудное решение прекратить работу над макросами.

Кратко о ситуации

Мы считаем, что Dart предлагает уникальное сочетание сильных сторон, таких как (1) AOT-компиляция и производительность, характерные для статических языков, и (2) быстрый цикл разработки (вроде возможности горячей перезагрузки с сохранением состояния), характерный для динамических языков. По мере развития Dart, мы тщательно оценивали изменения в языке по обоим пунктам.

Мощное метапрограммирование, основанное на богатой интроспекции, всегда было вызовом в таком контексте. Интроспекция времени выполнения (например, рефлексия) затрудняет выполнение tree-shaking оптимизаций, которые позволяют нам генерировать более компактные бинарные файлы. В свою очередь, статическая интроспекция (например, макросы) может принимать несколько форм. Большинство языков используют синтаксический подход, с ограниченной статической рефлексией на уровне синтаксиса. Мы не считали, что этого достаточно для достижения наших целей. Вместо этого, мы стремились создать систему макросов, которая бы поддерживала глубокую семантическую интроспекцию времени компиляции. К сожалению, оказалось, что семантическая интроспекция приводила к большим затратам времени компиляции, что затрудняло возможность сохранять горячую перезагрузку горячей.

Мы пришли к выводу, что нам просто еще слишком далеко до выпуска макросов с требуемым developer-time performance. Наша текущая реализация приводит к регрессу как работы с кодом (имеются в виду такие вещи, как статический анализ и автодополнение), так и инкрементальной компиляции (имеется в виду первый шаг горячей перезагрузки), и мы не уверены, что сможем надлежащим образом решить эти проблемы в разумные сроки.

Что дальше

Мы решили сосредоточиться на других функциях, в поставке которых мы более уверены.

Одно из направлений, в которое мы инвестируем — это улучшение поддержки данных в Dart. Это самая запрашиваемая issue в трекерах Dart и Flutter. Фактически, нашей основной мотивацией для макросов было обеспечение лучшей работы с данными, их сериализации и десериализации. Мы по-прежнему будем стремиться к улучшению работы с данными, но сейчас мы намерены добиться этого с помощью более специализированных функций языка.

Еще одно направление, в которое мы инвестируем — улучшение времени сборки и генерации кода в целом. Мы уже наметили некоторые улучшения для build_runner. Также, мы планируем выпустить augmentations, которые мы прототипировали в рамках макросов. Мы считаем, что эта функциональность имеет ценность сама по себе и она может улучшить существующую генерацию кода, так что мы намерены выпустить ее отдельно.

Мы понимаем, что эта новость многих разочарует. Мы по-прежнему заинтересованы в исследовании метапрограммирования в долгосрочной перспективе, поскольку у него есть ряд потенциальных областей применения, помимо работы с данными. Тем не менее, мы также хотим ясно дать понять нашему сообществу, что мы не планируем выпускать макросы в обозримом будущем.

Мы хотели бы поблагодарить всех, кто попробовал макросы, кто оставлял отзывы и вносил свой вклад непосредственно через PR. Этот вклад и энергия будут способствовать нашей дальнейшей работе. Мы в восторге от улучшений, которые мы можем предложить в этом году.

Источник: https://habr.com/ru/articles/879572/


Интересные статьи

Интересные статьи

Одной из главных причин, по которой администраторы предпочитают подключать почту пользователей в смартфонах и планшетах не через мобильные приложения, а используя протокол Exchange ActiveSync является...
Задача - сделать AMP версию всего сайта на 1С-Битрикс, чтобы содержание AMP страниц всегда соответствовало оригинальным и изменялось при изменении оригинальных.
Выгрузка пользователей из 1C ЗУП в Битрикс24 или правдивая история о том как настроить интеграцию 1С-Битрикс24 с ЗУП без 1С-ника.В жизни так бывает, причём бывает чаще чем хотелось бы, хоть в целом и ...
Публикуем перевод статьи, которую мы нашли на hackernoon.com. Ее автор, Thiago Miranda, пишет о том, как сделать работу с Git более удобной и эффективной. Читать дальше → ...
Довольно часто владельцы сайтов просят поставить на свои проекты индикаторы курсов валют и их динамику. Можно воспользоваться готовыми информерами, но они не всегда позволяют должным образом настроить...