Как стать автором
Обновить
156.83

C++ *

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

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

Определение области коллизии

Уровень сложности Средний
Время на прочтение 15 мин
Количество просмотров 627
C++ *Разработка игр *Алгоритмы *Математика *
Из песочницы

Поиск контактных точек коллизии

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

Давайте же посмотрим как это сделать!

Поехали
Всего голосов 16: ↑16 и ↓0 +16
Комментарии 2

Новости

Seastar как платформа для опорной сети 5G и краткое сравнение с Boost.Asio, userver и другими

Уровень сложности Сложный
Время на прочтение 14 мин
Количество просмотров 1.7K
Блог компании YADRO Open source *Анализ и проектирование систем *C++ *Разработка систем связи *
Обзор

Я исследовал некоторые open-source фреймворки — кандидаты на платформу для опорной сети пятого поколения операторского уровня, и хочу поделиться своими выводами. Под катом я сравню Seastar, mTCP, Boost.Asio, userver и ACE, расскажу, почему примитивы синхронизации — это плохо, а затем погружу вас в глубины Seastar.

Читать далее
Всего голосов 13: ↑13 и ↓0 +13
Комментарии 6

Выжимаем ATtiny10, практическое применение

Уровень сложности Средний
Время на прочтение 10 мин
Количество просмотров 5.1K
C++ *C *Программирование микроконтроллеров *DIY или Сделай сам Электроника для начинающих
Из песочницы
💡 Сезон DIY

Это ещё один маленький домашний DIY (апгрейд гирлянды) на, практически, самом младшем из младших микроконтроллеров из линейки ATtiny - на ATtiny10. Классический ЛУТ с ошибками любителя, и написание взрослой прошивки, для серьёзного мигания светодиодами. Все результаты доступны на гитхабе.

Читать далее
Всего голосов 55: ↑55 и ↓0 +55
Комментарии 40

Buran Motion Planning Framework

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 634
C++ *Алгоритмы *Математика *Разработка робототехники *Робототехника
Обзор

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

В данной статье сделан обзор на фреймворк планирования движения BMPF.

На данный момент подавляющее большинство средств планирования движения работает по одному и тому же принципу: вся сцена описывается как один робот, после чего выполняется планирование на сетке (чаще всего A*, подробнее можно прочитать здесь).

У такого подхода есть две основных проблемы:

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

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

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

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

Истории

Правильный if для ускорения работы

Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 12K
Блог компании Специальный Технологический Центр C++ *Assembler *

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

Читать далее
Всего голосов 25: ↑23 и ↓2 +21
Комментарии 10

C++ Дайджест #0 (24 июля 2023 – 6 августа 2023)

Время на прочтение 3 мин
Количество просмотров 2.9K
C++ *
Дайджест

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

Это пилотный выпуск, так что любые советы, отзывы и рекомендации, как сделать наш дайджест лучше, в комментариях к статье или же напрямую мне в личные сообщения (habr, tg) приветствуются!

Приятного чтения!

Читать далее
Всего голосов 21: ↑19 и ↓2 +17
Комментарии 3

Импортозамещаем numpy, pandas, scipy и sklearn

Уровень сложности Средний
Время на прочтение 5 мин
Количество просмотров 4.8K
Open source *Программирование *C++ *Машинное обучение *
Обзор

Речь пойдет о библиотеках-аналогах numpy, pandas, scipy и sklearn на C++ (np, pd, scipy, sklearn соответственно).

Эти проекты изначально задумывались как хорошее дополнение к портфолио, однако затем наступило всё более и более плотное вовлечение в процесс работы над ними, челенджи становились всё более и более существенными, и проект превратился в несколько отдельных проектов, содержащих десятки тысяч строк кода...

Читать далее
Всего голосов 17: ↑13 и ↓4 +9
Комментарии 30

Yet another UDP transport

Уровень сложности Простой
Время на прочтение 8 мин
Количество просмотров 2.2K
C++ *Сетевые технологии *Разработка под Linux *Разработка для интернета вещей *Разработка под Windows *
Обзор

Приветствую всех!

В этом посте представлен обзор написанной мной кроссплатформенной C++ библиотеки tubus реализующей транспортный протокол поверх UDP. Целевая аудитория C++ разработчики сетевых приложений.

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 23

C++: чем CRTP лучше Шаблонного Метода?

Время на прочтение 4 мин
Количество просмотров 2.5K
Блог компании OTUS C++ *
Перевод

