Обновить
128K+

C++ *

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

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

Реальный Windows. Пишем realtime под окошками

Время на прочтение11 мин
Охват и читатели17K

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

Читать далее

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

Время на прочтение23 мин
Охват и читатели22K
image
Более года назад я начал публикацию статей с описанием особенностей нового языка программирования. С тех пор утекло много воды, было протестировано множество идей, в итоге несколько раз все поменялось кардинальным образом и сейчас представляю на суд читателей описание предфинальной версии языка и его особенностей.

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

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

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

Судьба баг-репорта

Время на прочтение5 мин
Охват и читатели2.4K

Довольно частый (и логичный) вопрос к нашим статьям с проверкой открытых проектов: отправляются ли разработчикам баг-репорты? Так вот, ответ – да. Более того, мы на этом не останавливаемся и иногда отслеживаем прогресс. Сегодня хотелось бы рассказать об одном из случаев, где именно эта педантичность предотвратила фиктивное исправление бага.


0921_destiny_of_a_bug_report_ru/image1.png

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

JNI, часть 3: производительность Java/JNI/NDK

Время на прочтение5 мин
Охват и читатели7.4K

Всем привет! Меня зовут Роман Аймалетдинов, я разрабатываю клиентское приложение Ситимобил. Продолжаю свою серию статей по JNI, так как технология используется редко, но иногда она бывает очень полезной (или просто интересной). В этот раз я покажу замеры производительности, достаточно тривиальные, но отображающие суть. И если вы не знакомы с JNI, но тема интересна, то советую ознакомиться с первой и второй частью этой серии статей.

Читать далее

oneTBB: интеграция и сборка через CMake

Время на прочтение6 мин
Охват и читатели8.3K

Threading Building Blocks (TBB) — популярная библиотека для параллельного программирования на C++ с открытым исходным кодом, опубликована на GitHub. Пару лет назад команда разработки решилась на глобальный рефакторинг библиотеки (проект TBB revamp), в который удалось вписать долгожданную смену системы сборки с GNU Makefiles на CMake. Свежая версия вышла в релиз в рамках инициативы oneAPI, обновив имя на oneTBB. В этой статье я расскажу про то, как подключить oneTBB в CMake-проект и как собрать, протестировать и установить oneTBB.

Читать далее

Управляем подсветкой клавиатуры при смене языка ввода

Время на прочтение7 мин
Охват и читатели16K

Недавно я купил себе клавиатуру от Corsair модели K55 RGB Pro. У нее есть модная нынче RGB-подсветка, а чтобы ее настраивать, производитель предлагает скачать программу iCUE. На сайте написано, что некоторые игры могут управлять подсветкой совместимых устройств. Я заинтересовался, как они это делают. Гугл обнаружил официальный SDK с примерами, а также документацию. Я решил сделать что-то полезное для себя, а заодно посмотреть, как создаются приложения под Windows.

Мой код (для Visual Studio) можно найти здесь.

Подробнее о том, как я это сделал, примеры кода и как это выглядит - под катом.

Читать далее

Как протащить верблюда сквозь игольное ушко, или обновление компилятора С++ на проекте старше 10 лет

Время на прочтение11 мин
Охват и читатели23K

Привет! Меня зовут Колосов Денис, я являюсь разработчиком клиентской части проекта «Allods Online» в студии IT Territory. Сегодня я расскажу о том, как мы решились обновить среду разработки и заодно компилятор на нашем проекте с Visual C++ 2010 на 2019. 

О чем пойдет речь?

1. Как мы докатились до такой жизни и отважились на этот шаг;
2. О сборке вендерских библиотек и всего окружения, которое у нас есть;
3. С какими кастомными проблемами мы столкнулись;
4. К чему это все привело.

Читать далее

Находим более качественные решения при помощи boost

Время на прочтение9 мин
Охват и читатели31K

Каждый C++-разработчик хотя бы слышал о Boost – это, пожалуй, наиболее распространенный набор внешних библиотек, используемый в мире C++. Истоки большинства стандартных библиотек восходят к Boost, поскольку многие разработчики Boost также входят в состав комитета по стандартам C++ и именно они определяют, в каком направлении будет развиваться язык – поэтому можете считать Boost своеобразным дорожным указателем. Возвращаясь к заголовку этой статьи - 'Boost' содержит много популярного функционала, вспомогательных библиотек, так, что, если вы столкнулись с какой-нибудь распространенной проблемой – первым делом обращайтесь к Boost, так как велики шансы, что там для вас найдется готовое решение.

Читать далее

Добавляем дополнительные особенности реализации на C++ с помощью «умных» оберток

Время на прочтение10 мин
Охват и читатели8.8K

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

Инструменты библиотеки feature позволяют наделить экземпляры объектов любого типа свойствами, которых у них изначально не существует. К таким свойствам можно отнести, например, ленивые вычисления (implicit shared и другое), потокобезопасность, выбор способа размещения объекта "по месту" или в "куче" и т.д.

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

Хотите узнать как? Прошу под кат.

Пути на графе. Задача коммивояжёра на C++

Время на прочтение5 мин
Охват и читатели22K

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

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

Эту задачу можно встретить и на практике. Например, поиск маршрута для полета квадрокоптера-курьера.

Читать далее

С++23 — итоги февральской встречи международного комитета

Время на прочтение6 мин
Охват и читатели22K

Без лишних слов, прямо к делу — вот какие новые вкусности будут нас ждать в C++23:

  • std::expected — новый механизм сообщения об ошибках без использования исключений и без недостатков кодов возврата.
  • constexpr-математика — теперь на этапе компиляции можно доставать разные части чисел с плавающей запятой, копировать знаки и округлять числа.
  • std::ranges::to — результаты работы алгоритмов можно легко превратить в контейнер.
  • std::views::join_with — добавление разделителя между элементами.

