.NET ненависти псто
От: Doom100500 Израиль  
Дата: 30.09.24 05:53
Оценка:
Вот есть ArrayBufferWriter: https://github.com/dotnet/runtime/blob/5535e31a712343a63f5d7d796cd874e563e5ac14/src/libraries/Common/src/System/Buffers/ArrayBufferWriter.cs#L11C1-L15C7

Вот это место:

#if MAKE_ABW_PUBLIC
    public
#else
    internal
#endif


Делает этот класс internal в .NET Framework. При этом, скопировав код себе в проект никаких проблем ни с компляцией, ни с тестами не словил.
И такой фигни там навалом.

Зачем ?!!!

ЗЫ. Простите, пароль на govnokod.ru я давно потерял.
Спасибо за внимание
Отредактировано 30.09.2024 5:55 Doom100500 . Предыдущая версия .
Re: .NET ненависти псто
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 30.09.24 07:05
Оценка: +2
Здравствуйте, Doom100500, Вы писали:

D>Делает этот класс internal в .NET Framework. При этом, скопировав код себе в проект никаких проблем ни с компляцией, ни с тестами не словил.

На самом деле, он делает ровно обратное (и это следует из названия макроса) — он делает ArrayBufferWriter (тот самый ABW) публичным.
Т.е. он всегда был Internal, но потом было решено его открыть, однако, зачем-то и старый вариант в коде оставили.

D>И такой фигни там навалом.

А можно ещё пример?
Re[2]: .NET ненависти псто
От: Doom100500 Израиль  
Дата: 30.09.24 07:45
Оценка:
Здравствуйте, Михаил Романов, Вы писали:

МР>Здравствуйте, Doom100500, Вы писали:


D>>Делает этот класс internal в .NET Framework. При этом, скопировав код себе в проект никаких проблем ни с компляцией, ни с тестами не словил.

МР>На самом деле, он делает ровно обратное (и это следует из названия макроса) — он делает ArrayBufferWriter (тот самый ABW) публичным.
МР>Т.е. он всегда был Internal, но потом было решено его открыть, однако, зачем-то и старый вариант в коде оставили.

Для меня это выглядит как "Ищю реализзацию IBufferWritter на byte[]. И нахожу, но она доступна только в .NET, но не в .NET Framework. Без веских на это причин"

D>>И такой фигни там навалом.

МР>А можно ещё пример?

SystemTextJsonFormatter https://github.com/microsoft/vs-streamjsonrpc/blob/ece3a29a1a7e6717311e03d5e1bade41a70e4828/src/StreamJsonRpc/SystemTextJsonFormatter.cs#L1

Не понял почему, но в здесь наоборот. В тестовой апликации на .NET — класс отсутствует, хотя в Framework есть.

Ладно бы, да только работа с SystemTextJsonFormatter и JsonMessageFormatter (обёртка для Newtonsof Json) Работают, и настраиваются по разному. Также смотрят на другие атрибуты для моделей.

Казалось бы если делаешь обёртки над разными парсерами через один интерфаейс, то почему, блин, интерфейсы всё — таки разные?

UPDATE:

Нытьё про отсутсвие SystemTextJsonFormatter снимается. В сампле была другая версия.
Спасибо за внимание
Отредактировано 30.09.2024 7:50 Doom100500 . Предыдущая версия .
Re[3]: .NET ненависти псто
От: Doom100500 Израиль  
Дата: 30.09.24 07:59
Оценка:
Здравствуйте, Doom100500, Вы писали:

МР>>А можно ещё пример?


Другой пример, с той-же StreaJsonRpc lib (с другой, немного, оперы) — вот есть метод в таргете:

        public Task<bool> SetParameterAsync(string parametername, object parametervalue)
        {
            return Task.FromResult(true);
        }


Если клиент использует SystemTextJsonFormatter, то параметры не сериализуются. А с JsonMessageFormatter — нет проблем.

Ничего, кроме негатива, не испытал исследуя эту либу (официальную от Майков!!!)
Спасибо за внимание
Отредактировано 30.09.2024 8:01 Doom100500 . Предыдущая версия .
Re[3]: .NET ненависти псто
От: m2user  
Дата: 30.09.24 08:09
Оценка: 1 (1)
D>Для меня это выглядит как "Ищю реализзацию IBufferWritter на byte[]. И нахожу, но она доступна только в .NET, но не в .NET Framework. Без веских на это причин"

Про то, что класс помечен как public в других версиях .NET (Core) ты в стартовом сообщении не написал.

А он точно есть в .NET Framework 4.8.1?

Также интересен не сам факт пометки internal, а то, в каких случаях срабатывает макрос.
Из истории изменений:
https://github.com/dotnet/corefx/pull/37017/files#diff-98644468321dea59ac8f6594d74d9f06b4e00870690cf7155a9a5d98317bc10

   <!-- ArrayBufferWriter is publicly exposed from the System.Memory ref and only it should define this constant as true.  -->
    <DefineConstants>$(DefineConstants);MAKE_ABW_PUBLIC</DefineConstants>


