Re[3]: Имя истинного врага - миссионеры.
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.08.25 11:15
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>В данном случае будет уместно сказать "учу читать".


A>Если пользоваться твоей аналогией про сахар, то это будет звучать так:

A>сахара получается мало, а затрат на него много, в результате начинает не хватать на хлеб.

Соотношение сахара и затрат зависит от контекста. Скажем, если у тебя дешевое сырьё, делать сахар уместно. В противном случае — нет.

Предлагаю отделить для начала рассмотрение самой технологии от рассмотрения границ ее применимости.
Re: Имя истинного врага - миссионеры.
От: Быдлокодер  
Дата: 11.08.25 11:18
Оценка: +1
Здравствуйте, alpha21264, в целом согласен, но скорее вижу проблемы не в конкретной проблеме типа Primitive Obsession vs Type-safe domain modeling, а когда какому-то подходу или методу придается слишком большое или универсальное значение в ущерб другим важным аспектам проекта. Так, например, 90% менеджеров 90% времени начинают говорить и думать, например, о Скраме, при этом проект проваливается, потому что успех определялся комплексом параметров — уровнем хардов команды, инженерной культурой, архитектурой, процессом развертывания, соответствия продукта рынку и и т.п. и т.д.
Тогда можно сказать, что миссионеры — это сторонники одной серебряной пули, которой, как правило, нет. Но время и комплексный поход могут быть уже упущены к тому моменту, когда закончатся деньги на продукт или компанию.
Re[2]: Имя истинного врага - миссионеры.
От: T4r4sB Россия  
Дата: 11.08.25 11:41
Оценка: +1
Здравствуйте, Nuzhny, Вы писали:


N>У европейцев спутник "Ариан-5" упал когда-то, с типом данных не угадали. Стоит ли работы программиста?

N>Или сбой навигации у самолётов над Мёртвым морем, когда высота была отрицательной.

Там контроль типов не помог бы

Ну написал ты

uint8_t a=42;
uint8_t b=69;
uint8_t c=a-b;


Как тебя контроль типов спасёт?
По части const тс конечно ересь втирает, но по части "свой тип на свой домен" тут я во многом его понимаю, потому что это всего лишь порождает код засранный принудительными кастами к одниму числовому наиболее общему типу
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[2]: Имя истинного врага - миссионеры.
От: T4r4sB Россия  
Дата: 11.08.25 11:51
Оценка: 1 (1) +1 -4 :))
Здравствуйте, Быдлокодер, Вы писали:

Б>Интересно, а кто на практике использовал strongly typed domain modeling в реальном проекте? Какие результаты и выводы?


Я каждый раз когда подключаю std::chporno для замеров времени. Я эту парашу без гугла в жисть не повторю. С сишными функциями проще было. Да, баги вида "сложил секунды и милисекунды" возможны, но зато их легко обнаружить и пофиксить, чем каждый раз изучать доку на тему какой метод тут нужен для преобразования. Еще и какие-то систем клок, стеди клок, чё
Да и чисто психилогически мне поиск несоответствия в результате вывода комфортнее чем гуглинг и ковыряние в документации.
Короче я за примитив обсешшон. Доменный фанатизм фтопку
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[3]: Имя истинного врага - миссионеры.
От: · Великобритания  
Дата: 11.08.25 12:05
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Я каждый раз когда подключаю std::chporno для замеров времени. Я эту парашу без гугла в жисть не повторю. С сишными функциями проще было.

Счастливый ты человек. Ты никогда не сталкивался с точным измерением времени, синхронизацией, календарями, таймзонами, и т.п.
И да, C++ тут не при чём.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[4]: Имя истинного врага - миссионеры.
От: T4r4sB Россия  
Дата: 11.08.25 12:45
Оценка:
Здравствуйте, ·, Вы писали:

·>Счастливый ты человек. Ты никогда не сталкивался с точным измерением времени, синхронизацией, календарями, таймзонами, и т.п.

·>И да, C++ тут не при чём.

Насколько точным? Мне struct timeval с микросекундами как-то хватало всегда
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[5]: Имя истинного врага - миссионеры.
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 11.08.25 13:39
Оценка: +3
Здравствуйте, alpha21264, Вы писали:

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


A>Когда я написал про illegal instruction, я написал что :

A>1) Новый gcc вставляет в код illegal instruction, о чём его никто не просил.

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


