Обновить
283.93

C++ *

Типизированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Отслеживание изменений в директории с помощью Inotify

Время на прочтение4 мин
Охват и читатели14K
Столкнулся с задачей, где необходимо было отслеживать в ОС Linux изменение файла в директории на чистом С++. Так как чистый С++, Qt с его QFileSystemWatcher сразу отпадал, из-за того что необходимо было подключать QObject. В итоге решил пользоваться линуксовой функцией Inotify.
Читать дальше →

Квиз со звёздочкой для С++ программистов от Сергея Кушниренко

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели8.6K

Привет всем любителям побрейнштормить и хорошенько развлечься! Команда PVS-Studio на связи. Новый крутой квиз с интересными вопросами из мира программирования уже у нас на сайте. Да не простой квиз, а задачки от Сергея Кушниренко — разработчика игр в 4A Games! Если устали от рутинных задач и хотите поразмять мозг чем-то интересным, welcome!

Читать далее

Предновогоднее шоу: Топ 10 ошибок в C и С++ проектах в 2023 году

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели13K

Вот уже выпал снег, на дворе декабрь, а значит и Новый Год где-то рядом. В преддверии праздников мы решили показать вам наиболее интересные ошибки, которые мы смогли найти в коде популярных Open Source проектов. Наши авторы написали много познавательных статей, разобрали множество ошибок в коде, и теперь мы подведём итоги.

Читать далее

Эволюция enum

Время на прочтение8 мин
Охват и читатели20K

Константы — это здорово. Типы — это замечательно. Константы определенного типа — еще лучше. А enum классы — это просто фантастика.

В прошлом году мы говорили о том, почему следует избегать использования булевых параметров функций. Одно из предложенных решений — использование сильных типов, в частности, использование перечислений вместо голых булевых значений. В этот раз давайте посмотрим, как развивались перечисления и связанная с ними поддержка на протяжении всего жизненного пути нашего любимого языка.

Читать далее

CLI'нический парсинг

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели5.9K

Каждый программист однажды получает по голове необходимостью парсить аргументы командной строки и вот это наконец случилось со мной - так почему бы не использовать это как возможность (написать какую-то дичь) (CLI парсер)? Скажу сразу - мы тут чтобы развлекаться, потому требования к парсеру будут... Интересные

Читать далее

Тестовое в Firefly Studios или игра за час

Уровень сложностиПростой
Время на прочтение14 мин
Охват и читатели8K

Пару недель назад, на меня вышла HR "светлячков" и пригласила поговорить о позиции AI программера в их новую старую игру. Я был несколько удивлен, потому что знаком с парой ребят из студии и знаю, что найм у них сейчас остановлен. Но всегда интересно пообщаться с умными людьми, поэтому отказываться не стал. Первый созвон с HR вышел стандартный, где над чем работал, какие игры шипнул. Не очень понимаю зачем все это было спрашивать, если все это есть на линкедине подробно и с датами. Ну да ладно - видно такая их эйчарская доля по тридцать три раза переспрашивать. Или HR дальше второй страницы просто поленилась почитать.

Забукали время технического интервью. В полдень четверга на встречу приходит сотрудник студии и начинает просматривать резюмешку дальше второй страницы, где натыкается на скрин опенсорсного проекта StoneKingdoms, в который я некоторое время активно комитил. Проект, если что, получил благословение самого Simon Bradbury, так что проблем с правами на использование ресурсов из Stronghold нет. Посыпались вопросы, а что за проект? а как делаете? и что все на lua? а как же плюсы? Где-то на середине разговора к нам подключился другой разработчик "светлячков", с которым мое знакомство началось еще в 2010, когда он помогал восстанавливать исходники Caesar III и просто давал консультации как реализована игровая симуляция. Мы и сейчас иногда общаемся на форуме по ремейкам старых игр.

Как прошел собес...

Современный С++ в разработке девайсов

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели22K

Привет, Хабр.

Меня зовут Андрей Белобров. Я тимлид одной из команд, разрабатывающих приложения для умных девайсов Сбера.

На прошедшей недавно конференции Салют, OS DevConf! я выступил с докладом, в котором рассказал, как мы с командой разрабатываем приложения на С++ для умных устройств с виртуальным ассистентом. А также о том, как инструменты статического и динамического анализа помогают поддерживать единый стиль и высокое качество кода в проекте.

Во время доклада меня попросили подробнее описать детали нашего подхода в статье, поэтому рад поделиться с вами расширенной текстовой версией.

