Обновить
234.5

C++ *

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

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

Концепты в современном C ++

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

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

Читать далее

Как правильно готовить std::span

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

Сегодня мы поговорим про std::span и как не порезаться на острых углах C++.

Согласно определению на cppreference, шаблон класса span описывает объект, который может ссылаться на непрерывную последовательность объектов, где первый элемент последовательности находится на позиции ноль.

Вообще, с учётом того, что, начиная с С++17 мы уже знакомы с понятием string_view, можно представить, что std::span — это нечто подобное, только действующее для непрерывных участков памяти, которые ещё можно и модифицировать. Но не будем забегать вперед, обо всех свойствах по-порядку.

Читать далее

Полигональное моделирование. Обзор возможностей C3D PolyShaper

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

Александр Лонин, руководитель группы полигонального моделирования C3D Labs, к.ф.-м.н, представляет новую разработку компании — полигональное ядро C3D PolyShaper — и рассказывает о новых возможностях инструментов реверс-инжиниринга, алгоритмах модификации при процессинге сеток, диагностике и лечении сеток.

Читать далее

Пишем свой pastebin, используя только userver

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

Всем привет! Меня зовут Василий Куликов, я работаю ведущим разработчиком в Техплатформе Екома и Райдтеха Яндекса и последние пять лет разрабатываю фреймворк userver.

Это веб‑фреймворк, который позволяет создавать высоконагруженные отказоустойчивые сервисы на С++. Сегодня я расскажу, как написать на нём игрушечный, но рабочий сервис, который реализует функциональность pastebin.

Читать далее

Поддержка webextensions под Андроид, вторая серия

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров709
image

Очень добрый день!


Меня зовут Тимур и я программист.


Сегодня я хочу продолжить разговор о поддержке расширений браузера (хромиум) на Андроид. В прошлой своей статье я рассказал о том что у меня получилось завести расширения но народ так занят стенаниями по поводу закрытия проекта Kiwi что никто особо на это внимания не обратил, поэтому буду краток, это скорее промежуточный отчет чем анонс.

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

Неожиданная роль Эдуарда Лимонова в истории языка C

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

В биографии Эдуарда Лимонова — писателя, диссидента и политика — есть неожиданный эпизод: в конце 1970-х годов, во время жизни в США, он подрабатывал в IT-сфере и, по некоторым данным, участвовал в разработке ранних версий языка C.

Читать далее

Моя теория множеств на языке С++

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

 Все теории множеств, о которых я читал, мне не нравились по разным причинам, но в основном из-за того, что у них были различные типы бесконечностей ( счётная, континуум и т.д. ). Поэтому я решил создать свою теорию с одним типом бесконечности. К тому же появилась идея изложить её при помощи языка С++. Для программистов это будет нагляднее, чем на языке логики. Конечно, это не полная теория, а набор отдельных положений представляющих общую идею.

Читать далее

Учимся рефакторить код на примере багов в TDengine, часть 3: плата за лень

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

Лень


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


В этот раз поговорим про написание кода методом Copy-Paste. С одной стороны, программисты знают, что копирование кода с последующей его модификацией провоцирует ошибки и опечатки. С другой — набирать каждый раз фрагмент кода, похожий на уже написанный, скучно и непродуктивно. Здесь важно соблюдать некий баланс, который сложно сформулировать и понимание которого приходит с опытом.

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

Электронная картина с автонастройкой яркости на C++/Qt

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

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

Дело в том, что я давно люблю и ценю изобразительное искусство. И также люблю изучение истории (и вообще считаю, что не программированием единым должен жить человек). И я подумал, что изучение истории и живописи можно слить в единый флакон – будет и не скучно, и полезно. Особенно полезно подрастающему школьному и дошкольному поколению. Я захотел электронную картину – чтобы выглядела как картина, а изображения бы настраивались мной, автоматически сменяясь по таймеру. Каждый день – новая картина. Каждый день – повод обсудить с сыном, как видели этот мир художники 200, 300, 500 лет назад, и вообще, а что это за разновидность палаша, аркебузы или фрегата запечатлел здесь художник. А здесь какое важное для мировой истории событие показано?

