Re[2]: рефлекшен
От: Pzz Россия https://github.com/alexpevzner
Дата: 30.08.24 14:05
Оценка: +1
Здравствуйте, sergii.p, Вы писали:

SP>Можно конечно без этого. В С++ например до сих пор без рефлексии как-то обходятся. Но это просто ещё один инструмент, который иногда может улучшить код. В том же C++ находятся некоторые, которые говорят, что шаблоны не нужны. Ну да, 95% шаблоны не нужны, они их просто используют. Но знать инструмент и уметь его применять надо.


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

А когда есть два параллельных описания одного и того же, рано или поздно они расползутся...
Re[6]: рефлекшен
От: undo75  
Дата: 30.08.24 14:27
Оценка:
GIV>рефлекшен != "динамически формируется класс". рефлекшн это посмотреть уже готовые классы
GIV>генерация [байт]кода отдельная тема.

ну тут именно до такой степени запущено все

помню на собеседовании сосредоточено было внимание что он может не только созаваться, но и удаляться )

для них это в общем важно )
Отредактировано 30.08.2024 14:30 undo75 . Предыдущая версия . Еще …
Отредактировано 30.08.2024 14:29 undo75 . Предыдущая версия .
Re[5]: рефлекшен
От: · Великобритания  
Дата: 30.08.24 15:37
Оценка:
Здравствуйте, undo75, Вы писали:

u> ·>Я не понял о каком именно из "яп с рефлексией" ты спрашиваешь. В java, например, с отладкой всё просто замечательно.

u> извини. вот у тебя динамически формируется класс.
Причём тут рефлексия? Это кодогенерация.

u> фиг знает как там на джаве, предполагаю, что как и везде. где точку останова ставить? )

Динамически это уже после запуска приложения? В этом случае может генерироваться байткод напрямую, поэтому класса в принципе может и не быть. Впрочем, вместе с байт-кодом можно генерить дебажную инфу и отладчик это всё будет видеть.

Как более разумный вариант — есть annotation processors, в каком-то смысле плагин к компилятору, позволяющий генерировать исходный код во время компиляции, хоть с комментариями и javadoc. Тогда это всё в sources и будет доступно для IDE.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[3]: рефлекшен
От: swame  
Дата: 30.08.24 17:36
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, sergii.p, Вы писали:


SP>>Можно конечно без этого. В С++ например до сих пор без рефлексии как-то обходятся. Но это просто ещё один инструмент, который иногда может улучшить код. В том же C++ находятся некоторые, которые говорят, что шаблоны не нужны. Ну да, 95% шаблоны не нужны, они их просто используют. Но знать инструмент и уметь его применять надо.


Pzz>Если делаешь сериализацию без рефлексии, приходится каждое поле структуры дважды описывать: один раз в самом описании структуры и второй раз для сериялизатора.


Pzz>А когда есть два параллельных описания одного и того же, рано или поздно они расползутся...


А при рефакторинге структур все равно надо делать совместимость.
И когда кодом пишешь это потом намного легче. И хотя у меня есть возможность пользоваться рефлексией делаю в 80% случаев делаю сериализацию отдельно.
Отдельно в файл и отдельно в REST API.
Re: рефлекшен
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 30.08.24 18:32
Оценка:
Здравствуйте, undo75, Вы писали:

Например PropertyGrid
А так универсальные сериализаторы, десериализаторы. Хотя сейчас с приходом Source Generator и Native AOT надобность в них снижается
Универсальный маршалинг .Net Core, AppDomain, WCF, RPC маршалинг по Tcp/Ip свой велосипед

Приватные методы, плагины с утиной типизацией
и солнце б утром не вставало, когда бы не было меня
Re: рефлекшен
От: kov_serg Россия  
Дата: 30.08.24 19:37
Оценка: 1 (1)
Здравствуйте, undo75, Вы писали:

U>для прикладника он вообще нужен? ни одной задачи с потолка не смог придумать.

U>не ну я понимаю, орм там всякие. для прикладника нафига?

Re[2]: рефлекшен
От: andrey.desman  
Дата: 30.08.24 20:45
Оценка:
Здравствуйте, sergii.p, Вы писали:

SP>Можно конечно без этого. В С++ например до сих пор без рефлексии как-то обходятся.


