Сообщение Re[43]: MS забило на дотнет. Питону - да, сишарпу - нет? от 10.08.2021 11:33
Изменено 10.08.2021 12:39 vdimas
Re[43]: MS забило на дотнет. Питону - да, сишарпу - нет?
Здравствуйте, Sinclair, Вы писали:
V>>Исторически набор h-файлов обычно шёл уникальный и минимально-необходимый для конкретного С++ файла.
V>>В случае модулей на практике всегда будет максимальный набор символов, а не минимально-необходимый.
S>Опять-таки, вы всё трактуете задом наперёд. Практика в случае модулей такая не потому, что единственно возможная, а потому, что так удобнее.
"Трактуешь" и вообще выкручиваешься тут ты, я говорю как оно есть и как непременно будет.
Т.е. объясняю одному недостаточно зрелому коллеге, почему он здесь ошибается:
V>>Например, вся немаленькая современная стандартная библиотека С++ подключается одним модулем.
S>Всё зависит от того, как именно модули реализовывать.
Если уж ты решил именно спорить (хотя я ХЗ зачем было именно спорить, а не спрашивать подробности), то надо уметь не косячить в рассуждениях, особенно в очевидном.
А вот это бесполезное бла-бла-бла...
Зачем оно?
V>>В общем, у самого много раз компиляция под линухами молча подвисала при нехватке памяти в те года, если злоупотреблял предкомпляцией.
S>Предкомпиляция в С++ вообще штука крайне сложная. У самого она адски глючила и падала под виндой — и вовсе не из-за нехватки памяти.
А из-за сваливания в кучу всего и вся.
И из-за глючной одно время технологии инкрементной компиляции, но это поправили ближе к концу 90-х.
S>Сожрать модулями слишком много памяти — это какой-то феерический факап реализации системы модулей.
Дык, готовое бинарное описание ничего не экономит в сравнении с исходным текстовым после зачитки тех и тех, там в лучшем случае требуется та же память, в худшем чуть большая — ввиду дополнительного мета-описания символов с т.з. расположения тех в модулях.
V>>Разумеется, можно считывать модули и в lazy-режиме, т.е. изначально читать просто список символов, а определения конкретных шаблонов, инлайн-функций и макросов — лишь по мере их задействования в компиляции.
V>>Но не об этом ведь шла речь, бо, разумеется, это всё не проблема для современных размеров памяти.
S>Ну, вот видите. А только что это была неразрешимая проблема.
Неразрешимой проблему никто не называл (очередной тебе минус за враньё), я пояснял, почему технология не обязательно вызовет экономию ресурсов и ускорение процессов.
Чаще будет ровно наоборот, бо зачитка текстового кода происходит не сильно медленней и текстовый код может быть порой компактней бинарного описания, а скорость компиляции сейчас часто зависит от скорости чтения с диска, т.е. от размеров исходников.
Удобство модулей — это уменьшение вероятности потенциальных конфликтов имён промежуточных сущностей, фигурирующих сейчас в открытом виде в h-файлах.
Т.е. сами те сущности из модулей никуда не денутся, ес-но, но теперь их имена не будут вызывать конфликтов.
Но основное ожидаемое удобство — легкость разворачивания, поддержка версионности.
Зависимости м/у модулями можно описывать в явном виде, это перекликается с задачами пакетных менеджеров, поэтому в подветке про пакетные менеджеры я их и упомянул.
V>>Мол, "в нормальных технологиях так давно".
V>>Это значит, что ты никогда не писал достаточно больших проектов на том же Турбо-Паскале, т.е. не в курсе проблематики.
S> Этой проблематики не существует. Повторюсь: Турбо-Паскаль прекрасно работал на объёмах памяти, в тысячу раз меньше тех, которые вы считаете маленькими.
Я же говорю — ты не писал больших проектов на Турбо Паскале.
V>>Эээ, простите, "склеивать"? ))
S>У вас потеря кратковременной памяти? Это же ваша цитата про "склеивать" — поднимите глазки на две строчки выше.
Пфф, я и повторялся в сообщении, на которое отвечаешь, насчёт переписывания описания проекта с 0-ля по окончании работ, но ты высказывался про сам процесс, как мне показалось.
Иначе бы откуда было про "боль", когда речь об однократных операциях, выполняемых раз в несколько недель или даже единиц месяцев?
Использование тех же слов не обязательно означает тот же смысл.
V>>Но да, в самом конце "быстрой" первоначальной итерации разработки все-равно придётся код описания проектов переписать начисто, увы.
S>Повторю вопрос: зачем вы это делаете?
Потому что будучи окончательно сгруппированным по конечным единицам деплоймента, описание проекта в виде единого файла будет минимальным по объёму, ведь в "чистовом" варианте даже исходники перечислять не требуется, по-умолчанию подхватывается вся директория от текущей и рекурсивно ниже.
(При этом такой "исходник" описания наименее управляем, но им на этой стадии уже особо управлять и не требуется)
S>Вы утверждаете, что вам приходится пилить проект на десятки разных, а потом склеивать.
S>Я вам говорю, что такой нужды нет.
Уметь говорить мало, надо уметь говорить аргументировать.
И хотя бы понимать, о чём вообще речь.
V>>И стараться не править его из GUI Студии, а то там каша получается, а не исходник.
S>Да можно как угодно — хоть студией, хоть руками. Речь о том, что C# вас ни к чему не принуждает.
Принуждает своей моделью сборки (походу ты зациклился в рассуждениях).
Ладно, ничего внятного от тебя по этой теме мы уже не услышим, бо это заход на 3-й круг, а ты пока всё еще пытаешься сообразить, зачем это вообще может быть нужно.
Почему бы тебе в аналогичных случаях не писать своё "мнение" прямой речью: "раз мне это не надо, то и никому не надо" — оно бы сэкономило бы кучу времени тебе и оппонентам.
V>>За одно это утверждение тебя уже можно смело увольнять.
S>Как хорошо, что такие решения принимаете не вы.
Да пофик кто принимает решения, хосподя, речь всё-равно не обо мне.
За злоупотребление такими вещами, которые ты себе позволяешь, увольняют откуда угодно.
V>>Это в таких категориях ПО разрабатываешь?
S>А то.
То, что ревью делать некому, походу. ))
Т.е. из твоего положения тебе вообще выступать не следовало бы, бо ты в некотором смысле в вакууме работаешь, судя по высказываемому тобой, общяясь с коллегами через публичное АПИ их и своих поделий.
V>>Почему "избыточного"? ))
S>Ну, потому что потом вы вынуждены обратно их склеивать.
(утомляешь уже упоротостью...)
См. определение "избыточность" в IT.
Способ группировки информации обычно не влияет на степень её избыточности.
V>>Низкая связанность/высокое зацепление — это общий принцип, в основе DDD лежит в том числе одним из первых.
S>Отлично. В чём тогда ваша проблема?
Такие вещи обычно называются не "проблемами", а "задачами".
Проблемой задача становится, когда плохо понятно как её решать или её решение слишком дорогое.
Забавный у нас вышел обмен мнениями — я тебе рассказываю как решать те задачи, которые ты не в состоянии даже просто сформулировать. ))
Че-та ржу уже...
Хотя... если основная сегодняшняя методология разработки сложных систем идёт со слов оппонента лесом, то удивляться нечему.
V>>И потому что через систему include MSBuild-описаний, т.е. повторного их использования, можно задешево покрыть относительно большую комбинаторику сочетаний вариантов кода для целей проведения экспериментов.
S>Можно и без такой системы.
Я озвучил как можно без дублирования, с дешевым управлением на уровне исходников описания проектов.
В технологии MSBuild дешевле никак.
Альтернативой идёт дублирование уникальных описаний проектов и всё это в плохо управляемом на уровне исходников виде.
На всякий случай ликбез — "плохо управляемыми" называются те исходники, в которые для внесения небольшого "логического" изменения необходимо вносить "физические" изменения (т.е. править исходники) во многих местах.
V>>Опиши себе один мета-проект, ссылающийся на другие проекты, через один коммент включай-отключай запчасти, комбинируй, пробуй варианты и т.д. и т.п.
V>>Для сравнения, "выключить" в исходнике класс — это нужно бегать, выключать все зависимости от него.
V>>Разбил по проектам (которые на деле всегда подпроекты) — получил изоляцию и управляемость.
S>Отлично. Пока что всё, что вы рассказываете, вполне укладывается в нормальную практику.
Но я такую практику редко вижу на гитхаб.
И для меня это один из многих признаков/показателей класса разработчиков.
Ну да, в C# не только нубы обитают, бывают и вполне грамотные ребята, а что?
Например, посмотри на Авалонию.
И посмотри на исходники своих MSBuild-описаний.
S>Откуда тогда страдания про то, что C# вас вынуждает делить проект на мелкие части?
Декомпозиция — это вроде как стандартный способ борьбы со сложностью. ))
У меня сотни библиотечных типов одновременно было в разработке/портировании с С++, без оперативного оперирования зависимостями там можно было бы застрять надолго, т.е. выполнять работы "пошагово" можно было бы бесконечно.
Кароч, чё-та я уже зеваю от твоих рассуждений.
Когда-то давно, 15-20 лет назад я имел обыкновения коллегам озвучивать, что профессионализм проявляется, в первую очередь, в умении "организовать своё рабочее место", с т.з. программера — это организовать себе ориентированную на решение конкретной задачи наиболее подходящую инфраструктуру.
Коллеги с тех пор заметно подросли, в подобных советах не нуждаются.
Но по-интернету уникальные кадры еще пробегают и даже преднамеренно привлекают к своей необычности внимание! ))
V>>В общем, границы проектов в конце стадии "быстрого роста" дизайна зависят от границ предметных областей и слоёв иерархии доменной модели, и ни от чего более.
S>Ну и отлично. Зачем тогда их потом "склеивать"?
Чтобы убрать явную декомпозицию времени разработки.
V>>Наличие всей описанной возни с её отсутствием, ес-но.
S>Продолжаю не понимать. Вы только что превозносили эту возню как что-то прекрасное, и обвиняли меня в том, что мне оно недоступно.
Да там вышло два непонимания с твоей стороны — это непонимание самой задачи и доступных способов её решения для C# с использованием трюков MSBuild.
А это уже третье непонимание того, что непониманий в прошлый раз у тебя было два. ))
S>И тут вдруг опять — надо сравнивать описанную возню с её отсутствием. Так вот эти ваши десятки проектов — это хорошо или плохо?
Да я уже понял, что ты совсем запутался.
Медленно еще раз:
— в плюсах у меня единицы компиляции независимы, т.е. каждый cpp-файл;
— поэтому я могу работать над конкретным cpp-файлом независимо от компилябельности других cpp-файлов, т.е. хотя бы проверять на компиллябельность;
— если мне компиляции недостаточно, я могу линковаться от каждого отдельного obj-файла, который получается из каждого отдельного cpp-файла.
— или могу сложить те obj-файла, которые считаются рабочими, в одну либу одной командой и добавлять очередные obj-файлы в эту либу по мере готовности и т.д. и т.п.
То бишь, в плюсах изкаробки доступна произвольная декомпозиция зависимостей до одного файла.
Вплоть до того, что можно все методы обного объекта раскидать по разным файлам.
Или создать в разных cpp-файлах разные варианты реализации одного и того же метода, и выбирать нужный вариант на этапе линковки.
(хосподя, просто сделай паузу и помедитируй в этом месте, бо мне уже надоело ждать, когда ты включишь соображалку)
S>В общем, вы очень путано объясняете. Ложка огурцы банка майонез 500мб DDD склеивать резать предкомпиляция включение.
Наверное, это побочный эффект вашего регулярного надувания.
Мне всё-время кажется, что вы обладаете достаточной эрудицией, что мне нет надобности с 0-ля всё разжёвывать.
Но дело не только в этом, ХЗ.
Я совершенно уверен в том, что ты хорошо в курсе про описанные в пред. абзаце подробности относительно декомпозиции единиц трансляции в С++.
Ты всё это знал, но тебе это не помогло.
А вот это уже необъяснимо.
Т.е., я хорошо понимаю что происходит, я не понимаю — почему.
Когда-то, когда ты познавал новое, проявлял любопытство, лично мне было интересно тебя читать.
Свежий, нестандартный взгляд от непрофессионала IT на всю эту скукатень, которой мы занимаемся...
Ты познавал новое и делился впечатлениями в интересной манере.
Умение заинтересовать — это уважаемый мною талант.
Несомненно, это приносило пользу более молодым коллегам, пополнять эрудицию в виде нескучного чтива.
Но стоит тебе отказаться от познания нового, экспериментаторства и т.д. и начать пропихивать куда надо и куда не надо свой старый опыт — туши свет, кидай гранату. ))
Недалёк в рассуждениях, несносен в манерах.
V>>Исторически набор h-файлов обычно шёл уникальный и минимально-необходимый для конкретного С++ файла.
V>>В случае модулей на практике всегда будет максимальный набор символов, а не минимально-необходимый.
S>Опять-таки, вы всё трактуете задом наперёд. Практика в случае модулей такая не потому, что единственно возможная, а потому, что так удобнее.
"Трактуешь" и вообще выкручиваешься тут ты, я говорю как оно есть и как непременно будет.
Т.е. объясняю одному недостаточно зрелому коллеге, почему он здесь ошибается:
то ей будет ничуть не сложнее вычитать эти же символы из модулей
V>>Например, вся немаленькая современная стандартная библиотека С++ подключается одним модулем.
S>Всё зависит от того, как именно модули реализовывать.
Если уж ты решил именно спорить (хотя я ХЗ зачем было именно спорить, а не спрашивать подробности), то надо уметь не косячить в рассуждениях, особенно в очевидном.
А вот это бесполезное бла-бла-бла...
Зачем оно?
V>>В общем, у самого много раз компиляция под линухами молча подвисала при нехватке памяти в те года, если злоупотреблял предкомпляцией.
S>Предкомпиляция в С++ вообще штука крайне сложная. У самого она адски глючила и падала под виндой — и вовсе не из-за нехватки памяти.
А из-за сваливания в кучу всего и вся.
И из-за глючной одно время технологии инкрементной компиляции, но это поправили ближе к концу 90-х.
S>Сожрать модулями слишком много памяти — это какой-то феерический факап реализации системы модулей.
Дык, готовое бинарное описание ничего не экономит в сравнении с исходным текстовым после зачитки тех и тех, там в лучшем случае требуется та же память, в худшем чуть большая — ввиду дополнительного мета-описания символов с т.з. расположения тех в модулях.
V>>Разумеется, можно считывать модули и в lazy-режиме, т.е. изначально читать просто список символов, а определения конкретных шаблонов, инлайн-функций и макросов — лишь по мере их задействования в компиляции.
V>>Но не об этом ведь шла речь, бо, разумеется, это всё не проблема для современных размеров памяти.
S>Ну, вот видите. А только что это была неразрешимая проблема.
Неразрешимой проблему никто не называл (очередной тебе минус за враньё), я пояснял, почему технология не обязательно вызовет экономию ресурсов и ускорение процессов.
Чаще будет ровно наоборот, бо зачитка текстового кода происходит не сильно медленней и текстовый код может быть порой компактней бинарного описания, а скорость компиляции сейчас часто зависит от скорости чтения с диска, т.е. от размеров исходников.
Удобство модулей — это уменьшение вероятности потенциальных конфликтов имён промежуточных сущностей, фигурирующих сейчас в открытом виде в h-файлах.
Т.е. сами те сущности из модулей никуда не денутся, ес-но, но теперь их имена не будут вызывать конфликтов.
Но основное ожидаемое удобство — легкость разворачивания, поддержка версионности.
Зависимости м/у модулями можно описывать в явном виде, это перекликается с задачами пакетных менеджеров, поэтому в подветке про пакетные менеджеры я их и упомянул.
V>>Мол, "в нормальных технологиях так давно".
V>>Это значит, что ты никогда не писал достаточно больших проектов на том же Турбо-Паскале, т.е. не в курсе проблематики.
S> Этой проблематики не существует. Повторюсь: Турбо-Паскаль прекрасно работал на объёмах памяти, в тысячу раз меньше тех, которые вы считаете маленькими.
Я же говорю — ты не писал больших проектов на Турбо Паскале.
V>>Эээ, простите, "склеивать"? ))
S>У вас потеря кратковременной памяти? Это же ваша цитата про "склеивать" — поднимите глазки на две строчки выше.
Пфф, я и повторялся в сообщении, на которое отвечаешь, насчёт переписывания описания проекта с 0-ля по окончании работ, но ты высказывался про сам процесс, как мне показалось.
Иначе бы откуда было про "боль", когда речь об однократных операциях, выполняемых раз в несколько недель или даже единиц месяцев?
Использование тех же слов не обязательно означает тот же смысл.
V>>Но да, в самом конце "быстрой" первоначальной итерации разработки все-равно придётся код описания проектов переписать начисто, увы.
S>Повторю вопрос: зачем вы это делаете?
Потому что будучи окончательно сгруппированным по конечным единицам деплоймента, описание проекта в виде единого файла будет минимальным по объёму, ведь в "чистовом" варианте даже исходники перечислять не требуется, по-умолчанию подхватывается вся директория от текущей и рекурсивно ниже.
(При этом такой "исходник" описания наименее управляем, но им на этой стадии уже особо управлять и не требуется)
S>Вы утверждаете, что вам приходится пилить проект на десятки разных, а потом склеивать.
S>Я вам говорю, что такой нужды нет.
Уметь говорить мало, надо уметь говорить аргументировать.
И хотя бы понимать, о чём вообще речь.
V>>И стараться не править его из GUI Студии, а то там каша получается, а не исходник.
S>Да можно как угодно — хоть студией, хоть руками. Речь о том, что C# вас ни к чему не принуждает.
Принуждает своей моделью сборки (походу ты зациклился в рассуждениях).
Ладно, ничего внятного от тебя по этой теме мы уже не услышим, бо это заход на 3-й круг, а ты пока всё еще пытаешься сообразить, зачем это вообще может быть нужно.
Почему бы тебе в аналогичных случаях не писать своё "мнение" прямой речью: "раз мне это не надо, то и никому не надо" — оно бы сэкономило бы кучу времени тебе и оппонентам.
V>>За одно это утверждение тебя уже можно смело увольнять.
S>Как хорошо, что такие решения принимаете не вы.
Да пофик кто принимает решения, хосподя, речь всё-равно не обо мне.
За злоупотребление такими вещами, которые ты себе позволяешь, увольняют откуда угодно.
V>>Это в таких категориях ПО разрабатываешь?
S>А то.
То, что ревью делать некому, походу. ))
Т.е. из твоего положения тебе вообще выступать не следовало бы, бо ты в некотором смысле в вакууме работаешь, судя по высказываемому тобой, общяясь с коллегами через публичное АПИ их и своих поделий.
V>>Почему "избыточного"? ))
S>Ну, потому что потом вы вынуждены обратно их склеивать.
(утомляешь уже упоротостью...)
См. определение "избыточность" в IT.
Способ группировки информации обычно не влияет на степень её избыточности.
V>>Низкая связанность/высокое зацепление — это общий принцип, в основе DDD лежит в том числе одним из первых.
S>Отлично. В чём тогда ваша проблема?
Такие вещи обычно называются не "проблемами", а "задачами".
Проблемой задача становится, когда плохо понятно как её решать или её решение слишком дорогое.
Забавный у нас вышел обмен мнениями — я тебе рассказываю как решать те задачи, которые ты не в состоянии даже просто сформулировать. ))
Че-та ржу уже...
Хотя... если основная сегодняшняя методология разработки сложных систем идёт со слов оппонента лесом, то удивляться нечему.
V>>И потому что через систему include MSBuild-описаний, т.е. повторного их использования, можно задешево покрыть относительно большую комбинаторику сочетаний вариантов кода для целей проведения экспериментов.
S>Можно и без такой системы.
Я озвучил как можно без дублирования, с дешевым управлением на уровне исходников описания проектов.
В технологии MSBuild дешевле никак.
Альтернативой идёт дублирование уникальных описаний проектов и всё это в плохо управляемом на уровне исходников виде.
На всякий случай ликбез — "плохо управляемыми" называются те исходники, в которые для внесения небольшого "логического" изменения необходимо вносить "физические" изменения (т.е. править исходники) во многих местах.
V>>Опиши себе один мета-проект, ссылающийся на другие проекты, через один коммент включай-отключай запчасти, комбинируй, пробуй варианты и т.д. и т.п.
V>>Для сравнения, "выключить" в исходнике класс — это нужно бегать, выключать все зависимости от него.
V>>Разбил по проектам (которые на деле всегда подпроекты) — получил изоляцию и управляемость.
S>Отлично. Пока что всё, что вы рассказываете, вполне укладывается в нормальную практику.
Но я такую практику редко вижу на гитхаб.
И для меня это один из многих признаков/показателей класса разработчиков.
Ну да, в C# не только нубы обитают, бывают и вполне грамотные ребята, а что?
Например, посмотри на Авалонию.
И посмотри на исходники своих MSBuild-описаний.
S>Откуда тогда страдания про то, что C# вас вынуждает делить проект на мелкие части?
Декомпозиция — это вроде как стандартный способ борьбы со сложностью. ))
У меня сотни библиотечных типов одновременно было в разработке/портировании с С++, без оперативного оперирования зависимостями там можно было бы застрять надолго, т.е. выполнять работы "пошагово" можно было бы бесконечно.
Кароч, чё-та я уже зеваю от твоих рассуждений.
Когда-то давно, 15-20 лет назад я имел обыкновения коллегам озвучивать, что профессионализм проявляется, в первую очередь, в умении "организовать своё рабочее место", с т.з. программера — это организовать себе ориентированную на решение конкретной задачи наиболее подходящую инфраструктуру.
Коллеги с тех пор заметно подросли, в подобных советах не нуждаются.
Но по-интернету уникальные кадры еще пробегают и даже преднамеренно привлекают к своей необычности внимание! ))
V>>В общем, границы проектов в конце стадии "быстрого роста" дизайна зависят от границ предметных областей и слоёв иерархии доменной модели, и ни от чего более.
S>Ну и отлично. Зачем тогда их потом "склеивать"?
Чтобы убрать явную декомпозицию времени разработки.
V>>Наличие всей описанной возни с её отсутствием, ес-но.
S>Продолжаю не понимать. Вы только что превозносили эту возню как что-то прекрасное, и обвиняли меня в том, что мне оно недоступно.
Да там вышло два непонимания с твоей стороны — это непонимание самой задачи и доступных способов её решения для C# с использованием трюков MSBuild.
А это уже третье непонимание того, что непониманий в прошлый раз у тебя было два. ))
S>И тут вдруг опять — надо сравнивать описанную возню с её отсутствием. Так вот эти ваши десятки проектов — это хорошо или плохо?
Да я уже понял, что ты совсем запутался.
Медленно еще раз:
— в плюсах у меня единицы компиляции независимы, т.е. каждый cpp-файл;
— поэтому я могу работать над конкретным cpp-файлом независимо от компилябельности других cpp-файлов, т.е. хотя бы проверять на компиллябельность;
— если мне компиляции недостаточно, я могу линковаться от каждого отдельного obj-файла, который получается из каждого отдельного cpp-файла.
— или могу сложить те obj-файла, которые считаются рабочими, в одну либу одной командой и добавлять очередные obj-файлы в эту либу по мере готовности и т.д. и т.п.
То бишь, в плюсах изкаробки доступна произвольная декомпозиция зависимостей до одного файла.
Вплоть до того, что можно все методы обного объекта раскидать по разным файлам.
Или создать в разных cpp-файлах разные варианты реализации одного и того же метода, и выбирать нужный вариант на этапе линковки.
(хосподя, просто сделай паузу и помедитируй в этом месте, бо мне уже надоело ждать, когда ты включишь соображалку)
S>В общем, вы очень путано объясняете. Ложка огурцы банка майонез 500мб DDD склеивать резать предкомпиляция включение.
Наверное, это побочный эффект вашего регулярного надувания.
Мне всё-время кажется, что вы обладаете достаточной эрудицией, что мне нет надобности с 0-ля всё разжёвывать.
Но дело не только в этом, ХЗ.
Я совершенно уверен в том, что ты хорошо в курсе про описанные в пред. абзаце подробности относительно декомпозиции единиц трансляции в С++.
Ты всё это знал, но тебе это не помогло.
А вот это уже необъяснимо.
Т.е., я хорошо понимаю что происходит, я не понимаю — почему.
Когда-то, когда ты познавал новое, проявлял любопытство, лично мне было интересно тебя читать.
Свежий, нестандартный взгляд от непрофессионала IT на всю эту скукатень, которой мы занимаемся...
Ты познавал новое и делился впечатлениями в интересной манере.
Умение заинтересовать — это уважаемый мною талант.
Несомненно, это приносило пользу более молодым коллегам, пополнять эрудицию в виде нескучного чтива.
Но стоит тебе отказаться от познания нового, экспериментаторства и т.д. и начать пропихивать куда надо и куда не надо свой старый опыт — туши свет, кидай гранату. ))
Недалёк в рассуждениях, несносен в манерах.
Re[43]: MS забило на дотнет. Питону - да, сишарпу - нет?
Здравствуйте, Sinclair, Вы писали:
V>>Исторически набор h-файлов обычно шёл уникальный и минимально-необходимый для конкретного С++ файла.
V>>В случае модулей на практике всегда будет максимальный набор символов, а не минимально-необходимый.
S>Опять-таки, вы всё трактуете задом наперёд. Практика в случае модулей такая не потому, что единственно возможная, а потому, что так удобнее.
"Трактуешь" и вообще выкручиваешься тут ты, я говорю как оно есть и как непременно будет.
Т.е. объясняю одному недостаточно зрелому коллеге, почему он здесь ошибается:
V>>Например, вся немаленькая современная стандартная библиотека С++ подключается одним модулем.
S>Всё зависит от того, как именно модули реализовывать.
Если уж ты решил именно спорить (хотя я ХЗ зачем было именно спорить, а не спрашивать подробности), то надо уметь не косячить в рассуждениях, особенно в очевидном.
А вот это бесполезное бла-бла-бла...
Зачем оно?
V>>В общем, у самого много раз компиляция под линухами молча подвисала при нехватке памяти в те года, если злоупотреблял предкомпляцией.
S>Предкомпиляция в С++ вообще штука крайне сложная. У самого она адски глючила и падала под виндой — и вовсе не из-за нехватки памяти.
А из-за сваливания в кучу всего и вся.
И из-за глючной одно время технологии инкрементной компиляции, но это поправили ближе к концу 90-х.
S>Сожрать модулями слишком много памяти — это какой-то феерический факап реализации системы модулей.
Дык, готовое бинарное описание ничего не экономит в сравнении с исходным текстовым после зачитки тех и тех, там в лучшем случае требуется та же память, в худшем чуть большая — ввиду дополнительного мета-описания символов с т.з. расположения тех в модулях.
V>>Разумеется, можно считывать модули и в lazy-режиме, т.е. изначально читать просто список символов, а определения конкретных шаблонов, инлайн-функций и макросов — лишь по мере их задействования в компиляции.
V>>Но не об этом ведь шла речь, бо, разумеется, это всё не проблема для современных размеров памяти.
S>Ну, вот видите. А только что это была неразрешимая проблема.
Неразрешимой проблему никто не называл (очередной тебе минус за враньё), я пояснял, почему технология не обязательно вызовет экономию ресурсов и ускорение процессов.
Чаще будет ровно наоборот, бо зачитка текстового кода происходит не сильно медленней и текстовый код может быть порой компактней бинарного описания, а скорость компиляции сейчас часто зависит от скорости чтения с диска, т.е. от размеров исходников.
Удобство модулей — это уменьшение вероятности потенциальных конфликтов имён промежуточных сущностей, фигурирующих сейчас в открытом виде в h-файлах.
Т.е. сами те сущности из модулей никуда не денутся, ес-но, но теперь их имена не будут вызывать конфликтов.
Но основное ожидаемое удобство — легкость разворачивания, поддержка версионности.
Зависимости м/у модулями можно описывать в явном виде, это перекликается с задачами пакетных менеджеров, поэтому в подветке про пакетные менеджеры я их и упомянул.
V>>Мол, "в нормальных технологиях так давно".
V>>Это значит, что ты никогда не писал достаточно больших проектов на том же Турбо-Паскале, т.е. не в курсе проблематики.
S> Этой проблематики не существует. Повторюсь: Турбо-Паскаль прекрасно работал на объёмах памяти, в тысячу раз меньше тех, которые вы считаете маленькими.
Я же говорю — ты не писал больших проектов на Турбо Паскале.
V>>Эээ, простите, "склеивать"? ))
S>У вас потеря кратковременной памяти? Это же ваша цитата про "склеивать" — поднимите глазки на две строчки выше.
Пфф, я и повторялся в сообщении, на которое отвечаешь, насчёт переписывания описания проекта с 0-ля по окончании работ, но ты высказывался про сам процесс, как мне показалось.
Иначе бы откуда было про "боль", когда речь об однократных операциях, выполняемых раз в несколько недель или даже единиц месяцев?
Использование тех же слов не обязательно означает тот же смысл.
V>>Но да, в самом конце "быстрой" первоначальной итерации разработки все-равно придётся код описания проектов переписать начисто, увы.
S>Повторю вопрос: зачем вы это делаете?
Потому что будучи окончательно сгруппированным по конечным единицам деплоймента, описание проекта в виде единого файла будет минимальным по объёму, ведь в "чистовом" варианте даже исходники перечислять не требуется, по-умолчанию подхватывается вся директория от текущей и рекурсивно ниже.
(При этом такой "исходник" описания наименее управляем, но им на этой стадии уже особо управлять и не требуется)
S>Вы утверждаете, что вам приходится пилить проект на десятки разных, а потом склеивать.
S>Я вам говорю, что такой нужды нет.
Уметь говорить мало, надо уметь говорить аргументировать.
И хотя бы понимать, о чём вообще речь.
V>>И стараться не править его из GUI Студии, а то там каша получается, а не исходник.
S>Да можно как угодно — хоть студией, хоть руками. Речь о том, что C# вас ни к чему не принуждает.
Принуждает своей моделью сборки (походу ты зациклился в рассуждениях).
Ладно, ничего внятного от тебя по этой теме мы уже не услышим, бо это заход на 3-й круг, а ты пока всё еще пытаешься сообразить, зачем это вообще может быть нужно.
Почему бы тебе в аналогичных случаях не писать своё "мнение" прямой речью: "раз мне это не надо, то и никому не надо" — оно бы сэкономило бы кучу времени тебе и оппонентам.
V>>За одно это утверждение тебя уже можно смело увольнять.
S>Как хорошо, что такие решения принимаете не вы.
Да пофик кто принимает решения, хосподя, речь всё-равно не обо мне.
За злоупотребление такими вещами, которые ты себе позволяешь, увольняют откуда угодно.
V>>Это в таких категориях ПО разрабатываешь?
S>А то.
То, что ревью делать некому, походу. ))
Т.е. из твоего положения тебе вообще выступать не следовало бы, бо ты в некотором смысле в вакууме работаешь, судя по высказываемому тобой, общяясь с коллегами через публичное АПИ их и своих поделий.
V>>Почему "избыточного"? ))
S>Ну, потому что потом вы вынуждены обратно их склеивать.
(утомляешь уже упоротостью...)
См. определение "избыточность" в IT.
Способ группировки информации обычно не влияет на степень её избыточности.
V>>Низкая связанность/высокое зацепление — это общий принцип, в основе DDD лежит в том числе одним из первых.
S>Отлично. В чём тогда ваша проблема?
Такие вещи обычно называются не "проблемами", а "задачами".
Проблемой задача становится, когда плохо понятно как её решать или её решение слишком дорогое.
Забавный у нас вышел обмен мнениями — я тебе рассказываю как решать те задачи, которые ты не в состоянии даже просто сформулировать. ))
Че-та ржу уже...
Хотя... если основная сегодняшняя методология разработки сложных систем идёт со слов оппонента лесом, то удивляться нечему.
V>>И потому что через систему include MSBuild-описаний, т.е. повторного их использования, можно задешево покрыть относительно большую комбинаторику сочетаний вариантов кода для целей проведения экспериментов.
S>Можно и без такой системы.
Я озвучил как можно без дублирования, с дешевым управлением на уровне исходников описания проектов.
В технологии MSBuild дешевле никак.
Альтернативой идёт дублирование уникальных описаний проектов и всё это в плохо управляемом на уровне исходников виде.
На всякий случай ликбез — "плохо управляемыми" называются те исходники, в которые для внесения небольшого "логического" изменения необходимо вносить "физические" изменения (т.е. править исходники) во многих местах.
V>>Опиши себе один мета-проект, ссылающийся на другие проекты, через один коммент включай-отключай запчасти, комбинируй, пробуй варианты и т.д. и т.п.
V>>Для сравнения, "выключить" в исходнике класс — это нужно бегать, выключать все зависимости от него.
V>>Разбил по проектам (которые на деле всегда подпроекты) — получил изоляцию и управляемость.
S>Отлично. Пока что всё, что вы рассказываете, вполне укладывается в нормальную практику.
Но я такую практику редко вижу на гитхаб.
И для меня это один из многих признаков/показателей класса разработчиков.
Ну да, в C# не только нубы обитают, бывают и вполне грамотные ребята, а что?
Например, посмотри на Авалонию.
И посмотри на исходники своих MSBuild-описаний.
S>Откуда тогда страдания про то, что C# вас вынуждает делить проект на мелкие части?
Декомпозиция — это вроде как стандартный способ борьбы со сложностью. ))
У меня сотни библиотечных типов одновременно было в разработке/портировании с С++, без оперативного оперирования зависимостями там можно было бы застрять надолго, т.е. выполнять работы "пошагово" можно было бы бесконечно.
Кароч, чё-та я уже зеваю от твоих рассуждений.
Когда-то давно, 15-20 лет назад я имел обыкновения коллегам озвучивать, что профессионализм проявляется, в первую очередь, в умении "организовать своё рабочее место", с т.з. программера — это организовать себе ориентированную на решение конкретной задачи наиболее подходящую инфраструктуру.
Коллеги с тех пор заметно подросли, в подобных советах не нуждаются.
Но по-интернету уникальные кадры еще пробегают и даже преднамеренно привлекают к своей необычности внимание! ))
V>>В общем, границы проектов в конце стадии "быстрого роста" дизайна зависят от границ предметных областей и слоёв иерархии доменной модели, и ни от чего более.
S>Ну и отлично. Зачем тогда их потом "склеивать"?
Чтобы убрать явную декомпозицию времени разработки.
V>>Наличие всей описанной возни с её отсутствием, ес-но.
S>Продолжаю не понимать. Вы только что превозносили эту возню как что-то прекрасное, и обвиняли меня в том, что мне оно недоступно.
Да там вышло два непонимания с твоей стороны — это непонимание самой задачи и доступных способов её решения для C# с использованием трюков MSBuild.
А это уже третье непонимание того, что непониманий в прошлый раз у тебя было два. ))
S>И тут вдруг опять — надо сравнивать описанную возню с её отсутствием. Так вот эти ваши десятки проектов — это хорошо или плохо?
Да я уже понял, что ты совсем запутался.
Медленно еще раз:
— в плюсах у меня единицы компиляции независимы (т.е. независим каждый cpp-файл);
— поэтому я могу работать над конкретным cpp-файлом независимо от компилябельности других cpp-файлов, т.е. хотя бы проверять на компиллябельность;
— если мне компиляции недостаточно, я могу линковаться в произвольных сочетаниях с отдельными obj-файлами, которые получаются из отдельных cpp-файлов.
— или могу сложить те obj-файла, которые считаются рабочими, в одну либу одной командой и добавлять очередные obj-файлы в эту либу по мере готовности и т.д. и т.п.
То бишь, в плюсах изкаробки доступна произвольная декомпозиция зависимостей до одного файла.
Вплоть до того, что можно все методы обного объекта раскидать по разным файлам.
Или создать в разных cpp-файлах разные варианты реализации одного и того же метода, и выбирать нужный вариант на этапе линковки.
(хосподя, просто сделай паузу и помедитируй в этом месте, бо мне уже надоело ждать, когда ты включишь соображалку)
S>В общем, вы очень путано объясняете. Ложка огурцы банка майонез 500мб DDD склеивать резать предкомпиляция включение.
Наверное, это побочный эффект вашего регулярного надувания.
Мне всё-время кажется, что вы обладаете достаточной эрудицией, что мне нет надобности с 0-ля всё разжёвывать.
Но дело не только в этом, ХЗ.
Я совершенно уверен в том, что ты хорошо в курсе про описанные в пред. абзаце подробности относительно декомпозиции единиц трансляции в С++.
Ты всё это знал, но тебе это не помогло.
А вот это уже необъяснимо.
Т.е., я хорошо понимаю что происходит, я не понимаю — почему.
Когда-то, когда ты познавал новое, проявлял любопытство, лично мне было интересно тебя читать.
Свежий, нестандартный взгляд от непрофессионала IT на всю эту скукатень, которой мы занимаемся...
Ты познавал новое и делился впечатлениями в интересной манере.
Умение заинтересовать — это уважаемый мною талант.
Несомненно, это приносило пользу более молодым коллегам, пополнять эрудицию в виде нескучного чтива.
Но стоит тебе отказаться от познания нового, экспериментаторства и т.д. и начать пропихивать куда надо и куда не надо свой старый опыт — туши свет, кидай гранату. ))
Недалёк в рассуждениях, несносен в манерах.
V>>Исторически набор h-файлов обычно шёл уникальный и минимально-необходимый для конкретного С++ файла.
V>>В случае модулей на практике всегда будет максимальный набор символов, а не минимально-необходимый.
S>Опять-таки, вы всё трактуете задом наперёд. Практика в случае модулей такая не потому, что единственно возможная, а потому, что так удобнее.
"Трактуешь" и вообще выкручиваешься тут ты, я говорю как оно есть и как непременно будет.
Т.е. объясняю одному недостаточно зрелому коллеге, почему он здесь ошибается:
то ей будет ничуть не сложнее вычитать эти же символы из модулей
V>>Например, вся немаленькая современная стандартная библиотека С++ подключается одним модулем.
S>Всё зависит от того, как именно модули реализовывать.
Если уж ты решил именно спорить (хотя я ХЗ зачем было именно спорить, а не спрашивать подробности), то надо уметь не косячить в рассуждениях, особенно в очевидном.
А вот это бесполезное бла-бла-бла...
Зачем оно?
V>>В общем, у самого много раз компиляция под линухами молча подвисала при нехватке памяти в те года, если злоупотреблял предкомпляцией.
S>Предкомпиляция в С++ вообще штука крайне сложная. У самого она адски глючила и падала под виндой — и вовсе не из-за нехватки памяти.
А из-за сваливания в кучу всего и вся.
И из-за глючной одно время технологии инкрементной компиляции, но это поправили ближе к концу 90-х.
S>Сожрать модулями слишком много памяти — это какой-то феерический факап реализации системы модулей.
Дык, готовое бинарное описание ничего не экономит в сравнении с исходным текстовым после зачитки тех и тех, там в лучшем случае требуется та же память, в худшем чуть большая — ввиду дополнительного мета-описания символов с т.з. расположения тех в модулях.
V>>Разумеется, можно считывать модули и в lazy-режиме, т.е. изначально читать просто список символов, а определения конкретных шаблонов, инлайн-функций и макросов — лишь по мере их задействования в компиляции.
V>>Но не об этом ведь шла речь, бо, разумеется, это всё не проблема для современных размеров памяти.
S>Ну, вот видите. А только что это была неразрешимая проблема.
Неразрешимой проблему никто не называл (очередной тебе минус за враньё), я пояснял, почему технология не обязательно вызовет экономию ресурсов и ускорение процессов.
Чаще будет ровно наоборот, бо зачитка текстового кода происходит не сильно медленней и текстовый код может быть порой компактней бинарного описания, а скорость компиляции сейчас часто зависит от скорости чтения с диска, т.е. от размеров исходников.
Удобство модулей — это уменьшение вероятности потенциальных конфликтов имён промежуточных сущностей, фигурирующих сейчас в открытом виде в h-файлах.
Т.е. сами те сущности из модулей никуда не денутся, ес-но, но теперь их имена не будут вызывать конфликтов.
Но основное ожидаемое удобство — легкость разворачивания, поддержка версионности.
Зависимости м/у модулями можно описывать в явном виде, это перекликается с задачами пакетных менеджеров, поэтому в подветке про пакетные менеджеры я их и упомянул.
V>>Мол, "в нормальных технологиях так давно".
V>>Это значит, что ты никогда не писал достаточно больших проектов на том же Турбо-Паскале, т.е. не в курсе проблематики.
S> Этой проблематики не существует. Повторюсь: Турбо-Паскаль прекрасно работал на объёмах памяти, в тысячу раз меньше тех, которые вы считаете маленькими.
Я же говорю — ты не писал больших проектов на Турбо Паскале.
V>>Эээ, простите, "склеивать"? ))
S>У вас потеря кратковременной памяти? Это же ваша цитата про "склеивать" — поднимите глазки на две строчки выше.
Пфф, я и повторялся в сообщении, на которое отвечаешь, насчёт переписывания описания проекта с 0-ля по окончании работ, но ты высказывался про сам процесс, как мне показалось.
Иначе бы откуда было про "боль", когда речь об однократных операциях, выполняемых раз в несколько недель или даже единиц месяцев?
Использование тех же слов не обязательно означает тот же смысл.
V>>Но да, в самом конце "быстрой" первоначальной итерации разработки все-равно придётся код описания проектов переписать начисто, увы.
S>Повторю вопрос: зачем вы это делаете?
Потому что будучи окончательно сгруппированным по конечным единицам деплоймента, описание проекта в виде единого файла будет минимальным по объёму, ведь в "чистовом" варианте даже исходники перечислять не требуется, по-умолчанию подхватывается вся директория от текущей и рекурсивно ниже.
(При этом такой "исходник" описания наименее управляем, но им на этой стадии уже особо управлять и не требуется)
S>Вы утверждаете, что вам приходится пилить проект на десятки разных, а потом склеивать.
S>Я вам говорю, что такой нужды нет.
Уметь говорить мало, надо уметь говорить аргументировать.
И хотя бы понимать, о чём вообще речь.
V>>И стараться не править его из GUI Студии, а то там каша получается, а не исходник.
S>Да можно как угодно — хоть студией, хоть руками. Речь о том, что C# вас ни к чему не принуждает.
Принуждает своей моделью сборки (походу ты зациклился в рассуждениях).
Ладно, ничего внятного от тебя по этой теме мы уже не услышим, бо это заход на 3-й круг, а ты пока всё еще пытаешься сообразить, зачем это вообще может быть нужно.
Почему бы тебе в аналогичных случаях не писать своё "мнение" прямой речью: "раз мне это не надо, то и никому не надо" — оно бы сэкономило бы кучу времени тебе и оппонентам.
V>>За одно это утверждение тебя уже можно смело увольнять.
S>Как хорошо, что такие решения принимаете не вы.
Да пофик кто принимает решения, хосподя, речь всё-равно не обо мне.
За злоупотребление такими вещами, которые ты себе позволяешь, увольняют откуда угодно.
V>>Это в таких категориях ПО разрабатываешь?
S>А то.
То, что ревью делать некому, походу. ))
Т.е. из твоего положения тебе вообще выступать не следовало бы, бо ты в некотором смысле в вакууме работаешь, судя по высказываемому тобой, общяясь с коллегами через публичное АПИ их и своих поделий.
V>>Почему "избыточного"? ))
S>Ну, потому что потом вы вынуждены обратно их склеивать.
(утомляешь уже упоротостью...)
См. определение "избыточность" в IT.
Способ группировки информации обычно не влияет на степень её избыточности.
V>>Низкая связанность/высокое зацепление — это общий принцип, в основе DDD лежит в том числе одним из первых.
S>Отлично. В чём тогда ваша проблема?
Такие вещи обычно называются не "проблемами", а "задачами".
Проблемой задача становится, когда плохо понятно как её решать или её решение слишком дорогое.
Забавный у нас вышел обмен мнениями — я тебе рассказываю как решать те задачи, которые ты не в состоянии даже просто сформулировать. ))
Че-та ржу уже...
Хотя... если основная сегодняшняя методология разработки сложных систем идёт со слов оппонента лесом, то удивляться нечему.
V>>И потому что через систему include MSBuild-описаний, т.е. повторного их использования, можно задешево покрыть относительно большую комбинаторику сочетаний вариантов кода для целей проведения экспериментов.
S>Можно и без такой системы.
Я озвучил как можно без дублирования, с дешевым управлением на уровне исходников описания проектов.
В технологии MSBuild дешевле никак.
Альтернативой идёт дублирование уникальных описаний проектов и всё это в плохо управляемом на уровне исходников виде.
На всякий случай ликбез — "плохо управляемыми" называются те исходники, в которые для внесения небольшого "логического" изменения необходимо вносить "физические" изменения (т.е. править исходники) во многих местах.
V>>Опиши себе один мета-проект, ссылающийся на другие проекты, через один коммент включай-отключай запчасти, комбинируй, пробуй варианты и т.д. и т.п.
V>>Для сравнения, "выключить" в исходнике класс — это нужно бегать, выключать все зависимости от него.
V>>Разбил по проектам (которые на деле всегда подпроекты) — получил изоляцию и управляемость.
S>Отлично. Пока что всё, что вы рассказываете, вполне укладывается в нормальную практику.
Но я такую практику редко вижу на гитхаб.
И для меня это один из многих признаков/показателей класса разработчиков.
Ну да, в C# не только нубы обитают, бывают и вполне грамотные ребята, а что?
Например, посмотри на Авалонию.
И посмотри на исходники своих MSBuild-описаний.
S>Откуда тогда страдания про то, что C# вас вынуждает делить проект на мелкие части?
Декомпозиция — это вроде как стандартный способ борьбы со сложностью. ))
У меня сотни библиотечных типов одновременно было в разработке/портировании с С++, без оперативного оперирования зависимостями там можно было бы застрять надолго, т.е. выполнять работы "пошагово" можно было бы бесконечно.
Кароч, чё-та я уже зеваю от твоих рассуждений.
Когда-то давно, 15-20 лет назад я имел обыкновения коллегам озвучивать, что профессионализм проявляется, в первую очередь, в умении "организовать своё рабочее место", с т.з. программера — это организовать себе ориентированную на решение конкретной задачи наиболее подходящую инфраструктуру.
Коллеги с тех пор заметно подросли, в подобных советах не нуждаются.
Но по-интернету уникальные кадры еще пробегают и даже преднамеренно привлекают к своей необычности внимание! ))
V>>В общем, границы проектов в конце стадии "быстрого роста" дизайна зависят от границ предметных областей и слоёв иерархии доменной модели, и ни от чего более.
S>Ну и отлично. Зачем тогда их потом "склеивать"?
Чтобы убрать явную декомпозицию времени разработки.
V>>Наличие всей описанной возни с её отсутствием, ес-но.
S>Продолжаю не понимать. Вы только что превозносили эту возню как что-то прекрасное, и обвиняли меня в том, что мне оно недоступно.
Да там вышло два непонимания с твоей стороны — это непонимание самой задачи и доступных способов её решения для C# с использованием трюков MSBuild.
А это уже третье непонимание того, что непониманий в прошлый раз у тебя было два. ))
S>И тут вдруг опять — надо сравнивать описанную возню с её отсутствием. Так вот эти ваши десятки проектов — это хорошо или плохо?
Да я уже понял, что ты совсем запутался.
Медленно еще раз:
— в плюсах у меня единицы компиляции независимы (т.е. независим каждый cpp-файл);
— поэтому я могу работать над конкретным cpp-файлом независимо от компилябельности других cpp-файлов, т.е. хотя бы проверять на компиллябельность;
— если мне компиляции недостаточно, я могу линковаться в произвольных сочетаниях с отдельными obj-файлами, которые получаются из отдельных cpp-файлов.
— или могу сложить те obj-файла, которые считаются рабочими, в одну либу одной командой и добавлять очередные obj-файлы в эту либу по мере готовности и т.д. и т.п.
То бишь, в плюсах изкаробки доступна произвольная декомпозиция зависимостей до одного файла.
Вплоть до того, что можно все методы обного объекта раскидать по разным файлам.
Или создать в разных cpp-файлах разные варианты реализации одного и того же метода, и выбирать нужный вариант на этапе линковки.
(хосподя, просто сделай паузу и помедитируй в этом месте, бо мне уже надоело ждать, когда ты включишь соображалку)
S>В общем, вы очень путано объясняете. Ложка огурцы банка майонез 500мб DDD склеивать резать предкомпиляция включение.
Наверное, это побочный эффект вашего регулярного надувания.
Мне всё-время кажется, что вы обладаете достаточной эрудицией, что мне нет надобности с 0-ля всё разжёвывать.
Но дело не только в этом, ХЗ.
Я совершенно уверен в том, что ты хорошо в курсе про описанные в пред. абзаце подробности относительно декомпозиции единиц трансляции в С++.
Ты всё это знал, но тебе это не помогло.
А вот это уже необъяснимо.
Т.е., я хорошо понимаю что происходит, я не понимаю — почему.
Когда-то, когда ты познавал новое, проявлял любопытство, лично мне было интересно тебя читать.
Свежий, нестандартный взгляд от непрофессионала IT на всю эту скукатень, которой мы занимаемся...
Ты познавал новое и делился впечатлениями в интересной манере.
Умение заинтересовать — это уважаемый мною талант.
Несомненно, это приносило пользу более молодым коллегам, пополнять эрудицию в виде нескучного чтива.
Но стоит тебе отказаться от познания нового, экспериментаторства и т.д. и начать пропихивать куда надо и куда не надо свой старый опыт — туши свет, кидай гранату. ))
Недалёк в рассуждениях, несносен в манерах.