Что мы не увидим в C++23, на что ещё можно надеяться и что ещё приняли в текущий черновик стандарта? Всё это ждёт вас под катом.
Читать дальше →

Портируем код C/C++ на Python

Время на прочтение4 мин
Охват и читатели33K

В первой части нашего небольшого цикла статей мы исследовали возможность использования структур данных в Python, которые были созданы с помощью языков программирования C/C++. Для этого мы рассмотрели библиотеку Ctypes.

В этой статье попробуем разобраться, какие еще есть подходы для работы с языками С/С++ и их аналогами, и также рассмотрим возможность анализа С/С++ исходников языков программирования и их компиляции налету. К тому же ответим на вопрос, а можно ли сделать интеграцию C/C++ в языке программирования Python прямо в скрипте. Подобный подход очень размоет границы между языками программирования, но это очень интересный функционал, который возможно может быть полезным.

Читать далее

Какая стратегия освобождения памяти используется в C и С++ ядре PVS-Studio?

Время на прочтение5 мин
Охват и читатели4.9K

Какая стратегия освобождения памяти используется в C и С++ ядре PVS-Studio?
Так получилось, что в различных обсуждениях мы уже несколько раз комментировали, как C и C++ модуль PVS-Studio работает с памятью. А раз так, пришло время оформить этот ответ в виде маленькой статьи.

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

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

Кондитерская программиста. Bon Appetit

Время на прочтение14 мин
Охват и читатели23K

Всем привет, в этой статье пойдёт речь о любопытных экспериментах с С++ и 3D графикой. Будем открывать свою собственную кондитерскую-программиста. Bon Appetit!

Открыть дверь в мир кондитерской

Мои собеседования '2021 (C++ developer)

Время на прочтение3 мин
Охват и читатели38K

Привет, меня зовут Дмитрий, разработчик на C++ со стажем более 15 лет. В основном приходилось заниматься разработкой десктопного софта и софта для мобильных устройств. Живу в Москве.

В начале 2021 года, после шести лет работы в одной компании (хотя и очень хорошей), решил что пора куда-то двигаться. Лучше дальше, но можно и вбок.

Соответственно собеседовался на позицию "C++ разработчик".

Делюсь впечатлениями.

Читать далее

Синхронные и асинхронные стектрейсы: опыт использования в Facebook

Время на прочтение9 мин
Охват и читатели3.5K

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

Читать далее

MuditaOS: зазвонит ли ваш будильник? Часть 1

Время на прочтение11 мин
Охват и читатели5.9K

Операционные системы – это тот вид софта, для которого качество исходного кода особенно критично. В этот раз под объективы анализатора PVS-Studio попала MuditaOS. Так давайте же посмотрим, что нам удалось найти в данной операционной системе с открытым исходным кодом.

Читать далее

Proof Of Concept на Python или как портировать С/С++

Время на прочтение6 мин
Охват и читатели8.8K

Язык программирования Python существует уже 31 год. Это полностью объектно-ориентированный язык. За все время существования на нем стало возможно применять разные парадигмы. Сейчас этот язык может поддерживать:

- объектно ориентированную парадигму
- структурное программрование
- обобщенное программирование
- функциональное программирование
- метапрограммирование
- контрактное и логическое программирование

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

Помимо всех этих возможностей из-за простого синтаксиса язык стал самым распространенным для прототипирования различных функций больших и маленьких проектов. Некоторые области Computer Science вообще изначально используют этот язык, потому что он максимально прост и не обязательно долго листать документацию, чтобы понять, как создать простейшее приложение. На Python написано большое количество библиотек, которые могут решать различные задачи: от 3D моделирования до сетевого взаимодействия. Причем использовать язык можно не только на уровне абстракций, которые применяют языки высокого уровня, но также можно выполнять и более низкоуровневые задачи.

Статья будет содержать 3 части, в ходе которых мы будем иссследовать возможность портирования C/C++ кода для различных ОС. В этой статье посмотрим, насколько эффективно можно реализовать возможность работы с оперативной памятью и получением данных от системы.

Читать далее

Многострадальный C++ и системы сборки

Время на прочтение5 мин
Охват и читатели17K

Очередная статья на тему "автор жалуется как ему всё не нравится".В C++ есть вещи, которые меня бесят не только в языке и новых стандартах, но и его компиляторах и системах сборки.

Читать далее

Анатомия асинхронных фреймворков в С++ и других языках

Время на прочтение20 мин
Охват и читатели50K
Привет! В этой статье я расскажу об устройстве асинхронных движков с корутинами и без них. Для начала сосредоточимся не на конкретном движке, а на том, почему во всех популярных языках программирования появились корутины и чем они так хороши. Это может быть интересно не только C++-разработчикам, но и всем, кто занимается разработкой сетевых приложений или интересуется архитектурой современных фреймворков.

Пройдёмся по разным архитектурам построения серверов — от самой простой синхронной к более интересным, посмотрим на типичную архитектуру корутинового движка, а после окунёмся в дебри C++ и взглянем на самое страшное на примере нашего фреймворка userver.

Пишем синхронный сервер


Представьте, что у вашего сервиса очень маленькая нагрузка — 100 rps, и вам дали задачу написать простой сервер, понятный каждому второму школьнику. У вас получится что-то наподобие следующего:

void naive_accept() {
  for (;;) {
    auto new_socket = accept(listener);

    std::thread thrd([socket = std::move(new_socket)] {
      auto data = socket.receive();
      process(data);
      socket.send(data);
    });

    thrd.detach();
  }
}
Читать дальше →