Костылями, объездами на кривых козах и прочими моральными недугами обходятся.

SP>Вообще я вот считаю, что рефлексия должна быть времени компиляции. Это бы избавило от многих проблем отладки и скорости. Но Java и C# уже только могила исправит.


+ про CT reflect

SP>В том же C++ находятся некоторые, которые говорят, что шаблоны не нужны. Ну да, 95% шаблоны не нужны, они их просто используют. Но знать инструмент и уметь его применять надо.


В Java ct шаблоны и rt рефлексия.
В c++ rt шаблоны и (будет) ct рефлексия.

Я за плюсы.
Re[6]: рефлекшен
От: undo75  
Дата: 01.09.24 04:28
Оценка:
·>Причём тут рефлексия? Это кодогенерация.
это делается с помощью нее. в нашем случае

·>Динамически это уже после запуска приложения? В этом случае может генерироваться байткод напрямую, поэтому класса в принципе может и не быть. Впрочем, вместе с байт-кодом можно генерить дебажную инфу и отладчик это всё будет видеть.

можно, но нет )

·>Как более разумный вариант — есть annotation processors, в каком-то смысле плагин к компилятору, позволяющий генерировать исходный код во время компиляции, хоть с комментариями и javadoc. Тогда это всё в sources и будет доступно для IDE.

не делается )
Re[2]: рефлекшен
От: undo75  
Дата: 01.09.24 04:32
Оценка:
S>Например PropertyGrid
S> А так универсальные сериализаторы, десериализаторы. Хотя сейчас с приходом Source Generator и Native AOT надобность в них снижается
S>Универсальный маршалинг .Net Core, AppDomain, WCF, RPC маршалинг по Tcp/Ip свой велосипед

ну я отметил, что говорю про прикладные задачи.

S> Приватные методы, плагины с утиной типизацией


приватные методы — если есть потребность их дергать — признак плохого проектирования.
про утиную типизацию не слышал )
Re: рефлекшен
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 01.09.24 08:26
Оценка: +1
Здравствуйте, undo75, Вы писали:

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

U>в моей практике потребовалось лишь один раз.

А что, прикладной код не надо структурировать, не надо управлять сложностью? С другими компонентами не нало интегрироваться, не надо инструментировать свой код для логирования, отладки, мониторинга,перформанса итд?
Рефлексия это еще один иструмент, позволяет отделять мух от котлет.

Вам прежде всего тяжело, потому что вы прошли мимо этой темы.

Так часто бывает — один навесит атрибут, а другой пытается отладчиком постичь это намерение. Так не работает.

Если у вас кругом рефлексия, то нужно не отладчиком работать, а выяснять логику этой всей рефлексии, какие аспекты она применяет.

Вполне может оказаться так, что дело именно в том, что вы привыкли делать все по старинке.
Re[2]: рефлекшен
От: undo75  
Дата: 01.09.24 09:15
Оценка:
P>Вполне может оказаться так, что дело именно в том, что вы привыкли делать все по старинке.

посмешил ) код динамически созданный тоже внезапно работает "по старинке". только дотягиваться до него надо через задницу
Re[3]: рефлекшен
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 01.09.24 10:53
Оценка:
Здравствуйте, undo75, Вы писали:

U>приватные методы — если есть потребность их дергать — признак плохого проектирования.

U>про утиную типизацию не слышал )

Утиная типизация

Утиная типизация это аналог IDispatch, dynamic. Хорош когда есть куча свойств типа object c одинаковым набором имен свойств методов.
Для типизации надо распространять библиотеку, но проблемы могут возникать когда данная библиотека может часто изменяться и возникают проблемы с версиями.
Ну и использование в плагинах динамических языков.
Вот тут прекрасно подходят динамики работающие через рефлекшен
и солнце б утром не вставало, когда бы не было меня
Отредактировано 01.09.2024 11:24 Serginio1 . Предыдущая версия .
Re[3]: рефлекшен
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 01.09.24 12:07
Оценка:
Здравствуйте, undo75, Вы писали:

P>>Вполне может оказаться так, что дело именно в том, что вы привыкли делать все по старинке.


U>посмешил ) код динамически созданный тоже внезапно работает "по старинке". только дотягиваться до него надо через задницу


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

