Pull to refresh
13
0.2

Пользователь

Send message

Это, конечно же, не решает всех проблем, потому что UB есть UB даже в недостижимом коде, но в данном случае разработчики пошли на риск.

UB в недостижимом коде в принципе невозможен. Типичный прием по избеганию UB как раз и состоит в том, чтобы делать соответствующий код недостижимым. Вы пользуетесь этим приемом каждый раз, когда пишете что-нибудь вроде:

if (ptr != nullptr) ptr->fn();

Если ptr нулевой, то разыменовывающий его код становится недостижимым, и UB не происходит. Тут нет абсолютно никакого риска до тех пор пока есть уверенность что результат getenv() никогда не может стать равен (char*)-1.

Использование макроса #define INT — плохая практика, лучше использовать typedef или using.

Плохая практика - это конечно все здорово, но только ни typedef ни using в данном случае не годятся.

Передача потенциально неинициализированного значения по ссылке — хотя здесь UB нет из-за статического контекста, рекомендуется явная инициализация.

Забавная формулировка - "потенциально неинициализированного". Здесь никаких "потенциально" нет, а переменная однозначно инициализирована. Итого одна более-менее полезная диагностика из трех, я бы сказал, да и та по большому счету вкусовщина, относящаяся скорее к coding conventions, чем непосредственно к корректности кода.

Ну так-то тот же clang analyzer, даже довольно древний, вполне справляется с этим примером:

$ scan-build make
scan-build: Using '/usr/bin/clang-8.exe' for static analysis
/usr/bin/../libexec/c++-analyzer -o tst tst.cpp
tst.cpp:4:11: warning: The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage
    value *= value;
    ~~~~~ ^
1 warning generated.
scan-build: 1 bug found.
scan-build: Run 'scan-view /tmp/scan-build-2024-12-24-005215-1797-1' to examine bug reports.

Отсутствие проверки ошибок: Функция foo() не проверяет, является ли входной аргумент допустимым (например, не является ли он NaN или бесконечным). Хотя в данном случае это не критично, в более сложных сценариях отсутствие проверок может привести к ошибкам.

Типичный пример галлюцинаций LLM, ну какой к черту NaN или бесконечность у int, что он несет вообще.

Это вас просто автор статьи опять дерьмом из-под чатгопоты накормил. Видите ли, steady_clock - это некие монотонные часы, которые стартовали в некоем неопределенном времени в прошлом, и которые в общем случае никак нельзя соотнести с реальным временем на ваших условных настенных часах. Они предназначены для измерения интервалов времени, абсолютное время на них посмотреть нельзя, и соответственно показания других "настенных" часов перевести в них тоже нельзя.

Я себе, если честно, слабо представляю что-то в std такое, чтобы без подключения каких-то сторонних библиотек работало бы со всеми БД на свете (а если надо что-то подключать, то зачем std?). А что такое "написание сетевых служб" я и вовсе не знаю - слишком расплывчатое понятие. Просто работа с сетью штоле? Или что-то ещё подразумевается? Нипанятна.

Автору, о котором идёт речь в статье - нет, не предложил бы. Что касается формулировки из камента выше - предложил бы, но только потому, что формулировка как-то не звучит, а если бы её отказались менять, то я бы не настаивал, и уж точно не стал бы из-за этого закулисно раскручивать маховик cancel culture.

Кто отнесется? Лично я? Для меня формулировка выглядит корявой, ну что это за "UB вопроса"? К тому же фраза выглядит чересчур драматично - прям "окончательное", ага. Я бы переформулировал как-нибудь вроде "К вопросу о способах уменьшения количества UB в таких-то контекстах", например. Как тут уже подмечено другими комментаторами, всяких слов, которые у кого-то вызывают там какие-то ассоциации, существует немало, если все их запретить, то мы все станем несколько ближе к Эллочке-людоедке.

Попёрли томазо из конкретной организации (The Standard C++ Foundation), от которой он учавствовал в комитете.

