Статический анализ как часть процесса разработки Unreal Engine

PVS-Studio & Unreal Engine

Проект Unreal Engine развивается — добавляется новый код и изменятся уже написанный. Неизбежное следствие развития проекта — появление в коде новых ошибок, которые желательно выявлять как можно раньше. Одним из способов сокращения количества ошибок является использование статического анализатора кода PVS-Studio. Причем анализатор также быстро развивается и учится находить новые паттерны ошибок, некоторые из которых будут рассмотрены в этой статье. Если вас заботит качество кода ваших проектов, то эта статья для вас.
Читать дальше →

Открытая трансляция DotNext 2017 Piter: Jon Skeet, Sasha Goldshtein и Андрей Акиньшин в прямом эфире

Мы продолжаем наш цикл открытых трансляций для всех желающих проводить субботы с пользой! До этого мы делали вещание с Mobius 2017 и JPoint 2017 (доступ к ней уже закрыли вроде) В этот раз у нас есть кое-что интересное для .NET-разработчиков. Завтра в 10 утра начнется бесплатная YouTube-трансляция первого трека DotNext 2017 Piter! Первый трек – самый большой и популярный среди наших участников, а значит спикеры и темы соответствующие. Оцените сами:
  • Sasha goldshtn Goldshtein – The Performance Investigator's Field Guide
  • Jon Skeet – The changing state of immutability C#
  • Tomas Herceg – Entity Framework Core: Is It Ready Yet?
  • Андрей DreamWalker Акиньшин – Поговорим про память
  • Игорь Лабутин – Межпроцессные разговоры: причины и способы
  • Алексей Савватеев – Задача о коллективной ответственности
Кроме того, утром в 10:10 вы сможете посмотреть live-интервью с Джоном Скитом, а также еще пяток интервью с другими нашими спикерами. Будет круто! Ссылка на YouTube-трансляцию под катом....Далее...

Подробнее об одном новшестве в свежей версии SObjectizer

Когда мы начали рассказывать про свой OpenSource акторный фреймворк для C++ на Хабре, мы пообещали описывать некоторые особенности деталей реализации SObjectizer-а. Одна из новых фич, которая была реализована в недавно вышедшей версии 5.5.19, отлично подходит для такого рассказа. Кроме того, она интересна еще и тем, что нам пришлось взглянуть на сценарии использования SObjectizer с совершенно другой стороны. Можно даже сказать, что один из наших шаблонов оказался разорванным.


Речь идет о возможности SObjectizer-а выполнять все свои действия на одной единственной рабочей нити. Начиная с версии 5.5.19 использовать Actor- и Publish/Subscribe модели можно даже в однопоточном приложении. Понятное дело, что акторы должны будут работать в режиме кооперативной многозадачности, но в каких-то случаях именно это и требуется.


А где может потребоваться использовать акторов в однопоточном приложении?


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

Поиск устройств в сети по SSDP с помощью Poco

В данной небольшой заметке-примере я опишу как найти устройства в сети по протоколу SSDP (Simple Service Discovery Protocol) используя библиотеку Poco на C++.
Читать дальше →

[recovery mode] Жирные программы — изучаем фактор памяти часть В

В предыдущей статье Жирные программы-факторы скорости были набросаны наметки по теме — почему программы "тормозят".


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


Была написана утилита, которая позволяет измерить время загрузки программы и связанные с этим расходы — дисковый ввод/вывод и потребляемую память. Ссылка в конце статьи.


Некоторые тесты под катом.


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

Автономер на четырех языках. Часть 1


Небольшое вступление.


Я попал в мир IT относительно недавно: всего два года я занимаюсь разработкой приложений под iOS. Но кроме Objective-C и Swift меня всегда манил мир Java и C#. Периодически я выделял время, чтоб посмотреть какие-то видео, обучающие основам этих языков, но дальше простого просмотра и переписывания кода с экрана дело не заходило. И тут я вспомнил об одной математической игре, которую мне однажды посоветовал мой друг.


Суть игры заключается в следующем: вы идете по улице и смотрите на автомобильные номера. И в каждом номере считаете сумму всех цифр (например, в номере 8037 нужно посчитать 8 + 0 + 3 + 7). Это самый простой уровень игры. Второй по сложности уровень — посчитать сумму первой половины номера и второй (80 + 37). Есть еще третий уровень — умножить все цифры (нули при этом пропустив: 8 х 3 х 7) и четвертый — умножить первую половину номера на вторую (80 х 37).


В общем: эту игру (в консольном варианте) я и решил написать на четырех языках: Swift, Objective-C, Java и C#. Что из этого получилось? Давайте посмотрим.


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

Список ИТ-компаний, которые регулярно проводят стажировки для студентов юга России

Недавно в бой вышел первый проект, где я получил работу джуниора, и мы с коллегой запилили в нашем сервисе такой вот «калькулятор ожиданий джуна». Из первых 47 ответов мы узнали, что 91% респондентов ждет интересного проекта, а 38% — жаждет реального опыта.


Пощупать и оставить свой ответ можно тут

Так и родилась идея помочь нашему джуну: взяли свой родной регион (сами мы ростовские), да и составили список тех, кто регулярно предлагает тут оплачиваемые стажировки с возможностью дальнейшего трудоустройства.
И чего от них ждать

Почему в стандартной библиотеке нет средств борьбы с висячими ссылками и как это исправить?

После появления в стандартной библиотеке С++ умных указателей, проблема управления временем жизни объекта была решена. Можно создавать объекты на стеке, тогда они автоматичести удалятся при выходе из области видимости, либо использовать unique_ptr для создания объектов с экслюзивным владением или shared_ptr для совместного владения. Но только для shared_ptr в стандартной библиотеке существует невладеющий указатель weak_ptr, который предотвращает использование невалидного указателя. Для остальных случаев используют «старые и опасные» raw pointers.

Как же предлагают решить эту проблему разработчики языка?
Читать дальше →

Подводные камни для самодельной распределенности «из коробки» в С++ном акторном фреймворке

В комментариях к последней статье про шишки, которые нам довелось набить за 15 лет использования акторов в C++, вновь всплыла тема отсутствия в SObjectizer-5 распределенности «из коробки». Мы уже отвечали на эти вопросы множество раз, но очевидно, что этого недостаточно.


В SObjectizer-5 нет распределенности потому, что в SObjectizer-4 поддержка распределенности была, но по мере того, как расширялся спектр решаемых на SObjectizer задач и росли нагрузки на SObjectizer-приложения, нам пришлось выучить несколько уроков:


  • под каждый тип задачи желательно иметь свой специализированный протокол. Потому что обмен большим количеством мелких сообщений, потеря части которых не страшна, сильно отличается от обмена большими бинарными файлами;
  • реализация back-pressure для асинхронных агентов — это сама по себе непростая штука. А когда сюда еще и примешивается общение по сети, ситуация становится гораздо хуже;
  • сегодня какие-то куски распределенного приложения обязательно будут написаны на других языках программирования, а не на C++. Поэтому требуется интероперабильность и наш собственный протокол, заточенный под C++ и SObjectizer, мешает разработке распределенных приложений.

Далее в статье попробуем раскрыть тему подробнее.

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


Последние посты