Все потоки
Поиск
Написать публикацию
Обновить
192.5

C++ *

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

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

Один день из жизни разработчика PVS-Studio, или как я отлаживал диагностику, оказавшуюся внимательнее трёх программистов

Время на прочтение3 мин
Количество просмотров5.2K

Главное предназначение статических анализаторов – найти те ошибки, которые остались незамеченными разработчиком. И недавно команда PVS-Studio снова столкнулась с интересным примером мощи этой методики.

Читать далее

Использование coroutines из С++20 в связке с NRF52832 и GTest

Время на прочтение29 мин
Количество просмотров9.3K

Появилась идея в домашнем проекте попробовать использовать сопрограммы из С++20 на маленькой железке. В качестве модуля для экспериментов был выбран E73 NRF52832. Из инструментария, который использовался в процессе разработки- arm-gcc-gnu-none-eabi 10.2, MSVC для проверки идей и прогона тестов на Windows-платформе. Изначально было в планах продемонстрировать на чем-то концепцию и как именно их можно было применять. Была идея адаптирования примера в виде мигания светодиодом, но он был слишком простой. Необходимо было придумать что-то более сложное и более полезное, что ли. Таким образом появилась идея переписать драйвер дисплея и пары фрагментов SPI-FLASH в проекте-долгострое.

Читать далее

Онлайн-конференция KasperskyOS Night: доклады о нестандартных задачах

Время на прочтение4 мин
Количество просмотров2.3K

Во всём мире найдётся немного компаний, разрабатывающих свою ОС с нуля (то есть не просто вариант Linux). Поэтому у каждой из них есть что рассказать: там занимаются задачами, с которыми обычный прикладной разработчик не сталкивается. Слушать их рассказы можно и из теоретического интереса («а как у вас всё внутри устроено?»), и из практического: «а как писать приложения под вашу ОС и что это мне даст?»

В России такой компанией стала «Лаборатория Касперского», где работают над безопасной системой KasperskyOS. Своим опытом команда делится на онлайн-конференции KasperskyOS Night, в предыдущий раз она проходила зимой, а 7-8 июля грядёт летняя версия. Поэтому в этом тексте «два в одном»: сначала видеозаписи зимних выступлений, а затем полная программа нового мероприятия.

Читать далее

Документирование кодовой базы. Зачем и как?

Время на прочтение10 мин
Количество просмотров41K

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

Читать далее

Из студента-юриста в программисты на C/C++: личный опыт

Время на прочтение14 мин
Количество просмотров25K

Привет. В данной статье я поделюсь своим опытом становления программистом, от зарождения идеи стать инженером программного обеспечения до первых офферов, а также расскажу об опыте прохождения собеседований на позицию С/С++ разработчика в Санкт-Петербурге и выводах, сделанных мною в процессе. Данная статья будет полезна преимущественно студентам, ищущим свою первую работу программистом, либо свитчерам, то есть людям, имеющим желание "войти в IT", а именно в разработку ПО.

Читать далее

Йо-хо-хо, и бутылка рому! Разбираем ошибки игрового движка Storm Engine

Время на прочтение11 мин
Количество просмотров4.5K

PVS-Studio – это инструмент статического анализа, позволяющий находить ошибки в исходном коде программ. В качестве знакомства с возможностями анализатора вашему вниманию предлагается результат проверки PVS-Studio исходного кода игрового движка Storm Engine.

Читать далее

Как мы реализовали систему камер для мобильной TPS игры

Время на прочтение11 мин
Количество просмотров6K

Как ранее упоминали в наших статьях на Хабре, сейчас Social Quantum разрабатывает мобильный Survival Action RPG от третьего лица в зомби сеттинге. Мы поставили цель — подарить игрокам консольный фил, доступный на мобильных девайсах. Один из приемов, который для этого используем — система камер. В этой статье рассказываем, как реализовали её в Unreal Engine 4 на С++.

Читать далее

Интеграция пресетов CMake в Visual Studio и Visual Studio Code

Время на прочтение6 мин
Количество просмотров17K

В CMake 3.19 и 3.20 был зарелижен CMakePresets.json, который позволяет пользователям указывать общие параметры настройки, сборки и тестирования и делиться ими с другими пользователями. Мы добавили поддержку CMakePresets.json в Visual Studio и создали расширение CMake Tools для Visual Studio Code. Теперь вы можете вызывать CMake с CMakePresets.json в Visual Studio, в Visual Studio Code, в конвейере непрерывной интеграции и из терминалов в Windows, Linux и macOS.

Интеграция CMake Presets теперь доступна в Visual Studio 2019 16.10 Preview 2 и CMake Tools 1.7.

Читать далее

Vulkan. Руководство разработчика. Отрисовка

Время на прочтение9 мин
Количество просмотров6.1K