Все наши устройства должны уметь взаимодействовать c виртуальным ассистентом, проигрывать музыку, обновлять прошивку, выполнять аутентификацию пользователя и т.д.. Такая функциональность реализована в едином для всех платформ приложении, работающем в пользовательском режиме на каждом из наших устройств, будь то умная колонка, ТВ-приставка или умный телевизор.

Язык С++ позволяет писать эффективный и переносимый между различными платформами код, поэтому выбор языка программирования для нашего приложения был очевиден. При этом язык известен своей сложностью и возможностью выполнить одну и ту же задачу несколькими способами.
Чтобы успешно разрабатывать большой проект на языке C++, необходимо хорошо настроить процесс разработки в команде (а это несколько десятков инженеров). Также можно значительно осовременить разработку на C++ за счет использования подходящих инструментов статического и динамического анализа, и правильной интеграции их в процесс разработки.

Читать далее

Как мы переводили проект на CMake

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели11K

В статье мы расскажем о том, как переводили проект с рекурсивной сборочной подсистемы ЗОСРВ "Нейтрино", представляющей собой набор расширений инструмента GNU Make на сборочную систему CMake: с какими нюансами нам пришлось столкнуться, какие преимущества мы получили в результате перевода и как это повлияло на нашу команду разработчиков.

Читать далее

Держись, Маша! Ты, ведь, наша! Продолжение разбора книги «Цифровая схемотехника и архитектура компьютера»

Уровень сложностиСложный
Время на прочтение21 мин
Охват и читатели13K

Упомянутая в заглавии книга (далее H&H) - это про железо [15]. Я - про программирование, но на базе "железной модели" конечного автомата. И там и там математическая основа одна. Все это, действительно, крутая железная концепция, помогающая поставить не только синтез цифровых схем, но и программирование на совершенно другие рельсы, определяющие его будущее.

Параллелизм у программистов нынче в моде. Но, видимо, они (программисты) совсем не в курсе, что разработчики железа давным-давно погружены в эту тему. А потому им (я все про программистов) есть у кого поучиться. Но, похоже, некие амбиции-заскоки этому  мешают. Но, если вы этим не страдаете, то прочитайте книгу H&H и дойдите, ну, хотя бы до 4-й главы. Попробуйте реализовать одно-два упражнения, используя свой, программистский инструментарий - всякие там корутины, потоки и весь сопутствующий этому террариум. Убедитесь в его полном бессилии. И тогда, может, это заставит кое-что пересмотреть, переосмыслить. Только представьте: логический элемент - отдельный процесс, десятки, сотни, тысячи элементов - множество параллельных процессов, и все это в вашей ладошке (это я про смартфон) и даже работает!

Но пришло время исполнять обещанное (см. предыдущую часть темы в [1]). И пусть количество "плюсов" пока не достигло заданной планки, но ... если каждый "минус" считать за два "плюса", то это уже более чем ... ;) Так что спасибо всем, давшим положительную оценку - нет, не автору, а затронутой теме. Области знаний, от которой многое сейчас зависит.  Это те слова, которые мы вправе сказать в адрес теории, посвященной  синтезу цифровых схем, в адрес тех, кто занимался и занимается ее развитием, становлением и внедрением в практику.

Читать далее

Подготовка инструментов под фаззинг UEFI на базе edk2 в Windows

Уровень сложностиСложный
Время на прочтение12 мин
Охват и читатели5K

Так повелось в мире, что время от времени необходимо проводить исследования безопасности драйверов и прошивок. Одним из способов исследования является — фаззинг (Fuzzing). Не будем останавливаться на описании самого процесса фаззинга, для этого есть эта статья, отметим только, что в основном его используют для исследования прикладных приложений. И тут возникает вопрос: как профаззить прошивку, в частности прошивку UEFI? Здесь будет рассказано об одном из способов с использованием программного эмулятора EDKII, чтобы проводить фаззинг без развертывания аппаратных стендов. И что важно, все это сделаем в Windows.

Читать далее

Магия swizzle из шейдеров в C++

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели6.9K

В шейдере мы можем написать vec3 v0 = v1.xxy * 2 и любую другую комбинацию x, y, z и w в зависимости от длины вектора. Я рассматриваю только размеры вектора до 4, как самые распространенные для использования. Полученный вектор может не иметь той же самой размерности, как в меньшую так и в большую сторону и его компоненты могут быть скопированы в произвольном порядке. Это операция называется "swizzle" и это чертовски удобно для различных операций с малоразмерными векторами, особенно если они представляют игровые сущности в виде позиций, размера или цветов. Вектора используются повсюду в игровых проектах (да и не только в игровых), и не только в шейдерах. В какой-то момент swizzle было решено затащить и в наш игровой движок в базовые классы vec2, vec3 и vec4. Возникли вопросы: как добиться такого же синтаксического и семантического поведения в C++ коде, при этом минимизируя потери производительности.

