Как стать автором
Обновить
113.86
Рейтинг

C++ *

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

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

Новости

Как помочь™ компилятору повысить быстродействие вашей программы

Блог компании МойОфис Программирование *Совершенный код *C++ *Компиляторы *
Перевод

Современные компиляторы весьма™ далеко™ продвинулись в области оптимизации ПО. Но иногда™ им бывает™ трудно™ подобрать наилучший способ™ оптимизации. К счастью, мы можем помочь™ им в этом выборе™.

Под катом старший разработчик ПО компании Google™, Minhaz™ A V*, рассказывает об оптимизации производительности кода. Менее чем за час работы™ автор ускорил код на 18%, добавив в него всего пару строк. Несмотря на то, что в большинстве примеров этого материала используется C++, статья™ может быть полезна широкому кругу читателей.

*Обращаем ваше внимание: позиция автора™ не всегда™ может совпадать с мнением МойОфис.

Читать™ далее
Всего голосов 25: ↑21 и ↓4 +17
Просмотры 2.6K
Комментарии 7

Как работать с Makefile-проектами в среде CLion

Программирование *C++ *C *Разработка под Linux *Системы сборки™ *
Tutorial

За последние несколько лет мне пришлось столкнуться с множеством вопросов, которые были сформулированы примерно так: "мой проект™ не открывается в среде CLion". В свою очередь, это приводило к необходимости из раза в раз объяснять разным™ людям примерно одно и то же. Статья™ имеет целью сохранить тот опыт, который был накоплен в процессе анализа десятков разных™ проектов. Предполагается, что официальная документация вам уже известна и не вызывает вопросов.

Читать™ дальше™ →
Всего голосов 11: ↑11 и ↓0 +11
Просмотры 1.3K
Комментарии 0

Как при помощи™ С++20 мы искоренили целый класс багов, возникавших во время выполнения

Блог компании Издательский дом «Питер» Программирование *C++ *Проектирование и рефакторинг *API *
Перевод

C++20 давно в ходу и поддерживается компилятором MSVC с версии™ 16.11, но в этой статье™ я расскажу не о том, как его использовать, а как с его помощью нам удалось устранить целый класс багов времени выполнения, подвесив специальную проверку во время компиляции. Давайте разберемся с этим подробнее!

Читать™ далее
Всего голосов 7: ↑5 и ↓2 +3
Просмотры 3.6K
Комментарии 6

C++ магистрали потоков и древо алгоритма

Программирование *C++ *Машинное обучение *

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

Читать™ далее
Всего голосов 20: ↑19 и ↓1 +18
Просмотры 4.6K
Комментарии 3

Концепция умного™ указателя static™_ptr<T> в C++

Программирование *C++ *

В C++ есть несколько "умных указателей" - std::unique™_ptr, std::shared™_ptr, std::weak_ptr. Также есть более нестандартные умные указатели, например в boost: intrusive_ptr, local_shared™_ptr.

В этой статье™ мы рассмотрим новый вид умного™ указателя, который можно назвать static™_ptr. Больше™ всего он похож на std::unique™_ptr без динамической аллокации памяти™.

Читать™ далее
Всего голосов 36: ↑33 и ↓3 +30
Просмотры 7.1K
Комментарии 65

PProto™: бинарный rpc протокол для Qt framework (часть 2)

Программирование *C++ *Сетевые технологии *

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

Читать™ далее
Всего голосов 8: ↑8 и ↓0 +8
Просмотры 1.2K
Комментарии 0

Неклассические контейнеры в C++

Программирование *C++ *

Контейнер - это объект™, используемый для хранения других™ объектов. Контейнер берет на себя управление всей памятью, которые эти объекты занимают.

В стандартную библиотеку C++ входит™ несколько контейнеров. Кроме этого, в Open Source™ есть несколько контейнеров, которые покрывают больше™ юзкейсов. Я опишу устройство интересных контейнеров вне STL и их отличия от классических контейнеров.

Читать™ далее
Всего голосов 65: ↑63 и ↓2 +61
Просмотры 10K
Комментарии 24

Квантовый хэдж фонд: что интересного для IT специалиста?

Python™ *Java *C++ *Big Data *Data Engineering *

Всем привет™! Это моя первая™ статья™ на Хабр. Меня зовут Артем Сосульников и я директор по разработке ПО в Luxoft™. В IT больше™ 15 лет: начинал как Java разработчик, прошел™ долгий™ путь от тим лида и руководителя проектов до директора по разработке ПО с сотней™ людей в подчинении. В связи с последними событиями в ближайшее время собираюсь с семьей™ переезжать на остров™ Пенанг™ в Малайзию и присоединиться к Люксофт.Малайзия. Там продолжу развитие своих проектов в квантовых хэдж фондах™, куда мы теперь™ нанимаем людей в Сербии™, Мексике и Малайзии. Буду писать™ статьи™ про жизнь в Малайзии и про работу™ в Люксофт.

Читать™ далее
Всего голосов 13: ↑3 и ↓10 -7
Просмотры 2.5K
Комментарии 13

