Спасибо за разъяснения, а то самому лень было смотреть.
Вы хорошо разбираетесь в с++ (и уверен не только в нем), но довольно грубо и высокомерно доносите свою позицию - это если что был сейчас комплимент. Я думаю что понимаю цену и причины подобного стиля общения т.к. сам кажется примерно такой же. Вы мне нравитесь и я бы с вами вероятно сработался.
Но проще конечно просто отдельный метод(ы) иметь мутабельный вместо оператора. Смысл в том, что даже в те времена когда этот класс строки писали можно было сделать правильно, а описываемые баги это НЕ проблема cow, а проблема конкретно этой реализации, хотя в культе тож самое насколько я помню. В реальности же менять часть строки приходится настолько редко, что отдельные методы и правильно и эргономично, а конкретно с коу перегрузка не константного оператора индексации который возвращает ссылку это ошибка дизайна.
Но да оператор не воробей зарелизишь не исправить без поломки совместимости.
А можно я тоже ворвусь с вопросом. Мне вот тоже не очевидно даже после прочтения куска стандарта что
void ()
void{}
Это одно и тоже. А именно мне не понятно как компилятор парсит случай с (). Вообще говоря это не однозначная с точки зрения синтаксиса конструкция т.к. это может быть и выражение инициализации рвалью войд (или ещё по другому это можно считать войд литералом) так и сигнатурой функции которая ничего не принимает и ничего не возвращает. Единственное что могу предположить, что токены внутри деклвал трактуются как выражение == инициализация, а не как тип.
В общем то сейчас ровно то же самое за исключением того что хранить значение войд нельзя. Создавать можно - (void)0, читать/писать тоже можно - дефолтовый конструктор и любые функции без пераметров. Только хранить нельзя. Почему нельзя я не знаю, но раз все остальное можно, а хранить нельзя очевидно была причина иначе бы сделали. Поэтому вам нужно сначало найти причину почему хранить войд значение нельзя, а уже имея причину можно понять почему размер 0 не поможет.
Наверное правило любой лвалью должно иметь свой адрес не такое уж и глупое и для чего то нужно, а не просто так. Я думаю это суть проблемы. Вероятно отсутствие различимого адреса как то сильно усложняет код ген или анализ или оптимизации или вообще жесткое требование абстрактной машины в чьи инструкции все преобразуется.
Мне кажется ваши комментарии выше в этой ветке исключительно теоретические т.к. в принципе не способные что то изменить - даже мнение других людей по этому вопросу. Следуя логике комментария на который я отвечаю это бессмысленно.
Возникает противоречие либо все ваши коменты в этой ветке бессмысленны либо все таки смысл создания такого языка есть, но вам этого делать не хочется. Это нормально, но тогда не удивляйтесь, что вашу идею с 0 размером войда никто серьезно не воспринимает т.к. обоснованно опасаются за проблемы которые это несёт. Вы утверждаете, что проблем нет коллективное мы вам не верим, мысленного экспиремента, даже не эксперимента, а просто обрывков рассуждений не достаточно.
Я думаю эта очевидная идея не пришла в голову только лишь вам. Я не знаю, но предполагаю, что ее реализация сложнее/хуже в реалиях 70х годов чем запрет на значение. У вас есть ллвм можете сами попробовать сделать Си где войд размера, 0 но имеет значение и посмотреть сколько проблем вылезет по дороге.
Будет отличное чтиво если ещё и статью по результатам запилите.
А эта теория уже была тогда? Ну так то да сишный войд это юнит, а невозможность инстанцирования вероятно сильно упрощает язык типа сколько байт занимает значение? А массив? А если это мембер структуры? А нужен ему адрес? А зачем? Да и кому вообще нужен массив/мемберы юнитов/войдов? Можно конечно заморочиться и сделать специальные оптимизации везде где встречается подобная дичь, но это как раз и есть усложнение компилятора. Можно ничего не делать, но тогда драгоценные байтики памяти/регистры для аргументов/результата тех времён расходуются. Думаю поступили практично нет человека значения нет проблем.
Давайте копнем глубже, а зачем вам хороший врач? Представляю ваш шок сейчас, как зачем это же очевидно зачем. Неа, вообще не очевидно и позвольте мне объяснить что вам НЕ нужен хороший врач.
Когда у вас возникает самая частая проблема в любой сфере вы к кому обращатесь к хорошему специалисту или дешевому? Правильно к дешевому, просто потому что любой специалист справиться с самой частой проблемой.
Взгляд с другой стороны, если вы сами хороший специалист в чем то вам вообще интересно заниматься стандартными проблемами? Неа, вот вообще не интересно, хочется заниматься тем с чем другие не справляются.
Третий взгляд на проблему, если вы организатор бизнеса то ваша задача иметь много дешёвых специалистов для решения стандартных проблем и 1-2 хороших для сложных, так экономически рационально.
И так если у вас стандартная/частая проблема то вам не нужен хороший врач. Вы не интересны хорошему врачу, и бизнес будет рекоменжовать вам врача подешевле. Это правильно с любой стороны.
Если у вас сложная проблема то вам не повезло и вы все равно не сможете понять где хороший врач пока у вас не появится ваш собственный опыт лечения вашей проблемы, да даже и с опытом это будет угадайка.
Статистика может ответить на вопрос а был ли когда то в прошлом этот конкретный врач хорошим, и это конечно коррелирует с тем какой он сейчас, но у вас не будет доступа к статистике, а у кого он будет не будет знаний как это посчитать, а у кого будут знания не будет правильно накопленной статистики вот такая ирония.
В конечном итоге вам не важно хороший врач или посредственный вам важен хороший результат. Хороший результат возможен и с посредственным врачом тоже, но с меньшей вероятностью. Смысл в том что хороший результат не гарантирован в случае хорошего врача, поэтому я лично вообще не парюсь выбором и иду туда где удобней, но у меня и проблемы стандартные.
А у кого проблемы не стандартные то вам не повезло.
Из опыта использования балансированой рекуперации + кондиционеры в каждой комнате более 6 лет уже, хочу сказать что как и все любители (в том числе и я) вы допустили классическую ошибку не поставив входной фильтр. Он действительно нужен. У меня в рекуператоре стоят фильтры, но приходится лазить и чистить их, а мой чердак значительно менее удобный чем у вас максимальная высота 1 метр.
Для увеличения эффективности вентиляции посмотрите в сторону сбалансированной вентиляции это когда приточная + вытяжная в каждой комнате. Ну а если решите ставить кондиционеры то посмотрите ещё и в сторону рекуператора иначе придется брать кондеи помощнее ну и платить больше как за них так и за электричество.
Рекуператор не обязательно покупать, есть видосики на Ютубе как сделать своими руками из жести, но это на любителя я просто купил лосней. У меня работает 24×7 уже 6 лет, ночью в спальнях днём переключаю на ливин эрию. Это тоже было не идеальным решением, но почти в 2 раза дешевле.
Сегодня я бы у себя сделал 2 отдельных системы. Первая на все спальни, а вторая на ливин эрию. В каждой системе фильтр + рекуператор (он же сбалансированная вентиляция) + канальный кондей и добавил бы ещё канальный осушитель (у меня тут зимой бывает под 100% влажности месяц подряд). Да не дёшево, но того стоит.
А да никаких умностей в управлении и уж тем более облаков даже на пушечный выстрел я бы не подпустил, но это имхо. По моему умный дом это не тот которым можно управлять с телефона, а тот которым НЕ нужно управлять вообще и нет потребности в интернете/локальной сети. Все должно работать и через 20 лет после того как вы решите продать дом кому то у кого лапки и сено, ну разве что замена расходников в фильтрах не входит в это требование.
Ну не знаю, в наших пинатах фермеры (не все конечно) коровам на шеи вешают ошейники с жпсом и электрошоком. Зачем? Потому что так можно сделать виртуальный забор. Координаты отслеживаются по жпс и при выходе коровы за пределы участка ее бьёт током. Так дешевле чем заборы делать + там ещё пытаются добавить датчиков аля пульсометры и все такое что бы ещё и за здоровьем следить что бы надои выше были.
В общем без электроники тоже можно обойтись, но результаты заметно хуже получаются это значит, что в долгую почти все фермеры будут этим пользоваться. Разведение оленей в этом контексте это как суперпупер органик шмарганик мы упоротые фанатики не пользуемся вашими бесовскими технологиями хозяйство. Ну будет парочка, но большинству не важно существует они или нет, а массовое сельхоз производство уже давно без электроники не может обойтись иначе 8 миллиардов не прокормить.
Ставишь бряку в файле xxx.rs подключаешь какую нибудь зависимость где есть файл с тем же именем и твоя бряка срабатывает в обоих. Я как то неудачно назвал файл очень популярным именем и получилось что одна бряка срабатывала в 5 местах - можете сами представить насколько это помогает отладке.
Допустим бряка сработала и к счастью где надо и нужно посмотреть строку. Так сложилось что мне надо дебажить много нетривиального динамически сгенерированного эскуэля, там вот строки с квериками получаются длинными, и дебагер или вскод (я не разобрался кто виноват) заботливо для вас обрезает строки, можете представить как это помогает в отладке.
И вот наконец то бряка сработала и там где надо, и даже строка с квериком оказалась не очень длинная, но у вас цикл по контейнеру в функциональном стиле т.е. лямбда в лембде и лямбдой погоняет. В студии я просто перемещаюсь по стэку и все локальные данные доступны, а вскоде это боль 80 уровня понять кто на ком стоит категорически не возможно.
Там ниже пишут про иронию сарказм и прочее в контексте принтфа вместо отладчика так вот это ни фига не ирония и не сарказм потому что не примитивная отладка в расте это настоящая боль, а когда она примитивная то оказывается она и действительно не нужна.
У меня тут парсинг вашего русского языка выдал ошибку неоднозначности. Есть два варианта как это можно прочитать:
не (превращаются во второй контур логики и перехватываются как можно ближе к точке возникновения) == не второй или не перехватываются
не превращаются во второй контур логики и перехватываются как можно ближе к точке возникновения == не второй, но перехватываются
Так вот если первый вариант верен то я с вами полностью согласен, а если второй то категорически не согласен.
Я почти согласен с автором статьи, в плюсах эксепции (и то как он их правильно использует - кэтчи как можно дальше от траев по стэку) конечно очень удобно, а экспектед имхо не взлетит без аналога растовского ?.
С другой стороны (я не проверял все комментарии) я не нашел упоминания о том, что в расте паники по умолчанию на многих платформах это как раз и есть эксепции. Документация рекомендует не перехватывать паники просто так, а делать это на границе раста и других рантаймов.
Это рекомендация сугубо идеологическая, я перехватываю паники точно также как автор статьи эксепции - как можно дальше/глубже по стэку от самой паники. Это позволяет в расте получить идеальный сетап, резалт для того что нужно обработать по месту и эксепции для залогировать и продолжить для всего остального.
Где же нужно ставить кэтчи? В цикле обработки сообщений/команд/коннекций/реквестов/итд. Главный маркер здесь какой то цикл который запускает независимые друг от друга вычисления. Тогда эксепция просто абортит какое то одиночное вычисление, а цикл продолжается.
В расте если у меня нет кода обработки ошибочного резалта, то я просто вызывают экспектэд и получаю разумное сообщение об ошибке + опционально стэк тржйс + могу ещё и бряку поставить - очень удобно.
Все эксепции обычно обрабатываются одинаково - залогировать и продолжить поэтому типизация эксепций имеет мало реального значения достаточно одного типа, как в расте, - паника. Тогда как обработка ожидаемых ошибок по настоящему разная и возможность задать тип ошибки очень важно.
По-моему, в расте обработка ошибок сделана самым лучшим из всех мэйнстрим языков способом просто игнорируйте рекомендации не ловить паники, но делайте это с умом.
Вы теоретик, а я практик. У меня был блок на 450 ват чето там известное сильвер под разогнанный райзен 5990х + видяха (не топовая) Радеон 570х. Все прекрасно работало. В стресс тесте проц 180 ват тянул, видяха под сотню. Да все вместе конечно никогда не было, но 200 ват легко набиралось. Был не потому что сгорел по причине не справился, а потому что помещение где стоял комп затопило к херам в том числе комп под напряжением.
Так что разговоры про какие то там +30-100% запаса мощности - полная маркетинговая чушь. Всегда беру по самому минимуму и ни единого разрыва за 20 лет.
Так я и не предлагаю тестировать каждый билд. Я к тому, что появление этих функций в стандарте буквально ничего не меняет. Вы можете их смело игнорировать пока не наткнетесь на реальную проблему, что случится даже не в текущих мастер версиях компиляторов, а только в тех которые ещё только заражаются и то может быть. К тому времени когда вы наткнетесь на реальную проблему уже будут примеры как правильно использовать эти инструменты, что бы проблему решить. Сегодня эти инструменты просто ничего не делают и понять как их правильно использовать решительно не возможно.
Я вот тут ворвусь в разговор, я вижу, что вы прекрасно понимаете, что и отмывка и начало жизни это просто декларации тела этих функций тождественны айдентити. Это значит что все эти заморочки существуют только в компил тайме и то не во всех компиляторах. Это я к чему? А к тому что УБ настоящее в вашей программе из вакуума ветром не надаует к вам в бинарь. Единожды собранный и протестированный бинарь продолжит работать как надо несмотря ни на какие извращения. А если ещё проще то ни отмывка ни начало жизни использованные вами правильно и по назначению не дают индульгенцию на не тестирование. И обратное тоже верно если вы протестировали код с якобы УБ такого рода и он работает так как вы ожидаете то смело можете слать в пешее всех кто кричит про УБ в вашем коде.
Мне во многом нравится Раст, но там тоже есть подобные мегко говоря странности, например взятие (но без последующего использование) мут указателя на объект у которого есть действующие конст ссылки обьявленно УБ само по себе. Я думаю в рамках все той же логики компиляторщиков, типа нехер лезть в наши закрома даже если мы ещё не придумали как это использовать против вас сегодня ради оптимизаций, но в будущем мы то точно придумаем. Я вот больше практик, работает сегодня и по другому никак/дорого/да просто лень ну и чё? Будет конкретно проблема будем исправлять, а пока и так сгодится, а лондерами пусть пользуются сначало те кто их придумал и на реальных примерах покажут как правильно а как нет.
Спасибо за разъяснения, а то самому лень было смотреть.
Вы хорошо разбираетесь в с++ (и уверен не только в нем), но довольно грубо и высокомерно доносите свою позицию - это если что был сейчас комплимент. Я думаю что понимаю цену и причины подобного стиля общения т.к. сам кажется примерно такой же. Вы мне нравитесь и я бы с вами вероятно сработался.
Ну вообще можно, начиная с ц++17 есть перегрузка по & и &&. Можно сделать копию только для рвалью, для лвалью оставить без копии. Т.е что то типа
Но проще конечно просто отдельный метод(ы) иметь мутабельный вместо оператора. Смысл в том, что даже в те времена когда этот класс строки писали можно было сделать правильно, а описываемые баги это НЕ проблема cow, а проблема конкретно этой реализации, хотя в культе тож самое насколько я помню. В реальности же менять часть строки приходится настолько редко, что отдельные методы и правильно и эргономично, а конкретно с коу перегрузка не константного оператора индексации который возвращает ссылку это ошибка дизайна.
Но да оператор не воробей зарелизишь не исправить без поломки совместимости.
Переписать все на с++23 с дедюсит зис.
Хотя я тут подумал, с++23 не нужен. Просто добавить конст к перегрузке которая конст чар и возвращает.
А можно я тоже ворвусь с вопросом. Мне вот тоже не очевидно даже после прочтения куска стандарта что
Это одно и тоже. А именно мне не понятно как компилятор парсит случай с (). Вообще говоря это не однозначная с точки зрения синтаксиса конструкция т.к. это может быть и выражение инициализации рвалью войд (или ещё по другому это можно считать войд литералом) так и сигнатурой функции которая ничего не принимает и ничего не возвращает. Единственное что могу предположить, что токены внутри деклвал трактуются как выражение == инициализация, а не как тип.
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0146r1.html
Многа букав, но там есть хороший разбор альтернатив и одна из алтернатив как раз 0 размер и описание что поламается - итераторы.
Папир не принят и я не смог найти что с ним не так и почему не принят.
В общем то сейчас ровно то же самое за исключением того что хранить значение войд нельзя. Создавать можно - (void)0, читать/писать тоже можно - дефолтовый конструктор и любые функции без пераметров. Только хранить нельзя. Почему нельзя я не знаю, но раз все остальное можно, а хранить нельзя очевидно была причина иначе бы сделали. Поэтому вам нужно сначало найти причину почему хранить войд значение нельзя, а уже имея причину можно понять почему размер 0 не поможет.
Наверное правило любой лвалью должно иметь свой адрес не такое уж и глупое и для чего то нужно, а не просто так. Я думаю это суть проблемы. Вероятно отсутствие различимого адреса как то сильно усложняет код ген или анализ или оптимизации или вообще жесткое требование абстрактной машины в чьи инструкции все преобразуется.
Ну например
Мне кажется ваши комментарии выше в этой ветке исключительно теоретические т.к. в принципе не способные что то изменить - даже мнение других людей по этому вопросу. Следуя логике комментария на который я отвечаю это бессмысленно.
Возникает противоречие либо все ваши коменты в этой ветке бессмысленны либо все таки смысл создания такого языка есть, но вам этого делать не хочется. Это нормально, но тогда не удивляйтесь, что вашу идею с 0 размером войда никто серьезно не воспринимает т.к. обоснованно опасаются за проблемы которые это несёт. Вы утверждаете, что проблем нет коллективное мы вам не верим, мысленного экспиремента, даже не эксперимента, а просто обрывков рассуждений не достаточно.
Я думаю эта очевидная идея не пришла в голову только лишь вам. Я не знаю, но предполагаю, что ее реализация сложнее/хуже в реалиях 70х годов чем запрет на значение. У вас есть ллвм можете сами попробовать сделать Си где войд размера, 0 но имеет значение и посмотреть сколько проблем вылезет по дороге.
Будет отличное чтиво если ещё и статью по результатам запилите.
А эта теория уже была тогда? Ну так то да сишный войд это юнит, а невозможность инстанцирования вероятно сильно упрощает язык типа сколько байт занимает значение? А массив? А если это мембер структуры? А нужен ему адрес? А зачем? Да и кому вообще нужен массив/мемберы юнитов/войдов? Можно конечно заморочиться и сделать специальные оптимизации везде где встречается подобная дичь, но это как раз и есть усложнение компилятора. Можно ничего не делать, но тогда драгоценные байтики памяти/регистры для аргументов/результата тех времён расходуются. Думаю поступили практично нет
человеказначения нет проблем.Да никак, смиритесь.
Давайте копнем глубже, а зачем вам хороший врач? Представляю ваш шок сейчас, как зачем это же очевидно зачем. Неа, вообще не очевидно и позвольте мне объяснить что вам НЕ нужен хороший врач.
Когда у вас возникает самая частая проблема в любой сфере вы к кому обращатесь к хорошему специалисту или дешевому? Правильно к дешевому, просто потому что любой специалист справиться с самой частой проблемой.
Взгляд с другой стороны, если вы сами хороший специалист в чем то вам вообще интересно заниматься стандартными проблемами? Неа, вот вообще не интересно, хочется заниматься тем с чем другие не справляются.
Третий взгляд на проблему, если вы организатор бизнеса то ваша задача иметь много дешёвых специалистов для решения стандартных проблем и 1-2 хороших для сложных, так экономически рационально.
И так если у вас стандартная/частая проблема то вам не нужен хороший врач. Вы не интересны хорошему врачу, и бизнес будет рекоменжовать вам врача подешевле. Это правильно с любой стороны.
Если у вас сложная проблема то вам не повезло и вы все равно не сможете понять где хороший врач пока у вас не появится ваш собственный опыт лечения вашей проблемы, да даже и с опытом это будет угадайка.
Статистика может ответить на вопрос а был ли когда то в прошлом этот конкретный врач хорошим, и это конечно коррелирует с тем какой он сейчас, но у вас не будет доступа к статистике, а у кого он будет не будет знаний как это посчитать, а у кого будут знания не будет правильно накопленной статистики вот такая ирония.
В конечном итоге вам не важно хороший врач или посредственный вам важен хороший результат. Хороший результат возможен и с посредственным врачом тоже, но с меньшей вероятностью. Смысл в том что хороший результат не гарантирован в случае хорошего врача, поэтому я лично вообще не парюсь выбором и иду туда где удобней, но у меня и проблемы стандартные.
А у кого проблемы не стандартные то вам не повезло.
Из опыта использования балансированой рекуперации + кондиционеры в каждой комнате более 6 лет уже, хочу сказать что как и все любители (в том числе и я) вы допустили классическую ошибку не поставив входной фильтр. Он действительно нужен. У меня в рекуператоре стоят фильтры, но приходится лазить и чистить их, а мой чердак значительно менее удобный чем у вас максимальная высота 1 метр.
Для увеличения эффективности вентиляции посмотрите в сторону сбалансированной вентиляции это когда приточная + вытяжная в каждой комнате. Ну а если решите ставить кондиционеры то посмотрите ещё и в сторону рекуператора иначе придется брать кондеи помощнее ну и платить больше как за них так и за электричество.
Рекуператор не обязательно покупать, есть видосики на Ютубе как сделать своими руками из жести, но это на любителя я просто купил лосней. У меня работает 24×7 уже 6 лет, ночью в спальнях днём переключаю на ливин эрию. Это тоже было не идеальным решением, но почти в 2 раза дешевле.
Сегодня я бы у себя сделал 2 отдельных системы. Первая на все спальни, а вторая на ливин эрию. В каждой системе фильтр + рекуператор (он же сбалансированная вентиляция) + канальный кондей и добавил бы ещё канальный осушитель (у меня тут зимой бывает под 100% влажности месяц подряд). Да не дёшево, но того стоит.
А да никаких умностей в управлении и уж тем более облаков даже на пушечный выстрел я бы не подпустил, но это имхо. По моему умный дом это не тот которым можно управлять с телефона, а тот которым НЕ нужно управлять вообще и нет потребности в интернете/локальной сети. Все должно работать и через 20 лет после того как вы решите продать дом кому то у кого лапки и сено, ну разве что замена расходников в фильтрах не входит в это требование.
Ну не знаю, в наших пинатах фермеры (не все конечно) коровам на шеи вешают ошейники с жпсом и электрошоком. Зачем? Потому что так можно сделать виртуальный забор. Координаты отслеживаются по жпс и при выходе коровы за пределы участка ее бьёт током. Так дешевле чем заборы делать + там ещё пытаются добавить датчиков аля пульсометры и все такое что бы ещё и за здоровьем следить что бы надои выше были.
В общем без электроники тоже можно обойтись, но результаты заметно хуже получаются это значит, что в долгую почти все фермеры будут этим пользоваться. Разведение оленей в этом контексте это как суперпупер органик шмарганик мы упоротые фанатики не пользуемся вашими бесовскими технологиями хозяйство. Ну будет парочка, но большинству не важно существует они или нет, а массовое сельхоз производство уже давно без электроники не может обойтись иначе 8 миллиардов не прокормить.
Ставишь бряку в файле xxx.rs подключаешь какую нибудь зависимость где есть файл с тем же именем и твоя бряка срабатывает в обоих. Я как то неудачно назвал файл очень популярным именем и получилось что одна бряка срабатывала в 5 местах - можете сами представить насколько это помогает отладке.
Допустим бряка сработала и к счастью где надо и нужно посмотреть строку. Так сложилось что мне надо дебажить много нетривиального динамически сгенерированного эскуэля, там вот строки с квериками получаются длинными, и дебагер или вскод (я не разобрался кто виноват) заботливо для вас обрезает строки, можете представить как это помогает в отладке.
И вот наконец то бряка сработала и там где надо, и даже строка с квериком оказалась не очень длинная, но у вас цикл по контейнеру в функциональном стиле т.е. лямбда в лембде и лямбдой погоняет. В студии я просто перемещаюсь по стэку и все локальные данные доступны, а вскоде это боль 80 уровня понять кто на ком стоит категорически не возможно.
Там ниже пишут про иронию сарказм и прочее в контексте принтфа вместо отладчика так вот это ни фига не ирония и не сарказм потому что не примитивная отладка в расте это настоящая боль, а когда она примитивная то оказывается она и действительно не нужна.
У меня тут парсинг вашего русского языка выдал ошибку неоднозначности. Есть два варианта как это можно прочитать:
не (превращаются во второй контур логики и перехватываются как можно ближе к точке возникновения) == не второй или не перехватываются
не превращаются во второй контур логики и перехватываются как можно ближе к точке возникновения == не второй, но перехватываются
Так вот если первый вариант верен то я с вами полностью согласен, а если второй то категорически не согласен.
Я почти согласен с автором статьи, в плюсах эксепции (и то как он их правильно использует - кэтчи как можно дальше от траев по стэку) конечно очень удобно, а экспектед имхо не взлетит без аналога растовского ?.
С другой стороны (я не проверял все комментарии) я не нашел упоминания о том, что в расте паники по умолчанию на многих платформах это как раз и есть эксепции. Документация рекомендует не перехватывать паники просто так, а делать это на границе раста и других рантаймов.
Это рекомендация сугубо идеологическая, я перехватываю паники точно также как автор статьи эксепции - как можно дальше/глубже по стэку от самой паники. Это позволяет в расте получить идеальный сетап, резалт для того что нужно обработать по месту и эксепции для залогировать и продолжить для всего остального.
Где же нужно ставить кэтчи? В цикле обработки сообщений/команд/коннекций/реквестов/итд. Главный маркер здесь какой то цикл который запускает независимые друг от друга вычисления. Тогда эксепция просто абортит какое то одиночное вычисление, а цикл продолжается.
В расте если у меня нет кода обработки ошибочного резалта, то я просто вызывают экспектэд и получаю разумное сообщение об ошибке + опционально стэк тржйс + могу ещё и бряку поставить - очень удобно.
Все эксепции обычно обрабатываются одинаково - залогировать и продолжить поэтому типизация эксепций имеет мало реального значения достаточно одного типа, как в расте, - паника. Тогда как обработка ожидаемых ошибок по настоящему разная и возможность задать тип ошибки очень важно.
По-моему, в расте обработка ошибок сделана самым лучшим из всех мэйнстрим языков способом просто игнорируйте рекомендации не ловить паники, но делайте это с умом.
Ну хорошо, расскажите нам всем, какие симптомы бывают когда поставили блок питания который не вытягивает по мощности?
Вы теоретик, а я практик. У меня был блок на 450 ват чето там известное сильвер под разогнанный райзен 5990х + видяха (не топовая) Радеон 570х. Все прекрасно работало. В стресс тесте проц 180 ват тянул, видяха под сотню. Да все вместе конечно никогда не было, но 200 ват легко набиралось. Был не потому что сгорел по причине не справился, а потому что помещение где стоял комп затопило к херам в том числе комп под напряжением.
Так что разговоры про какие то там +30-100% запаса мощности - полная маркетинговая чушь. Всегда беру по самому минимуму и ни единого разрыва за 20 лет.
Даже не рядом
Так я и не предлагаю тестировать каждый билд. Я к тому, что появление этих функций в стандарте буквально ничего не меняет. Вы можете их смело игнорировать пока не наткнетесь на реальную проблему, что случится даже не в текущих мастер версиях компиляторов, а только в тех которые ещё только заражаются и то может быть. К тому времени когда вы наткнетесь на реальную проблему уже будут примеры как правильно использовать эти инструменты, что бы проблему решить. Сегодня эти инструменты просто ничего не делают и понять как их правильно использовать решительно не возможно.
Я вот тут ворвусь в разговор, я вижу, что вы прекрасно понимаете, что и отмывка и начало жизни это просто декларации тела этих функций тождественны айдентити. Это значит что все эти заморочки существуют только в компил тайме и то не во всех компиляторах. Это я к чему? А к тому что УБ настоящее в вашей программе из вакуума ветром не надаует к вам в бинарь. Единожды собранный и протестированный бинарь продолжит работать как надо несмотря ни на какие извращения. А если ещё проще то ни отмывка ни начало жизни использованные вами правильно и по назначению не дают индульгенцию на не тестирование. И обратное тоже верно если вы протестировали код с якобы УБ такого рода и он работает так как вы ожидаете то смело можете слать в пешее всех кто кричит про УБ в вашем коде.
Мне во многом нравится Раст, но там тоже есть подобные мегко говоря странности, например взятие (но без последующего использование) мут указателя на объект у которого есть действующие конст ссылки обьявленно УБ само по себе. Я думаю в рамках все той же логики компиляторщиков, типа нехер лезть в наши закрома даже если мы ещё не придумали как это использовать против вас сегодня ради оптимизаций, но в будущем мы то точно придумаем. Я вот больше практик, работает сегодня и по другому никак/дорого/да просто лень ну и чё? Будет конкретно проблема будем исправлять, а пока и так сгодится, а лондерами пусть пользуются сначало те кто их придумал и на реальных примерах покажут как правильно а как нет.