Как стать автором
Поиск
Написать публикацию
Обновить
103.19

C++ *

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

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

История одного блокчейна

Уровень сложностиСредний
Время на прочтение76 мин
Количество просмотров3K

На протяжении нескольких лет я участвовал в разработке блокчейн-платформы, вначале как разработчик, затем как руководитель команды (team lead, как это принято сейчас называть). За это время мне посчастливилось пройти все стадии жизненного цикла продукта, от идеи до выхода в продакшн. И это был уникальный опыт, в каком-то смысле драматический.  Дело в том, что в процессе своей довольно длительной карьеры я участвовал в огромном множестве самых различных проектов, но до сих мне не приходилось сталкиваться с таким количеством нетривиальных задач, которые требовали нестандартных решений.  И я хотел бы поделиться этим опытом.

Для кого? В первую очередь для специалистов, занимающихся проектированием блокчейн-систем – ведь всегда полезно посмотреть, что происходит у коллег по цеху. Руководителям команд, мне кажется, будет интересно понаблюдать за борьбой идей, процессом выработки решений, допущенными ошибками и их исправлениями. Остальным категориям разработчиков ПО представится возможность заглянуть во внутреннюю кухню блокчейна, увидеть, как это работает «под капотом», и применить полученные знания в других областях, не обязательно связанных с блокчейном.

Читать далее

Профилирование: сравниваем инструменты pt-pmp и perf на реальных примерах

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров1.6K

Привет, Хабр! В предыдущей статье был разобран первичный анализ работы приложения, какие инструменты стоит использовать для сбора информации и как с этими инструментами работать. Напомню, что речь шла о двух утилитах: poor man's profile (pt‑pmp), которая позволяет комплексно оценивать работу приложения, отображая off-cpu и on-cpuчасти; и perf, которая обладает высокой точностью и мощной функциональностью в целом. Оба этих инструмента применяются для анализа производительности, так как их комбинация позволяет целиком и со всех сторон осмотреть «пациента».

Однако есть один пункт, который не был раскрыт в прошлой части: использование этих инструментов на настоящих продуктах. Синтетический пример на базе open‑source‑проекта — это хорошо, но будет не лишним показать, какие реальные проблемы были найдены, исправлены и какой прирост производительности удалось в итоге получить. В этой статье мы поговорим о практическом применении pt-pmp и perf, с помощью которых удалось обнаружить места для оптимизации работы программы. Меня по‑прежнему зовут Александр Слепнев, устраивайтесь поудобнее, начинаем!

Читать далее

Во что компилятор C++ превращает код, или ускоряем код безопасно

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

Привет, Хабр! Меня зовут Алексей Салтыков, я инженер-программист в команде КОМПАС-3D. Решил поделиться соображениями насчет оптимизаций в С++ глазами обычного разработчика. Хочется сразу предупредить, что статья никого ни к чему не призывает. Цель – наглядно показать, как незначительные трансформации кода могут помочь компилятору лучше оптимизировать код и насколько это вообще эффективно.

Читать далее

Компьютерное зрение на C++: пишем приложение для поиска объектов под Android

Уровень сложностиСредний
Время на прочтение25 мин
Количество просмотров16K

Привет, Хабр! Меня зовут Кирилл Колодяжный, я пишу код на С++ для систем хранения данных в YADRO. Помимо основной работы, интересуюсь машинным обучением и его возможностями, в том числе на «плюсах». Недавно мне стало интересно разобраться, как развернуть модель компьютерного зрения на мобильном устройстве с операционной системой Android.

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

Расскажу, как реализовать обнаружение объектов в реальном времени с помощью камеры на мобильной платформе Android с использованием библиотек PyTorch и NCNN и моделей компьютерного зрения YOLOv5 и YOLOv4. Шаблон моего приложения пригодится тем, кто хочет проверить прототип функциональности для компьютерного зрения на С++, использующий OpenCV на Android, но не хочет глубоко погружаться в программирование под Android. 

В первой части цикла мы:

• создадим проект в IDE Android Studio,

• реализуем сессию непрерывного захвата изображений камеры,

• преобразуем изображения в матрицу OpenCV, чтобы сделать дальнейшую работу удобной.

Читать далее

Путешествие в мир эмуляторов микропроцессоров

Уровень сложностиСредний
Время на прочтение24 мин
Количество просмотров14K

Всем привет!

Не так давно на Хабре появился занятный пост о разработке процессора, и я понял, что созрел для своей первой статьи как раз в этом направлении.

Тема разработки эмуляторов олдскульных микропроцессоров типа того же Intel 8080 не нова. Если вы уже разбираетесь в вопросе, то для вас этот пост не будет чем-то новым, разве что вы увидите еще один подход к реализации такого проекта. Для тех, кто ничего об этом не слышал – прошу под кат.

Читать далее

DIY на заводе или как сделать измерительный комплекс для оценки износа опорных роликов

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

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