Я занимаюсь техническими переводами в ижевской IT-компании CG Tribe и продолжаю публиковать перевод уроков Vulkan Tutorial на русский язык. Оригинальный текст руководства можно найти здесь.

Моя сегодняшняя публикация посвящена первым двум статьям раздела Drawing, — Framebuffers и Command buffers.

Содержание
Читать дальше →

Хочу больше годных профстатей, Хабр

Время на прочтение6 мин
Количество просмотров21K

Листая страницы Хабра, поймал себя на мысли, что я воспринимаю Хабр  как новостную ленту в социальной сети. То есть как нечто, что прямого отношения лично ко мне не имеет и касается меня очень  косвенным путем. Нечто полуразвлекательное-полупознавательное.

Ну, судите сами. Вот примерный список тем, которые превалируют на Хабре.

1. Что там новенького  у Илона Петровича Маска.

2. Как с помощью Arduino, говна и палок сделать годный фаллоимитатор радиоприемник.

3. Как я ушел с прошлой работы, и как мне было там плохо.

4. Как я нашел свою текущую работу, и какая она крутая.

5. Как живется специалисту X в стране Y.

6. Какой путь нужно проделать фельдшеру из Ангарска, чтобы стать тестировщиком мобильных приложений в Ирландии.

7. Обсуждение новомодной платформы для веб-разработки, которая через 3 года станет старомодной.

8. Промываем косточки крупным компаниям.

9. Исторические экскурсы в IT/технологии/медицину.

10.   Реклама компаний.

11.   Мнения обо всем отвлеченном на свете.

12.   И т.д.

Все эти темы и все статьи – неплохие, интересные. Но я хотел бы другого.

Читать далее

Производительность компилятора при работе с концептами в C++20

Время на прочтение17 мин
Количество просмотров8.6K

Привет, меня зовут Александр, я старший разработчик ПО в Центре разработки Orion Innovation. Хочу признаться, я люблю рассказывать про C++ и не только на различных митапах и конференциях. И вот я добрался до Хабра.

На CppConf Russia Piter 2020 я рассказывал про концепты и после выступления получил очень много вопросов про производительность компилятора при работе с ними. Замеры производительности не были целью моего доклада: мне было известно, что концепты компилируются с примерно такой же скоростью, что и обычные метапрограммы, а до детального сравнения я смог добраться совершенно недавно. Спешу поделиться результатом! 

Читать далее

Разработка стековой виртуальной машины и компилятора под неё (часть III)

Время на прочтение8 мин
Количество просмотров6.9K

По ходу разработки генератора кода для виртуальной машины понял, что виртуальная машина не готова к полноценным вызовам функций, с передачей аргументов и хранению локальных переменных функций. Поэтому её необходимо доработать. А именно, нужно определиться с Соглашением о вызовах (calling convention). Есть много разных вариантов, но выбор конечный за разработчиком. Главное - это обеспечить целостность стека, после вызова.

Соглашение о вызовах (calling convention) - это правила по которым при вызове функции передаются аргументы в вызываемую функцию (стек/регистры, порядок), кто и как очищает стек после вызова (вызывающий/вызываемый) и как возвращается результат функции в точку вызова (стек/регистр). Ко всему прочему, вызываемые функции могут создавать локальные переменные, которые будут хранится в стеке, что тоже необходимо учитывать, особенно, чтобы работала рекурсия.

На сегодняшний день, наиболее знакомое мне Соглашение о вызове (calling convention), регулирующее правила передачи аргументов функции, очистки стека после вызова, а также логика хранения локальных переменных - это C declaration (cdecl, x86/64) и pascal. Попробую применить эти знания с небольшими модификациями, а именно без прямого доступа программы к регистрам виртуальной машины (она же всё таки стековая, а не регистровая). Итак, логика будет следующая.

Читать далее

Почему я всё ещё люблю C, но при этом терпеть не могу C++?

Время на прочтение10 мин
Количество просмотров54K
Мне на удивление часто приходится говорить о том, почему мне всё ещё нравится язык C, и о том, почему я плохо отношусь к C++. Поэтому я решил, что мне стоит об этом написать, а не снова и снова повторять одно и то же.



Как это обычно бывает у C-программистов, язык C не был ни моим первым языком, ни языком, после которого я уже не изучал ничего другого. Но мне всё ещё нравится этот язык, и когда мне нужно писать программы — я выбираю именно его. Правда, в то же время, я стараюсь быть в курсе того, что происходит в мире современных (и не очень) языков программирования. Я слежу за тенденциями в этой сфере и пишу собственный хобби-проект, связанный с мультимедийными технологиями, на Rust. Почему же я до сих пор не поменял C на что-то более современное? И при чём тут C++?
Читать дальше →

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

