Как стать автором
Обновить
62
0
Алексей Кутумов @prograholic

Руководитель команды разработки

Отправить сообщение

Coroutines everywhere

Время на прочтение4 мин
Количество просмотров5.5K
В своем докладе на C++ Russia 2016 Гор Нишанов упомянул, что корутины могут работать в любых окружениях, даже там, где нет C++ рантайма. Мне захотелось попробовать корутины в таких средах. Посмотреть, как самому «с нуля» реализовать поддержку корутин в стандартной библиотеке. Проверить, как корутины живут без исключений, и работают ли они вне операционной системы (на голом железе).
Читать дальше →
Всего голосов 26: ↑14 и ↓12+2
Комментарии6

Что нового в работе с исключениями в C++11

Время на прочтение8 мин
Количество просмотров42K
В интернете довольно много говорят о новых возможностях C++11: auto, lambda, variadic templates. Но как-то обошли стороной новые возможности работы с исключениями, которые предоставляет язык и стандартная библиотека.

От предыдущей версии стандарта остался механизм генерации исключений (throw), проверка того, что мы находимся в процессе обработки исключения (std::uncaught_exception), механизм остановки, если исключение не было обработано. Также есть иерархия стандартных исключений на базе класса std::exception.

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

Читать дальше →
Всего голосов 65: ↑60 и ↓5+55
Комментарии42

Пишем свой std::function (boost::function)

Время на прочтение7 мин
Количество просмотров63K
Классы std::function и boost::function являются высокоуровневыми обертками над функциями и функциональными объектами. Объекты таких классов позволяют хранить и вызывать функции и функторы с заданной сигнатурой, что бывает удобно, например, при создании callback вызовов (например, мы можем регистрировать несколько обработчиков, и это могут быть как обычные функции, так и объекты с определенным оператором =)

Если вам интересно, каким образом реализуется данный функционал, то прошу под кат
Читать дальше →
Всего голосов 49: ↑44 и ↓5+39
Комментарии36

Nested Diagnostic Context, log4cpp и Boost asio

Время на прочтение7 мин
Количество просмотров5.8K
В данной статье я хочу показать, как можно использовать NDC в асинхронных операциях на примере log4cpp и boost.asio

Nested Diagnostic Context (NDC) — контекст, который добавляется в лог. Этот контекст может использоваться для дальнейшей фильтрации лог файла. Особенно это полезно, если производится несколько операций, и эти операции связаны между собой, например: выборка данных из БД, обработка, упаковка в сообщение, передача сообщения по сети клиенту и т.д… Если таких операций много и происходят они параллельно (или асинхронно), то по логу иногда бывает тяжело восстановить последовательность операций. Для этого и используется NDC: вначале мы создаем уникальный(псевдо) идентификатор, и затем помечаем каждую операцию логгирования в нашей цепочке этим идентификатором.

В теории все хорошо: генерируем уникальный ID и передаем его в логгер, однако на практике возникает несколько проблем:
  • Реализация NDC в библиотеке log4cpp основана на механизме Thread Local Storage (Thread Specific Ptr), таким образом NDC хранится только для одного потока. Соответственно встает вопрос передачи NDC между потоками
  • Из первого пункта также вытекает следующая проблема: асинхронные операции, например в boost::asio::io_service. Так как asio позволяет в одном (или нескольких) потоках выполнять множество асинхронных операций, то из-за особенностей log4cpp мы не сможем увидеть в логе правильный NDC. Нужен специальный механизм, который обеспечит корректность NDC в асинхронных операциях asio


решением второй проблемы мы и займемся
Всего голосов 6: ↑6 и ↓0+6
Комментарии3

Методы, как first class citizens в C++

Время на прочтение5 мин
Количество просмотров4.2K
На днях, гуляя по багтрекеру gcc наткнулся на интересный баг, в нем используется сразу несколько возможностей C++11:


Анализируя этот баг, я подумал, что теперь можно удобно реализовать методы как first class citizens
Читать дальше →
Всего голосов 38: ↑36 и ↓2+34
Комментарии6

Доработка плагина TODO для QtCreator 2.5.0

Время на прочтение4 мин
Количество просмотров1.7K
Буквально на днях вышел QtCreator 2.5.0, и в нем появился плагин TODO. Но этот плагин поддерживает комментарии вида: <KEYWORD>: <some text>, а я везде использую doxygen комментарии: @<KEYWORD> <SOME_TEXT>. Поэтому я решил доработать плагин, так чтобы он мог поддерживать комментарии обоих видов.
Читать дальше →
Всего голосов 22: ↑21 и ↓1+20
Комментарии10

Еще одна статья о code review

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

Что такое code review


Code review - инженерная практика в терминах гибкой методологии разработки. Это анализ (инспекция) кода с целью выявить ошибки, недочеты, расхождения в стиле написания кода, в соответствии написанного кода и поставленной задачи.

К очевидным плюсам этой практики можно отнести:
  • Улучшается качество кода
  • Находятся «глупые» ошибки (опечатки) в реализации
  • Повышается степень совместного владения кодом
  • Код приводится к единому стилю написания
  • Хорошо подходит для обучения «новичков», быстро набирается навык, происходит выравнивание опыта, обмен знаниями.

Читать дальше →
Всего голосов 50: ↑41 и ↓9+32
Комментарии22

Как запустить Дальнобойщики 2 под Wine, патчим ddraw.c

Время на прочтение6 мин
Количество просмотров9.6K
Я являюсь ярым фанатом игры «Дальнобойщики-2», но к сожалению, у меня не получалось запустить их под Linux. Я пытался заставить игру работать в течении нескольких лет (это не значит, что я сидел сутки напролет над ней) с переменным успехом. Пробовал разные версии wine, ковырял настройки, но игра не поддавалась. Как-то раз у меня появилось свободное время, и я решил разобраться, почему Дальнобойщики не запускаются под Wine, хотя прекрасно работали под Cedega. Далее я расскажу, как мне это удалось.
Читать дальше →
Всего голосов 115: ↑91 и ↓24+67
Комментарии46

Диспетчер произвольных сообщений на базе google protocol buffers

Время на прочтение6 мин
Количество просмотров20K
Появился свободный день, и я решил поиграться с библиотекой google::protobuf. Данная библиотека предоставляет возможность кодирования и декодирования структурированных данных. На базе этой библиотеки я построю простенький диспетчер, который может обрабатывать любые сообщения. Необычность данного диспетчера состоит в том, что он не будет знать типы передаваемых сообщений, и будет обрабатывать сообщения только с помощью зарегистрированных обработчиков.
Читать дальше →
Всего голосов 17: ↑17 и ↓0+17
Комментарии1

Информация

В рейтинге
Не участвует
Откуда
Новосибирск, Новосибирская обл., Россия
Дата рождения
Зарегистрирован
Активность