Обновить
128K+

C++ *

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

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

Создание статической библиотеки на С++ для работы с большими числами

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

Я всегда слышал, что с библиотеками в С++ что-то не так, как и с ограничением максимального целочисленного значения, да и вообще то, что язык сложный и непонятный. Что же, сегодня, мы начнём писать собственную библиотеку больших чисел, полностью своими руками c 0, и узнаем, так ли страшен С++, как его малюют?

Если вы не разбираетесь в С++, не переживайте, эта статья имеет нулевой порог вхождения. Мы начнём с лёгкого, но вы даже не заметите, как начнёте разбираться в более сложных и непонятных, на первый взгляд, вещах. Главное, писать код логично. Думаю, данная статья будет интересна не только начинающим, ведь я постарался затронуть достаточно много тем. (для старожилов: моя цель не сделать оптимизирование или быстрее, а показать, что С++ не такой уж и сложный язык программирования. И да, я знаю, что существуют другие библиотеки, которые делают это быстрее и лучше. И да, было бы круче, если бы мы использовали булевую алгебру. И да, С++ про вечную оптимизацию, но это статья не про это. Спасибо.)

За сегодня мы узнаем, что такое: Перегрузка функций/конструкторов, прототипы функций, обработка исключений, пространство имён, псевдонимы типов, заголовок.h, как пользоваться отладчиком и как писать продвинутые/красивые комментарии. Пристёгивайтесь, будет безумно интересно.
Читать дальше →

Зачем С++ в Такси? Доклад Яндекса

Время на прочтение21 мин
Охват и читатели20K
Бэкенд первой версии Яндекс.Такси, которая вышла в 2011 году, был написан на Python. Мы довольно долго не меняли основной язык, но постепенно пришли к идее о необходимости С++ в стеке технологий. Перед вами доклад о том, что мы переписали в первую очередь и почему, а также о трюках С++, которые помогают нам справляться с ростом.

— Добрый день. Меня зовут Александр Голубев, и сегодня я вам расскажу, зачем C++ появился в Такси.
Читать дальше →

3D Graphics Rendering Cookbook

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

В августе этого года, после полутора лет напряженной работы, наконец-то вышла наша третья книга (про первую и вторую уже были посты на Хабре) ориентированная на разработку игр: 3D Graphics Rendering Cookbook: A comprehensive guide to exploring rendering algorithms in modern OpenGL and Vulkan.


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

5 любопытных примеров лямбд в C++: рекурсия, constexpr, контейнеры и многое другое

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

Пожалуйста, посмотрите мою небольшую статью в блоге, где я покажу вам несколько интересных примеров лямбд. Знаете ли вы, как написать рекурсивную лямбду? Хранить их в контейнере? Или вызывать во время компиляции?

Смотрите в статье.

Читать далее

Микроконтроллер + компьютер + своё программное обеспечение

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

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

Читать далее

Зачем нужен отчёт MISRA Compliance и как его получить в PVS-Studio?

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

Если вы не понаслышке знаете о MISRA и хотели бы понимать, соответствует ли ваш проект какому-то из стандартов ассоциации MISRA, то есть решение. Имя ему - MISRA Compliance. С недавних пор PVS-Studio научился генерировать отчёт соответствия по этому стандарту, и хочется поделиться тем, как это делается. Возможно, кому-то это упростит жизнь.

Читать далее

Создаем новое ключевое слово в C++

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

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

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

В этой статье мы в учебных целях напишем для C++ поддержку нового ключевого слова defer, которое будет работать во многом аналогично такому в языках Go и Swift. Это будет сделано через правку исходного кода Clang.

Создать!

Сеттер или геттер-ссылка — как сделать правильный выбор?

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

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

Читать далее

C++ — это замечательно, и вот почему

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

