Как стать автором
Поиск
Написать публикацию
Обновить
125.34

C++ *

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

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

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

Время на прочтение3 мин
Количество просмотров4.1K

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

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

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

Читать далее

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

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров10K

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

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

Читать далее

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

Время на прочтение4 мин
Количество просмотров7.6K

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

Читать далее

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

Уровень сложностиСложный
Время на прочтение10 мин
Количество просмотров12K

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

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

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

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

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

Читать далее

Дизайн API в С++

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

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

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

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

Читать далее

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

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров63K

image


Всем привет! Меня зовут Нурислам (aka tonitaga), и сегодня я бы вам хотел рассказать об Базовых алгоритмах на графах.
Читать дальше →

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

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров4.3K

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

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

Читать далее

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

Уровень сложностиСложный
Время на прочтение16 мин
Количество просмотров8.7K

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

Читать далее

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

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров4.7K

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

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

Открыть

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

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров13K

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

Читать далее

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

Время на прочтение5 мин
Количество просмотров3.6K

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

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

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

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

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

больше информации

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

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров6.2K

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

click to start

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

Время на прочтение11 мин
Количество просмотров9.4K

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

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

Читать далее

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

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

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров5.8K

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

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

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

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

Читать далее

Безопасность типов и ресурсов в современном C++

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров7.2K

Бьёрн Стрaуструп
Оригинал: Type‑and‑resource safety in modern C++

Предлагаю вашему вниманию перевод работы Бьерна Стрaуструпа про безопасность типов и ресурсов в современном С++. На данную работу Бьерн ссылается в т.ч. в своем ответе (A call to action: Think seriously about «safety»; then do something sensible about it) на нашумевшие рекомендации АНБ.

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

Читать далее

[sobjectizer] Несколько слов о релизе версии 5.8.0

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров1.3K

SObjectizer — это относительно небольшой C++17 фреймворк, который позволяет использовать в С++ программах такие подходы, как Actor Model, Publish-Subscribe и Communicating Sequential Processes (CSP), что упрощает разработку сложных многопоточных приложений. Если читатель в первый раз слышит о SObjectizer-е, то составить впечатление о нем можно ознакомившись вот с этой статьей.

Недавно состоялся релиз очередной мажорной версии, 5.8.0. Это хороший повод еще раз напомнить о проекте и сказать несколько слов о наиболее важном в очередном релизе, в том числе и о (частичном) сломе совместимости с предыдущей веткой 5.7.

Кому интересно, милости прошу под кат.

Читать далее

Изучаем Kirigami от KDE: примеры разработки приложений

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

Для создания пользовательского интерфейса приложений придумано множество инструментов. Фреймворк Kirigami – как раз один из таких. Хотя он не отличается какой-то особой оригинальностью, Kirigami призван сделать создание приложений более простым и быстрым. С помощью этого инструмента можно создавать адаптивные и кроссплатформенные программы.

Читать далее

Как вывести форматированный текст на экран в C++

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров11K

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

Но как сделать это оптимально и кроссплатформенно? Читайте в нашей статье!

Читать далее

Герои Кода и Магии: анализ игрового движка VCMI

Уровень сложностиПростой
Время на прочтение15 мин
Количество просмотров13K

Порой хочется поностальгировать и поиграть в любимую старую игру, но некоторые вещи в таких играх могут показаться устаревшими. Для того чтобы вдохнуть новую жизнь в старый проект, некоторые энтузиасты ставят себе задачу воссоздать и улучшить его исходный код. Мы решили проверить с помощью статического анализатора PVS-Studio, насколько хорошо справляются с этой задачей разработчики VCMI.

Читать далее

Параллельный метод сортировки массива std::thread

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров7.9K

Золотые времена подошли к концу, когда разработчикам можно было ничего не делать, а программное обеспечение работала с каждым годом все быстрее.

Читать далее

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