Изучив рынок электроники, я понял, что подходящего под мои требования продукта просто не найти (хотя отдаленно похожие есть, конечно). Потому я прикинул доступную мне элементную базу, расчехлил клавиатуру и принялся писать код. В итоге получилось десктоп-приложение на С++/Qt, которое я закинул на мини-ПК под Windows, а сама картина представила собой обрамленный в багет сенсорный дисплей на 18,5 дюймов с прекрасной цветопередачей. По итогу заинтересовался не только сын, но, неожиданно, и жена.

Детали под катом

Безопасная работа с массивами? Нет, не слышали

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

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

Читать далее

Почему игродев остается на С++17

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

Последние пару-тройку лет на конференциях все чаще я слышу жалобы знакомых в игрострое о том, что текущий вектор развития "современного C++" не соответствует потребностям игровой разработки. Реальные полезные нововведения фактически закончились с выходом C++17, а попытки внедрить C++20 часто заканчиваются обнаружением множества "гейзенбагов" и существенным снижением производительности - критичные для нас на 10-15% от сборки к сборке. Пошатавшись по разным игровым студиям, блин, скоро будет 15 лет как я тут, у меня таки немножечко есть, что вам рассказать.

Все современные студии, что крупнее двух с половиной землекопов, пишущие игры на плюсах, шарпе или чем-то близком - используют Visual Studio или переходят со своих поделок на Unreal/Unity, который так-то тоже плюсы, хоть и со странностями. Так исторически сложилось, что винда и майки были, есть и в ближайшем будущем горизонта лет десяти останутся самым крупным рынком ПК-консольных игр, а сами консоли давно стали "ну совсем ПК", но чтобы не терять эксклюзивы (и шекели) вендоры в этом не признаются никогда.

Мобилки, как-бы отдельно, и там свои свои покемоны Mac с Android, но в Visual Studio в том или ином виде создаются, дебажатся и оптимайзятся 95% игр, остальное - погрешность. С момента начала золотой эры игростроя (где-то в конце 90-х), большинство игр писались с учетом того, что они будут выпущены на ПК, под ПК понимается - под винду. И наследие многих A+-студий так или иначе связано с Microsoft, даже для не-Microsoft консолей и мобилок.

Читать далее

Пишем простую виртуальную машину (1я часть. Минимально работоспособный код эмулятора)

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

Всем привет! Я решил попробовать написать собственный эмулятор (минимально рабочий код), чтобы систематизировать свои знания в архитектуре компьютера. Мы сделаем эмуляцию CPU, опкодов, памяти, а также возможность подключать внешние устройства. Уровень - кто недавно начал изучать архитектуру компьютера. В перспективе можно будет сделать графику, звук и постоянную память.

Читать далее

HowTo: создание двоичного SDK(набора библиотек) для Windows с использованием vcpkg

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

В этом HowTo мы рассмотрим подготовку пакетов vcpkg для использования в двоичном виде.

В качестве "подопытных кроликов" будут выступать Qt6, QCustomPlotи я.

Spoiler: с QCustomPlot придется немного пострадать, но обычно все проще.

TLDR: vcpkg export

Далее

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

Улучшаем компиляторы. Не сами, но без нас никак

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

Ведущий инженер-разработчик Postgres Professional Николай Шаплов столкнулся с неожиданной проблемой при тестировании: коллизии хэшей в clang ломали метрики покрытия. Расскажем, как удалось решить эту задачу и что это меняет для всего сообщества.

Читать далее

DIY-проект: гусеничная платформа с ИК-управлением на Arduino

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

В статье расскажу, как собрать гусеничную платформу, управляемую ИК-пультом. Платформа будет принимать команды с пульта через ИК-датчик, которые будут обрабатываться платой Iskra mini (российским аналогом Arduino mini).