C++ — один из самых непонятных языков в современной поп-культуре разработчиков программного обеспечения. Люди часто сравнивают его с C, потому что это "низкоуровневый" язык. Следовательно, он получил репутацию эзотерического языка, который интересует только параноиков производительности. Это далеко не так. Я программирую на C++ в качестве основного языка уже некоторое время, и опыт разработчика на самом деле очень хорош — гораздо лучше, чем можно было себе представить.

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

Читать далее

C++20 в 2020: Модули

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

Разработка C++20 идет полным ходом, и это принесет немало новых возможностей. У нас есть библиотека ranges, корутины, концепции и новая библиотека форматирования строк. Но, возможно, самой большой потенциальной возможностью повлиять на структуру и архитектуру нашего кода являются модули.

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

Немного истории

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

Модули C++ — это попытка уменьшить потребность в одной конкретной директиве препроцессора, #include. #include позволяет нам разделить исходный код на логические части — в частности, интерфейс (обычно расположенный в файле ".h" или "header") и реализацию (обычно расположенную в файле ".cpp" или "source"). Разделение на заголовочный и исходный файлы дает огромное количество преимуществ, включая:

Читать далее

e-Legion рекомендует: интересные IT события этой осени

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

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

Прочь осеннюю хандру! Для поднятия морального духа и для увеличения вовлеченности в IT-просвещение мы собрали подборку интересных  IT-ивентов приближающейся осени 2021.

Читать далее

Красивое дерево PATRICIA (Реализация на C++)

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

Забытое, сложное, изумительное, красивое дерево со звуком ломающихся коленок.

Прострелить колени о патрицию

Использование STL для обработки сигналов в реальном времени. Доклад в Яндексе

Время на прочтение23 мин
Охват и читатели7.9K
Компьютерные игры, обработка аудиосигналов в режиме реального времени и другие подобные приложения низкой задержки требуют, чтобы код был не только корректным. Он также должен исчислять требуемый результат надёжно за детерминированный срок выполнения. В этом докладе head of technology в компании Cradle Тимур Думлер timuraudio рассмотрел, в какой степени стоит использовать стандартную библиотеку С++ для создания приложений с подобными «real-time» ограничениями. Какие инструменты из стандартной библиотеки можно применять с уверенностью, что они не будут блокировать поток, ждать освобождения мьютекса, не будут выделять или освобождать память и совершать другие действия с недетерминированной задержкой? Каких средств из набора стандартной библиотеки следует избегать и почему? По пути Тимур обсудил малоизвестные и неожиданные аспекты этих привычных инструментов.

— Всем привет, меня зовут Тимур Думлер. Хочу сказать, что я обычно делаю доклады на английском языке. Это всего второй раз в жизни, когда я докладываю на русском, мне это немножко непривычно. Спасибо большое, что подключились, сегодня мы поговорим про использование стандартной библиотеки C++ для обработки сигналов в real-time.
Читать дальше →

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

История платформы Highload.Fun для соревнований в оптимизации кода

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

Привет Хабр! Сегодня я хочу рассказать о платформе, где люди соревнуются в том, кто больше сможет сэкономить тактов CPU для решения задач. Её история началась весной 2021 года, после очередного HighLoad Cup'а от Mail.ru. Мне очень нравится этот конкурс, но, к сожалению, он проходит довольно редко (2017, 2018, 2021 года) и наблюдается тренд ухода от оптимизации на уровне операционной системы и железа к массовости, чтобы в лидерах были решения не только на C/C++, но и на более медленных языках программирования. В 2017 году нужно было сделать HTTP сервер, реализующий простую бизнес логику, лидеры писали свои решения с использованием низкоуровневых вызовов функций ядра и только вызов функции epoll_wait со временем ожидания -1, вместо 0, не позволило мне подняться в TOP-6 с 9 места. Если интересны технические детали, то можно почитать эту статью. В 2021 году нужно было обращаться к серверу, в котором были искусственные ограничения и нужно было разобраться в них, а не выжать из железа всё возможное. После конкурса был созвон, на котором участники давали обратную связь, по итогам которого стало понятно, что есть небольшое количество людей, которым интересна именно низкоуровневая оптимизация, а не только улучшение алгоритмов на уровне Big O. Так и родилась идея этой платформы. Под катом история и устройство платформы, а также набитые шишки.

