home.social

#undefined_behavior — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #undefined_behavior, aggregated by home.social.

fetched live
  1. C++29 — начало. Встреча ISO C++ в Брно

    Привет! На связи Антон Полухин из Техплатформы Городских сервисов Яндекса. Недавно в Брно состоялась встреча международного комитета по стандартизации языка программирования C++, в которой я принимал активное участие. В этот раз началась работа над C++29 и как раз о новинках и хочется рассказать.

    habr.com/ru/companies/yandex/a

    #undefined_behavior #undefined_behaviour #tagged_pointers #format #fmt #standard #standard_library #thread #threads #c++29

  2. Пять ошибок начинающих C++ разработчиков при работе с памятью, из‑за которых программа крашится

    Большинство ошибок с памятью в C++ не выглядят как ошибки. Код компилируется, тесты проходят, приложение работает неделями. А потом внезапно появляется Segmentation fault, повреждённая куча или утечка памяти, которую приходится искать часами. Разберём пять типичных ловушек, в которые регулярно попадают начинающие разработчики.

    habr.com/ru/companies/otus/art

    #C++ #управление_памятью #утечки_памяти #RAII #undefined_behavior #AddressSanitizer #ошибки_программирования

  3. Лямбды в C++: пять задач на захваты и время жизни, в которых ошибается даже опытный разработчик

    Лямбды в C++ выглядят безобидно, пока не начинают жить дольше переменных, которые захватили. Висячие ссылки, мёртвый this , копии состояния в потоках и ограничения std::function часто проходят компиляцию без шума, зато потом превращаются в undefined behavior. Разбираем пять задач на захваты и время жизни, где ошибка прячется не в синтаксисе, а в неверном предположении о том, кому и сколько живёт объект. Разобрать задачи

    habr.com/ru/companies/otus/art

    #лямбды_C++ #захваты_в_лямбдах #время_жизни_объектов #undefined_behavior #this_в_C++ #dangling_reference #управление_памятью #RAII

  4. [Перевод] В С неопределённое поведение повсюду

    Если бы Кардинал Ришелье был программистом, он бы сказал: «Дайте мне шесть строк кода, написанных рукой самого профессионального C-программиста в мире, и я найду в них лазейку для вызова неопределённого поведения. Никто не может написать безошибочный код на С или C++. И я говоря об этом как человек, который пишет на этих языках почти каждый день около 30 лет. Я слушаю подкасты по C++. Я смотрю выступления про C++ на конференциях. Мне нравится читать и писать на этом языке. C++ послужил нам сполна, но на дворе 2026 год, и современная рабочая среда явно отличается от среды 1985 (C++) или 1972 (С). И я далеко не первый, кто об этом заговорил. Помню ещё с десять лет назад читал статью какого-то известного человека, в которой он утверждал, что использование C++ вполне обоснованно можно подвести под нарушение закона Сарбейнза-Оксли (SOX). И хотя с остальной его критикой я не был согласен (как и с тем, что он путал «its» и «it’s»), конкретно с этим пунктом я никогда не спорил. Мало того, со временем я всё больше убеждался в его истинности. На деле в С для возникновения неопределённого поведения (undefined behaviour, UB) есть гораздо больше возможных причин, чем вы могли предполагать. Все знают, что двойное освобождение памяти, её использование после освобождения, выход за границы объекта (например, массива) и чтение неинициализированной памяти — это UB. Как ни крути, но в контексте работы с памятью C и C++ безопасными не назовёшь. Тем не менее даже эти ошибки продолжают совершаться повсеместно раз за разом.

    habr.com/ru/companies/ruvds/ar

    #ruvds_перевод #программирование #с++ #неопределённое_поведение #undefined_behavior #компиляторы #оптимизация_кода #си #легасикод

  5. Твой async fn на самом деле enum, а Pin нужен потому, что Rust наступил на грабли самоссылающихся структур

    async fn в Rust — это не магия и не зелёный поток, а обычный enum, который компилятор генерирует за тебя. Разбираем, почему Future это машина состояний, зачем нужен Pin, как работает Waker и executor, и как одна .await -точка может незаметно заставить твой сервис есть память гигабайтами.

    habr.com/ru/articles/1033710/

    #rust #async #tokio #pin #futures #executor #waker #async_fn #cargoexpand #undefined_behavior

  6. Твой код на Rust компилируется, проходит тесты и является UB. Ты просто об этом не знаешь

    Если взять случайный крейт с crates.io и поставить его под Miri, шанс увидеть undefined behavior где-то в зависимостях стремится к единице. Разбираемся, почему: pointer provenance, Stacked Borrows, Tree Borrows и почему noalias в LLVM выключали три раза.

    habr.com/ru/articles/1033328/

    #rust #unsafe #miri #stacked_borrows #tree_borrows #provenance #llvm #noalias #undefined_behavior

  7. Как найти UB, которое никто не хочет замечать: разбираем clang-tidy изнутри

    Привет, Хабр! Меня зовут Анастасия Черникова, я занимаюсь разработкой компиляторных технологий и инструментов на базе LLVM в Синтакоре. Неопределенное поведение (undefined behavior, UB) по-разному выглядит с точки зрения компилятора и разработчика. Для первого оно, как правило, открывает дополнительные возможности для оптимизации. Для программиста же UB может стать проблемой, особенно если оно остается незамеченным и не учитывается при разработке. В этой статье рассмотрим подход к поиску UB с использованием статического анализа. В качестве примера я использую clang-tidy: сначала разберу, как устроены существующие чекеры и как работают AST matchers, а затем покажу, как расширять их и добавлять собственные проверки, если стандартных возможностей оказывается недостаточно. Отправимся на поиски и поимку UB →

    habr.com/ru/companies/yadro/ar

    #llvm #clangtidy #ast #check #cpp #undefined_behavior #UB #compiler #sanitizers

  8. constexpr all the things! Since the evaluation of a constant expression never results in an erroneous behavior (EB, C++26)! (But use constexpr since C++11)

    This was mentioned by many at the conference, not to forget: @DanielaKEngert, Mikhail Svetkin, and others.

    @meetingcpp #cpp #cpp26 #cpp11 #meetingcpp #dev #undefined_behavior #ub #erroneous_behavior #eb

  9. Книга «Экскурс в неопределённое поведение C++». Секреты укрощения единорога

    Привет, Хабр. С гордостью, триумфом и трепетом хотим рассказать вам об одной из наших флагманских новинок, вышедшей в пылающем июле — книге « Экскурс в неопределённое поведение C++ ». Cегодня книжные полки изобилуют нестареющими пособиями по C++. Этот язык чрезвычайно важен не только в разработке игр, финансового софта и встраиваемого ПО, но и как основной материал для изучения алгоритмов. Именно поэтому мы даже выпустили две книги-билингвы по алгоритмам, в которых код на C++ соседствует с идентичным ему кодом на Python. Это наш многолетний бестселлер « Алгоритмический тренинг. Решения практических задач на Python и C++ » Максима Иванова и недавняя новинка « Базовые алгоритмы. Реализации на Python и C++ на примере классических игр » Павла Довгалюка. Но язык C++ не только очень полезен, но и опасен, так как на этапе преобразования исходного кода в машинный многие решения отдаются на откуп компилятору. Поскольку компилятор в большинстве режимов изначально заточен на оптимизацию кода, он регулярно привносит в код C++ непредсказуемые и порой необъяснимые варианты неопределённого поведения (UB, Undefined Behavior). Титаническую работу по систематизации неопределённого поведения в C++ проделал уважаемый Дмитрий Свиридкин @Nekrolm . В настоящее время он работает инженером по программированию встраиваемых систем в отделе Cloudfront Compute компании AWS. Дмитрий преподавал курсы по Linux и C++ в Санкт-Петербургском государственном университете и Высшей школе экономики, а также имеет богатейший послужной список , в котором есть и олимпиады по информатике, и машинное обучение, и программирование прошивок и, конечно же, выжимание последних капель производительности из самого неукротимого облачного железа. Некоторое время его заметки публиковались на сайте компании PVS-Studio, разрабатывающей известный российский статический анализатор кода.

    habr.com/ru/companies/bhv_publ

    #undefined_behavior #неопределённое_поведение #C++ #оптимизация #программирование

  10. Демистификация unaligned access undefined behavior в C

    Неопределённое поведение (Undefined Behavior, UB) в C и C++ — одна из причин, по которым разработчики всё чаще ищут языки с полностью определённой семантикой. Одним из самых коварных UB является unaligned access, с точки зрения стандарта C это, например, когда происходит попытка разыменовать указатель как uint32_t, а значение указателя (адрес) не кратно четырём. Один из частых сценариев использования, приводящих к такому UB - получение данных по сети и их интерпретация как чисел.

    habr.com/ru/articles/942888/

    #unaligned_access #misaligned_access #undefined_behavior

  11. Что делать, если ваш слон думает, что он баг?

    Мы окунулись в веб-разработку и нашли там необычное животное. Это был слон с повадками бага. Мы изучили код проекта PHP и поняли, в чём дело. Давайте вместе посмотрим на необычные случаи, которые могут привести к неожиданным результатам.

    habr.com/ru/companies/pvs-stud

    #программирование #php #c #c++ #статический_анализ #static_analysis #ошибки_в_программе #memory_allocation #undefined_behavior #неопределённое_поведение

  12. Встреча ISO C++ в Софии: С++26 и рефлексия

    Привет! На связи Антон Полухин из техплатформы городских сервисов Яндекса, и сейчас я расскажу о софийской встрече Международного комитета по стандартизации языка программирования C++, в которой принимал активное участие. Это была последняя встреча, на которой новые фичи языка, с предодобренным на прошлых встречах дизайном, ещё могли попасть в C++26. И результат превзошёл все ожидания: compile-time-рефлексия рефлексия параметров функций аннотации std::optional<T&‍> параллельные алгоритмы Об этих и других новинках расскажу в посте

    habr.com/ru/companies/yandex/a

    #c++29 #с++29 #c++26 #с++26 #с++ #c++ #reflection #constexpr #exception #simd #safety #security #undefined_behavior #annotations #parallel_programming #executor #executors #ranges #coroutines

  13. C++26 — встреча ISO в Хагенберге

    В середине февраля в Хагенберге состоялась встреча международного комитета по стандартизации языка программирования C++. В этот раз прорабатывались следующие большие темы: std::hive Constexpr, ещё больше constexpr Безопасность, контракты, hardening, профили, UB и std::launder Relocate #embed Об этом и других новинках расскажу в посте

    habr.com/ru/companies/yandex/a

    #c++29 #с++29 #c++26 #с++26 #с++ #c++ #reflection #constexpr #exception #simd #safety #security #undefined_behavior #memory #byte #bit #contracts #relocation #hive #object_pool #embed

  14. [Перевод] Избавляемся от UB в memcpy

    Неопределённое поведение (undefined behavior, UB) в языке программирования C — постоянный источник жарких споров между программистами. С одной стороны, UB может быть важным для оптимизаций компилятора. С другой стороны, оно упрощает появление багов, которые приводят к проблемам безопасности. Хорошая новость: N3322 был принят для C2y, что позволит устранить неопределённое поведение из этого конкретного участка языка C и сделать всё показанное ниже чётко определённым: memcpy(NULL, NULL, 0); memcmp(NULL, NULL, 0); (int *)NULL + 0; (int *)NULL - 0; (int *)NULL - (int *)NULL;

    habr.com/ru/articles/866088/

    #gcc #clang #llvm #неопределённое_поведение #undefined_behavior

  15. Путеводитель C++ программиста по неопределённому поведению

    Вашему вниманию предлагается полный список разделов электронной книги (12 из 11 :)), посвящённой неопределённому поведению. Книга не является учебным пособием и рассчитана на тех, кто уже хорошо знаком с программированием на C++. Это своего рода путеводитель C++ программиста по неопределённому поведению, причём по самым его тайным и экзотическим местам. Автор книги — Дмитрий Свиридкин, редактор — Андрей Карпов.

    habr.com/ru/companies/pvs-stud

    #Неопределённое_поведение #undefined_behavior #C #C++ #Си #Си++ #баги #ошибки_в_коде #ошибки_программистов #программирование #компиляторы

  16. ISO C++ — встреча международного комитета в Польше

    В конце ноября состоялась встреча международного комитета по стандартизации языка программирования C++. В этот раз без внимания не остались темы: Рефлексия времени компиляции и оператор «монобровь» Constexpr, много constexpr SIMD Structured bindings as a pack Безопасность, контракты, libc++ hardening, профили, UB и std::launder Сколько бит в байте? Об этом и других новинках расскажу в посте

    habr.com/ru/companies/yandex/a

    #c++26 #с++26 #с++ #c++ #reflection #constexpr #consteval #exception #simd #safety #security #undefined_behavior #memory #byte #bit

  17. Торги на Мосбирже приостановлены на час из-за ошибки при работе с памятью

    14 августа с 16:18 по 17:30 Московская биржа приостановила торги на фондовом рынке. По информации с официального сайта инцидент произошел из-за программной ошибки на сервере доступа.

    habr.com/ru/articles/836116/

    #безопасная_разработка #rust #c++ #undefined_behavior #memory_safety

  18. Опасность устарела: несколько важных нюансов в новых стандартах C++

    Undefined behavior (UB) — боль, знакомая каждому разработчику со стажем; эдакий «код Шредингера», когда не знаешь, правильно тот работает или нет. К счастью, стандарты языка С++20/23/26 привнесли относительно неопределенного поведения кое-что новое. И довольно важное, если вы — архитектор ПО, а «плюсы» — ключевой стек вашей компании (подробнее о том, как и почему мы в «Лаборатории Касперского» много используем С++, читайте здесь ). В этой статье я со своих позиций Senior Software Architect и Security Champion в микроядерной операционной системе KasperskyOS рассмотрю кейсы-ловушки, в которые можно попасть практически в любом из стандартов, и покажу, что меняется в С++20/23/26, — уменьшается ли количество кейсов с неопределенным поведением, и становится ли С++ безопаснее.

    habr.com/ru/companies/kaspersk

    #c++ #программирование #c #си++ #qt #c++20 #статический_анализ_кода #разработка #информационная_безопасность #кибербезопасность #безопасность #уязвимости #кибератаки #пентест #cybersecurity #си #stm32 #undefined_behavior #компиляторы #llvm #языки_программирования #компилятор #системное_программирование

  19. Сколько UB в моём компиляторе?

    У C и C++ программистов две головные боли в плане ошибок: утечки памяти и неопределённое поведение. И как вы догадались из названия, речь пойдёт о неопределённом поведении. И каком-то "моём" компиляторе. Если точнее, то о наборе компиляторов и инструментах для их разработки, а именно LLVM. Почему "моём"? Потому что мы очень любим Clang, входящий в состав LLVM, и пользуемся им на постоянной основе.

    habr.com/ru/companies/pvs-stud

    #с++ #llvm #undefined_behavior #opensource #pvsstudio #static_analysis #bugs #компиляторы #ошибки_в_коде #программирование

  20. Нельзя писать безопасный код на C++ без санитайзеров

    С++ видится мне огромным франкенштейном: очень уж много разнообразных способов описать свои намерения. В добавок к этому язык пропагандирует политику zero-cost abstractions , из которой следует (помимо прочего), что программист в ответе за все свои действия. Однако, работая с большими кодовыми базами, становится крайне тяжело держать в уме различные тонкости языка, которые держать в уме нужно — иначе Undefined Behavior. В данной статье хочу рассказать о трех интересных случаях UB, с которыми столкнулся при разработке на С++. Не думаю, что опытным разработчикам примеры из статьи будут полезны, но, полагаю, что начинающим разработчикам смогу показать на своем примере, как не стоит писать код на C++.

    habr.com/ru/articles/787776/

    #с++ #Отладка #Баги #undefined_behavior

  21. Есть ли Undefined Behavior в Rust?

    Если вы никогда не сталкивались с Rust-ом, а слышали, что он помогает избежать Undefined Behavior (UB), то отчасти это так. Некоторые делят язык Rust на 2 части: safe и unsafe . Я бы поделил на 4 части: safe, unsafe, const и async . Но нас интересуют safe и unsafe. Получить UB в Rust-е не сложно - нужно открыть документацию и найти любой метод, помеченный unsafe, например, get_unchecked у Vec . Метод позволяет без проверки границ получить значение из динамического массива. А есть ли UB в safe -подмножестве языка? Есть . Он возможен из-за бага (проблемы) в компиляторе Rust, который живет с 2015 года.

    habr.com/ru/articles/782412/

    #Rust #lifetimes #type_safety #undefined_behavior #type_checking