В предыдущей статье я уже описывал свой опыт реализации программного (и немного аппаратного) комплекса «Системы сбора технологических данных» в рамках промышленного предприятия. А в этой статье я хочу поделиться опытом реализации DIY-проекта для нужд завода, речь пойдет об измерительном комплексе для оценки износа опорных роликов. Если стало интересно, то добро пожаловать под кат!
Читать дальше →

Что нового в PVS-Studio для Unreal Engine?

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

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

Читать далее

Рабочая C++ IDE в docker container

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров8K

Привет, хабр! Программирую на C++ / Qt / QML в среде разработки QtCreator уже 6-ой год. У меня есть определенные пересечения мыслей с мозгом груга и еще мне постоянно хочется избавиться от глупой и рутинной работы, которая есть на разных этапах разработки. Одна из таких работ - возня с IDE и рабочим окружением, особенно в мире C++ разработки. В статье постараюсь раскрыть проблему и описать свой текущий подход к решению.

Читать далее

PPSSPP или всё же psp? Смотрим баги в коде из будущего

Уровень сложностиСредний
Время на прочтение21 мин
Количество просмотров8.1K

Думаю, многих из нас охватывает тёплое чувство ностальгии, когда речь идёт о PSP. Эта портативная консоль, выпущенная в 2004 году, стала настоящим прорывом для своего времени. Она подарила нам возможность наслаждаться полноценными игровыми проектами в дороге, что было невероятно новаторским для того периода. У вас словно была маленькая частичка домашней консоли в кармане.

Читать далее

ecs, dynvtbl, логические потоки и Фараон

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров3.5K

В конце 90-х годов историческая серия градостроев от Sierra была на вершине популярности, получала отличные отзывы и породила немало последователей и подражателей, начиная от Сhildren of Nile и не заканчиваясь в Banished (2014), Pharaoh: A New Era(2023), Nebuchadnezzar (2021), Builders of Egypt(к сожалению закрытая) став фактически дедушкой жанра. Фараон появился в 1999 году после двух лет разработки, вслед за любимой многими Caesar III. Это была первая игра серии, которая перенесла сеттинг из Древнего Рима в Древний же Египет и предложила (хотя на самом деле фактически повторила, реальным шагом по механикам стал Зевс) сложный игровой процесс, не завязанный однако на микроменеджменте зданий и жителей. Собственно многие и помнят эти игры, благодаря сотням проваленных миссий, когда император в гневе присылал войска или королевство отзывало титул изза долгов. До первой игры от "пароходов" еще целый год, да и жанры и сеттинги достаточно далекие, так что 1999 и 2000 Фараон собирает лавры и сливки с продаж, а Simon Bradbury, главный технический гений студии и душа проекта, покидает команду и основывает свою Firefly Studios, чтобы подарить нам Stronghold.

В процессе кодоархеологических раскопок бинарника, что Цезаря, что Фараона было найдено немало интересных окаменелостей легаси технических решений, многие из которых я видел в других проектах и не только игровых. Возможно это дремучее легаси (хотя и не такое дремучее как AoE1/2) может показаться топорным, но красота решений определенно есть, и учтите что игры запускались и выдавали неплохие фпс (15-30), работая на разных первых пеньках, 586, атлонах с 32 мб памяти всего, а не только кеша. И работали быстро, красиво и на одном ядре.

Копнуть поглубже

Такие разные «плюсы»: моя карьера разработчика C++ в «Коде безопасности», Яндексе и Huawei

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

Хабр, привет! Меня зовут Никита, я софтвер-инженер в Huawei. Мой путь в IT был не совсем обычным — я осваивал алгоритмы раньше языка, откатывался почти к старту на каждом месте работы, а однажды даже занял второе место в хакатоне для «питонистов» без знания Python. Но обо всём по порядку.

Читать далее

Создаем свою библиотеку на C++ с тестированием, CMake и блекджеком: часть 2

Уровень сложностиСредний
Время на прочтение30 мин
Количество просмотров8.5K

В мире программирования создание собственных библиотек — это не просто возможность пополнения своего портфолио или способ структурировать код, а настоящий акт творческого самовыражения (и иногда велосипедостроения). Каждый разработчик иногда использовал в нескольких своих проектах однообразный код, который приходилось каждый раз перемещать. Да и хотя бы как упаковать свои идеи и знания в удобный и доступный формат, которым можно будет поделиться с сообществом.

Если вы ловили себя на мысли: «А почему мне бы не создать свою полноценную библиотеку?», то я рекомендую прочитать вам мою статью.

Эту статью вы можете использовать как шпаргалку для создания проектов, и не только библиотек.

Некоторые из вас могут подумать, что мы изобретаем велосипед. А я в ответ спрошу — сможете ли вы прямо сейчас, без подсказок, только по памяти, нарисовать велосипед без ошибок?

Добро пожаловать во вторую, скорее всего финальную часть статьи! Здесь мы окончательно допишем код, исправим некоторые ошибки.

Читать далее