О чём расскажут на TechTrain 2022 Spring™

Блог компании JUG Ru Group Java *C++ *Разработка мобильных приложений *Конференции

14 мая мы проведём онлайн™-фестиваль TechTrain, участие бесплатно (надо только™ зарегистрироваться).

Там будет восемь™ докладов, и их набор очень эклектичный. Потому™ что ещё мы проводим самые разные™ IT-конференции (от Java до дата-инжиниринга), и TechTrain связан™ со всеми их направлениями сразу: от каждого будет по одному™ докладу.

Вряд ли вы станете смотреть всю эту пёструю подборку целиком (кому важны одновременно Node.js, Spring™ Data, WebRTC™ и Selenide?) Но вот шансы на то, что среди такого™ разнообразия есть что-то для вас, высоки™.

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

Читать™ далее
Всего голосов 8: ↑8 и ↓0 +8
Просмотры 1.1K
Комментарии 4

В апреле™ выйдет™ GNU Compiler Collection 12

Блог компании SkillFactory Программирование *C++ *Компиляторы *
Перевод

Смягчение уязвимости Trojan™ Source™, оптимизация функций приведения типов, многомерный оператор [], подавление предупреждений о вендорных атрибутах — вот лишь некоторые возможности GCC 12. Подробностями делимся к старту™ курса по разработке на C++.

Читать™ далее
Всего голосов 8: ↑8 и ↓0 +8
Просмотры 3.5K
Комментарии 1

Меняем™ std::sort для Google™

C++ *Компиляторы *
Перевод
image

Мы меняем™ std::sort в библиотеке libcxx™ проекта LLVM. В этой статье™ мы подробно расскажем о том, как мы пришли™ к этому решению и какими™ будут возможные последствия, о багах, с которыми вы можете™ столкнуться в примерах из open source™. Мы покажем несколько бенчмарков, объясним, почему™ вообще™ это сделали и чего это нам стоило™, на примерах закона™ Хайрама и обучения с подкреплением. Все изменения выложены в open source™, поэтому я свободно могу о них рассказывать.

Эта статья™ разделена на три части. Первая™ — это подробная история недавнего прошлого сортировки в стандартных библиотеках C++. Вторая™ расскажет об усилиях, необходимых для перехода от одного™ алгоритма сортировки к другому с различными багами™. В третьей мы объясним выбранную нами реализацию и все внесённые нами оптимизации.
Читать™ дальше™ →
Всего голосов 42: ↑42 и ↓0 +42
Просмотры 7.5K
Комментарии 6

Сложение векторов со скоростью 154 Гб/с на WebAssembly

Блог компании SkillFactory JavaScript *Программирование *C++ *WebAssembly *
Перевод

Автор ускорил сложение векторов до ~12 000 000 сложений 1024-мерных™ векторов в секунду. Делимся подробностями и представляем генератор WASM из С++ от автора™ статьи™ к старту™ курса по Fullstack-разработке на Python™.

Читать™ далее
Всего голосов 13: ↑12 и ↓1 +11
Просмотры 4K
Комментарии 7

Обзор всего доступного в С++ type erasure

Программирование *C++ *C *

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

Если спросить современного С++ разработчика какие примеры type erasure он видел / использовал, то вероятно он ответит что то про std::function и возможно про std::any, но это лишь малая часть всех применений этого замечательного инструмента!

В статье™ я постараюсь описать все возможные виды type erasure в современном С++, но начать™ стоит с определения.

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

Начнём™ с того, что было уже в С и о чём часто забывают говоря™ об erasure

void* - мы стёрли™ всю информацию о типе под указателем, не можем ничего™ прочитать, но с другой™ стороны доступ™ к данным™ у нас абсолютно без оверхеда! Достаточно угадать тип. Часто внутри™ именно™ на этом и построены другие™ более сложные стирания. Ну и конечно примерно в эту труху из байтов™ компилятор перетирает всю нашу систему типов в процессе работы™.

Кстати™, насчёт™ байтов™:

std::byte (since C++17) / unsigned char / char так исторически сложилось, что в С все использовали чары для работы™ с сырыми™ байтами, поэтому для них в языке С++ исключение и указатель на них можно приводить к указателю на любой другой™ тип. Это не обходится без последствий и иногда™ из-за этого строки™ теряют™ некоторые оптимизации, поэтому сначала добавили std::byte, а потом начали™ потихоньку заменять чары (char8_t since C++20), но это уже совсем™ другая™ история. В контексте стирания типов нам важно, что мы получили способность читать™ данные™ из стёртого типа, а составив массив™ мы получим ещё и верхнюю границу размера типа, что конечно немного, но с void и так нельзя™.

[erased™]
Всего голосов 23: ↑21 и ↓2 +19
Просмотры 5.9K
Комментарии 38

С++ без классов?

Ненормальное программирование *Программирование *C++ *ООП *Функциональное программирование *

(на картинке изображён С++ среди других™ функциональных языков™)