Читать далее

30 лет ядру Linux: поздравление от PVS-Studio

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

25 августа 2021 года ядру Linux исполняется 30 лет. За это время ядро пережило множество изменений, так же, как и мы. Сегодня это огромный проект, работающий на миллионах различных устройств. Предыдущую проверку мы делали 5 лет назад, поэтому не можем пропустить такое событие и не заглянуть в код этого эпического проекта.

Читать далее

Как можно оптимизировать dot-product и не только. Доклад Яндекса

Время на прочтение18 мин
Охват и читатели4.6K
Разработчик инфраструктуры качества поиска Яндекса Ильнур Хузиев ilnurKh взял простую задачу — скалярное произведение двух векторов — и попробовал выжать все соки производительности кода. Из доклада вы узнаете, как использовать возможности процессора, настройки компилятора (и даже попробовать превзойти его), какой была бы правильная постановка задачи, как выбирать приоритеты и архитектуру. Да, вопрос выбора абстракций может встать даже на примере настолько простой задачи.

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

Имплементация простых фьючерсов с помощью корутин

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

Вместо return в корутине используется co_return, возвращающий результат. В этой заметке я хочу реализовать простую корутину с использованием co_return.

Читать далее

Double or Nothing

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

Фотография Esteban Lopez с Unsplash.com

Если вы выбрали C++ в качестве языка программирования, то учить его придётся всю жизнь. Смиритесь. Или выбирайте другой язык.

Чего только стоят новые стандарты, появляющиеся каждые 3 года. И каждый раз с какими-то полезными нововведениями в синтаксисе! Как им только это удаётся?

Есть разные способы совершенствоваться в С++. Кто-то читает Страуструпа от корки до корки, а потом почитывает стандарты. Кто-то ничего не читает и программирует по наитию - тупиковый путь, на мой взгляд.

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

Одна из моих любимых таких вещей - Guru of the Week (GotW) Херба Саттера.

Написано остроумно. И сколько пользы для программистки! Некоторые статьи уже морально устарели: кому нужен auto_ptr в наши дни? Но большинство ценно и сегодня.

Приведу здесь перевод выпуска №67 "Double or Nothing" от 29 февраля 2000 года. Моё любимое место — про тепловую смерть конечно ​

"Сложность 4/10

Нет. Этот выпуск не об азартных играх. Он, впрочем, о разных видах "float" так сказать, и даёт вам возможность проверить навыки касающиеся базовых операций над числами с плавающей точкой в C и C++.

Проблема

Вопрос Йуного Гуру (JG)

1) В чём разница между "float" и "double"?

Вопрос Гуру

2) Допустим следующая программа выполняется за 1 секунду, что неудивительно для современного настольного компьютера:

int main() {

double x = 1e8;

while (x > 0) { --x; }

return 0;

}

Как долго по-вашему она будет выполняться, если заменить "double" на "float"? Почему?

Читать далее

Новости из жизни Haiku за июль-август 2021

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

Здравствуйте, дорогие друзья.

Исторически сложилось, что изначально сообщество BeOS/Haiku обитало на qube.ru и Jabber-канале. Но, со временем оно перебралось в телеграмм канал и vk-сообщество, где участники сообщества, кто есть в VK, собирают и обсуждают новости проекта.

И в данном материале я хочу рассказать Вам новости из жизни Haiku накопившееся за июль-часть августа.

Читать далее

Vulkan. Руководство разработчика. Создание вершинного буфера

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


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

В своей прошлой публикации я начала перевод раздела Vertex buffers, и сегодня хочу представить перевод главы, посвященной созданию буфера — «Vertex buffer creation».

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