Try the new System.Text.Json source generator
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 23.07.21 13:52
Оценка: 18 (2) +1
https://devblogs.microsoft.com/dotnet/try-the-new-system-text-json-source-generator/
и солнце б утром не вставало, когда бы не было меня
Re: Try the new System.Text.Json source generator
От: Kolesiki  
Дата: 24.07.21 10:23
Оценка: -3
Читали уже! Классическая "работа" от M$ — взять какую-то ничтожную задачу и развести вокруг неё космический API!

Что эти "анжанеры" фактически сделали, так просто сгенерили код сериализации во время компиляции! Это можно было сделать безо всей этой помпы на 10 страниц, тупо "прозрачным внедрением генератора". Кто знает про T4, тот лишь уныло ухмыльнулся на все эти потуги.
Re[2]: Try the new System.Text.Json source generator
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 25.07.21 11:38
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Читали уже! Классическая "работа" от M$ — взять какую-то ничтожную задачу и развести вокруг неё космический API!


K>Что эти "анжанеры" фактически сделали, так просто сгенерили код сериализации во время компиляции! Это можно было сделать безо всей этой помпы на 10 страниц, тупо "прозрачным внедрением генератора". Кто знает про T4, тот лишь уныло ухмыльнулся на все эти потуги.

Ну вообще то есть встроенная Xml сериализация в отдельную dll. Зачем T4, если нужно генерить по текущим типам. Как раз для этого прекрасно и подходит source generator и все в одной сборке
и солнце б утром не вставало, когда бы не было меня
Re[3]: Try the new System.Text.Json source generator
От: vaa  
Дата: 01.08.21 03:59
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Ну вообще то есть встроенная Xml сериализация в отдельную dll. Зачем T4, если нужно генерить по текущим типам. Как раз для этого прекрасно и подходит source generator и все в одной сборке


xml + dll это всё же в рантайме происходит, фича темы вроде создать оптимизированный сериализатор в дизайн-тайме?
☭ ✊ В мире нет ничего, кроме движущейся материи.
Отредактировано 04.08.2021 0:58 VladD2 . Предыдущая версия .
Re[4]: Try the new System.Text.Json source generator
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 01.08.21 09:03
Оценка: +1
Здравствуйте, vaa, Вы писали:

vaa>xml + dll это всё же в рантайме происходит, фича темы вроде создать оптимизированный сериализатор в дизайн-тайме?

Это про то, что Kolesiki считает M$ — взять какую-то ничтожную задачу и развести вокруг неё космический API!
Я то как раз пишу про одну сборку! Кроме того например проблема .Net Native это сериализация десериализация кода и рефлексия.
source generator как раз упрощают эти проблемы
и солнце б утром не вставало, когда бы не было меня
Отредактировано 04.08.2021 0:58 VladD2 . Предыдущая версия .
Re[2]: Try the new System.Text.Json source generator
От: Danchik Украина  
Дата: 01.08.21 16:20
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Читали уже! Классическая "работа" от M$ — взять какую-то ничтожную задачу и развести вокруг неё космический API!


У тебя есть опенсорсный проект чтобы посмотреть на высший пилотаж?

K>Что эти "анжанеры" фактически сделали, так просто сгенерили код сериализации во время компиляции! Это можно было сделать безо всей этой помпы на 10 страниц, тупо "прозрачным внедрением генератора". Кто знает про T4, тот лишь уныло ухмыльнулся на все эти потуги.


Кто знает T4, тот занет что под .NET Core T4 не работает или работает через танцы с бубном.
Re[2]: Try the new System.Text.Json source generator
От: Sinclair Россия https://github.com/evilguest/
Дата: 02.08.21 05:50
Оценка: +3
Здравствуйте, Kolesiki, Вы писали:

K>Читали уже! Классическая "работа" от M$ — взять какую-то ничтожную задачу и развести вокруг неё космический API!


K>Что эти "анжанеры" фактически сделали, так просто сгенерили код сериализации во время компиляции! Это можно было сделать безо всей этой помпы на 10 страниц, тупо "прозрачным внедрением генератора". Кто знает про T4, тот лишь уныло ухмыльнулся на все эти потуги.

Тут фишка вот в чём: допустим, нужно генерировать для класса X некий класс Y.
T4 помогает в том случае, если мы придумываем какой-то язык описания (хоть XML, хоть Json, хоть csv), по которому генерируем и X, и Y.
Ну, примерно как наши предки использовали IDL для порождения производных файлов на разных ЯП.
А это далеко не всегда удобно — мы можем захотеть сгенерировать Y для произвольного X, а не такого, который порождён из внешней модели нашим же генератором.
T4 мог бы помочь, если ему дать на вход парсер C# — чтобы он отдавал нам AST для X, и вот тогда-то он мог бы порождать Y без вспомогательных файлов.

Развитием этой идеи и являются source generators. Нет, если вам не хочется, то можете тащить в проект свой любимый парсер C#, и обходиться голым T4 без source generators — но зачем?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: Try the new System.Text.Json source generator
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.08.21 01:00
Оценка: +2
Здравствуйте, Sinclair, Вы писали:

S>Развитием этой идеи и являются source generators. Нет, если вам не хочется, то можете тащить в проект свой любимый парсер C#, и обходиться голым T4 без source generators — но зачем?


Ну, мы Немерлом справляемся. Намного удобнее и Т4 и этого генератора. Им бы изучить Немерл и перенять кое что из него, а не изобретать велосипед в 100500й раз.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Try the new System.Text.Json source generator
От: VladCore  
Дата: 05.08.21 20:15
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>https://devblogs.microsoft.com/dotnet/try-the-new-system-text-json-source-generator/


а со старым system-text-json напомните что не так.

В 5м .net core у него производительнсть как в ручную написанном коде. по крайней мере при сериализации.
Re[2]: Try the new System.Text.Json source generator
От: Jack128  
Дата: 05.08.21 20:18
Оценка:
Здравствуйте, VladCore, Вы писали:

VC>Здравствуйте, Serginio1, Вы писали:


S>>https://devblogs.microsoft.com/dotnet/try-the-new-system-text-json-source-generator/


VC>а со старым system-text-json напомните что не так.


В том, что он использует рефлексию. А MS пытается компиляцию в Native осилить, которая с рефлексией не очень дружит.
Re[3]: Try the new System.Text.Json source generator
От: VladCore  
Дата: 06.08.21 08:05
Оценка:
Здравствуйте, Jack128, Вы писали:

S>>>https://devblogs.microsoft.com/dotnet/try-the-new-system-text-json-source-generator/


VC>>а со старым system-text-json напомните что не так.


J>В том, что он использует рефлексию. А MS пытается компиляцию в Native осилить, которая с рефлексией не очень дружит.


причем тут Native? Source Generator он для Managed.

ну и рефлексия это про Newtonsoft больше
Отредактировано 06.08.2021 8:07 VladCore . Предыдущая версия .
Re[4]: Try the new System.Text.Json source generator
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 06.08.21 08:44
Оценка:
Здравствуйте, VladCore, Вы писали:

VC>Здравствуйте, Jack128, Вы писали:


S>>>>https://devblogs.microsoft.com/dotnet/try-the-new-system-text-json-source-generator/


VC>>>а со старым system-text-json напомните что не так.


J>>В том, что он использует рефлексию. А MS пытается компиляцию в Native осилить, которая с рефлексией не очень дружит.


VC>причем тут Native? Source Generator он для Managed.

Речь идет про .Net Native. Он тоже Managed со сборкой мусора, но без среды, то есть без возможности докомпилировать.
VC>ну и рефлексия это про Newtonsoft больше.
Ну без готовой реализации сериализации десериализации нужно докомпилировать код.

Ну и в статье правдо по нерусски написано

В предыдущих версиях System.Text.Jsonметаданные сериализации могли быть вычислены только во время выполнения, во время первой процедуры сериализации или десериализации каждого типа в любом графе объектов, переданном сериализатору. После того как эти метаданные сгенерированы, сериализатор выполняет фактическую сериализацию и десериализацию. Результат этого вычисления кэшируется для повторного использования во время последующих процедур обработки JSON. Фаза генерации основана на отражении и является вычислительно дорогостоящей как с точки зрения времени, так и распределения. Эту фазу можно назвать фазой “разминки” сериализатора.

Генератор System.Text.Jsonисходного кода помогает нам устранить эту фазу разогрева, перенося проверку времени выполнения сериализуемых типов с помощью отражения во время компиляции. Результатом этой проверки может быть исходный код, инициализирующий экземпляры метаданных структурированной сериализации. Генератор также может генерировать высокооптимизированную логику сериализации, которая может выполнять набор функций сериализации, заданных заранее. По умолчанию генератор генерирует оба типа источников, но может быть сконфигурирован для генерации только одного из этих типов выходных данных либо по набору типов, либо по каждому сериализуемому типу.

Эти сгенерированные метаданные включаются в скомпилированную сборку, где они могут быть инициализированы и переданы непосредственно в JsonSerializerнее, чтобы сериализатору не пришлось генерировать их во время выполнения. Это помогает снизить затраты на первую сериализацию или десериализацию каждого типа. С этими характеристиками использование генератора источника может обеспечить следующие преимущества для приложений, которые используютSystem.Text.Json:

Повышенная пропускная способность сериализации
Сокращение времени пуска
Сокращение использования частной памяти
Удалено использование во время выполнения System.Reflectionи System.Reflection.Emit
Trim-совместимая сериализация, которая уменьшает размер приложения

и солнце б утром не вставало, когда бы не было меня
Отредактировано 06.08.2021 9:14 Serginio1 . Предыдущая версия .
Re[2]: Try the new System.Text.Json source generator
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 06.08.21 15:11
Оценка:
Здравствуйте, VladCore, Вы писали:

VC>Здравствуйте, Serginio1, Вы писали:


S>>https://devblogs.microsoft.com/dotnet/try-the-new-system-text-json-source-generator/


VC>а со старым system-text-json напомните что не так.


VC>В 5м .net core у него производительнсть как в ручную написанном коде. по крайней мере при сериализации.

То есть не читатель. Кроме того, что не нужно предварительно компилировать, кэшировать, оптимизировать ну ни какого различия нет?
Кроме того там есть и тесты с system-text-json. Ну почитай статью, там как раз есть сравнение с system-text-json

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

Сериализация POCOs
Учитывая наш Person тип, мы можем наблюдать, что сериализация ~1.62 x быстрее при использовании исходного генератора.

и солнце б утром не вставало, когда бы не было меня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.