Знакомство с Boost.Spirit.Qi

Столкнувшись с необходимостью написания парсера для небольшого встроенного DSL, я решил использовать Boost.Spirit. Но оказалось, что использовать библиотеку человеку, плохо знакомому с boost, весьма не просто. В этой статье я…

Virtual inline методы C++

C++ даёт возможность определять встраиваемые (inline) функции и методы. Реализация таких функций будет встраиваться в другие функции по месту вызова (за исключением некоторых случаев, когда это невозможно). Как правило, в…

Спецификация исключений: друг или враг?

Исторически сложилось, что разные языки программирования, поддерживающие работу с исключениями, по-разному относятся к спецификации исключений. В Java спецификации обязательны и контролируются статически, в C# и Python их вообще нет, а…

Анализ и оптимизация кода на C++ для Linux

Какие проблемы могут нас подстерегать при разработке программ? Неэффективные алгоритмы, утечки памяти, работа с невалидными указателями и не инициализированными переменными. Даже несмотря на, казалось бы, тщательное написание кода, мы порой…

Положение двух точек относительно прямой

Поводом для написания этой статьи стала эта тема на форуме. Вопрос довольно простой, но мне показалось, что он заслуживает освещения в цикле, посвящённом применению математики в программировании.Итак, дано: уравнение прямой,…

Пишем часы со стрелками

Цель этой статьи - показать практическое использование некоторых тригонометрических функций в программировании.Для начала вкратце о тригонометрических функциях, которые применялись при реализации.Чтобы наглядно представить функции нужно взять произвольную окружность, поместить её…