All streams
Search
Write a publication
Pull to refresh
-3
0
Send message

Для меня самая большая проблема с растом это дебаг. Я использую ВСкод на винде и пробовал оба дебагера мракософтовский оказался по лучше, но все равно ставишь бряку в каком нибудь мод.рс и он останавливается во всех зависимостях которые выполняют код в мод.рс в этой строке по номеру. Это какой сюр конечно. Посмотреть строку целиком длиннее какой то фиксированном величины не возможно, а у меня много скульных квериков которые генерируется, а не константы. Есть интеграционный тест, который тестируют асинхронщину, запускаю под отладчиком никаких проблем, запускаю через карго где то паникует в токио, но у меня паники отлавливаются на границе с ффи и тест все равно зелёный, а почему оно паникует не понятно. Пропустить код зависимостей при пошаговом исполнении нельзя, а то рискуешь все начинать сначала т.к. твой код тоже пропускается. Значение констант сгенерированных макросами не отображается ни в айдэе ни в отладчике(он вообще ни про какие константы не в курсе). Многие переменные "оптимизированны" даже в дебажной/дев сборке и увидеть значение в отладчике не получается.

Короче по сравнению с отладкой в настоящий студии это конечно испытание времён 2000 годов, а то и раньше.

Стало интересно, я с вами как бы согласен если ваши формулировки немного успокоить. Ну например, не всем это надо, ничего страшного от калькуляторов на экзамене не случится. Кому хочется и кого соответственно получается (а это связано) тот пусть и развивает устный счёт.

А к вам у меня вопросы, а почему вы так беспокоитесь? Ну будет меньше тех кто умеет считать в уме, и чё? Почему вам лично так важно что бы ДРУГИЕ люди (и при том вообще вам не знакомые) что то умели?

Я точно не знаю кажется с 14, взрослому в зависимости от того кто этот взрослый, если это первый эпизод и никто не пострадал, то скорее всего почти ничего. Какие нибудь часы общественной работы штраф (если есть чем платить) ну и всё.

Эти рэйды обычно происходят по ночам когда магазины закрыты и там никого нет, я не слышал что бы кто(кроме самих рэйдеров) пострадал.

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

Что бы попасть в тюрьму нужно реально стараться, совершить насильственнное преступления и не раз и с пострадавшими и/или убитыми. Тогда конечно шансы почти 100%. Ну как можно было уже догадаться в основном это конечно Маори.

А с подростками все ещё интереснее, если преступник из малообеспеченной семьи (читай маори) то ему ещё предложат пройти какую нибудь программу, например на халяву поучиться играть на каком нибудь муз инструменте ну и сам инструмент ещё могут дать или спортом или ещё каким нибудь артом.

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

Приезжайте ко мне в НЗ, вы тут очень быстро переобуетесь. Чувство собственного достоинства здесь у некоторых элементов столько, что я в следующем году валю в Австралию. Школы либеральные, учителя на самом деле хорошие, ну по крайней мере в младшей школе, только это все НИХУЯ не работает. Маори тинеэйджеры буквально с 10 лет занимаются рэм рэйдами, это когда у вас угоняют машину и на ней въезжают в магазин, что бы забрать немного бухла и закуси. Ущерба малому бизнесу от таких покатушек сотни тысяч, этим ребятам, и я щас серьезно, с зашкаливающем чувством достоинства, настолько зешкаливающим, что они считают себе выше остальных людей, ничего не делают. Копы их даже не ловят, потому что их все равно низя наказать, потому что малы и потому что Маори.

Смысл моего спича в том, что "нельзя просто так создать тепличные условия и пусть все цветы цветут", что бы цветы цвели нужно безжалостно выжигать сорняки. А у нас тут как раз эти сорняки поливают удобрениями щедро блять поливают, но почему то цветов из них не вырастает.

Технические причины обычно(но не факт что в этом случае тоже) означают, что они пилят крипту, а примерно 146% крипты написано на расте и поэтому ты либо все переписываешь с нуля на жс либо остаёшься в эко системе раста.

