В настоящей статье приводится разбор вариантов устранения антипаттерна «Зомби», описанного в первой части: Сказ об опасном std::enable_shared_from_this, или антипаттерн «Зомби».
Читать полностью »
Рубрика «c++» - 42
Сказ об опасном std::enable_shared_from_this, или антипаттерн «Зомби» — разбор полётов
2020-01-18 в 8:09, admin, рубрики: c++, c++11, C++14, c++17, shared_from_this, smart pointers, std::enable_shared_from_this, std::shared_ptr, weak_from_this, умные указателиПеремещение — прошлый век! Альтернативы std::move в «C++ будущего»
2020-01-17 в 13:41, admin, рубрики: autoclosure, c++, closure, lambda, lazy, move semantics, proposal, relocation, замыкание, ленивые вычисления, лямбда, перемещение, ПрограммированиеКаждый раз, когда мы пишем класс, управляющий ресурсами, мы задумываемся о том, что, скорее всего, для него придётся писать move-конструктор и move-присваивание. Ведь иначе объекты такого типа становятся неуклюжими, как std::mutex
, ими тяжело пользоваться на практике: ни вернуть из функции, ни передать в функцию по значению, ни положить в вектор — а если положить его в другой класс как один из членов, то тот класс также «заболевает».
Положим, мы преодолели свою лень (хотя в Rust таких проблем нет!) и садимся писать move-операции для нашего класса. Проблема в том, что move-семантика в C++ имеет фундаментальное ограничение: каждый владеющий ресурсами тип с move-операциями должен иметь пустое состояние, то есть состояние с украденными ресурсами. Его нужно описывать в документации и предоставлять ему поддержку, то есть тратить время и силы на то, что нам не нужно.
Для абстрактных типов данных пустое состояние обычно бессмысленно — если у объекта украли его ресурсы, то он не сможет выполнять свои обычные функции. Но мы вынуждены это делать, чтобы реализовать move-семантику. Для некоторых типов пустое состояние недопустимо: open_file
(в противовес теоретическому file
), not_null_unique_ptr<T>
(в противовес unique_ptr<T>
).
Говоря словами Arthur O'Dwyer, мы заказывали телепорт, а нам дали «вас клонируют и убивают первоначальную копию». Чтобы вернуть себе телепорт, проходите под кат!
ToolKit на базе Eclipse и GTK+, для «Toradex Colibri T20 (Linux)»
2020-01-17 в 10:30, admin, рубрики: c++, Colibri T20, eclipse, GTK+, toolchain Colibri T20, toolkit Colibri T20, toradex, подключение gtk к eclipse, программирование микроконтроллеров, Промышленное программирование, тулкит, тулчейнЭта статья рассчитана прежде всего на то, чтобы сэкономить время при создании тулкита, но при этом я постараюсь рассказать все достаточно объемно.
- Скачать все необходимое
- Установка SDK
- Проверка SDK
- Установка Eclipse
- Подключение GTK к Eclipse
- Настройка проекта Eclipse
- Результат
Скачаем все необходимое:
Первое — это SDK для платы, которое можно скачать на официальном сайте Toradex.
Второе — нам нужен хост с Ubuntu 16.04 LTS.
Третье — непосредственно Eclipse для C/C++.
Читать полностью »
VVVVVV??? VVVVVV!!! :)
2020-01-16 в 7:36, admin, рубрики: bugs, c++, code analysis, game development, Gamedev, pvs-studio, static code analysis, VVVVVV, Блог компании PVS-Studio, Программирование, разработка игрЕсли вы читаете этот текст – значит, вы либо подумали, что с заголовком статьи что-то не то, либо увидели в нём название знакомой компьютерной игры. VVVVVV – это инди-игра в жанре «платформер», завоевавшая сердца многих игроков своей приятной внешней простотой и не менее приятной внутренней сложностью. Несколько дней назад VVVVVV исполнилось 10 лет, и автор игры – Terry Cavanagh – отметил этот праздник публикацией её исходного кода. Что же «вкусненького» можно в нём найти? Ответ читайте в данной статье.
gRPC в качестве протокола межсервисного взаимодействия. Доклад Яндекса
2020-01-15 в 12:18, admin, рубрики: api, c++, grpc, java, rest, RPC, Блог компании Яндекс, микросервисы, удаленный вызов процедурgRPC — опенсорсный фреймворк для удаленного вызова процедур. В Яндекс.Маркете gRPC используется как более удобная альтернатива REST. Сергей Федосеенков, который руководит службой разработки инструментов для партнеров Маркета, поделился опытом использования gRPC в качестве протокола для построения интеграций между сервисами на Java и C++. Из доклада вы узнаете, как избежать частых проблем, если вы начинаете использовать gRPC после REST, как возвращать ошибки, реализовать трассировку, отлаживать запросы и тестировать вызовы клиентов. В конце есть неофициальная запись доклада.
— Сначала хотелось бы познакомить вас с некоторыми фактами про Яндекс.Маркет, они будут полезны в рамках доклада. Первый факт: мы пишем сервисы на разных языках. Это накладывает требования по наличию клиентов для сервисов.
Читать полностью »
Ох уж этот медленный C-C++
2020-01-14 в 19:14, admin, рубрики: C, c++, Алгоритмы, высокая производительность, оптимизация кода, ПрограммированиеЭто небольшое подведение итогов на пост “Быстрее, чем C++; медленнее, чем PHP”
Неблагодарное дело — «спорить» в комментариях, поэтому формулирую несколько мыслей в отдельный пост. Автор утверждал тут, тут, и еще много где, что у него большой стаж и богатый опыт в программировании на С++.
Читать полностью »
Особенности профилирования программ на C++
2020-01-14 в 6:44, admin, рубрики: c++, callgrind, google perftools, heapdump, tcmalloc, valgrind, высокая производительность, никто не читает теги, но некоторые по ним ищут, Программирование, профилирование, профилирование памяти, профилирование производительности, Серверная оптимизация
Временами бывает нужно отпрофилировать производительность программы или потребление памяти в программе на C++. К сожалению, зачастую это сделать не так просто как может показаться.
Здесь будут рассмотрены особенности профилирования программ с использованием инструментов valgrind и google perftools. Материал получился не очень структурированным, это скорее попытка собрать базу знаний «для личных целей», чтобы в будущем не приходилось судорожно вспоминать, «а почему не работает то» или «а как сделать это». Скорее всего, здесь будут затронуты далеко не все неочевидные случаи, если вам есть что добавить, пишите пожалуйста в комментарии.
Все примеры будут запускаться в системе linux. Читать полностью »
Виртуальные функции в микроконтроллерах — темная сторона
2020-01-14 в 5:42, admin, рубрики: arduino, c++, ethernet shield, w5500, программирование микроконтроллеров, Разработка под ArduinoЗнакома ситуация, когда место на флэше закончилось, и требуется впихнуть невпихуемое, пожертвовав чем то нужным? Попробуем вместо этого пожертвовать ненужным, оно прячется в довольно неожиданных местах.
Читать полностью »
Соревнование от Яндекс.Такси: разбор бэкенд-трека чемпионата по программированию
2020-01-13 в 9:16, admin, рубрики: c++, Алгоритмы, Блог компании Яндекс, бэкенд, графы, дейкстра, Занимательные задачки, конкурсы разработчиков, маршрутизация, Спортивное программирование, шифрованиеВручение призов участникам трека бэкенда
Мы завершаем серию разборов второго чемпионата по программированию. В последние недель мы опубликовали разборы трёх треков: по ML, фронтенду и мобильной разработке. Осталось разобрать трек по бэкенду. Он оказался самым популярным: 2682 человека приняли участие в квалификации, 320 из них дошли до финала. Задачи для бэкенд-разработчиков придумала команда Яндекс.Такси.
Читать полностью »
Hack The Box — прохождение Bitlab. Слабая JS обфускация, GIT и реверс Windows приложения
2020-01-12 в 17:19, admin, рубрики: c++, ctf, Git, javascript, pentest, ralf_rt, reverse, информационная безопасность
Данной статьей я начну публикацию решений отправленных на дорешивание машин с площадки HackTheBox. Надеюсь, что это поможет хоть кому-то развиваться в области ИБ. В данной статье разберемся с легенькой JavaScript обфускацией, загрузим бэкдор через репозиторий Git, и отладим 32- приложение.
Подключение к лаборатории осуществляется через VPN. Рекомендуется не подключаться с рабочего компьютера или с хоста, где имеются важные для вас данные, так как Вы попадаете в частную сеть с людьми, которые что-то да умеют в области ИБ :)
- PWN;
- криптография (Crypto);
- cетевые технологии (Network);
- реверс (Reverse Engineering);
- стеганография (Stegano);
- поиск и эксплуатация WEB-уязвимостей.
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Читать полностью »