Чистый код: Начало

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров9.1K

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

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

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

Читать далее

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

Шеф, всё пропало

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров20K

Ошибки программистов C++ — это отдельный вид искусства, вроде бы простой язык, но стоит отвлечься на чашечку кофе, как компилятор начинает вываливать простыню ворнингов пополам с ошибками, и иногда это больше похоже на древнеегипетские письмена, чем на нормальный выхлоп. Вы наверное и сами не раз сталкивались с разыменованием nullptr или перепутали (= и ==) по недосмотру. Часто причиной ошибкой является лень или невнимательность, или усталость - не зря появились суеверия "не комитить в пятницу вечером", "не кодить в состоянии изменного сознания" или "избегать кода под кофейным угаром", ну это когда три-четыре кружечки кофе навернул и пошел нести добрый код направо и налево.

Вообще статья планировалась про то как можно поиздеваться над switch оператором - была у меня запись разговора с одного питерского митапа, проходившего несколько лет назад и где присутствующим предложили написать "невозможный", но работающий код со switch. И вот в поисках этой записи я наткнулся на файл с описанием "пятничных" багов и комитов, которые бы в трезвом уме посреди недели врядли бы проскочили в мастер. А еще была статья тоже про ошибки "Федя, дичь", где уважаемый хабрачитатель угадывал причину разных ошибок, явных или не очень. Поэтому я решил продолжить в том же стиле, вопрос - ответ, а вам предлагаю также поучаствовать в отгадывании возможных причин. Все примеры из реальных проектов, игр, движков и пятничных комитов.

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

Поотгадывать баги, выпить чашечку кофе...

Пилим движок Arcanum. Урок 03. Работа с памятью, используем полиморфные аллокаторы

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

Приветствую Хабравчане!

Продолжаем мучить разрабатывать движок для моей любимой игры Arcanum. В данном уроке расскажу, как движок управляет памятью и какие паттерны и подходы использует. Напишем свою мини реализацию полиморфных аллокаторов из С++ 17. Расскажу о некоторых оптимизациях в движке.

Читать

Самые быстрые мьютексы

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

Cosmopolitan Libc хорошо известна своим «полиглотным жирным бинарным» хаком, который позволяем исполняемым файлам запускаться на шести операционных системах для AMD64/ARM64. Вас может удивить, что при этом она может быть лучше С‑библиотекой для вашего продакшена. Чтобы продемонстрировать это, давайте сравним библиотеку мьютексов Cosmo с другими платформами.

Мы напишем простой тест, который создает 30 потоков, увеличивающих одно и то же число 100 000 раз. Это поможет проверить, насколько хорошо реализация мьютексов справляется с задачей при интенсивном использовании.

Читать далее

Некоторые малоизвестные фичи, фокусы и причуды языка C

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

В этом посте разобраны некоторые фокусы, причуды и фичи языка C (некоторые из них – весьма фундаментальные!), которые, казалось бы, могут сбить с толку даже опытного разработчика. Поэтому я потрудился сделать за вас грязную работу и (в произвольном порядке) собрал некоторые из них в этом посте. Примеры сопровождаются ещё более вольными краткими пояснениями и/или листингами (некоторые из них цитируются).

Конечно же, здесь я не берусь перечислять абсолютно всё, так как факты из разряда «функция nan() не может устанавливать errno, поскольку в определённых ситуациях поведёт себя как strtod()» не слишком интересны.

ВНИМАНИЕ: сам факт попадания тех или иных вещей в эту подборку  не означает автоматически, что я рекомендую или, наоборот, не рекомендую ими пользоваться! Некоторые из приведённых примеров никогда не должны просачиваться за пределы списков наподобие этого, тогда как другие примеры невероятно полезны! Уверен, что могу положиться на ваш здравый смысл, дорогие читатели.

Читать далее

Zero-cost Property в С++

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров2.3K

Расскажу об одном решении которое имеет больше смысла в качестве упражнения а не практической пользы. Постановка задачи звучит так: Хочу получить в C++ семантику property как в C# и без накладных расходов.

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

К слову, компиляторы Microsoft имеют способ описать property но это не является частью стандарта C++.

Сразу отмечу что property получились с значительными ограничениями и больше подходят для имитации Swizzling из GLSL. По этому буду воспроизводить маленький кусочек vec2 а именно property yx которое должно возвращать исходный вектор с свапнутыми полями. Далее vec2 буду иногда называть контейнером, как более общий случай. Когда упоминаю property, буду подразумевать поле внутри контейнера, то есть yx в конкретном примере. Использую стандарт С++11

Желаемое поведение:

Далее примеры кода и все остальное

BMP Convert&Show

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

BMP Convert&Show

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

А еще там есть великая цитата.

Читать далее ->

Перегрузка операторов в C++

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

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

Представьте, что вместо вызова метода add() для сложения двух объектов, можно просто написать object1 + object2. Звучит здорово, не правда ли?

Читать далее

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