Эта статья написана по мотивам дипломной работы, выполненной в ВУЗе. Мне показалось, что она могла бы быть интересна и другим людям, поэтому выкладываю пересказ. В этой работе я кратко рассмотрю, как вообще работают исключения в С++, опишу, как я добавил их поддержку в простую ОС, написанную для преподавания АКОСа, какой способ передачи исключений из ядра в программы я написал. А в конце посмотрим, в каких ещё случаях ОС может бросать пользователям С++ исключения.
C++ *
Типизированный язык программирования
Новости
С++ для тех кто не шарит
От начинающего для начинающих
О том что такое С++, программирование и как это все понять если до сессии осталась неделя.
Яндекс выложил в опенсорс бету фреймворка userver
🐙userver позволяет быстро создавать эффективные микросервисы на языке C++ и уже много лет активно используется в Яндекс Go, Еде, Лавке, Доставке, Маркете, финтехе и других проектах. Вот из каких требований мы исходили в процессе разработки:
- Простота. Стажёр или студент, приходя к нам, может уже через неделю написать и отправить в продакшен новый микросервис.
- Надёжность. Многие ошибки, в том числе и связанные с многопоточностью, можно поймать на этапе компиляции. Кроме того, фреймворк даёт подсказки по исправлению проблем.
- Полнота. В userver есть всё необходимое для тестирования, работы с разными базами данных, кеширования, логирования, трейсинга, распределённых блокировок, работы с JSON, BSON, YAML, изменения параметров сервиса на лету и так далее.
Сейчас я расскажу о том, как возникла идея userver, как фреймворк развивался, в каких задачах его сейчас используют и почему именно выход в опенсорс был логичным следующим шагом. А затем приведу пример написания нового микросервиса.
Почему в С++ массивы нужно удалять через delete[]
Заметка рассчитана на начинающих C++ программистов, которым стало интересно, почему везде твердят, что нужно использовать delete[] для массивов, но вместо внятного объяснения – просто прикрываются магическим "undefined behavior". Немного кода, несколько картинок и взгляд под капот компиляторов – всех заинтересованных прошу под кат.
Feature freeze С++23. Итоги летней встречи комитета
На недавней встрече комитет C++ «прорвало», и в черновую версию C++23 добавили:
std::mdspan
std::flat_map
std::flat_set
- freestanding
std::print("Hello {}", "world")
- форматированный вывод ranges
constexpr
дляbitset
,to_chars/from_chars
std::string::substr() &&
import std;
std::start_lifetime_as
static operator()
[[assume(x > 0)]];
- 16- и 128-битные float
std::generator
- и очень много другого
Возможен ли быстрый Garbage collector на С++?
Не буду долго рассусоливать о том, что такое сборщик мусора и для чего он нужен (на эту тему уже есть достаточно статей). Но хочу отметить несколько важных деталей.
Установка OpenSSL для проекта на С++
Решая в целом тривиальные задачи, приходится сталкиваться с нетривиальными проблемами, и эта история, собственно, об этом.
В кои-то веки, решив написать код для себя любимого, проработал проект, установил окружение, прописал в проекте boost и пошёл писать модули.
Ничто не предвещало беды, но в процессе написания кода было обнаружено, что модуль, который запрашивал у интернета погоду, получал вместо описанного в API json'а следующее: "400 The plain HTTP request was sent to HTTPS port". Уж чем руководствовался разработчик сайта, не перенаправивший запрос без персональных данных, не знаю, но видимо хакеры хотят украсть сведения о погоде в деревне так сильно, что спать и есть не могут.
И тут я сделал манёвр, который стоил мне 50 лет. Точнее, пары бессонных ночей, так как работать тоже надо. Ничтоже сумнящийся, подключил boost::asio::ssl, написал тестовый код, который должен был проверить что теперь есть контакт, но тут моя бровь поднялась вверх в первый раз: проект перестал собираться, потому что в системе не было OpenSSL.
Как написать свою кроссплатформенную библиотеку для хуков и не отстрелить себе ноги
В текущих реалиях, для перехвата нативных функций существует большое множество библиотек. Но что делать если ни одна из них тебе не нравится?
Конечно же написать свою!
В этой статье я расскажу что лежит внутри библиотек для перехвата x86 кода и почему оно так работает. А также - как искал баги неделями, и что из этого вообще получилось.
Из вагона направо: как работают подсказки 2ГИС
Весной мы добавили новую подсказку о том, в какую сторону выходить из вагона метро. Меня зовут Влад, я программист С++, и на примере этой подсказки хочу рассказать, из чего состоит жизненный цикл релиза новых фич в 2ГИС. И сколько всего происходит, когда добавляешь — казалось бы — небольшую новую строку с текстом.
Конкурс внимательности: PVS-Studio vs Хакер
Время от времени мы пишем статьи в духе "статический анализатор внимательнее C++ программиста". Сегодня мы продолжим эту традицию, разве что заменив "программист" на "хакер".
Предупреждения помогают писать лаконичный код
Некоторые предупреждения анализатора или компилятора сложно однозначно классифицировать как ложное срабатывание или указание на настоящую ошибку. Бывает, что формально анализатор/компилятор прав, но и код работает правильно. Что делать? Возможно, это повод упростить код.
CWE Top 25 2022. Обзор изменений
Список CWE Top 25 отражает наиболее серьёзные недостатки безопасности ПО. Предлагаю вам ознакомиться с обновлённым топом в обзоре изменений за прошедший год.
Double, Float — не вещественные числа
Во многих источниках тип double и float, числа с плавающей запятой/точкой зачем-то называют вещественными. Такое чувство что кто-то когда-то совершил ошибку или не внимательно написал эту глупость и все как один начали её повторять, совершенно не задумываясь о чём они говорят.
Ладно это были бы просто троечники студенты и любители, так эту ошибку говорят и те, кто обучают специалистов. И эта проблема терминологии не одного ЯП, их правда много (Java, C++, C#, Python, JS и т.д.) везде, где бы я не искал, всегда находятся статьи, ответы, лекции, где дробные числа называют вещественными!
Украшаем молоток: как автоматизировать разбор проблем в дебаггере
Межмодульный анализ C и C++ проектов в деталях. Часть 2
В первой части статьи мы рассматривали основы теории компиляции C и C++ проектов, в частности особое внимание уделили алгоритмам компоновки и оптимизациям. Во второй части мы погрузимся глубже и покажем ещё одно применение межмодульного анализа. Но в этот раз не для оптимизаций исходного кода, а для улучшения качества статического анализа на примере PVS-Studio.
Попытки в блог №0. Начало: embedded разработка и как я очутился на Хабре
Спустя полтора года опыта работы в embedded разработке в большом соло-проекте, в который меня совсем зелёного, ещё не окончившего университет, бросили сразу после собеседования в первой понравившейся мне компании, вдруг пришло в голову осознание: "нужен код-ревью!". Предпосылкой к этому стало то, что я почти закончил проект и подумал начать его рефакторить. Именно это подтолкнуло меня решиться попробовать оформить мысли в блог, в котором кто-то найдёт для себя идеи, как не надо делать (а где-то, наоборот, как надо), а я смогу разложить по полочкам всё то, что крутится у меня самого в голове.
Пишем онлайн-тренажёр для Python, C++ и Go: опыт Практикума
Один из вариантов мини-IDE в интерфейсе урока
Привет! Меня зовут Павел Свиридов, я руководитель группы разработки в Яндекс Практикуме. Сегодня я вместе со своим коллегой, разработчиком Владимиром Лукьяновым, хочу рассказать о том, как наша команда развивала онлайн-тренажёры в вебе — это такие маленькие среды разработки, встроенные в курсы Практикума. Основное внимание уделю тренажёрам Python и С++, а о других языках скажу пару слов в самом конце и покажу на примере, как создать тренажёр для языка Go.
Языка С/C++ не существует
Каждый день везде, в том числе в технических статьях, появляется мифический С/С++, честно говоря я просто устал это видеть и хочу в этой короткой статье донести простейшую мысль - С и С++ это два совершенно разных языка с разными требованиями и подходами к разработке.
IEC 61499 и решения с открытым исходным кодом для разработки систем управления
Традиционно мир разработки для встраиваемых решений делится на программирование ПЛК, где используются среды стандарта IEC 61131 и разработку на С/С++ для микроконтроллеров и embedded Linux. Стандарт IEC 61499 является наследником стандарта IEC 61131 и предназначенн для разработки распределенных систем управления. Основным строительным элементов IEC 61499 является функциональный блок похожий на конструкцию языка FBD. Опенсорсные инструменты Eclipse 4diac IDE и Eclipse 4diac forte позволяют разработать распределенную систему управления из нескольких Raspberry PI или компьютеров с Linux, Windows или Freertos. Доступна работа с распространенными полевым шинами и возможность расширения библиотек блоков на С++.
Статический анализатор кода vs разработчики. Шо, опять?
В середине мая этого года мы опубликовали обновлённую версию нашего квиза для C++ разработчиков. Спустя 2 месяца мы решили рассказать о результатах.
Вклад авторов
-
Andrey2008 6561.9 -
tangro 2409.0 -
SvyatoslavMC 2388.0 -
antoshkka 1757.0 -
haqreu 1366.0 -
olegchir 968.2 -
khizmax 945.4 -
eao197 876.0 -
anastasiak2512 741.0 -
0xd34df00d 726.0