Все в общем то нормально с типажами за исключением того что я не могу реализовать не свой типаж для не своего типа. Да да очередная защита не понятно кого не понятно от чего, но факт в том что я даже не могу из за этого организовать СВОИ типы по разным модулям потому, что тогда меня начинает бить по рукам бланкет реализация. А ещё есть такие типы и такие трэйты которые НИКОГДА не встретят друг друга кроме как в вашем коде, какого хера мне запрещают реализовывать трэйты для типов в СВОЕМ модуле, добавьте ключевое слово или атрибут override что бы был явный опт ин в это и всё.

А я не мечтал, я просто писал и пишу так, что бы было понятно, а не что бы кому то угодить с правилами, ну и соответственно принимал последствия, 2/3 моя высшая оценка по сочинению, зато мне так было намного проще чем если бы я заставлял себя писать "правильно"

Всегда было интересно, а за чем сначало учить "правильно" писать, а потом ещё и учить "правильно" читать/произносить. Может всем будет проще сразу делать и то и то просто правильно? Ответ - так исторически сложилось конечно все объясняет, но тогда где же наши твердые знаки на концах слов и прочие "правильные" вещи?

Да, спасибо что напомнили его имя, вот тот самый ток https://m.youtube.com/watch?v=2FAi2mNYjFA

Ну может и так только код все равно продолжит работать, а не

а с последними невозможны вообще никакие действия.

Т.е. действия вполне возможны и результат тоже ясный - нан, но вот флаг эксепции может стоять, а может и нет - ну ладно.

Я из мира с++, а тут у нас можно почти все что угодно, https://en.cppreference.com/w/cpp/types/numeric_limits/signaling_NaN

Вы забыли про инфы и не сигнальные наны. Их как будете сортировать? Они ж как нулы в эскуэле, не сравнимы сами с собой, а наны ещё и ни с чем другим. Вот когда их исключите из массива вот тогда у вас вик ордеринг получится. Хотел написать сначало, что стронг, но кажется два нуля не позволяют это сказать, но я не уверен. Правильная сортировка даблов это сложно.

В целом я с вами согласен, но на практике такой тип скорее всего будет и так маленький по размеру, поэтому такая оптимизация будет скорее всего бессмысленной, ибо вам придется хранить такие объекты в куче + виртуальность либо в варианте либо иметь 2 контейнера. В общем на практике найти применение этому сложно.

Зачем нужен этот новый оператор? Самый простой и обоснованный ответ это автоматическая генерация всех остальных операторов. Самое важное в нем то, что компилятор может предоставить дефолтную реализацию. Что это значит на практике?

struct X{
private: int data = {};
public: constexpr auto operator <=>(const &X, const &X) = default;)
}

Все, объекты класса Х теперь можно сравнивать друг с другом - не надо писать километры бойлер плэйт кода. Когда это не сработает? Тогда когда есть члены класса у которых нет дефолтного оператора <=> тогда придется немного повозиться и определить аж 2 оператора: == и вот этот новый спэйсшип, остальные будут сгенерированы сами, но это все равно сильно меньше чем дедовским способом и самое главное у вас не будет места для тупой опечатки, семантика всех операторов будет согласованной и корректной.

Есть ещё одно место зачем он нужен, например вызов дженерик сортировки для массива флотов/даблов это вообще-то УБ, внезапно да? Вот у этих самых сторонников дедовских способов щас уверен подгорело, сто лет так пишем и никаких УБ не видели. Есть даже целый ток от Шона (забыл фамилию), который из адоба, который детально объясняет почему так. Так вот что бы писать алгоритмы правильно и выставлять наружу требования к типам собственно и нужны эти новые типы одеринга и именно поэтому они разные, а не как тут товарищ выше предлагал все в один энум запихать. Алгоритм может быть перегружен для правильной сортировки даблов как раз за счёт разных типов одеринга, да и чего угодно с партиал одерингом, называется топологическая сортировка и работает совсем не так как ваши эти квик сорты, которые вообще говоря требуют вик одеринга.

Зачем на практике нужно различать Вик и Стронг я пока не нашел, а в чем разница спросите вы? Ну при Стронг одеринге и == ГАРАНТИРОВАНО можете использовать хоть правый хоть левый операнд в ЛЮБОЙ функции и получать один и тот же результат. Ну это только если человек который реализовывал спэйсшип возвращающий Стронг ордеринг понимал в чем разница и не допустил ошибок.

