Здравствуйте, ·, Вы писали:
·>Здравствуйте, Serginio1, Вы писали:
S>>·>В современных редакторах есть разные макросы и шаблоны. Это всё автоматизируется. Вставится нужный кусочек кода, который можно тут же поглядеть и подправить если не совсем подходит. Это не проблема которая должна решаться в компиляторе. S>> То есть ту работу которую сделает компилятор автоматически предлагаешь в рукопашную создавать, а потом и убирать код? ·>Это не то, что я написал. Ключевое слово выделил.
Еще раз. Мне не нужен код. Он будет удаляться после нахождения багов!
Ты не читаешь!
S>>·>Потом ты нахрен плюнешь и пожалеешь о потраченном времени. S>> Ты тут придумываешь. Я тебе написал, нужны входные параметры и состояние объекта, что бы воспроизвести ошибку ·>Как ты в комментарии опишешь какое состояние объекта ты хочешь вывести? А если это приватные данные? ·>Входные параметры тоже по-разному требуется выводить в зависимости от фазы луны.
А ревлексию, что запретили? Насчет параметров, а как же AOT ом народ пользуется? все тоже саме.
Есть несколько вариантов схем. Выбирай любую.
S>>·>Не дай боже потом такой код придётся как шаред-компонент выложить. Будешь выклдадывать несколько бинарных версий с разными комбинациями ключей компилятора. S>> Так я так и делаю. Для отладки определенных вещей я делаю специальные сборки и отдаю клиенты. S>>Конечно не выкладываю, а по договоренности отдаю клиентам, что бы локализовать ошибку. ·>Что-то издевательство какое-то над клиентами. И над собой.
Они довольны и я. В отличие от тебя! S>>InterceptsLocation позволяет без изменения кода генерить нужные сборки. ·>Ты вроде собирался комментарий вставлять. Это — уже изменение кода.
Разве комментарий влияет на код? Разве он не выбрасывается при компиляции?
Я легко через плагин удалю все ненужные комментарии, а вот код вернуть обратно намного сложнее
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S>>> То есть ту работу которую сделает компилятор автоматически предлагаешь в рукопашную создавать, а потом и убирать код? S>·>Это не то, что я написал. Ключевое слово выделил. S>Еще раз. Мне не нужен код. Он будет удаляться после нахождения багов!
Открой для себя git revert или бранчи.
S> Ты не читаешь!
Это ты не читаешь. Я ничего не предлагал делать в рукопашную.
S>·>Как ты в комментарии опишешь какое состояние объекта ты хочешь вывести? А если это приватные данные? S>·>Входные параметры тоже по-разному требуется выводить в зависимости от фазы луны. S> А ревлексию, что запретили?
Как ты в комменте будешь описывать какие поля выводить из каких частей объекта?
S> Насчет параметров, а как же AOT ом народ пользуется?
Оооооочень осторожно.
S>>>InterceptsLocation позволяет без изменения кода генерить нужные сборки. S>·>Ты вроде собирался комментарий вставлять. Это — уже изменение кода. S> Разве комментарий влияет на код? Разве он не выбрасывается при компиляции?
По уму нет. Но ты предлагаешь сделать так, чтобы влиял.
S>Я легко через плагин удалю все ненужные комментарии,
Как плагин будет определять ненужность комментариев?
S>а вот код вернуть обратно намного сложнее
Открой для себя системы контроля версий.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, ·, Вы писали:
S>>>>InterceptsLocation позволяет без изменения кода генерить нужные сборки. S>>·>Ты вроде собирался комментарий вставлять. Это — уже изменение кода. S>> Разве комментарий влияет на код? Разве он не выбрасывается при компиляции? ·>По уму нет. Но ты предлагаешь сделать так, чтобы влиял.
Влияет только для определенной сборки! S>>Я легко через плагин удалю все ненужные комментарии, а вот код вернуть обратно намного сложнее ·> Открой для себя системы контроля версий.
ОООООО. Ну ну. А я код поправил и мне нужно его слить в основную ветку!
Даже если я комментарии не удалил, ничего страшного не призойдет!
Ты вот кучу работы сразу напридумываешь и головной боли!
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S>·>По уму нет. Но ты предлагаешь сделать так, чтобы влиял. S>Влияет только для определенной сборки!
Не важно. Влияет.
S>>>Я легко через плагин удалю все ненужные комментарии, а вот код вернуть обратно намного сложнее
Так всё-таки, как ты собрался плагину объяснять какие комментарии нужные, а какие ненужные?
S>·> Открой для себя системы контроля версий. S> ОООООО. Ну ну. А я код поправил и мне нужно его слить в основную ветку!
Эээээ... Ну раз нужно так сливай в основную, а если не нужно так не сливай.
S>Даже если я комментарии не удалил, ничего страшного не призойдет!
А почему должно что-то плохое произойти?
S>Ты вот кучу работы сразу напридумываешь и головной боли!
Головная боль это иметь несколько версий и не контролировать это системой контроля версий.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
S>>·>По уму нет. Но ты предлагаешь сделать так, чтобы влиял. S>>Влияет только для определенной сборки! ·>Не важно. Влияет.
Но на основную сборку то не влияет! Разные конфиги, которые вне контроля версий! S>>>>Я легко через плагин удалю все ненужные комментарии, а вот код вернуть обратно намного сложнее ·>Так всё-таки, как ты собрался плагину объяснять какие комментарии нужные, а какие ненужные?
А какие комментарии должен использовать SG для InterceptsLocation?
По той же схеме и плагин будет удалять.
S>>·> Открой для себя системы контроля версий. S>> ОООООО. Ну ну. А я код поправил и мне нужно его слить в основную ветку! ·>Эээээ... Ну раз нужно так сливай в основную, а если не нужно так не сливай.
Мне нужно не только подменить методы, но и подправить код. Это проще делать в одной ветке, а не во множестве.
Это проще! S>>Даже если я комментарии не удалил, ничего страшного не призойдет! ·>А почему должно что-то плохое произойти?
А вот если как ты предлагаешь, я буду модифицировать код, то это приведет к засиранию тех же логов в основной ветке.
Не нужен там лишний код. S>>Ты вот кучу работы сразу напридумываешь и головной боли! ·>Головная боль это иметь несколько версий и не контролировать это системой контроля версий.
Я с тебя хренею, ты там чего то выдумываешь. Есть рабочая практика веток и их слива.
Каждая ветка перед сливом тестируется. А вот использование InterceptsLocation можно вывести в отдельные настройки, которые не будут сливаться в основную ветку.
То есть комментарии никак не повлияют на основную сборку.
Кроме того, их просто вычистить.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Sinclair, Вы писали:
S>А обсуждаемая фича способна взять и автоматически заменить весь "медленный linq-код" на эквивалентный быстрый без затрат на ручное переписывание кода во время разработки, и анализ выражений во время выполнения. S>Если у вас есть приложение, у которого подобные запросы составляют значительную долю вычислительного времени, то банальный импорт пакета и перекомпиляция дадут вам перформанс буст на ровном месте. S>Чем плохо-то?
Начинаю понимать почему мне кажется это плохо, вызывает недоумение. Тут получилось, что поставили телегу впереди лошади. Вот у нас есть interceptors proposal давайте придумаем куда его всё-таки можно прикрутить. Один болезную одноногую утку изобретает, другой — программирование на комментариях, третий енумы пытается оптимизировать, ты предлагаешь какую-то странную оптимизацию... В общем фигня какая-то.
Надо-то наоборот. Есть задачи, ищем решение. Скажем, твоя прекомпиляция кода — так ведь это можно и другим способом добиться, более удобными и надёжными механизмами, вот их и надо пропозалить. Хотя, вроде бы довольно очевидно, что фича корявая, и очень нишевая. A specific problem encountered recently by ASP.NET team. Такое ощущение, что у чуваков проблемы с перформансом, поэтому решили ЯП подпилить для бенчмарков.
Лучше нафиг не использовать, очень странный пропозал, по всем параметрам.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, ·, Вы писали: ·>Надо-то наоборот. Есть задачи, ищем решение. Скажем, твоя прекомпиляция кода — так ведь это можно и другим способом добиться, более удобными и надёжными механизмами, вот их и надо пропозалить.
C удовольствием почитаю варианты.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, ·, Вы писали:
S>>C удовольствием почитаю варианты. ·>Да как обычно, догонять Яву. Развивать оптимизатор компилятора и JIT, упрощать API тулчейна. ·>https://github.com/dotnet/csharplang/issues/7009#issuecomment-1462040663 ·>https://wttech.blog/blog/2020/method-handles-and-lambda-metafactory/ ·>https://openjdk.org/jeps/457
Здесь ветка по сути про SG, которым может управлять любой программист.
А вот поиск и модификация IL кода конечно интересная и нужная вещь, но это совсем другая ветка, которая ну никак не отменяет SG.
Тут нужно учитывать, что сторонний IL код могут запрещать редактировать, а для оптимизации собственного кода в большинстве случаев достаточно SG.
Та же самая модификация кода происходит через обертку метода
[Prop] void MyProp_(int val)
{
_myProp = val;
}
//Генератор создает код:int _myProp;
public int MyProp
{
get => this._myProp;
set
{
if(value == this._myProp)
return;
MyProp_(value);
}
}
То есть проблема есть только в оптимизации уже написанного кода или чужого скомпилированного.
Но замену MyProp на MyProp_ мы можем и через плагин добавив еще и атрибуты для SG.
Это намного проще, чем изменять IL код.
Есть PostSharp для модификации IL кода, есть InterceptsLocation
Чем больше инструментов тем лучше. А, то, что тебе не нравится это только твои проблемы. Ты один в этой ветке против InterceptsLocation
Ну можно не только IL код модифицировать, но и машинный!
Как человек, написавший как IL-фреймворк, так и AOP-фреймворк на основе Roslyn, я могу сказать, что переписывание IL осталось в прошлом. Единственный случай, который я вижу, — это инструментарий времени выполнения, основанный на профилирующем API.
Там же, но чуть выше
Обратите внимание, я бы предпочел, чтобы Roslyn поддерживала модель перевода AST, а не переписывание байт-кода. Которая предоставляла бы эффективный исходный код, который продолжал бы работать с инструментами. Но у AOP есть большие преимущества при переписывании, а именно то, что он не зависит от компилятора / инструментальной цепочки. Мои аспекты, написанные на чистом Java с декларативными аннотациями для определения точек пересечения, работают на любом языке JVM.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, VladD2, Вы писали:
VD>Мы тоже не на последних версиях языка сидим. Сейчас вот на 6-й. Но все же аналайзеры используются. В прочем, тоже есть люди стоящие горой за разную дурь вроде фигурных скобок у if-ов с одним стейтментом.
Эта дурь страхует от ошибок — слишком частый кейс, когда надо добавить еще стейтмент в иф.
Можно конечно искать кодеров с 20ю годами кодирования, а можно и линтер настроить.
Здравствуйте, Pauel, Вы писали:
P>Эта дурь страхует от ошибок — слишком частый кейс, когда надо добавить еще стейтмент в иф.
Буду обсуждать эту дурь сразу как увижу первую багу по этому поводу.
Это частый кейсслучай в древнючих книгах писанных во времена когда код писали из редакторе из Нортон Коммандер. В реальности не наблюдается от слова совсем. Надо быть совсем дауном, чтобы таки ошибки делать, когда IDE и компилятор во всю о них орут.
P>Можно конечно искать кодеров с 20ю годами кодирования, а можно и линтер настроить.
Можно просто не транслировать сюда бред из книжек поросших мхом. Я программирую 34 года и ни разу не видел таких ошибок. Зато тех кто живет по книжкам не применяя свой мозг встречаю постоянно. Они, как ты, очень любят транслировать этот миф. Примеров только показать не могут. И ты не сможешь, не смотря на твои заявления о том, что это частый "кейс".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD> Примеров только показать не могут. И ты не сможешь, не смотря на твои заявления о том, что это частый "кейс".
goto fail?
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, VladD2, Вы писали:
P>>Можно конечно искать кодеров с 20ю годами кодирования, а можно и линтер настроить.
VD>Можно просто не транслировать сюда бред из книжек поросших мхом. Я программирую 34 года и ни разу не видел таких ошибок.
Вероятнее всего дело в желании видеть и способности работать в команде.
if (IsOk(params))
SendMessage(params);
Потом приходит некто, и добавляет логирование
if (IsOk(params))
Log.Trace(params);
SendMessage(params);
Чаще всего такие баги появляются при использовании замены по тексту.
34 года кодить и не встречаться с тривиальными кейсами — объясняет почему Немерле никак не приживется.
Здравствуйте, hi_octane, Вы писали:
_>Я уже это всё проходил 10+ лет назад в "священных войнах", поэтому воевать буду в полсилы, без огонька
потому что когда молодой, все заходит охотнее, в том числе и всякая муть. я 10 лет назад был в вашем лагере.
после 5 лет на джаве могу сказать, что те вещи в дотнете, над которыми тогда угорали джависты и которые нам казались такими важными по факту оказались не такими уж и важными. а вот либы, коммьюнити и идеи — вот что на самом деле важно
R>>Это не макросы, это языковые сущности, _>То что это некие "сущности" лишь следствие негибкости языка и мышления авторов. В языке с макросами никакие "сущности" изобретать не нужно.
бесконечная гибкость — неочевидное преимущество
R>>которые понимает каждая кухарка, взявшаяся читать код — ибо они часть языка. _>Вот в реальном проекте у меня когда-то использовались макросы readlock(obj) и writelock(obj)
че ты там выиграл? пару символов? единственная ценность — единая точка подмены реализации. но для этого есть интерфейсы.
_>Использовались foreach {} else { то что выполняется если IEnumerable пустой }.
это жесть
_> Использовались переменные которые объявлялись как interlocked int, и дальше все операции +/-/++/-- выполнялись через Interlocked.*.
перегрузка операторов еще со времен с++ это жесть. а тут это просто приколы ради прикола
, которые больше внутри класса никому не видны, и не замусоривают пространство имён — это позволяет, например, не мусорить с disposing/disposed внутри класса при реализации IDisposable, и скрывать всякие одноразовые wasInitialized, кэши, и DateTime _lastRetryTime.
я не понял этой фичи, но смотрится страшно. хотя вот теперь понял. toString идет лесом да? ну такое
_>Вот любую из этих фич никому в команде особо объяснять не надо было. Один раз увидели и пользовались.
объяснять не надо но увидеть все-таки надо?
_>Так что про непонятность мимо. Люди с прямыми руками используют все возможности языка чтобы было удобнее и понятнее. Люди с кривыми руками самый просто вложенные if-ы так завернут, что чёрт ногу сломит.
иногда люди с прямыми руками пересекаются с множеством людей, у которых постоянно чешутся руки не в ту сторону
P>Чаще всего такие баги появляются при использовании замены по тексту.
Такие баги лично у меня студия мгновенно подсвечивает как код с кривым форматированием. Думаю, можно на это дело настроить аналайзер, который вообще будет выдавать ошибку.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Константин Л., Вы писали:
R>>>Это не макросы, это языковые сущности, _>>То что это некие "сущности" лишь следствие негибкости языка и мышления авторов. В языке с макросами никакие "сущности" изобретать не нужно.
КЛ>бесконечная гибкость — неочевидное преимущество
Апи поддерживать на порядок труднее, чем конкретную реализацию.
Собственно, внятное да развесистое апи вообще мало у кого получается выдать и мейнтейнить ничего не ломая.
P>>Чаще всего такие баги появляются при использовании замены по тексту.
IT>Такие баги лично у меня студия мгновенно подсвечивает как код с кривым форматированием. Думаю, можно на это дело настроить аналайзер, который вообще будет выдавать ошибку.
Очевидно, что багу сделает тот, у кого студия не настроена или кто пользуется обычным редактором "а я мелочевку отсюда правлю"
.
[]
КЛ>>бесконечная гибкость — неочевидное преимущество
P>Апи поддерживать на порядок труднее, чем конкретную реализацию.
P>Собственно, внятное да развесистое апи вообще мало у кого получается выдать и мейнтейнить ничего не ломая.
Здравствуйте, Константин Л., Вы писали:
КЛ>[]
КЛ>>>бесконечная гибкость — неочевидное преимущество
P>>Апи поддерживать на порядок труднее, чем конкретную реализацию.
P>>Собственно, внятное да развесистое апи вообще мало у кого получается выдать и мейнтейнить ничего не ломая.
КЛ>не понял к чему вы
Ааи это и есть та самая гибкость. Это не всегда преимущество, а часто еще и чудовищные издержки