Обновить
256K+

C++ *

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

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

История одной фичи в Qt Multimedia

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

Несмотря на рекомендации мейнтейнеров, этот модуль каждый раз возраждается в Qt Essentials Modules.

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

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

Модуль, который хейтили много поколений разработчиков.

Речь пойдет про Qt Multimedia

Проверяем код дельфина Flipper Zero на чистоту с помощью PVS-Studio

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

Проверяем код дельфина Flipper Zero на чистоту с помощью PVS-Studio
Flipper Zero — швейцарский нож для гиков и пентестеров с открытым исходным кодом. Так получилось, что пути этого проекта и анализатора PVS-Studio пересеклись. Философский вопрос: начинать ли проверять проект, зная, что авторы проекта уже исправляют ошибки? Попробуем.

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

Что там у ReactOS?

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

16 декабря сего года, команда разработчиков ReactOS, спустя долгое время после последнего релиза (с последнего прошло почти полтора года) выпустила новую версию под номером 0.4.14. Это все еще альфа-версия.

В данной статье мы рассмотрим основные новшества как со стороны разработчиков, так и со стороны сообщества.

Читать далее

C++ Builder. Есть ли жизнь после смерти? Мнение одного динозавра

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

В этой статье я опишу собственные впечатления о последних версиях среды разработки RADStudio от Embarcadero и, возможно, постараюсь помочь кому-то в ответе на вопрос: «А оно мне надо?».

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

Читать далее

Девиации и разветвление личности: как лечить?

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

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

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

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

Читать далее

Как я написал алгоритм сортировки, который быстрее std::sort. Часть 1

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

Прим. Wunder Fund: ну, вы наверное, и сами догадываетесь, как мы любим быстрые алгоритмы и оптимизации. Если вы тоже такое любите — вы знаете, что делать)

В наши дни сказать, что изобрёл алгоритм сортировки, который на 30% быстрее того, что считают эталонным, это значит — сделать довольно смелое заявление. Я, к сожалению, вынужден сделать ещё более смелое заявление. Дело в том, что я создал алгоритм сортировки, который, для многих вариантов входных данных, вдвое быстрее std::sort. И, за исключением сортировки специально созданных входных последовательностей, на которых алгоритм упирается в свой худший случай, он всегда быстрее std::sort. (А когда появляются данные, приводящие к худшему случаю алгоритма, я эту ситуацию детектирую и автоматически перехожу на std::sort).

Почему я сказал: «…к сожалению, вынужден…»? Вероятно из-за того, что мне, скорее всего, предстоит нелёгкое дело убеждения читателя в том, что я действительно увеличил скорость сортировки в два раза. Поэтому материал, который я начинаю писать, вполне может получиться достаточно длинным. Но весь мой код открыт — это значит, что вы можете попробовать мои наработки на данных, характерных для вашей сферы деятельности. Поэтому я могу убедить вас в достоинствах моего алгоритма с помощью массы аргументов и результатов измерений. А ещё вы можете просто попробовать алгоритм самостоятельно.

Учитывая то, о чём я писал в моём прошлом материале, это, конечно, вариант поразрядной сортировки (radix sort). То есть — его временная сложность ниже, чем O(n log n). Вот два основных направления, по которым я усовершенствовал базовый алгоритм:

Читать далее

Я написал более быстрый алгоритм сортировки

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

Может показаться откровенной наглостью в наши дни утверждать, что Вы изобрели алгоритм сортировки, который на 30% быстрее, чем лучший существующий. Увы, я должен сделать гораздо более наглое заявление: я написал алгоритм сортировки, который в два раза быстрее, чем std :: sort для многих входных данных. И за исключением случаев, когда я специально конструирую воспроизведение нахудших для него ситуаций, алгоритм никогда не бывает медленнее, чем std :: sort (и даже когда попадаются эти худшие случаи, они обнаруживаются и происходит автоматический возврат к std :: sort).

Почему это утверждение неудачное? Потому что мне, вероятно, будет сложно убедить вас в том, что я ускорил сортировку в два раза. Однако, чтобы всех убедить, всё это должно теперь оказаться описанным довольно длинным сообщением в блоге, а весь исходный код - открытым кодом, чтобы вы могли опробовать его на любых данных. Так что я либо могу убедить вас множеством аргументов и измерений, либо вы можете просто опробовать алгоритм сами.

Читать далее

Топ-10 ошибок в C++ проектах за 2021 год

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

На улице мороз, ёлка наряжена, мандарины разложены. Дело идёт к Новому году, а значит — время рассмотреть самые интересные срабатывания, найденные C++ анализатором PVS-Studio в 2021 году.

Читать далее

Свободная касса: как мы ушли от монолита и настроили межмодульное взаимодействие на RPC

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