Я хз где это ограничение вообще можно применить, ну вот Инты у них Стронг ордеринг, а у структуры где есть много полей, и сравнение ведётся только по части из них по определению Вик ордеринг, ну и чё?

Этот момент конечно очень слабо освящён и допустить ошибку очень просто если сами реализуете, а не компилятор дефолт генерит можно по ошибке/не знанию/не пониманию объявить тип возвращаемого значения оператора спэйсшип как Стронг ордеринг, но это почти навярнека ошибка иначе вы бы использовали дефолтную реализацию.

Опишите подробнее ваш не удачный опыт использования:

  1. с++ или язык с рефлексией

  2. рантайм/позднее связывание/интерфейсы или как здесь шаблоны/дженерики/компилтайм

  3. Описание самих зависимостей обрабатывается в рантайме или как здесь в компил тайме

  4. Какая именно боль у вас от ДИ

Ответы на эти вопросы сильно меняют ощущения от использования. Вот автор выставляет одним из главных достоинств скорость работы, которая ему важна в лоу латенси коде, а на самом деле сам факт компил тайма намного важнее скорости.

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

А ещё вам не надо на каждую зависимость писать интерфейс и еслииу вас моки то при каждом изменение интерфейса вам не надо делать его 3 раза, а ещё в дебаге вы увидите настоящие типы ВСЕХ зависимостей сразу и одновременно, а не какой-нибудь пимпл который пока не пробьешься сквозь стэк не узнаешь и то по одной штуке за раз. Ну и само собой без виртуальных вызовов конечно же сильно быстрее, но это уже как раз вишенка, а не сам торт.

Я уже не вспомню и навярнека буду сейчас использовать не правильные термины, но здесь на Хабре была когда-то давно статья где рассказывается, что энергия уходит на смену состояния вентилей, так вот придумали такую схему при которой эта энергия запасается и может быть высвобождена при реверсе состояния. В обычной же схеме ничего не запасается, а цпу работает как сопротивление - всегда нагревается при смене состояния. Таким образом новая схема на какие то хер десятых потреблела меньше энергии и меньше грелась. Так вот, вот эту энергию, необходимую для смены состояния, и можно считать полезной работой. И тогда КПД цпу действительно в районе 1% процента.

если сделать его отдельно, то снова беда: один и тот же оператор вызывает то operator +, то метод .Add() в зависимости от того что справа.

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

В дополнение к тому что выше, частично можно, пишите код в функциях/лямбдах с пометкой constexpr.

Не любой код можно запихнуть в constexpr, не все УБ будут отловлены, но если компилятор ругнеться на УБ то это точно УБ, а не может да может нет как с ворнингами.

Программа может быть написана так, что желание или нежелание избежать UB на это не влияет

Извините, я не понимаю, что вы хотите сказать.

Я знаком с вопросом более чем

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

Из опыта я знаю, что если люди допускают небольшие не точности ВМЕСТЕ с не корректными формулировками, то это верный индикатор не полного понимания проблемы.

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

  1. Рекомендую ознакомиться с историей вопроса и пройти по всем ссылкам https://stackoverflow.com/questions/48067323/c-why-cant-this-be-a-nullptr в дополнение к стэку так же рекомендую заглянуть в современный стандарт https://en.cppreference.com/w/c/language/operator_member_access смотрите секцию dereferencing, а ещё вы можете найти здесь же на Хабре статьи про УБ + ещё здесь есть серия статей от компилятора строителя, можете написать в личку этим людям, а ещё можете написать вопрос в комитет для разъяснения, вот прям тут вызывайте российского представителя к сожалению не могу правильно написать имя юзера из мобильного Фокса, antoshka из Яндекса

  2. Даже не собираюсь, УБ по определению может сгенерировать любой код, в том числе тот на чье поведение вы расчитываете, но это не значит что код с таким поведением будет сгенерирован в другом компиляторе включая тот же самый с другими флагами.

Information

Rating
4,518-th
Registered
Activity