Особенности метапрограммирования Dart

Будет ли эквивалент пространства имен c# Reflection.Emit в dart?

Reflection.Emit имеет ряд классов, которые используются для создания типов во время выполнения и добавления свойств, настройки их геттеров и сеттеров, а также создания методов и обработчиков событий во время выполнения, что действительно полезно, когда речь идет о метапрограммировании.

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

Мои вопросы:

  • Будет ли такая вещь в будущих версиях дротика? они упоминают что-то о Mirror Builder, но я не уверен, что делает то же самое, может ли кто-нибудь подтвердить, что это то, о чем Mirror Builder?
  • другой вопрос: если я могу генерировать свои типы данных на сервере в виде строк, есть ли способ скомпилировать их перед отправкой клиенту и сопоставить их на карте и использовать эту карту для создания экземпляров?

person FPGA    schedule 20.05.2014    source источник


Ответы (1)


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

Подобные требования обычно решаются путем генерации кода во время сборки (Polymer, Angular и другие) с помощью преобразователей, которые анализируют код и сгенерированный код для доступа к отражающим свойствам или фрагментам кода в HTML.

Пакет Smoke призван упростить это.

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

try.dartlang.org использует такой подход. Исходный код доступен здесь https://code.google.com/p/dart/source/browse/branches/bleeding_edge/dart/site/try/ . Он включает dart2js (созданный для JavaScript) и запускает фоновую изоляцию, которая компилирует код Dart в JS.

person Günter Zöchbauer    schedule 20.05.2014
comment
Большое спасибо, это очень полезно на данный момент, я просто не могу сопротивляться созданию всего с нуля в дартс, я никогда не наслаждался языком так сильно - person FPGA; 20.05.2014
comment
Нет проблем, наслаждайтесь сколько хотите :D Я просто указываю на некоторые источники идей, как это можно сделать. - person Günter Zöchbauer; 20.05.2014
comment
дым больше не поддерживается... такой же подход к отражению теперь поддерживается собственным reflectable<, разработанным командой Dart. /a> пакет. - person Renato; 05.05.2019
comment
@ Ренато, ты прав, дыма давно нет, и его можно отразить. - person Günter Zöchbauer; 05.05.2019