Есть ли гендерный дисбаланс в айти? Есть - это факт который никто не отрицает. Есть ли разница в работе мозга мужчин и женщин - тут уже сложнее в зависимости от того что вы игнорируете как не относящиеся к вопросу и как в целом производите измерения. Я это к чему? К тому что не составит труда сделать исследования которые продемонстрируют оба ответа. Дело в том что бы доказать тотальность в данном случае тождество между мозгом мужчин и женщин нужно значительно больше усилий чем доказать обратное. Чтобы доказать что мозги работают все таки по разному достаточно 1 исследования в ЛЮБОЙ области работы мозга, а вот доказать тождество одной парой, даже набором статей НЕ достаточно. Короче здравый смысл заставляет сильно сомневаться с таким сильным утверждением, что мозги работают одинаково и что бы убедить людей вам придется предоставить очень серьезные доказательства. Те что вы предоставили не вызывают достаточного доверия.
Наличие детей в семье обоих полов говорит о прямо противоположном - у детей мозги ни чем не промыты, а разница в поведении и в том как они справляются с задачами буквально очевидна и сильно коррелирует с полом. Т.е. недостаточно просто предоставить набор исследований не вызывающих доверия которые просто констатирует отстувие разницы нужно ещё как то объяснить почему ее нет, почему физиология не влияет и т.д. Короче шансов у вас убедить большинство в том что разницы нет очень мало.
НО это все фигня - детали. Принципиальный вопрос звучит так - да есть дисбаланс, но почему вы считаете, что это проблема? Более частный вопрос почему вы думаете что устранение дисбаланса решит проблему? А может (крамольная мысль) усиление дисбаланса это лучше?
Начните с основ с пастоновки вопроса/проблемы. Объясните почему 50/50 имеет хоть какой то объективный смысл? Короче с мат частью в вашей статье много проблем она только выглядит наукообразной, но по существу, банальное рацианализаторство.
Лженерики в расте намного слабее темплэйтов плюсовых, как и поддержка компил тайм вычислений в с++ лучше, так что пока раст не догонит с++ в этих аспектах у с++ ещё пока есть чем уделать раст.
Извините, я написал ответ, а сраный хабр его куда в дев нул отправил, а писал я долго и было обидно, но переписывать это с телефона я больше не буду - код на хабре с телефона это просто невыносимая боль. В кратце да, template<template...> для концептов не завезли, что делает их просто сахаром без принципиальных новшеств и менее выразительными чем то же самое на сфинае, но ниша для них есть конечно.
Вы ими то пробовали пользоваться как следует, а не поиграться? Концепты ущербные примерно такие же как лженерики(опечатался, а потом понял что это лучшее их описание) в расте. Без сфинае с++ шаблоны вообще ни о чём. Для самостоятельного курения почему я так считаю вам стоит попробовать реализовать аналог шаблон шаблона на концептах - это не возможно. Если убрать сфинае и параметр паки из с++ то его можно в тот же день закапывать. Единственное, что у страуса получилось так это шаблоны (и то случайно) и это то на что я купился ещё студентом 25 лет назад. Не будь шаблонов, я бы даже и не сунулся в плюсы.
В моем регионе последние пару лет что я слежу все, я повторю ВСЕ из примерно 2 десятков открытых вакансий в любой момент времени это крипта. 3 года назад мне повезло увидеть 1 вакансию на расте и не крипта.
Т.е. вы больше не возражаете, что атрибут на стэке просто опасен. Хотя возможно вы и раньше не возражали, но тогда я не очень понял о чем вы со мной дискутировали.
В любом случае я почитал эти много букв, но мало смысла проползал. Поведение атрибута совершенно гомогенно, что для стэка, что для параметра - полная индульгенция на весь лайфтайм. Т.е. ничего компилятор из декларации вызываемой функции НЕ учитывает при анализе использования стэк переменных, т.е. по простому будет требовать атрибут на стэке если переменная явно не инициализирована в теле компилируемой функции.
Это просто нельзя разрешать использовать т.к. принудительно запрещает компилятору и стат анализаторам сообщать о любых проблемах о которых сегодня они сообщают в каждом месте.
Массовый сценарий - при переходе будет туча эрониус бихэвиоров что-то конечно пофиксят, ну а что-то будет помечено этим атрибутом и тогда ЛЮБОЙ код с такой переменной должен приниматься компилятором как есть без права на ворнинг.
Это хуже чем сейчас само по себе + сейчас я поймаю такую переменную санитайзером и без лишних приседаний сразу пойду это чинить, а с этим атрибутом мне придётся поднимать гит и смотреть это санитайзер глючит или тот кто поставил атрибут был не прав ну или возможно кто то после него - короче лишние приседания перед тем как собственно чинить.
Вот кто то спросит на стэке - у меня эрониус бихэвиор, что мне делать - да просто добавь атрибут - спасибо помогло, а мне потом это чинить - спасибо я такое буду у себя на работе запрещать.
Не за ерониус бихэвиор который ворнинг, а у нас они в ероры принудительно превращаются по настоящему спасибо, а этот опт оут будет просто запрещен - безопаснее по старинке вручную ворнинг подавить в каждом месте чем вот это.
А как тогда получилось у других языков? Там по вашему нету дллек или виртуальных методов? Мало того у них там гарантия даётся, а не какой то невнятный ерониус бихэвиор.
Компилятору будет доступна только декларация прототипа
Я вам секрет чуть ниже открою, компилятору вообще ничего не нужно ни декларации ни определения.
Затем, что без этого атрибута будет erroneous behavior, поскольку компилятор не уверен, что функция запишет в переменную до того, как прочтёт из неё
Ну вот вы и подтвердили мои подозрения, что без использования этого атрибута на стэке он вообще не работает.
Предложите "более лучший" пропозал
Я просто скопирую то что УЖЕ работает в других языках.
Как сейчас в плюсах - на КАЖДОЕ использование неинит переменной компилятор/стат анализ кидает ворнинг. Нельзя одним махом взять и подавить все ворнинги ТОЛЬКО к этой переменной (можно в блоке, файле, программе). Т.е. инструменты требует от вас просмотреть каждый колл сайт и для каждого индивидуально решить фиксить или давить ворнинг.
Как теперь будет (проползал то уже приняли). Вы в ОДНОМ месте ставите атрибут и компилятор затыкается во ВСЕХ кол сайтах. Я не могу усилить форматированием слово во всех ещё сильнее, даже в тех кол сайтах которые ещё только БУДУТ написаны. Это делает проблему использования неинит переменных ещё опасней чем она есть сегодня.
Как это делается в других языках вы и сами можете посмотреть, я лишь могу предложить один из вариантов как это может выглядеть в цпп. Атрибут должен применяться исключительно и только к параметру функции, но не только в декларации, но ещё и в кол сайте.
void sample(){
int hz;
foo([[uninitialised]] &hz);
bar(hz);
}
void foo([[uninitialised]] int& hz){
auto garbage=hz;//error
hz=0;
auto var=hz;
}
void bar(const int& val){
auto var=val;
}
Если удалить атрибут в месте вызова фуу то будет 2 ошибки компиляции. В моем примере при этом для бара атрибут НЕ нужен ЕСЛИ у фуу в декларации тоже есть этот атрибут. Почему? Потому что функция в кол сайте которой есть этот атрибут гарантирует инициализацию аут параметра. Т.е. после вызова фуу хз точно инициализирована в том же самом скоупе (что это значит чуть позже).
Дальше функция фуу находится в чужой либе и вы не можете менять ее (ни декларацию ни определение) - да НЕ проблема ставите как и в примере атрибут в кол сайте, все тоже самое бар уже НЕ требует атрибута. Пришел Вася Пупкин через 5 лет поменял местами фуу и бар и/или вставил фуубар перед фуу и получил ошибку компиляции. И теперь сидит и курит почему так.
Внутри функции чей параметр помечен атрибутом при доступе к параметру ДО инициализации - ошибка компиляции. Ретурн или сроу ДО инициализации параметра - ошибка компиляции. Вызов не ноуэксепт функции/оператора ДО инициализации - ворнинг.
Если кол сайт с атрибутом завернут в трай кэтч, то индульгенция испаряется за пределами скоупа. Например если в моем примере бы фуу была внутри трай, а бар после или внутри кэтча то вызов бара это ошибка компиляции.
Я НИЧЕГО нового здесь не написал, а то что попало в стандарт тупо ещё опасней чем как сейчас.
Подождите, я не понял. Вот в вашем же примере (где атрибут только на стэке) если функция (без атрибута) будет сначало читать, а потом писать будет хотя бы ворнинг?
ИМХО использовать этот атрибут на стэке надо сразу запретить во всех гайдлайнах как опасный. Честно говоря я вообще не понимаю зачем этот атрибут для стэка?
Ещё раз перечитал текст, я начинаю подозревать, что без объявления переменной на стэке с атрибутом, НО пометкой параметра функции филл этим атрибутом компилятор ПРОДОЛЖИТ считать тело сэмпл эрониус.
Если я прав в своем подозрении, то это эпик фэйл и не зря так называемые лоббисты хотят разогнать плюсы и его комитет как проф не пригодных.
А можете подробнее рассказать про индетерминэйт? Из примера создаётся впечатление что этот атрибут стоит не там. В примере он описывает переменную на стэке и вы утверждаете что это говорит компилятору что все ок. Т.е. если функция филл вместо записи сначало прочитает, то все как раньше УБ.
С другой стороны если этот атрибут применить к параметру функции тогда это ИМХО как раз могло бы помочь компилятору диагностировать чтение из неинициализированной переменной.
Ну я не настоящий сварщик, но логически я не вижу как можно померять скорость распространения взаимодействия изолированно только в одном направлении. Исходя из физического смысла этой скорости вам необходимо поменять направление распространение иначе не существует способа определения момента начала/конца распространения. Дело то ведь не в том как синхронизировать часы, нужны то всего 1 часы, а в том как вообще понять когда начинать считать время, или для другого наблюдателя когда заканчивать считать.
Даже если НА САМОМ ДЕЛЕ ™ скорость распространения зависит от чего то, но мы не можем это никак обнаружить, то это просто не важно. Т.е. зачем замерять скорость распространения взаимодействия в одном направлении если на практике такой штуки нету, взаимодействия которыми мы можем управлять всегда туда/обратно, а те которые только к нам они для нас плохо предсказуемое будущее, а те которые от нас это прошлое.
Руку надо переносить на цифровую клавиатуру, хотя честно я понятие не имею как я набираю эти типы - т.е. это вообще не важно. Ну ещё конкретно у этого человека аллергия на цифры, глаза начинают чесаться при чтении, ну бывает, у меня вот аллергия на скобки, у вас ещё на что нибудь - это нормально хотя вероятно не лечится.
Эмбед платформы/СОКи/одноплатники на армах. Это НЕ микроконтроллеры и НЕ вайфай. Они все ещё 32 битные и будут такими ещё очень долго.
А про виндоус смешно было конечно. В общем что и требовалось удостоверить, дальше своего уютного мира вы не выходите, так зачем тогда навязываете свое видение как существенно превосходящее все альтернативы?
Дефайнить ключевые слова запрещено - не скомпилируется. С младшей школы в букварях учат 8 меньше 16 ровно в 2 раза, ну и далее по списку, а вот байт, ворд, дабл ворд, квадрипл ворд которые изначально и были заменили на шорт инт лонг от слабоумия. Зачем нормальным ЛЮДЯМ иметь в голове мапу слова на число и постоянно заниматься приседаниями что бы понимать что больше и что меньше и во сколько раз? Для этого есть числа, они лучше с этим справляются. СайзТ (как и в расте) это именно размер регистра во всех нормальных языках, а если вам байты (их количество) важно - ну например протокол реализовать, то там в 100500 раз лучше иметь и32 и т.д. вместо непонятного инта. Сразу видно, что вы дальше своей платформы ничего не знаете и крос платформ для вас это ругательства. Что написать в коде что бы не усложнять себе жизнь макросами и гарантировано иметь 64 бита везде?
Я не в курсе кто там у вас эталон правильности, но инженеров интела тоже в проф непригодных запишете с их у64, у128, у256, у512 для симд регистров?
Во-первых врапер НЕ нулабл, во вторых задеррекейчен, а в третьих в с++20 удален.
Для моей задачи (безопасная работа с нулабл ссылками) Т* НЕ подойдёт.
Безопасность на уровне опшинал через операторы - я тут не понимаю о чем вы. Вот операторы из опшионала для безопасности как раз таки надо удалить потому что это как раз и есть проблема писать не безопасно (*) легко, а безопасно (валью) сложно.
Вы листы то сами используете или только учите остальных о том какие они замечательные в стандартной библиотеке плюсов и как в расте буквально все без них страдают? Везде где я бы не увидел стд лист это был код джуна, не я конечно видел листы по делу, но они всегда были самописными и почти всегда на сях и опять же всегда про ноу лок + свой аллокатор в придачу. Я даже видел листы на массиве + фрилист нодов в одном флаконе, но не надо тут рассказывать про стд листы это мертвый груз плюсов как и стэк, а вместе с ними мертворожднные форвард листы. Очередь хоть как то юзабельна. Лучше бы комитет в свое время флат мапы принял вместо форвард листов и спан по раньше, но нет приходите в с++23 ну хоть на этом спасибо, хотя надеюсь что мне уже не придется этим пользоваться когда оно наконец то появиться у меня на работе.
Раст не идеален, дженерики откровенно слабы хоть работа над ними и ведётся, запрет реализации трэйтов на чужом типе вообще какая то шиза (сами оборачивайте миллион ероров и жрите молча дефолтные реализации трэйтов), конст противозачаточный, макросы наркоманские, дебаг ущербный, асинк вообще местами без костылей не компилируется, функционал шина вырвиглазная трехжтажная хрень с постоянными приседаниями на ровном месте, но все же я расту готов простить вообще все проблемы только хотя бы за то как он с зависимостями справляется.
Я был буквально в шоке, что добавить ЧУЖУЮ либу это 2 минуты работы, а не лять неделя как я вот прям щас мучаюсь в плюсах с либой из другой команды. Конаны шмонаны, смэйки и прочие вообще курят в сторонке и помолкивают. Вы когда на расте последний раз писали сериализацию? я ни разу, а на плюсах чуть ли не ежемесячно.
Хотите строку в энум и назад нате вам 10 способов один хуже другого. У нас в коде вообще нет сырых владеющих указателей, утечки? Полно, рэйсы? Куда ж без них родимых то, хотя все буквально обмазано мьютексами я вообще удивляюсь как оно ещё не тормозит. Шаред поинтеры вызывают деструкторы хер пойми в каких потоках ИНОГДА? - нет инструмент прекрасный, но гореть этим людям в аду за шаред поинтеры в стандарте, место им в бусте. Проезды по памяти? - это на десерт и хрен вы их найдёте без санитайзеров, а сборка с санитайзером на железке просто как пошаговая стратегия вместо риалтайма работает. Попробуйте собирите культю под санитайзером, не мы ее собрали конечно в итоге и щас даже автотесты под санитайзером завелись, но это все невероятно непросто. Получить стэк трэйс при логировании - удачи вам. Логирование? Сто пицот библиотек и все равно в каждом проекте своя и убогая. Пул потоков? ага есть в стандарте, только забанен вообще везде вместе с футурами, вот и пишет каждый свои джобы, а там пипец сколько багов, но это можно починить, а вот объяснить как пользоваться джобами можно только тому кто их написал раз хотя бы сам, но им то как раз и не надо ничего объяснять они нормально ими пользуются в отличие от остальных. Написать что то свое на шаблонах? гарантия проблем, либо не могут понять колеги, либо внезапно вылезают проблемы с ними в зависимостях(привет гтест и файнал) либо вообще студия поднимает лапки и говорит ну не шмагла я сегодня это скомпилить, пойди туда сама не скажу куда и попробуй упростить не скажу что. Это вот у нас прям щас проблема после обновления на 17.9.2
В расте я собрался и запустился, все косяки в МОЕМ ффай СРАЗУ запаниковали. Один раз все пофиксил работает как часы, если я какую то дичь творю оно либо не собирается либо сразу падает других вариантов я пока не видел. А у меня там много всякого, и алактор системный перегружен и ффая в скулайт дофига и больше и асинхронщина со своим экзекьютэром и сборка дллки плагина для скулайта и тесты всего этого не стандартным раненом и грпц даже затесался, а и ещё свой недо сиквел прямо в коде через макросы, я это называю обратным орм это когда не сиквел из основного языка генерится, а наоборот раст код из сиквела и причем сиквел этот НЕ строки, а обычные токены растовские, такое плюсы не умеют и научиться чуть раньше чем герб свой цпп2 запилит - примерно никогда.
Ну да ну да, а в плюсах значит не точно также пишут про стд лист, что не надо его использовать, а вместо него юзай вектор. Даже очередь по умолчанию дэк использует вместо листа
Я же и написал, что в расте это другое понятие (более широкое чем в с++) если интересно как один из инструментов смотрите self_cell, а в с++ строки НЕ селф реф тип это уже вы совсем запутались. В плюсах это будет например линкед лист или дерево, когда один из мемберов это указатель на структуру которая и содержит этот мембер. Конечно такие структуры полезно и мувать и копировать, но линкед листы и в расте вполне в стандартной библиотеке хорошо себя чувствуют. Ну да тот юзкейс что у меня в голове с графом обьектов тоже не селф реф технически.
Ну в расте селф реф типы во первых представимы, а во вторых значат немного не то о чем вы здесь пишете, ну и в третьих проблема с копированием возникает если граф объектов действительно зациклен, но тогда и в плюсах вы обязаны запретить и копи и мув конструктор по умолчанию или переопределить их (но зачем?). В любом случае я не припомню необходимости в реальном коде на плюсах ни мувать ни копировать объекты с циклическим графом, они по сути всегда синглтоны раз создал и пользуйся, так что нет это НЕ громадный просчет.
Есть ли гендерный дисбаланс в айти? Есть - это факт который никто не отрицает. Есть ли разница в работе мозга мужчин и женщин - тут уже сложнее в зависимости от того что вы игнорируете как не относящиеся к вопросу и как в целом производите измерения. Я это к чему? К тому что не составит труда сделать исследования которые продемонстрируют оба ответа. Дело в том что бы доказать тотальность в данном случае тождество между мозгом мужчин и женщин нужно значительно больше усилий чем доказать обратное. Чтобы доказать что мозги работают все таки по разному достаточно 1 исследования в ЛЮБОЙ области работы мозга, а вот доказать тождество одной парой, даже набором статей НЕ достаточно. Короче здравый смысл заставляет сильно сомневаться с таким сильным утверждением, что мозги работают одинаково и что бы убедить людей вам придется предоставить очень серьезные доказательства. Те что вы предоставили не вызывают достаточного доверия.
Наличие детей в семье обоих полов говорит о прямо противоположном - у детей мозги ни чем не промыты, а разница в поведении и в том как они справляются с задачами буквально очевидна и сильно коррелирует с полом. Т.е. недостаточно просто предоставить набор исследований не вызывающих доверия которые просто констатирует отстувие разницы нужно ещё как то объяснить почему ее нет, почему физиология не влияет и т.д. Короче шансов у вас убедить большинство в том что разницы нет очень мало.
НО это все фигня - детали. Принципиальный вопрос звучит так - да есть дисбаланс, но почему вы считаете, что это проблема? Более частный вопрос почему вы думаете что устранение дисбаланса решит проблему? А может (крамольная мысль) усиление дисбаланса это лучше?
Начните с основ с пастоновки вопроса/проблемы. Объясните почему 50/50 имеет хоть какой то объективный смысл? Короче с мат частью в вашей статье много проблем она только выглядит наукообразной, но по существу, банальное рацианализаторство.
Лженерики в расте намного слабее темплэйтов плюсовых, как и поддержка компил тайм вычислений в с++ лучше, так что пока раст не догонит с++ в этих аспектах у с++ ещё пока есть чем уделать раст.
Извините, я написал ответ, а сраный хабр его куда в дев нул отправил, а писал я долго и было обидно, но переписывать это с телефона я больше не буду - код на хабре с телефона это просто невыносимая боль. В кратце да, template<template...> для концептов не завезли, что делает их просто сахаром без принципиальных новшеств и менее выразительными чем то же самое на сфинае, но ниша для них есть конечно.
Вы ими то пробовали пользоваться как следует, а не поиграться? Концепты ущербные примерно такие же как лженерики(опечатался, а потом понял что это лучшее их описание) в расте. Без сфинае с++ шаблоны вообще ни о чём. Для самостоятельного курения почему я так считаю вам стоит попробовать реализовать аналог шаблон шаблона на концептах - это не возможно. Если убрать сфинае и параметр паки из с++ то его можно в тот же день закапывать. Единственное, что у страуса получилось так это шаблоны (и то случайно) и это то на что я купился ещё студентом 25 лет назад. Не будь шаблонов, я бы даже и не сунулся в плюсы.
В моем регионе последние пару лет что я слежу все, я повторю ВСЕ из примерно 2 десятков открытых вакансий в любой момент времени это крипта. 3 года назад мне повезло увидеть 1 вакансию на расте и не крипта.
Т.е. вы больше не возражаете, что атрибут на стэке просто опасен. Хотя возможно вы и раньше не возражали, но тогда я не очень понял о чем вы со мной дискутировали.
В любом случае я почитал эти много букв, но мало смысла проползал. Поведение атрибута совершенно гомогенно, что для стэка, что для параметра - полная индульгенция на весь лайфтайм. Т.е. ничего компилятор из декларации вызываемой функции НЕ учитывает при анализе использования стэк переменных, т.е. по простому будет требовать атрибут на стэке если переменная явно не инициализирована в теле компилируемой функции.
Это просто нельзя разрешать использовать т.к. принудительно запрещает компилятору и стат анализаторам сообщать о любых проблемах о которых сегодня они сообщают в каждом месте.
Массовый сценарий - при переходе будет туча эрониус бихэвиоров что-то конечно пофиксят, ну а что-то будет помечено этим атрибутом и тогда ЛЮБОЙ код с такой переменной должен приниматься компилятором как есть без права на ворнинг.
Это хуже чем сейчас само по себе + сейчас я поймаю такую переменную санитайзером и без лишних приседаний сразу пойду это чинить, а с этим атрибутом мне придётся поднимать гит и смотреть это санитайзер глючит или тот кто поставил атрибут был не прав ну или возможно кто то после него - короче лишние приседания перед тем как собственно чинить.
Вот кто то спросит на стэке - у меня эрониус бихэвиор, что мне делать - да просто добавь атрибут - спасибо помогло, а мне потом это чинить - спасибо я такое буду у себя на работе запрещать.
Не за ерониус бихэвиор который ворнинг, а у нас они в ероры принудительно превращаются по настоящему спасибо, а этот опт оут будет просто запрещен - безопаснее по старинке вручную ворнинг подавить в каждом месте чем вот это.
А как тогда получилось у других языков? Там по вашему нету дллек или виртуальных методов? Мало того у них там гарантия даётся, а не какой то невнятный ерониус бихэвиор.
Я вам секрет чуть ниже открою, компилятору вообще ничего не нужно ни декларации ни определения.
Ну вот вы и подтвердили мои подозрения, что без использования этого атрибута на стэке он вообще не работает.
Я просто скопирую то что УЖЕ работает в других языках.
Как сейчас в плюсах - на КАЖДОЕ использование неинит переменной компилятор/стат анализ кидает ворнинг. Нельзя одним махом взять и подавить все ворнинги ТОЛЬКО к этой переменной (можно в блоке, файле, программе). Т.е. инструменты требует от вас просмотреть каждый колл сайт и для каждого индивидуально решить фиксить или давить ворнинг.
Как теперь будет (проползал то уже приняли). Вы в ОДНОМ месте ставите атрибут и компилятор затыкается во ВСЕХ кол сайтах. Я не могу усилить форматированием слово во всех ещё сильнее, даже в тех кол сайтах которые ещё только БУДУТ написаны. Это делает проблему использования неинит переменных ещё опасней чем она есть сегодня.
Как это делается в других языках вы и сами можете посмотреть, я лишь могу предложить один из вариантов как это может выглядеть в цпп. Атрибут должен применяться исключительно и только к параметру функции, но не только в декларации, но ещё и в кол сайте.
Если удалить атрибут в месте вызова фуу то будет 2 ошибки компиляции. В моем примере при этом для бара атрибут НЕ нужен ЕСЛИ у фуу в декларации тоже есть этот атрибут. Почему? Потому что функция в кол сайте которой есть этот атрибут гарантирует инициализацию аут параметра. Т.е. после вызова фуу хз точно инициализирована в том же самом скоупе (что это значит чуть позже).
Дальше функция фуу находится в чужой либе и вы не можете менять ее (ни декларацию ни определение) - да НЕ проблема ставите как и в примере атрибут в кол сайте, все тоже самое бар уже НЕ требует атрибута. Пришел Вася Пупкин через 5 лет поменял местами фуу и бар и/или вставил фуубар перед фуу и получил ошибку компиляции. И теперь сидит и курит почему так.
Внутри функции чей параметр помечен атрибутом при доступе к параметру ДО инициализации - ошибка компиляции. Ретурн или сроу ДО инициализации параметра - ошибка компиляции. Вызов не ноуэксепт функции/оператора ДО инициализации - ворнинг.
Если кол сайт с атрибутом завернут в трай кэтч, то индульгенция испаряется за пределами скоупа. Например если в моем примере бы фуу была внутри трай, а бар после или внутри кэтча то вызов бара это ошибка компиляции.
Я НИЧЕГО нового здесь не написал, а то что попало в стандарт тупо ещё опасней чем как сейчас.
Подождите, я не понял. Вот в вашем же примере (где атрибут только на стэке) если функция (без атрибута) будет сначало читать, а потом писать будет хотя бы ворнинг?
ИМХО использовать этот атрибут на стэке надо сразу запретить во всех гайдлайнах как опасный. Честно говоря я вообще не понимаю зачем этот атрибут для стэка?
Ещё раз перечитал текст, я начинаю подозревать, что без объявления переменной на стэке с атрибутом, НО пометкой параметра функции филл этим атрибутом компилятор ПРОДОЛЖИТ считать тело сэмпл эрониус.
Если я прав в своем подозрении, то это эпик фэйл и не зря так называемые лоббисты хотят разогнать плюсы и его комитет как проф не пригодных.
А можете подробнее рассказать про индетерминэйт? Из примера создаётся впечатление что этот атрибут стоит не там. В примере он описывает переменную на стэке и вы утверждаете что это говорит компилятору что все ок. Т.е. если функция филл вместо записи сначало прочитает, то все как раньше УБ.
С другой стороны если этот атрибут применить к параметру функции тогда это ИМХО как раз могло бы помочь компилятору диагностировать чтение из неинициализированной переменной.
Вы точно не перепутали ничего в примере?
Ну я не настоящий сварщик, но логически я не вижу как можно померять скорость распространения взаимодействия изолированно только в одном направлении. Исходя из физического смысла этой скорости вам необходимо поменять направление распространение иначе не существует способа определения момента начала/конца распространения. Дело то ведь не в том как синхронизировать часы, нужны то всего 1 часы, а в том как вообще понять когда начинать считать время, или для другого наблюдателя когда заканчивать считать.
Даже если НА САМОМ ДЕЛЕ ™ скорость распространения зависит от чего то, но мы не можем это никак обнаружить, то это просто не важно. Т.е. зачем замерять скорость распространения взаимодействия в одном направлении если на практике такой штуки нету, взаимодействия которыми мы можем управлять всегда туда/обратно, а те которые только к нам они для нас плохо предсказуемое будущее, а те которые от нас это прошлое.
Руку надо переносить на цифровую клавиатуру, хотя честно я понятие не имею как я набираю эти типы - т.е. это вообще не важно. Ну ещё конкретно у этого человека аллергия на цифры, глаза начинают чесаться при чтении, ну бывает, у меня вот аллергия на скобки, у вас ещё на что нибудь - это нормально хотя вероятно не лечится.
https://en.cppreference.com/w/cpp/preprocessor/replace
Эмбед платформы/СОКи/одноплатники на армах. Это НЕ микроконтроллеры и НЕ вайфай. Они все ещё 32 битные и будут такими ещё очень долго.
А про виндоус смешно было конечно. В общем что и требовалось удостоверить, дальше своего уютного мира вы не выходите, так зачем тогда навязываете свое видение как существенно превосходящее все альтернативы?
Дефайнить ключевые слова запрещено - не скомпилируется. С младшей школы в букварях учат 8 меньше 16 ровно в 2 раза, ну и далее по списку, а вот байт, ворд, дабл ворд, квадрипл ворд которые изначально и были заменили на шорт инт лонг от слабоумия. Зачем нормальным ЛЮДЯМ иметь в голове мапу слова на число и постоянно заниматься приседаниями что бы понимать что больше и что меньше и во сколько раз? Для этого есть числа, они лучше с этим справляются. СайзТ (как и в расте) это именно размер регистра во всех нормальных языках, а если вам байты (их количество) важно - ну например протокол реализовать, то там в 100500 раз лучше иметь и32 и т.д. вместо непонятного инта. Сразу видно, что вы дальше своей платформы ничего не знаете и крос платформ для вас это ругательства. Что написать в коде что бы не усложнять себе жизнь макросами и гарантировано иметь 64 бита везде?
Я не в курсе кто там у вас эталон правильности, но инженеров интела тоже в проф непригодных запишете с их у64, у128, у256, у512 для симд регистров?
А можете разжевать для не просветлённых, какое такое фундаментальное преимущество указатель+размер перед размер+указатель.
Прошу прощения, да, не задепрекейчен. цппрефком на телефоне плохо смотрится.
Во-первых врапер НЕ нулабл, во вторых задеррекейчен, а в третьих в с++20 удален.
Для моей задачи (безопасная работа с нулабл ссылками) Т* НЕ подойдёт.
Безопасность на уровне опшинал через операторы - я тут не понимаю о чем вы. Вот операторы из опшионала для безопасности как раз таки надо удалить потому что это как раз и есть проблема писать не безопасно (*) легко, а безопасно (валью) сложно.
Вы листы то сами используете или только учите остальных о том какие они замечательные в стандартной библиотеке плюсов и как в расте буквально все без них страдают? Везде где я бы не увидел стд лист это был код джуна, не я конечно видел листы по делу, но они всегда были самописными и почти всегда на сях и опять же всегда про ноу лок + свой аллокатор в придачу. Я даже видел листы на массиве + фрилист нодов в одном флаконе, но не надо тут рассказывать про стд листы это мертвый груз плюсов как и стэк, а вместе с ними мертворожднные форвард листы. Очередь хоть как то юзабельна. Лучше бы комитет в свое время флат мапы принял вместо форвард листов и спан по раньше, но нет приходите в с++23 ну хоть на этом спасибо, хотя надеюсь что мне уже не придется этим пользоваться когда оно наконец то появиться у меня на работе.
Раст не идеален, дженерики откровенно слабы хоть работа над ними и ведётся, запрет реализации трэйтов на чужом типе вообще какая то шиза (сами оборачивайте миллион ероров и жрите молча дефолтные реализации трэйтов), конст противозачаточный, макросы наркоманские, дебаг ущербный, асинк вообще местами без костылей не компилируется, функционал шина вырвиглазная трехжтажная хрень с постоянными приседаниями на ровном месте, но все же я расту готов простить вообще все проблемы только хотя бы за то как он с зависимостями справляется.
Я был буквально в шоке, что добавить ЧУЖУЮ либу это 2 минуты работы, а не лять неделя как я вот прям щас мучаюсь в плюсах с либой из другой команды. Конаны шмонаны, смэйки и прочие вообще курят в сторонке и помолкивают. Вы когда на расте последний раз писали сериализацию? я ни разу, а на плюсах чуть ли не ежемесячно.
Хотите строку в энум и назад нате вам 10 способов один хуже другого. У нас в коде вообще нет сырых владеющих указателей, утечки? Полно, рэйсы? Куда ж без них родимых то, хотя все буквально обмазано мьютексами я вообще удивляюсь как оно ещё не тормозит. Шаред поинтеры вызывают деструкторы хер пойми в каких потоках ИНОГДА? - нет инструмент прекрасный, но гореть этим людям в аду за шаред поинтеры в стандарте, место им в бусте. Проезды по памяти? - это на десерт и хрен вы их найдёте без санитайзеров, а сборка с санитайзером на железке просто как пошаговая стратегия вместо риалтайма работает. Попробуйте собирите культю под санитайзером, не мы ее собрали конечно в итоге и щас даже автотесты под санитайзером завелись, но это все невероятно непросто. Получить стэк трэйс при логировании - удачи вам. Логирование? Сто пицот библиотек и все равно в каждом проекте своя и убогая. Пул потоков? ага есть в стандарте, только забанен вообще везде вместе с футурами, вот и пишет каждый свои джобы, а там пипец сколько багов, но это можно починить, а вот объяснить как пользоваться джобами можно только тому кто их написал раз хотя бы сам, но им то как раз и не надо ничего объяснять они нормально ими пользуются в отличие от остальных. Написать что то свое на шаблонах? гарантия проблем, либо не могут понять колеги, либо внезапно вылезают проблемы с ними в зависимостях(привет гтест и файнал) либо вообще студия поднимает лапки и говорит ну не шмагла я сегодня это скомпилить, пойди туда сама не скажу куда и попробуй упростить не скажу что. Это вот у нас прям щас проблема после обновления на 17.9.2
В расте я собрался и запустился, все косяки в МОЕМ ффай СРАЗУ запаниковали. Один раз все пофиксил работает как часы, если я какую то дичь творю оно либо не собирается либо сразу падает других вариантов я пока не видел. А у меня там много всякого, и алактор системный перегружен и ффая в скулайт дофига и больше и асинхронщина со своим экзекьютэром и сборка дллки плагина для скулайта и тесты всего этого не стандартным раненом и грпц даже затесался, а и ещё свой недо сиквел прямо в коде через макросы, я это называю обратным орм это когда не сиквел из основного языка генерится, а наоборот раст код из сиквела и причем сиквел этот НЕ строки, а обычные токены растовские, такое плюсы не умеют и научиться чуть раньше чем герб свой цпп2 запилит - примерно никогда.
Ну да ну да, а в плюсах значит не точно также пишут про стд лист, что не надо его использовать, а вместо него юзай вектор. Даже очередь по умолчанию дэк использует вместо листа
Я же и написал, что в расте это другое понятие (более широкое чем в с++) если интересно как один из инструментов смотрите self_cell, а в с++ строки НЕ селф реф тип это уже вы совсем запутались. В плюсах это будет например линкед лист или дерево, когда один из мемберов это указатель на структуру которая и содержит этот мембер. Конечно такие структуры полезно и мувать и копировать, но линкед листы и в расте вполне в стандартной библиотеке хорошо себя чувствуют. Ну да тот юзкейс что у меня в голове с графом обьектов тоже не селф реф технически.
Ну в расте селф реф типы во первых представимы, а во вторых значат немного не то о чем вы здесь пишете, ну и в третьих проблема с копированием возникает если граф объектов действительно зациклен, но тогда и в плюсах вы обязаны запретить и копи и мув конструктор по умолчанию или переопределить их (но зачем?). В любом случае я не припомню необходимости в реальном коде на плюсах ни мувать ни копировать объекты с циклическим графом, они по сути всегда синглтоны раз создал и пользуйся, так что нет это НЕ громадный просчет.