Pull to refresh
62
Karma
0
Rating
Алексей Кутумов @prograholic

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

Coroutines everywhere

Reading time 4 min
Views 5.4K
Abnormal programming *C++ *System Programming *
В своем докладе на C++ Russia 2016 Гор Нишанов упомянул, что корутины могут работать в любых окружениях, даже там, где нет C++ рантайма. Мне захотелось попробовать корутины в таких средах. Посмотреть, как самому «с нуля» реализовать поддержку корутин в стандартной библиотеке. Проверить, как корутины живут без исключений, и работают ли они вне операционной системы (на голом железе).
Читать дальше →
Total votes 26: ↑14 and ↓12 +2
Comments 6

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

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

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

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

Читать дальше →
Total votes 65: ↑60 and ↓5 +55
Comments 42

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

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

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

Nested Diagnostic Context, log4cpp и Boost asio

Reading time 7 min
Views 5.6K
Programming *C++ *
В данной статье я хочу показать, как можно использовать 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


решением второй проблемы мы и займемся
Total votes 6: ↑6 and ↓0 +6
Comments 3

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

Reading time 5 min
Views 3.8K
Abnormal programming *C++ *
На днях, гуляя по багтрекеру gcc наткнулся на интересный баг, в нем используется сразу несколько возможностей C++11:


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

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

Reading time 4 min
Views 1.6K
C++ *Qt *
Буквально на днях вышел QtCreator 2.5.0, и в нем появился плагин TODO. Но этот плагин поддерживает комментарии вида: <KEYWORD>: <some text>, а я везде использую doxygen комментарии: @<KEYWORD> <SOME_TEXT>. Поэтому я решил доработать плагин, так чтобы он мог поддерживать комментарии обоих видов.
Читать дальше →
Total votes 22: ↑21 and ↓1 +20
Comments 10

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

Reading time 5 min
Views 91K
Website development *Programming *UML Design *

Что такое code review


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

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

Читать дальше →
Total votes 50: ↑41 and ↓9 +32
Comments 22

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

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

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

Reading time 6 min
Views 19K
C++ *
Sandbox
Появился свободный день, и я решил поиграться с библиотекой google::protobuf. Данная библиотека предоставляет возможность кодирования и декодирования структурированных данных. На базе этой библиотеки я построю простенький диспетчер, который может обрабатывать любые сообщения. Необычность данного диспетчера состоит в том, что он не будет знать типы передаваемых сообщений, и будет обрабатывать сообщения только с помощью зарегистрированных обработчиков.
Читать дальше →
Total votes 17: ↑17 and ↓0 +17
Comments 1

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity