"Перечитываю и на подсознательном уровне понимаю — нельзя ударить лицом грязь."
Я, по ходу, перфекционист-критик, раз при виде этой фразы полез в Яндекс проверить, правильно ли я помню, что там нужен предлог "в" :)
То есть внешняя среда в любой семье формируется одинаково? Я думал, хотя бы некоторая часть человечества воспитывалась лучше, чем я сам, а, оказывается, везде одна и та же умеренная хрень…
приравнивают UB, существующие в C++ном коде, к обязательно и неизбежно возникающим багам
А если сказать так: «к багам, которые могут проявиться при любом изменении окружения»? Если программа скомпилирована один раз — конечно, в ней баг либо уже есть, либо и не будет (ну, если, конечно, не сломается что-то в системных вызовах). Но UB на то и UB, что любое изменение условий компиляции, вплоть до минорной версии любого звена, может его изменить. В том числе и превратить его в баг. Такой вариант звучит более разумно?
Нет, а серьёзно. Вызов этой функции является UB, на Ваш взгляд? Если да — то в чём здесь «ППЦ»? Если нет — то чем она принципиально отличается от оператора знакового сложения, кроме того, что не прописана в стандарте?
Совершенно верно. Компилятор исходит из того, что будут подсунуты такие данные, при которых UB не будет. Если вызывающая сторона знает, что это так, — UB нет. Если не знает — то да, вопрос, кто виноват в его появлении (вызывающая сторона, которая неправильно пользовалась библиотекой, или библиотека, которой можно неправильно воспользоваться), действительно уже на грани софистики. Но оптимизаторы здесь стоят на стороне авторов библиотеки.
Формально, UB присутствует там, где невозможно доказать его отсутствие. Есть явная проверка, что переполнения при знаковом сложении не будет? Окей — значит, и UB не будет (пример сознательно упрощённый — понятно, что в реальных случаях это будет сделано не так «в лоб»).
Насколько я понимаю, это называется «контрактом функции», и именно это активно используется оптимизаторами: контракт должен быть таким, чтобы никакого UB не происходило. Соответственно, если контракт нарушен — последствия непредсказуемы.
Я от себя добавлю такое простое наблюдение. `unsafe` в библиотеке — это норма жизни, именно потому, что в некоторых случаях иным образом не удастся реализовать удобную функциональность. `unsafe` в пользовательском коде — либо признак, что используемых библиотек недостаточно, либо признак, что сам этот код реализует какую-то нестандартную возможность. Не претендую на истину, но пока всё выглядит именно так.
Синтаксис наподобие `n:-1:1` а-ля MatLab считается? Или здесь выразительность как раз страдает, потому что общую конструкцию (для цикла с произвольным шагом) натягивают на частный случай?
Просто и красиво, как по мне. Метод, как подложить магическую строку в саму себя, вообще в восторг привёл, хотя, казалось бы...
И кто-то ещё будет говорить, что декларативных языков программирования не существует...
"Перечитываю и на подсознательном уровне понимаю — нельзя ударить лицом грязь."
Я, по ходу, перфекционист-критик, раз при виде этой фразы полез в Яндекс проверить, правильно ли я помню, что там нужен предлог "в" :)
Ну как тут не вспомнить теорию — https://worldbuilding.stackexchange.com/a/134486/53161 :)
Ключевое слово "иногда" в значении "только иногда", верно?
А если сказать так: «к багам, которые могут проявиться при любом изменении окружения»? Если программа скомпилирована один раз — конечно, в ней баг либо уже есть, либо и не будет (ну, если, конечно, не сломается что-то в системных вызовах). Но UB на то и UB, что любое изменение условий компиляции, вплоть до минорной версии любого звена, может его изменить. В том числе и превратить его в баг. Такой вариант звучит более разумно?
То, что в интерфейсе написано "warp in html5" — это фича? А то руки чешутся спросить, на каком физическом принципе гипердрайв смастерили :)
К сожалению, да, родителям часто формальный успех важнее фактической прокачки навыков. Это, правда, в основном проблемы самого школьника...