A>2) Полезные сообщения тонут в тоннах бесполезных.


Все сообщения полезны, и сигнализируют о том, что ты, скорее всего, делаешь что-то подозрительное. Проект должен собираться с ключиками -Wall -Werror


A>Ваша точка зрения, которую Вы защищаете -

A>давайте нам ещё больше тонн бесполезных варнингов.

Это ты, привыкнув говнокодить, считаешь, что они бесполезны


S>>Честный желательно. Используете ли вы в своем коде классы?

S>>Если используете, то есть ли в ваших классах const-методы?

A>Классы использую.

A>const-методы не использую, потому что не знаю, зачем они нужны.

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


A>У меня есть get-методы, но по моему это не одно и то же.


Твои get-методы могут поменять объект, но никто этого не заметит. Сколько чудных граблей ты раскладываешь в своём коде


A>Самое главное — я не понимаю, какое это имеет отношение к обсуждаемой теме.


Это твоя проблема


A>У меня такое впечатление, что Вы слишком много внимания уделяете инструменту и слишком мало задаче.

A>Такое бывает, когда Вам не дают больших и интересных задач.

А ты не уделяешь внимания инструменту от слова вообще. Тебе микроскоп дадут, а ты им гвозди будешь забивать, потому что забивание гвоздей — это для тебя большая интересная задача.
Маньяк Робокряк колесит по городу
Re[3]: Имя истинного врага - миссионеры.
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 11.08.25 13:43
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Как тебя контроль типов спасёт?

TB>По части const тс конечно ересь втирает, но по части "свой тип на свой домен" тут я во многом его понимаю, потому что это всего лишь порождает код засранный принудительными кастами к одниму числовому наиболее общему типу

По-хорошему, разрешенные касты должны быть описаны, и не должно быть никаких принудительных кастов в прикладном коде
Маньяк Робокряк колесит по городу
Re[3]: Имя истинного врага - миссионеры.
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 11.08.25 13:44
Оценка: +1
Здравствуйте, alpha21264, Вы писали:

Q>>Да разрабатывали как люди в машинных кодах, а потом пришли эти жертвы егэ т.е. миссионеры и все испортили.


A>Тебе не кажется, что твоя реплика похожа на кривляние?


Не больше, чем твоя тема
Маньяк Робокряк колесит по городу
Re[4]: Имя истинного врага - миссионеры.
От: alpha21264 СССР  
Дата: 11.08.25 13:52
Оценка: :)
Здравствуйте, Marty, Вы писали:

Q>>>Да разрабатывали как люди в машинных кодах, а потом пришли эти жертвы егэ т.е. миссионеры и все испортили.


A>>Тебе не кажется, что твоя реплика похожа на кривляние?


M>Не больше, чем твоя тема


Marty, сегодня ты не смешной.
Вообще, rsdn — это сайт, который крутится на компьютере Влада.
Я думаю, что не надо забивать его бессодержательными репликами.

Течёт вода Кубань-реки куда велят большевики.
Re: Имя истинного врага - миссионеры.
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 11.08.25 14:22
Оценка: +1
Здравствуйте, alpha21264, Вы писали:

A>Допустим у нас есть несколько (ну допустим пять) величин: метры, килограммы, секунды, ньютоны и джоули.

A>Да, их нельзя складывать с друг с другом. Но их можно(нужно) умножать и делить.
A>Таким образом, чтобы написать формулу, которая содержит три величины, нам нужно иметь 3*(5+1)*(5+1) типов данных.
A>То есть 36 типов для результатов умножения (килограмм*метр),
A>И 2*36 типов для деления килограмм/метр и метр/килограмм.
A>То есть, что-то около сотни типов. (Точная цифра =108)
A>И чтобы над всем этим великолепием можно было выполнять действия, нужно 100*100 — десять тысяч функций.

Нужно, что бы компилятор умел
1. уметь поддержку единиц измерений
2. выводить типы из выражения
3. проверять соответсвие типов — уже умеет


В этом случае,
все типы он выведет сам, и будет делать это по месту переменной
никаких десять тысяч функций не нужно — вы пишете по одной, под конкретную формулу, а компилятор с остальным справляется сам