Ну там, насколько я понимаю, все было несколько сложнее, на комитет по сути надавили из INCITS (конторы при ANSI), то есть в этом цирке абсурда принимал участие как минимум не только комитет, а и ещё какие-то бюрократы, и никто из них не сказал "да что вы вообще такое несёте?" Другими словами, это уже похоже не на самодеятельность, а на систему, выходящую за рамки C++ Foundation.

Если эти коллеги неиллюзорно агрятся на слова "master" и "question", то лучше не надо. Да и в проекте, подозреваю, от таких "коллег" больше вреда, чем пользы.

Единственное обвинение в отношение Andrew Tomazo связанное с chatgpt, которое я смог найти - это вот этот пост: https://izzys.casa/2024/11/on-safe-cxx/

Ахаха, какое забавное совпадение :) Я в своё время, когда читал этот щитпост, буквально не мог оторваться от поворотов сюжета :) Тут тебе и Трамп, и токсичная маскулинность в погромировании, и феминизм в погромировании, и курды, и обидки на всех подряд с закулисными теориями заговора :) Реально не мог оторваться, вот сел и через где-то час встал, просто залпом :)

Похоже на какую-то не слишком удачную попытку дэмейдж контроля через реддитовских анонимусов, мда.

Так вы уже хорошенько подумали и сможете ответить на мои вопросы по поводу этого камента, который вы цитируете? Для вашего удобства приведу их по отдельности:

А почему именно people don't like his paper's name?

и

И вообще как-то странно пост анонима с реддита звучит: вот мол у товарисча все его пропозалы были бессмысленными и ему якобы их писала чатгопота. Ладно, допустим. Но тогда и претензии были бы к содержанию, а не к названию. И тут же аноним фактически подтверждает, что претензии были именно к названию. Странно это все, не находите?

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

Я предлагаю вам подумать над сутью камента с реддита, который вы сюда притащили.

He was told that people don't like his paper's name, and he was asked to change it.

А почему именно people don't like his paper's name? И вообще как-то странно пост анонима с реддита звучит: вот мол у товарисча все его пропозалы были бессмысленными и ему якобы их писала чатгопота. Ладно, допустим. Но тогда и претензии были бы к содержанию, а не к названию. И тут же аноним фактически подтверждает, что претензии были именно к названию. Странно это все, не находите?

Ну вот, а все начиналось с переименований master main. Е@анина прогрессирует.

Ничего, тут вон уже набежали желающие запихнуть в std средства для работы с БД и написания "сетевых служб" (что бы это ни значило).

Хотя да, тогда плюсы именно и называли короткоживущей поделкой для тех, кто не смог в сишечку.

Гм-гм, как можно смочь в плюсы, но не смочь в сишечку? Вот обратные примеры есть даже в местных каментах, а о том, о чем вы говорите, я как-то даже не слышал.

Ну я прямо сейчас не могу попробовать, но что-то мне подсказывает, что dyn означает рантайм диспатч, а это в свою очередь означает примерно те же проблемы, что в C++ с использованием указателя на функцию вместо шаблонного параметра - в частности, невозможность инлайнинга кода.

Эту проблему пытались решить через SFINAE (инопланетная технология), и сейчас пытаются решить через концепты. Это говорит о том, что возможно в С++ (до концептов) и есть наихудший вариант шаблонов/дженериков.

Опять же, возможность использовать утиный подход там, где он очевидно выгоден (с опциональными ограничениями через SFINAE или концепты), куда лучше, чем принципиальная невозможность его использовать.

Странная претензия.

Ну почему странная, эти скобки тут реально ничего полезного не делают, зачем их ставить. Вот в обобщенном коде, где тип заранее неизвестен, это может быть действительно большая разница, а тут-то? Вопрос вкуса и локальных coding conventions.

Carbon - развитой системой дженериков с концептами

Ну конкретно с карбоном я дела не имел, но моё ИМХО состоит в том, что модные нынче разновидности дженериков, которые требуют ручного прописывания всех трейтов, представляют из себя наихудшее сочетание - они одновременно излишне вербозны и хромают в плане функционала (причём второе является следствием первого). Впрочем, в карбоне, насколько я вижу, имеются и старые добрые шаблоны.

Information

Rating
3,060-th
Registered
Activity