Паттерн Шаблонный Метод (Template Method), описанный в книге по паттернам проектирования за авторством “банды четырех” (GoF), не связан с шаблонами (templates) C++ и является поведенческим шаблоном. Curiously Recurring Template Pattern (CRTP или “странно повторяющийся шаблон”) является усовершенствованием паттерна Шаблонный Метод и представляет собой идиому C++, в которой класс X наследуется от реализации шаблонного класса, используя сам X в качестве шаблонного аргумента. Название этой идиоме было дано Джимом Коплиеном (Jim Coplien), который наблюдал ее в самых первых образцах шаблонного кода C++. Эта методика позволяет достигнуть эффекта, аналогичного использованию виртуальных функций, без накладных расходов (и некоторой гибкости) динамического полиморфизма. CRTP можно использовать вместо Шаблонного Метода при условии, что вам не нужен динамический полиморфизм во время выполнения. Этот паттерн широко используется в библиотеках Windows ATL и WTL.

Читать далее
Всего голосов 9: ↑6 и ↓3 +3
Комментарии 7

Делегирование для ООП (Design Patterns) и самый эффективный способ взаимодействия объектов

Уровень сложности Сложный
Время на прочтение 10 мин
Количество просмотров 3.2K
Программирование *C++ *Проектирование и рефакторинг *ООП *
Мнение
Recovery mode

 Мне давно хотелось узнать существуют ли программисты, которые понимают «делегирование» в рамках ООП так же, как я.  А когда я случайно обнаружил что в Шаблонах проектирования (Design Patterns) в фундаментальных трудах признанных классиков концепций программирования пропущено описание для Делегирования, у меня появился повод написать эту статью.

Так получилось, что я сначала познакомился с этой техникой на практике разрабатывая DirectShow фильтры и COM-объекты, которые составляют эти фильтры и меня особо не интересовало как все это по-умному называется пока это все прекрасно работает. Проблемы возникают, когда ты пытаешься объяснить кому-то КАК это работает, или когда ты пытаешься предложить кому-то хотя бы попробовать использовать определенную технику программирования. Вот именно при таких попытках у меня получилось сопоставить что то, что я использую очень подходит под определение Design Pattern: Delegation.

Давайте посмотрим будет это поводом посмеяться или задуматься.

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

Кто дочитает до конца найдет ответ на вопрос который задает название.

Читать далее
Всего голосов 8: ↑2 и ↓6 -4
Комментарии 6

Дизайн API в С++

Уровень сложности Сложный
Время на прочтение 26 мин
Количество просмотров 11K
C++ *API *

В этом году на C++ Russia я рассказывал про API дизайн. Эта статья — пересказ и переосмысление моего доклада.

То, что я здесь расскажу, основано на моем личном опыте — про API дизайн я думаю уже лет 15, с того момента как в 2008м начал читать ревью библиотек на входе в boost (кстати, всем рекомендую).

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

Читать далее
Всего голосов 51: ↑50 и ↓1 +49
Комментарии 35

Базовые алгоритмы на графах

Уровень сложности Средний
Время на прочтение 14 мин
Количество просмотров 13K
Блог компании Timeweb Cloud C++ *Алгоритмы *
Туториал

image


Всем привет! Меня зовут Нурислам (aka tonitaga), и сегодня я бы вам хотел рассказать об Базовых алгоритмах на графах.
Читать дальше →
Всего голосов 47: ↑44 и ↓3 +41
Комментарии 40

Нейронные сети на Эльбрусе

Уровень сложности Простой
Время на прочтение 3 мин
Количество просмотров 2.6K
C++ **nix *C *Искусственный интеллект
Мнение

Мои эксперименты с нейронными сетями на Эльбрусе

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

Читать далее
Всего голосов 17: ↑15 и ↓2 +13
Комментарии 8

Самый быстрый и безопасный PNG декодер в мире

Уровень сложности Сложный
Время на прочтение 16 мин
Количество просмотров 4.7K
C++ *Обработка изображений *C *
Recovery mode
Из песочницы
Перевод

Декодер изображений PNG из стандартной библиотеки языка программирования Wuffs работает в 1.22–2.75 раза быстрее, чем libpng (широко используемая реализация PNG декодера на C с открытым исходным кодом), C-библиотеки libspng, lodepng и stb_image, а также самые популярные библиотеки для работы с PNG на Go и Rust.
Статья рассказывает о том, как именно достигается такая производительность.

Читать далее
Всего голосов 24: ↑23 и ↓1 +22
Комментарии 39

Как два байта переслать: контрибьютим в KPHP

Уровень сложности Простой
Время на прочтение 14 мин
Количество просмотров 3.4K
Open source *PHP *C++ *
Из песочницы

KPHP - компилятор для PHP. Он конвертирует PHP код в код на C++, компилируя который, ускоряет производительность в десятки раз. Это open-source проект, созданный ВКонтакте. Благодаря ему собирается огромный монолит ВКонтакте на 9 миллионов строк PHP кода в обычный бинарник, запуская который вы локально поднимаете полноценный ВКонтакте.

