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

C++ *

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

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

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

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

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

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

Новости

Концепция умного указателя 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 без динамической аллокации памяти.

Читать далее
Всего голосов 25: ↑22 и ↓3 +19
Просмотры 3.8K
Комментарии 35

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

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

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

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

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

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

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

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

Читать далее
Всего голосов 64: ↑62 и ↓2 +60
Просмотры 9.6K
Комментарии 24

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

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

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

Читать далее
Всего голосов 13: ↑3 и ↓10 -7
Просмотры 2.4K
Комментарии 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
Просмотры 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.4K
Комментарии 6

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

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

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

Читать далее
Всего голосов 13: ↑12 и ↓1 +11
Просмотры 3.9K
Комментарии 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.8K
Комментарии 38

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читать далее
Всего голосов 36: ↑35 и ↓1 +34
Просмотры 3.5K
Комментарии 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.

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

Сборка мусора в Unreal Engine

C++ *Разработка игр *Unreal Engine *
Из песочницы

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

Если вам не интересна теория или то как оно работает в UE4, то можете промотать вниз до практических советов, там описываются вещи из практики по работе с GC. Но лучше знать и теорию.

Эта статья более релеватна к Unreal Engine 4.27 однако много всего работает так же и на версии UE 5.0 и на более низких версиях. Однако, стоит отметить, что, с версии 4.0 до 4.27 сборка мусора претерпела весьма значительные изменения и стала сильно лучше.

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

Особенности реализации STL в Clang, GCC и Microsoft С++

Блог компании VK Программирование *C++ *

Любая программа состоит из данных и алгоритмов их обработки. Для написания программ на C++ в начале 90-х годов прошлого века Александр Степанов с коллегами разработал библиотеку STL. Я, Михаил Полукаров из команды разработки VK Teams, заглянул под капот этой библиотеки чтобы разобраться, как правильно ей пользоваться, в каких случаях лучше использовать другие библиотеки, а в каких стоит написать что-то своё. 

В первую очередь я поделюсь своим опытом «граблей и багов STL», а также расскажу о почёрпнутом на бескрайних просторах интернета чужом опыте. В перспективе такие знания помогут не только решать поставленные задачи, но и делать это максимально эффективно.

Читать далее
Всего голосов 79: ↑77 и ↓2 +75
Просмотры 13K
Комментарии 11

Как перестать некорректно выражаться в коде

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

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

Взглянуть на С++ по новому
Всего голосов 11: ↑6 и ↓5 +1
Просмотры 7.1K
Комментарии 42

Cling – не просто интерпретатор C++

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

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

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

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

Работа

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