Всем привет, я — Дмитрий Пестеха, ведущий разработчик С++ команды POS-систем в «Магните». В этой статье я расскажу, как мы пилили монолитное приложение Касса на модули и отлаживали их взаимодействие на RPC-JSON. Спойлер: в процессе появился новый самописный язык интерфейсов - IDL.

Читать далее

Халява с Юлы и Авито. Часть 2

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

Новая версия программы на управляемых формах.

Продолжение статьи про халяву с Юлы и Авито.

Читать далее про халяву ;-) Часть 2

Режим шифрования AEAD-MGM

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

В 2017 году российской компанией КриптоПро был предложен новый AEAD режим шифрования Multilinear Galois Mode (MGM). Спустя некоторое время он был принят в российские и международные стандарты. Так как в интернете я смог найти только общее описание работы этого режима шифрования без конкретной реализации, то я решил попробывать свои силы и реализовать очень упрощённую версию своими руками...

Читать далее

Ускоряем разработку: автоматический перевод C++ в Swift. Часть I

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

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

Эта о том, как нам удалось автоматизировать превращение SDK из кроссплатформенной библиотеки на С++ в привычную свифтовую библиотеку. Иначе говоря, как мы соединяли Swift с C++. Спойлер: без изобретения велосипеда не обошлось.

Читать далее

Простой backend на C++: это возможно?

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

Была у меня мечта - писать backend на C++. А вот разбираться в unix socket'ах, TCP, многопоточной/асинхронной обработке запросов и во многом другом совсем не хотелось. Не верил я, что до сих пор нет каких-то минималистичных фреймворков. И сегодня я вам расскажу, как можно просто сделать HTTP API микросервис на C++ с помощью фреймворка Drogon.

Поехали!

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

Arbitrary Precision — удобная C++ библиотека для работы с длинными целыми числами

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

Вопреки тому, что авторских C++ библиотек для длинных целых очень много, мне было трудно найти решение, которое было бы простым в использовании на всех этапах (интеграция зависимости, разработка, релиз с зависимостями). Авторские библиотеки имеют одну или несколько проблем реализации: используют10^nв качестве базы счисления, нужна компиляция исходников, не оттестированные, неполный интерфейс (отсутствуют побитовые операторы), не кроссплатформенные.

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

Читать далее

Релиз CLion 2021.3: новый механизм удаленной разработки, тулчейн для Docker, улучшения отладчика и многое другое

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

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

Традиционно начало декабря — время, когда релизятся все продукты JetBrains. И сегодня я расскажу о CLion 2021.3 — новой версии нашей кроссплатформенной IDE для разработки на C и C++.

Главная новость прошедшей релизной недели — выпуск нового решения для удаленной разработки. Другие улучшения в CLion: оптимизация и новые возможности по работе с тулчейнами, улучшенное представление данных в отладчике, подсказки для выведенных типов в редакторе, повышение точности и новые возможности анализатора кода, новая опция для представления структуры текущего файла.

Читать далее

#define CPP WTF

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

Уже давным-давно я работал в одной крупной компании в должности C++-разработчика и столкнулся с одной очень странной ошибкой. Я написал примерно такой класс:

class Foo {

static void* operator new() {

return ...;

};

};

И увидел огромный stack-trace ошибок о недопустимом вызове оператора в этом контекста (на тот момент я использовал MS Visual Studio 2013 и встроенный в него MSVC-компилятор). Я искал проблему часа два, и помогло мне только просматривание готовой единицы трансляции. Как вы могли догадаться, проблема была связана с препроцессором, но обо всём по порядку.

Читать далее

C++20 Ranges — Полное руководство

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

C++20 Ranges, также известная как STL v2, представляет из себя более эффективную замену существующих алгоритмов и технических средств STL. В этой статье мы пройдемся по изменениям, введенным Ranges (диапазоны/интервалы), обсудим представления (views), которые представляют собой новый подход к композиции алгоритмов, и рассмотрим примеры реализации FizzBuzz с использованием трех разных методов, в каждом из которых используются некоторые аспекты библиотеки Ranges.

Однако сразу следует отметить, что Ranges — это одна из фич, реализованных в C++ 20 в полуготовом состоянии. C++23 должен приблизить нас к полной поддержке всего задуманного в рамках Ranges. Поэтому в некоторых примерах будет использоваться библиотека range v3.

Читать далее

Дорожная карта по изучению C++

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

Привет!

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

Заинтересовавшихся приглашаем к прочтению статьи, а также ознакомиться с дорожной картой.

Читать далее

Установка для монтажа изделий электронной техники

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

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

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

Читать далее

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

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

Недавно на Хабре проскакивала новость о Magnit Tech++ Meet Up, и в ней упоминалась задачка, которая меня заинтересовала. В оригинале задачка формулируется так:

Определена функция с сигнатурой:

void do_something(bool a, int b, std::string_view c)

Определить функцию, принимающую в произвольном порядке аргументы типов boolintstd::string_view и вызывающую функцию do_something с переданными параметрами в качестве аргументов.

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

Итак, поехали...