В этом случае вы не сможете силу передать как массу или энергию, а вот произведение ускорения на массу — с да, сможете
Re[4]: Имя истинного врага - миссионеры.
От: T4r4sB Россия  
Дата: 11.08.25 14:28
Оценка:
Здравствуйте, Marty, Вы писали:

M>По-хорошему, разрешенные касты должны быть описаны, и не должно быть никаких принудительных кастов в прикладном коде


Вот у тебя одна либа генерирует изображение в котором выдает координаты u64 а другая которая сохраняет принимает координаты в u32. В русте такой шизы очень много. Я спрашивал типа сделайте int64 для всех и не трахайте голову, а мне втирают что это примитив обсешшон и он приведет к проблемам. Ну пока что проблемы с тем что приходится принудительно писать касты и разбирать отдельно случай вычитания большего из меньшего
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[5]: Имя истинного врага - миссионеры.
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 11.08.25 15:23
Оценка:
Здравствуйте, T4r4sB, Вы писали:

M>>По-хорошему, разрешенные касты должны быть описаны, и не должно быть никаких принудительных кастов в прикладном коде


TB>Вот у тебя одна либа генерирует изображение в котором выдает координаты u64 а другая которая сохраняет принимает координаты в u32. В русте такой шизы очень много. Я спрашивал типа сделайте int64 для всех и не трахайте голову, а мне втирают что это примитив обсешшон и он приведет к проблемам. Ну пока что проблемы с тем что приходится принудительно писать касты и разбирать отдельно случай вычитания большего из меньшего


Тебе не кажется, что это несколько другая ситуация?
Маньяк Робокряк колесит по городу
Re[2]: Имя истинного врага - миссионеры.
От: serg_joker Украина  
Дата: 11.08.25 15:29
Оценка: 8 (4) +2
Здравствуйте, Быдлокодер, Вы писали:

Б>Интересно, а кто на практике использовал strongly typed domain modeling в реальном проекте? Какие результаты и выводы?

Я использую, но у меня не физика, нет необходимости складывать/делить и исполнять прочую арифметику.
Зато есть объекты, для которых есть целочисленные идентификаторы (uintXX_t в основном).
И у одного и того же объекта может быть больше одного идентификатора, в зависимости от того, кому он передаётся.
вот и есть у меня:
using session_id_t = StrongTypedef<..., uint32_t>;
using nsapi_t = StrongTypedef<..., uint8_t>;
using teid_t = StrongTypedef<..., uint32_t>;
using eps_bearer_id_t = StrongTypedef<..., uint32_t>;
using qci_t = StrongTypedef<..., uint8_t>;
using nsapi_t = StrongTypedef<..., uint8_t>;
using qdisc_id_t = StrongTypedef<..., uint32_t>;
// ну и ещё с десяток-полтора подобного

Результат — код лучше, ловил несоответствие формальных и фактических параметров ф-ций по типу не раз. Прямо во время написания кода редактор показывает, что такой вызов не получится.
Лучше всего проявляло себя во время рефакторингов модели. Без использования StrongTypedef я бы просто боялся делать изменения тех масштабов, которые я делал.

Кроме того, упрощаются некоторые виды анализов кода. Например, я легко могу найти все API, работающие с данным типом, да и вообще все места его использования.

Для каких-то типов я вводил специальные форматтеры для записи в журнал. Например, если Wireshark показывает тип как шестнатиричное 8-хциферное число с ведущими нулями, то мне в журнале удобно его видеть ровно так же, и я переопределяю желаемый формат в одном месте, затем просто использую `{}` где нужно, и в выводе программы я увижу "0000beda", без необходимости выписывать форматную строку в каждом месте. До того, как я ввёл строгие типы, одни и те же значения печатались то как десятичные, то как шестнадцатиричные.

Было такое, что для решения одной проблемы, когда мне нужно было анализировать много выхлопа программы, я оборачивал вывод в декоратор типа `---0000beda---` для более простого парсинга скриптом, и добавлял в журнал коды для выделения этих значений цветом, для более удобного поиска глазами. И то, и другое делалось в одном месте. Если бы нужно было найти и попатчить все места использования этого типа, я бы просто этого делать не стал.