Swizzl'ить дальше

История создания Оптимизатора для ПК: Nuxt.js, Electron и C++ в Одном Проекте

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели4.9K

Как я проектировал свой самый большой проект, сложности с которыми я столкнулся. Фишки и неочевидные моменты при разработке.

Читать далее

30 лет DOOM: новый код — новые баги

Уровень сложностиСредний
Время на прочтение19 мин
Охват и читатели22K

Сегодня первой игре из серии DOOM исполняется ровно 30 лет! Мы не могли обойти стороной это событие и в честь этого решили посмотреть, как же выглядит код этой легендарной игры спустя годы.

Читать далее

Ближайшие события

Внутренний Я(ндекс)

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели147K

В этой статье я хочу описать (часть) моего опыта взаимодействия со структурой, именуемой в дальнейшем «яндекс», с точки зрения работника. Опишу собеседования и этап «входа».

Да, уже были статьи про собеседование и даже в эту же структуру, некоторые из них я видел, но не во всём с ними согласен, к тому же конкретно С++ разработчиков я там не видел.

Читать далее

Lesta Studio и её тестовое задание с подвохом

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели49K

Искали статеечку с жалобами джуна о несправедливости IT? Так вот же она!

Открытая к интерпретации история собеседования.

Читать далее

Использование Nim В Python

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели7.7K

В этой статье поговорим о том, как можно ускорить свой код, написанный на Python с помощью модулей, скомпилированных через Nim.

Узнаем о том, какие библиотеки в Python написаны на Nim и даже напишем свой небольшой модуль для Python!

Читать далее

Разработка расширения для PHP на C++. Хуки встроенных функций и методов

Уровень сложностиСредний
Время на прочтение18 мин
Охват и читатели5.3K

PHP - это мощный и широко используемый язык программирования для веб-разработки. Однако, иногда требуется расширение функциональности или модификация стандартного поведения PHP с использованием более низкоуровневых языков, таких как C++. В этой статье мы рассмотрим, как создать расширение для PHP на C++ на примере разработки функциональности, позволяющей перехватывать вызовы встроенных функций и методов классов в php.

Читать далее

Технологии прошлого и настоящего: как я сделал Nixie Clock с самодельным драйвером на ESP8266

Уровень сложностиПростой
Время на прочтение23 мин
Охват и читатели16K

Радиолампы, словно артефакты из прошлого, олицетворяют нечто большее, чем просто технологию. Они несут в себе определенную магию, отражающую уникальное сочетание технического мастерства и эстетики. Не удивительно, что часы на неоновых индикаторах занимают довольно уникальную нишу в мире дизайна и интерьера. Они представляют собой не просто инструмент для отображения времени, но и элемент декора, который может значительно изменить атмосферу помещения. Этой статье я расскажу о своем опыте создания Nixie Clock на базе драйвера собственной разработки.
Читать дальше →

Как войти в айти за час с нуля, на языке с++ Win32 (графические приложения) «для самых маленьких»

Уровень сложностиПростой
Время на прочтение54 мин
Охват и читатели41K

Хе хе ну вы поняли «ВОйти ВАйти».

Принято считать, что программирование это сложно, но это миф (все проще чем кажется), и все что нужно чтобы стать программистом это немного упорства и изобретательности.

В этой статье мы получим все базовые навыки, которые нужны программисту, по окончании статьи у тебя будут все необходимые навыки для C++ Junior Desktop Developer, а также ты сможешь создавать 90% программ с софт портала, меньше слов ближе к делу.

Изучить программирование с 0 за час

Концепция RAII (Resource Acquisition Is Initialization)

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели29K

Здравствуй, Хабр!

RAII (Resource Acquisition Is Initialization) - это важная концепция в C++. Она представляет собой парадигму управления ресурсами, которая способствует безопасности и эффективности кода. В основе RAII лежит идея связывания жизненного цикла ресурса (например, памяти, файлового дескриптора или других ресурсов) с жизненным циклом объекта в C++. Это означает, что ресурсы выделяются и освобождаются автоматически при создании и уничтожении объектов.

В C++ управление ресурсами, такими как динамическая память или открытые файлы, может быть источником множества проблем, таких как утечки памяти, неопределенное поведение и непредсказуемые ошибки. RAII призван решить эти проблемы, предоставляя надежный и безопасный механизм управления ресурсами.

Читать далее

Вклад авторов