Вебинар «Вычисляем на видеокартах. Технология OpenCL»

Время на прочтение2 мин
Количество просмотров2.5K
22 июня в 18.30 (Мск) Яндекс.Практикум проведет открытый вебинар «Вычисляем на видеокартах. Технология OpenCL». На вебинаре расскажем, как использовать видеокарту в качестве полноценного вычислительного устройства, мощности которого чаще всего простаивают.

Разберёмся, почему графические процессоры применимы не только к играм, но и к машинному обучению, обработке научных данных, криптовалюте, и напишем свою программу для видеокарты.



Для кого?


  • Для программистов, которые хотят освоить новую технологию и кардинально улучшить производительность программ
  • Для учёных, которым не хватает вычислительных мощностей для решения своих научных задач
  • Для всех, кому интересно, почему видеокарты завоевали мир и в чём секрет успешного майнинга

В программе вебинара

Читать дальше →

Повышение производительности дебажных билдов в два-три раза

Время на прочтение5 мин
Количество просмотров2.6K

Нам удалось добиться значительного повышения производительности рантайма для дебажной (отладочной) конфигурации по умолчанию Visual Studio в компиляторе C++ для x86/x64. Для программ, скомпилированных в режиме дебага в Visual Studio 2019 версии 16.10 Preview 2, мы отмечаем ускорение в 2–3 раза. Эти улучшения связаны с уменьшением накладных расходов на проверки ошибок в рантайме (/RTC), которые включены по умолчанию. 

Читать далее

Про uuid-ы, первичные ключи и базы данных

Время на прочтение11 мин
Количество просмотров20K

Статья посвящена альтернативным версиям Qt-драйверов для работы с базами данных. По большому счету отличий от нативных Qt-драйверов не так много, всего пара: 1) Поддержка типа UUID; 2) Работа с сущностью "Транзакция" как с самостоятельным объектом. Но эти отличия привели к существенной модификации исходных Qt-решений и изменили мой подход к написанию рабочего кода.

Читать далее

История портирования Reindexer'а – как покорить Эльбрус за 11 дней

Время на прочтение9 мин
Количество просмотров7.3K

Всем привет! На связи Антон Баширов, разработчик из ИТ-кластера «Ростелекома». Импортозамещение набирает обороты, а российский софт всё глубже проникает в нашу повседневную ИТ-шную сущность бытия. Процессоры Эльбрус и Байкал становятся более востребованными, комьюнити расширяется, но мысли о необходимости портировать весь наш любимый технологический стек на неизведанную архитектуру E2K звучат страшнее рассказов про горящий в пламени production-кластер.

Работая в команде по внедрению Эльбрусов, мне довелось в прямом и переносном смысле пощупать наши отечественные процессоры, поэтому я хочу поделиться полученным опытом, рассказать о том, какой болевой порог нужен, чтобы выдержать портирование NoSql native базы данных и не сойти с ума, а еще познакомить разработчиков с миром Эльбруса и его обитателями.

Читать далее

Отработка периодических событий в QNX и RT Linux

Время на прочтение13 мин
Количество просмотров8.9K

Пришло время использовать RT Linux.

Для периодических событий очень важна задержка начала отработки события. Точнее максимальный джиттер. Когда джитер соизмерим с периодом возникновения события, система становится непригодной для отработки периодических событий.

Читать далее

Находим и устраняем уязвимости бинарных файлов в Linux — с утилитой checksec и компилятором gcc

Время на прочтение9 мин
Количество просмотров9.1K

Изображение: Internet Archive Book Images. Modified by Opensource.com. CC BY-SA 4.0

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

Некоторые из них компилятор включает или отключает по умолчанию. Так в бинарных файлах могут возникать уязвимости, о которых мы не знаем.

Checksec — это простая утилита, позволяющая определить, какие свойства были включены при компиляции. В этой статье я расскажу:

  • как использовать утилиту checksec для поиска уязвимостей;
  • как использовать компилятор gcc для устранения найденных уязвимостей.

Установка checksec


Для Fedora OS и других систем на базе RPM:

$ sudo dnf install checksec

Для систем на базе Debian используйте apt.

Быстрый старт с checksec


Утилита сhecksec состоит из единственного скриптового файла, который, впрочем, довольно большой. Благодаря такой прозрачности вы можете узнать, какие системные команды для поиска уязвимостей в бинарных файлах выполняются под капотом:
Читать дальше →

Пара мыслей о геттерах и сеттерах в C++

Время на прочтение6 мин
Количество просмотров30K

Эта статья посвящена геттерам и сеттерам в C++. Приношу свои извинения, но речь пойдет не о корутинах. К слову, в ближайшее время появится вторая часть про пулы потоков.

TL;DR: геттеры и сеттеры не очень хорошо подходят для структуроподобных объектов.

Читать далее

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