Наша задача - добавить в KPHP функции из PHP для работы с многобайтовыми строками. Добавляем фукнции мы в рантайм т.е. в С++ код, к которому имеет доступ код, транслированный из PHP.

Открыть
Всего голосов 21: ↑21 и ↓0 +21
Комментарии 19

Joystick для ПК на базе Arduino

Уровень сложности Простой
Время на прочтение 10 мин
Количество просмотров 3K
C++ *Схемотехника *Разработка под Arduino *Электроника для начинающих
Из песочницы

Данная статья посвящена созданию и дальнейшим улучшениям джойстика (Joystick) на Arduino для управления ПК (имитации мыши).

Читать далее
Всего голосов 15: ↑15 и ↓0 +15
Комментарии 17

Алгоритм быстрого поиска при помощи хэширования

Время на прочтение 5 мин
Количество просмотров 1.9K
Занимательные задачки C++ *Алгоритмы *Хранение данных *Хранилища данных *
Из песочницы

В этой статье я хочу представить мой алгоритм оптимизации суммирования ряда чисел в массиве (на примере контейнера map). 

Итак, дано задание

Есть некая электронная книга, которую одновременно читает неограниченное количество читателей. Нужно сделать так, чтобы любой читатель в любой момент мог проверить, сколько еще читателей читают ту же страницу, что и он. Предложена наивное решение хранить в map<int,int> в качестве ключа номера страниц, в качестве значения- количество прочитавших их пользователей. Конечно, при таком подходе программа медленно работает с большими тестами потому, что количество итераций по контейнеру map равняется числу прочитанных пользователем страниц. То есть, если пользователь прочел 1000 страниц из 1000 возможных, то в цикле нужно будет сделать 1000 итераций, и это сильно замедляет программу.  

Чтобы уменьшить время работы программы, нужно упростить алгоритм подсчета пользователей. В этом алгоритме я отдельно считаю, сколько пользователей прочли столько же полных сотен страниц, как и искомый читатель, и затем уже постранично суммирую всех, кто прочел столько же страниц из той сотни, на которой сейчас находится читатель. Такой алгоритм позволяет вместо 999 итераций (если пользователь читает 999-ю страницу) сделать всего 108 (9 итераций сотням и 99 по единичным страницам). 

 Это вкратце, теперь перейдем к подробному описанию и для начала приведу код.

больше информации
Всего голосов 3: ↑0 и ↓3 -3
Комментарии 12

Новый дом для Фараона (Pharaoh)

Уровень сложности Простой
Время на прочтение 8 мин
Количество просмотров 4K
Ненормальное программирование *C++ *Разработка игр *Игры и игровые консоли
Ретроспектива

Я давний поклонник сити‑билдеров компании Impressions Games © и Саймона Бредбури, если кто не знает — его гений дал жизнь таким играм как Caesar 1/2/3, Space Colony и всей серии Stronghold, который по сей день трудится в студии Firefly Studios. Цезарь стал хитовым проектом и был продан более чем 400к копий на дисках за два года с 1998 по 2000. Но лучшей игрой серии считается Pharaoh + Cleopatra.

click to start
Всего голосов 19: ↑18 и ↓1 +17
Комментарии 7

Пишем виртуальную машину (интерпретатор) простого байткода + JIT компиляция

Время на прочтение 11 мин
Количество просмотров 6.9K
C++ **nix *Компиляторы *

На Хабре есть две статьи, автор которых пишет виртуальную машину для исполнения простого байткода, а потом применяет различные оптимизации для ускорения этой виртуальной машины. Кроме того, есть и компилятор простого С‑подобного языка в этот самый байткод. Ознакмившись со статьями и этим компилятором, я подумал, что будет интересно изучить, как написать виртуальную машину этого языка, которая сможет делать JIT‑компиляцию байткода с помощью библиотеки libjit. Опыт этого я и описываю в настоящей статье. В интернете есть статьи, описывающие испльзование этой библитеки, но все, что я видел, описывают генерацию машинного кода с помощью libоit для конкретных программ, а не произвольного байткода: есть официальный tutorial, серия статей и ещё серия сравнений на Хабре.

Весь мой код приведён в моём репозитории.

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

Монотонная кубическая интерполяция

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 1.8K
C++ *Алгоритмы *Математика *
Обзор

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

В данной статье разобран алгоритм монотонной кубической интерполяции, предложенный Фритчем и Карлосоном в работе [1].

На рисунке красным обозначен результат обычной кубической интерполяции Эрмита, а синим - монотонной, кругами - опорные точки траектории.

Примеры кода написаны на C++, исходники всей библиотеки лежат здесь. Также написана копия библиотеки на Java, исходники лежат здесь.

Читать далее
Всего голосов 15: ↑15 и ↓0 +15
Комментарии 11

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

Работа

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