Также речь пойдет о том, как определить коды кнопок любого ИК-пульта, даже если это старый пульт от видеомагнитофона вашей бабушки. Я напишу код для Iskra mini, который будет принимать команды и управлять платформой. В конце вас ждет видеодемонстрация её возможностей.

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

Думаю, статья будет интересна начинающим робототехникам и любителям проектов DIY с микроконтроллерами Arduino. Я буду подробно описывать процесс, чтобы любой желающий мог повторить этот проект на аналогичных или похожих компонентах.

Читать далее

Rust в режиме «жесть»

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

В этом посте будет разобрано, как написать приложение на Rust с применением самого минимального API, возможности которого искусственно ограничены (например, не применяется динамическое выделение памяти). Предполагается, что читатель немного знаком с языком Rust.

Читать далее

Три теоремы о сортировках

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

Я знаю многих программистов и руководителей в IT компаниях, которые недолюбливают математиков и в частности считают их далёкими от жизни идиотами из-за их утверждений в духе "нельзя отсортировать последовательность быстрее, чем за nlogn" -- ведь это очевидным образом неверно, есть же сортировка подсчетом и radix sort. Нюанс в том, что описанное выше -- это распространённая некорректная трактовка одной из ключевых теорем об алгоритмах сортировок, корректное утверждение выглядит так: "не существует алгоритма, который бы гарантированно находил перестановку n элементов, приводящую к возрастающему порядку, быстрее чем за nlogn используя только операции попарного сравнения". В этом утверждении больше слов, оно более сложно в плане когнитивного восприятия, ключевой момент обозначил жирным шрифтом, чувствуете разницу?

В статье хочу рассказать об этой теореме и ещё о двух, на которые я наткнулся когда вел занятия по информатике в 9-11 классах будучи студентом старших курсов. Эти теоремы для меня были удивительным открытием, радовался вне себя когда вывел сам одну из них - её я не встречал ни в одном учебнике по информатике. В последствии все три теоремы были найдены в недрах Кнута, но чёрт побери, их поиск был сложнее, чем вывод!

Если я ещё не убедил Вас прочитать статью, то вот моя последняя попытка: в статье объясню почему пузырёк -- это бесполезная фигня, но внезапно практически также работающая сортировка вставками -- это супер важная сортировка, являющаяся частью std::sort в MSVC, GCC и Clang. Расскажу, каким интересным свойством оптимальности обладает сортировка выбором, являющаяся в теории такой же неэффективной как пузырёк.

Читать далее

Разгон Мандельброта: SIMD с бубнами, OpenMP и CUDA

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

Построение множества Мандельброта — классический пример чрезвычайно параллельной задачи (embarrassingly parallel problem).

На первом курсе я впервые столкнулся с такой проблемой: тогда мы изучали SIMD-инструкции в курсе архитектур вычислительных систем. Эта тема сразу меня увлекла, и я захотел углубиться в дальнейшие оптимизации, но в течение семестра мне не хватало ни времени, ни знаний. Спустя год я решил восполнить этот пробел.

Вначале мы разберем наивную реализацию, поиграемся с интринсиками (intrinsics) и, не теряя переносимости, заставим компилятор генерировать нам SIMD-инструкции. Далее добавим многопоточность и в заключение обесценим все наши старания несколькими строчками на CUDA.

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

Читать далее

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

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


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


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


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

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

FFI: как создать мост между Rust и C/C++

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

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

Сегодня мы рассмотрим, как создать безопасные FFI-интерфейсы в Rust для интеграции с C/C++ библиотеками

Если говорить проще, FFI (foreign function interface — интерфейс вызова внешних функций) – это способ «позаимствовать» функциональность из другого языка. В контексте нашей статьи, с одной стороны у нас Rust, где каждый байт памяти охраняется компилятором, а на другой C++, где свобода обращения с памятью может обернуться утечками или, что еще хуже, непредсказуемым UB (англ. undefined behavior, в ряде источников непредсказуемое поведение). И наша задача – сделать так, чтобы эти два мира не конфликтовали, а работали в унисон.

Читать далее

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