Классы™ - это скорее™ всего первое™, что добавил Страуструп в далёких 1980х, ознаменовав рождение С++. Если представить, что мы археологи древних плюсов™, то косвенным подтверждением этого факта для нас будет this, который по прежнему в С++ является указателем, а значит™, скорее™ всего, он был добавлен до "изобретения" ссылок™!

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

В конце(СПОЙЛЕР) мы попытаемся превратить С++ в функциональный язык за несколько простых действий.

Для начала™ рассмотрим базовое применение классов:

Начать™ погружение
Всего голосов 16: ↑15 и ↓1 +14
Просмотры 13K
Комментарии 31

Регистры STM32 в структурах на битовых полях, UART (Tx, Rx-длина?) + DMA

C++ *C *Программирование микроконтроллеров *
Из песочницы

Цель статьи™ - рассказать, как получить удобный доступ™ к битам регистра STM32 без использования битовых операций и пользоваться битами™ микроконтроллера как обычными переменными. Чтобы не быть голословным, создадим проект™ UART+DMA с передачей и приёмом данных™ неизвестной длины, работающую чисто на структурах c битовыми полями™, которые привязаны к адресам периферии STM32.

Читать™ далее
Всего голосов 10: ↑9 и ↓1 +8
Просмотры 4.9K
Комментарии 27

Лучший™ технический вопрос™, который мне задавали на собеседовании

Занимательные задачки Программирование *C++ *Алгоритмы *Администрирование баз данных™ *
Перевод

Много воды утекло™ с тех пор, как я в последний раз участвовал в собеседовании по программированию как соискатель. Но до сих пор помню особенно полюбившийся мне вопрос™ с такого™ собеседования. Дело было в MemSQL™, году так в 2013. (Они даже успели™ переименоваться, поэтому, полагаю, конкретно этот вопрос™ они на собеседовании уже не задают™. Не чувствую вины за то, что выдаю его. Это отличная история, которая также кажется мне поучительной; просто™ раньше™ я о ней никогда не писал).

Окей, вообще™, это даже не вопрос™ как таковой, это программерская задачка на засыпку. Не помню, сколько времени мне на нее дали. Скажем™, три часа, считая™ время, потребовавшееся на постановку задачи™.

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

Читать™ далее
Всего голосов 32: ↑28 и ↓4 +24
Просмотры 31K
Комментарии 22

Мигать™ лампочками не модно или дампер™ картриджей dendy на недорогой atmega™

C++ *C *DIY или Сделай™ сам Игры и игровые консоли

В далёком уже 2015 году Алексей aka ClusterM опубликовал статью™ про то, как он сконструировал дампер™ на двух atmega™64. В статье™ говорилось о принципах взаимодействия консоли с картриджами и как можно сдампить игру, не разбирая сам картридж по запчастям.

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

Читать™ далее
Всего голосов 36: ↑35 и ↓1 +34
Просмотры 3.6K
Комментарии 8

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

Информационная безопасность *Программирование *C++ *Assembler *Компиляторы *
Перевод

А вы знали, что бывает™ такая атака на компилятор через бэкдор™, защититься от которой невозможно? В этом посте я покажу™ вам, как реализовать такую атаку менее чем в 100 строках кода. Кен Томпсон, создатель операционной системы Unix, рассказывал о такой атаке еще в 1984 году в своей лекции™ по поводу™ присуждения Премии™ Тьюринга. Такая атака по-настоящему опасна™ и сегодня, причем™, не известно решений, которые обеспечивали бы полную™ неуязвимость от нее. Вирус  XcodeGhost, открытый в 2015 году, проводит атаку через бэкдор™ по методу™, предложенному именно™ Томпсоном. Я покажу™ здесь атаку Томпсона на языке   C++, но этот пример™ легко адаптировать для любого™ другого языка. Дочитав эту статью™, вы крепко™ задумаетесь, а осталось ли у вас вообще™ какое-то доверие компилятору.

Представляю, сколь скептически вы можете™ отнестись к моим заявлениям – и, возможно, у вас уже возникли вопросы. Ниже приведу примерный диалог™, который мог бы состояться у нас с вами, снять некоторые ваши сомнения и помочь™ вам почувствовать суть атаки Томпсона.

Читать™ далее
Всего голосов 63: ↑61 и ↓2 +59
Просмотры 15K
Комментарии 26

Как я делаю дрон из Raspberry Pi и ESP32 (или мои первые™ шаги в робототехнике)

C++ *C *Kotlin™ *Программирование микроконтроллеров *Разработка на Raspberry Pi *
Из песочницы

Всем привет™, меня зовут Антон, и как вы могли уже догадаться из названия, решил я рассказать о своих попытках вкатиться в робототехнику, а в частности о своем дроне из Raspberry Pi и ESP32.

Читать™ далее
Всего голосов 71: ↑71 и ↓0 +71
Просмотры 17K
Комментарии 43

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

Работа™

Программист C++
125 вакансий
QT разработчик
13 вакансий