Я понимаю, что это не то же самое, что моделирование физики, где нужно комбинировать величины разных размерностей, что ведёт к комбинаторике. Была бы задача с физикой — обязательно бы попробовал с сильной типизацией. Не факт, что понравилось бы, нет такого опыта.
Отредактировано 11.08.2025 17:05 serg_joker . Предыдущая версия .
Re[6]: Имя истинного врага - миссионеры.
От: T4r4sB Россия  
Дата: 11.08.25 15:38
Оценка:
Здравствуйте, Marty, Вы писали:

M>Тебе не кажется, что это несколько другая ситуация?


Нет. Это бред с разным числовым типом на каждый чих — именно то, что мне обосновывали как "доменно-ориентированный тип". И как следствие — на стыке домена и своего кода ехал каст через каст
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[7]: Имя истинного врага - миссионеры.
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 11.08.25 15:48
Оценка:
Здравствуйте, T4r4sB, Вы писали:


M>>Тебе не кажется, что это несколько другая ситуация?


TB>Нет. Это бред с разным числовым типом на каждый чих — именно то, что мне обосновывали как "доменно-ориентированный тип". И как следствие — на стыке домена и своего кода ехал каст через каст


Хернёй люди занимаются. Нет смысла в отсутствие нормального strong typedef'а
Маньяк Робокряк колесит по городу
Re[5]: Имя истинного врага - миссионеры.
От: · Великобритания  
Дата: 11.08.25 16:06
Оценка: +1
Здравствуйте, T4r4sB, Вы писали:

TB>Насколько точным? Мне struct timeval с микросекундами как-то хватало всегда

Слишком много ликбеза. Мне лень писать подробно. Но пара хинтов:

TB>Я каждый раз когда подключаю std::chporno для замеров времени.

И читаем: https://blog.habets.se/2010/09/gettimeofday-should-never-be-used-to-measure-time.html

TB>Еще и какие-то систем клок, стеди клок, чё

Это сисколлы, а не причуда std::chrono как тебе кажется: "kernel support the following clocks:" https://linux.die.net/man/3/clock_gettime
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: Имя истинного врага - миссионеры.
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.08.25 17:10
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Вообще, rsdn — это сайт, который крутится на компьютере Влада.

A>Я думаю, что не надо забивать его бессодержательными репликами.

У современного диска быстрее кончается срок, когда на надёжность этого диска не страшно рассчитывать, чем место на нём...
Re[4]: Имя истинного врага - миссионеры.
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.08.25 18:15
Оценка: +3
Здравствуйте, Marty, Вы писали:

M>Да вот ещё, терпеть тебя. Нам просто на тебя наплевать. Просто мы теперь многое о тебе узнали, как и о качестве твоего софта. Ну и стало ясно, что твоё мнение немногого стоит, ты можешь лютую дичь нести с важным видом.


Знаешь, мне приходилось встречать людей, которые рассуждают, как Альфа, но при этом в состоянии надёжно работать. У них какие-то свои методы обеспечения надёжности, отличные от общепринятых.

В принципе, людям нашего с Альфой поколения это простительно: мы сложились, как профессионалы, раньше, чем это методы стали общепринятыми (ну и вообще, то, что сейчас считается общепринятым, во многом формировалось на наших глазах, и во многих точках вполне могло пойти по другой траектории).

Так что представления о качестве его софта из его слов не выведешь.

Это не значит, что я с ним согласен
Re[5]: Имя истинного врага - миссионеры.
От: serg_joker Украина  
Дата: 11.08.25 19:00
Оценка: 3 (2) +5
Здравствуйте, Pzz, Вы писали:

Pzz>Так что представления о качестве его софта из его слов не выведешь.

Проблема не в том, что кто-то пишет код с использованием ненадёжных, небезопасных подходов и практик.
Проблема — когда такие подходы продвигаются, как правильные, а сторонники практик, облегчающих написание надёжного кода, объявляются "истинными врагами". А человек, заявляющий "у меня длиннее", уж наверняка будет навязывать своё видение в команде.

Я знаю специалистов, на голову, а то и не одну выше меня, при этом defensive programming, эти все ассёрты, санитайзеры, юнит-тесты, повышенные уровни предупреждений, const-correctness, [nodiscard]], RAII, отказ от using-директив и пр. им "мешают творить".

Могу ли уважать такого человека, может, даже в чём-то и восхищаться? Да.
Захочу ли я с ним работать? Нет. Это будет боль или для него, или для меня, или для обоих. Я не настолько умён, чтобы отказываться от помощи инструментов. И большинство программистов — тоже.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.