Например, в AOP, orm, серилизации, di/ioc, http и прочих контролерах обычно нет необходимости дебажить — вам нужно просто запомнить основные правила.

Проблема обычно в том случае, если какой нибудь доморощеный di/ioc не покрыт тестами и следовательно содержит изрядное количество багов.
В этом случае нужно пенять не на рефлексию и ioc, а на отсутствие тестов и доморощенный механизм.
Соответсвенно, решать проблему не многодневным дебагом, а написанием тестов или заменой одного механизма на его взрослый полноценный эквивалент.
Re[5]: рефлекшен
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 01.09.24 12:12
Оценка: +1
Здравствуйте, undo75, Вы писали:

u>>> поэтому вопрос — как обстоит дело с отладкой?

U>·>Я не понял о каком именно из "яп с рефлексией" ты спрашиваешь. В java, например, с отладкой всё просто замечательно.

U>извини. вот у тебя динамически формируется класс. фиг знает как там на джаве, предполагаю, что как и везде. где точку останова ставить? )


Похоже под рефлексией вы называете system.reflection куда в дотнете понапихали чуть не все подряд

Расскажите, какая задача решается кодогенерацией?

Вам достаточно переделать кодогенератор таким образом, что бы вместо простыней генерировал вызов утилиты. Эту утилиту можно покрыть тестами, и в неё вы можете поставить точку останова. Т.е. минимальные изменения, достаточно безопасные.
Re[4]: рефлекшен
От: undo75  
Дата: 01.09.24 15:30
Оценка:
P>Это ваше желание дотягиваться через задницу, т.к. опыта работы с рефлексией у вас нет. Покажите пример кода, где вся эта хитрая рефлексия, что бы предметно было.
извини, но нет. посодют )
да и вообще даже если покажу — без контекста понятно точно не будет
Re[5]: рефлекшен
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 01.09.24 19:28
Оценка:
Здравствуйте, undo75, Вы писали:

U>да и вообще даже если покажу — без контекста понятно точно не будет


И что же обсуждать без конкретики?
Re: Как зачем?
От: Wolverrum Ниоткуда  
Дата: 02.09.24 00:56
Оценка:
Здравствуйте, undo75, Вы писали:

U>для прикладника он вообще нужен? ни одной задачи с потолка не смог придумать.

U>не ну я понимаю, орм там всякие. для прикладника нафига?
Свой, более лутшый Спринг и Энтити наваять


U>в моей практике потребовалось лишь один раз.

U>была библиотека и требовалось дернуть закрытый метод. без него ну вообще никак. исходников не было. и все. за 20 лет практики..
Слабовато

А как же вот это вот все: побегать по названиям пропертей / методов объектов (например ваял как-то тестраннер, который по содержимому импортов в сборках определял, в каком конкретно тестфреймворке запускать тестики), сгенерить-запулить "на лету" какой-нить код в виде пользовательского скрипта? и еще 1001 применение?
Re[2]: Как зачем?
От: undo75  
Дата: 02.09.24 04:00
Оценка:
W>А как же вот это вот все: побегать по названиям пропертей / методов объектов (например ваял как-то тестраннер, который по содержимому импортов в сборках определял, в каком конкретно тестфреймворке запускать тестики), сгенерить-запулить "на лету" какой-нить код в виде пользовательского скрипта? и еще 1001 применение?

а нафиг это все, ели по большому счету нужно джейсоны туда сюда гонять, да запросы в базу писать? упрощенно если.
Re[6]: рефлекшен
От: m2user  
Дата: 02.09.24 07:43
Оценка:
SP>но обычно кто программирует на шарпе, вопросами скорости интересуется слабо.

угу, и профилировщиков для .NET не бывает.
Re[2]: рефлекшен
От: Alekzander  
Дата: 02.09.24 08:34
Оценка:
Здравствуйте, Alekzander, Вы писали:

U>>для прикладника он вообще нужен? ни одной задачи с потолка не смог придумать.


A>Object Inspector / Properties.


Но я всё-таки думаю, это грязный хак. Сегодня я бы не стал так проектировать, а вынес все данные во внешние схемы и байндил.
I'm a sewer mutant, and my favorite authors are Edgar Allan Poo, H.G. Smells and George R.R. Martin.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.