В своем докладе на C++ Russia 2016 Гор Нишанов упомянул, что корутины могут работать в любых окружениях, даже там, где нет C++ рантайма. Мне захотелось попробовать корутины в таких средах. Посмотреть, как самому «с нуля» реализовать поддержку корутин в стандартной библиотеке. Проверить, как корутины живут без исключений, и работают ли они вне операционной системы (на голом железе).
Алексей Кутумов @prograholic
Руководитель команды разработки
Что нового в работе с исключениями в C++11
8 min
43KВ интернете довольно много говорят о новых возможностях C++11: auto, lambda, variadic templates. Но как-то обошли стороной новые возможности работы с исключениями, которые предоставляет язык и стандартная библиотека.
От предыдущей версии стандарта остался механизм генерации исключений (throw), проверка того, что мы находимся в процессе обработки исключения (std::uncaught_exception), механизм остановки, если исключение не было обработано. Также есть иерархия стандартных исключений на базе класса std::exception.
Новый стандарт добавляет к этим вещам еще несколько сущностей, которые, на мой взгляд, могут существенно упростить работу с исключениями в C++.
От предыдущей версии стандарта остался механизм генерации исключений (throw), проверка того, что мы находимся в процессе обработки исключения (std::uncaught_exception), механизм остановки, если исключение не было обработано. Также есть иерархия стандартных исключений на базе класса std::exception.
Новый стандарт добавляет к этим вещам еще несколько сущностей, которые, на мой взгляд, могут существенно упростить работу с исключениями в C++.
+55
Пишем свой std::function (boost::function)
7 min
64KКлассы std::function и boost::function являются высокоуровневыми обертками над функциями и функциональными объектами. Объекты таких классов позволяют хранить и вызывать функции и функторы с заданной сигнатурой, что бывает удобно, например, при создании callback вызовов (например, мы можем регистрировать несколько обработчиков, и это могут быть как обычные функции, так и объекты с определенным оператором =)
Если вам интересно, каким образом реализуется данный функционал, то прошу под кат
Если вам интересно, каким образом реализуется данный функционал, то прошу под кат
+39
Nested Diagnostic Context, log4cpp и Boost asio
7 min
5.8KВ данной статье я хочу показать, как можно использовать NDC в асинхронных операциях на примере log4cpp и boost.asio
Nested Diagnostic Context (NDC) — контекст, который добавляется в лог. Этот контекст может использоваться для дальнейшей фильтрации лог файла. Особенно это полезно, если производится несколько операций, и эти операции связаны между собой, например: выборка данных из БД, обработка, упаковка в сообщение, передача сообщения по сети клиенту и т.д… Если таких операций много и происходят они параллельно (или асинхронно), то по логу иногда бывает тяжело восстановить последовательность операций. Для этого и используется NDC: вначале мы создаем уникальный(псевдо) идентификатор, и затем помечаем каждую операцию логгирования в нашей цепочке этим идентификатором.
В теории все хорошо: генерируем уникальный ID и передаем его в логгер, однако на практике возникает несколько проблем:
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
Методы, как first class citizens в C++
5 min
4.4KНа днях, гуляя по багтрекеру gcc наткнулся на интересный баг, в нем используется сразу несколько возможностей C++11:
Анализируя этот баг, я подумал, что теперь можно удобно реализовать методы как first class citizens
- std::function — механизм для создания функторов — объектов функций
- non static member initialisation — механизм для инициализации членов класса вне конструктора
- lambda — тут и так все ясно. Исчерпывающие статьи были здесь.
Анализируя этот баг, я подумал, что теперь можно удобно реализовать методы как first class citizens
+34
Доработка плагина TODO для QtCreator 2.5.0
4 min
1.7KБуквально на днях вышел QtCreator 2.5.0, и в нем появился плагин TODO. Но этот плагин поддерживает комментарии вида: <KEYWORD>: <some text>, а я везде использую doxygen комментарии: @<KEYWORD> <SOME_TEXT>. Поэтому я решил доработать плагин, так чтобы он мог поддерживать комментарии обоих видов.
+20
Еще одна статья о code review
5 min
93KЧто такое code review
Code review - инженерная практика в терминах гибкой методологии разработки. Это анализ (инспекция) кода с целью выявить ошибки, недочеты, расхождения в стиле написания кода, в соответствии написанного кода и поставленной задачи.
К очевидным плюсам этой практики можно отнести:
- Улучшается качество кода
- Находятся «глупые» ошибки (опечатки) в реализации
- Повышается степень совместного владения кодом
- Код приводится к единому стилю написания
- Хорошо подходит для обучения «новичков», быстро набирается навык, происходит выравнивание опыта, обмен знаниями.
+32
Как запустить Дальнобойщики 2 под Wine, патчим ddraw.c
6 min
9.8KЯ являюсь ярым фанатом игры «Дальнобойщики-2», но к сожалению, у меня не получалось запустить их под Linux. Я пытался заставить игру работать в течении нескольких лет (это не значит, что я сидел сутки напролет над ней) с переменным успехом. Пробовал разные версии wine, ковырял настройки, но игра не поддавалась. Как-то раз у меня появилось свободное время, и я решил разобраться, почему Дальнобойщики не запускаются под Wine, хотя прекрасно работали под Cedega. Далее я расскажу, как мне это удалось.
+67
Диспетчер произвольных сообщений на базе google protocol buffers
6 min
20KПоявился свободный день, и я решил поиграться с библиотекой google::protobuf. Данная библиотека предоставляет возможность кодирования и декодирования структурированных данных. На базе этой библиотеки я построю простенький диспетчер, который может обрабатывать любые сообщения. Необычность данного диспетчера состоит в том, что он не будет знать типы передаваемых сообщений, и будет обрабатывать сообщения только с помощью зарегистрированных обработчиков.
+17
Information
- Rating
- Does not participate
- Location
- Новосибирск, Новосибирская обл., Россия
- Date of birth
- Registered
- Activity