Т.е. видимо он включен в несколько библиотек, но только в некоторых должнен быть в публичном интерфейсе.
Re[4]: .NET ненависти псто
От: Doom100500 Израиль  
Дата: 30.09.24 08:17
Оценка:
Здравствуйте, m2user, Вы писали:

M>Т.е. видимо он включен в несколько библиотек, но только в некоторых должнен быть в публичном интерфейсе.


А причина? Всё ведь работает, если просто скопировать код. Да и код не такой-то уж и сложный.

M> А он точно есть в .NET Framework 4.8.1?


Есть, но internal.
Спасибо за внимание
Re[4]: .NET ненависти псто
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 30.09.24 08:46
Оценка:
Здравствуйте, Doom100500, Вы писали:

D>Если клиент использует SystemTextJsonFormatter, то параметры не сериализуются. А с JsonMessageFormatter — нет проблем.

А какое поведение вы ожидаете?
XXXFormater Это же просто обертка над разными сериализаторами.
Эти 2 сериализатора сделаны разными людьми, используют разную разметку атрибутами и работают местами по-разному. Есть даже довольно большая статья в MSDN по миграции с одного на другой Migrate from Newtonsoft.Json to System.Text.Json — там явно не всё, но даже этого — выше крыши.

Ну а то, что ребята не стали завязываться на какой-то один сериализатор, а сделали возможность использовать тот, который вам удобнее — это же наоборот отлично!
Вы просто выберите какой-то один, который вам подходит больше и остановитесь на нем.
Ну или если очень нужна поддержка сразу 2-х... ну снабдите модели двойным набором атрибутов.

D>Ничего, кроме негатива, не испытал исследуя эту либу (официальную от Майков!!!)

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

Ну и да, по поводу её официальности... Вообще-то (на сколько я знаю) это библиотека, которую разрабатывала команда VS, когда они начали выносить в отдельные процессы части встроенных расширений VS. А потом уже открыли исходники и сделали небольшую документацию.
Я, откровенно говоря, не помню, чтобы где-то в документации или статьях на неё особо ссылались. Даже та же gRPC встречается куда чаще.
Re[5]: .NET ненависти псто
От: Doom100500 Израиль  
Дата: 30.09.24 09:10
Оценка:
Здравствуйте, Михаил Романов, Вы писали:

D>>Если клиент использует SystemTextJsonFormatter, то параметры не сериализуются. А с JsonMessageFormatter — нет проблем.

МР>А какое поведение вы ожидаете?

Хотелось бы, чтобы заявленное поведение всё-таки присутсввовало независимо от используемого паерсера. В данном случае — это ядро библиотеки, которая не разобралась со своими — же обёртками над своим — же парсером.

МР>XXXFormater Это же просто обертка над разными сериализаторами.

МР>Эти 2 сериализатора сделаны разными людьми, используют разную разметку атрибутами и работают местами по-разному. Есть даже довольно большая статья в MSDN по миграции с одного на другой Migrate from Newtonsoft.Json to System.Text.Json — там явно не всё, но даже этого — выше крыши.

Да, я всё это читал, но через интерфейсы этих обёрток всё равно не пробиться к парсеру напрямую, кроме как самому всё разгребать — т.е. переписать ядро библиотеки — т.е. нафейфуа она тогда мне вообще? Ни перегрузок, чтобы переопределять поведение, ни свойств. Просто бери — копируй код и меняй потроха. Не таким я себе представлял Open Source.

МР>Ну а то, что ребята не стали завязываться на какой-то один сериализатор, а сделали возможность использовать тот, который вам удобнее — это же наоборот отлично!


Только сторонний работает по своей-же документации, а свой — нет. Просто молодцы, чё!

МР>Вы просто выберите какой-то один, который вам подходит больше и остановитесь на нем.



Поведение разное, несмотря на то, сама спецификация JsonRpc — на полторы страницы в хроме. Какая разница какой парсер? Есть метод, есть параметры, есть результат — работай (атрибуты — это, действительно, fine tunning, опустим их)

Хотелось взять майковский парсер, пока не задолбался выяснять почему с клиента не приходят пораметры, хотя по документации должны. Пришлось попробовать другой, а у него интерфейс другой, и работает он по-другому. А spec протокола — простой как три копейки — это вообще от парсера не должно зависеть 😫

D>>Ничего, кроме негатива, не испытал исследуя эту либу (официальную от Майков!!!)

МР>Ну если весь негатив сводится к различию в поведении JSON-сериализаторов, которые являются внешними по отношению к этой библиотеке, то для меня библиотека выглядит вполне приличной.

Плюс кастомизация, переопределение поведения (см. выше).

Да и поведение не надо быбло бы менять, если бы с парсерами проблем не было бы таких диких.

МР>Я, откровенно говоря, не помню, чтобы где-то в документации или статьях на неё особо ссылались. Даже та же gRPC встречается куда чаще.


Нужен протокол JsonРpc, не Grpc. И эта либа единственная от microsoft (мы не хотим стороннего из — за бюрократии, но это другая проблема).
Спасибо за внимание
Отредактировано 30.09.2024 9:17 Doom100500 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.