Компиляция 32-битных приложений XForms на 64-битном Linux Mint

Что мне не нравится в GTK, так это сложность разработки 32-битных приложений на 64-битной Linux машине. В обсуждении на StackOverflow решили использовать отдельную виртуальную машину с 32-битным Linux на борту. Это не очень удобно.

Библиотека xlib лишена этого недостатка. Но она слишком низкоуровневая. И тут я наткнулся на XForms. Это графическая библиотека, основанная на xlib и распространяемая под лицензией LGPL. О том, как я настраивал ее на своем домашнем компьютере я и хотел бы сегодня рассказать. Читать полностью →

Что скрывает O-нотация?

Для оценки времени работы алгоритмов принято использовать O-нотацию. Она задает верхнюю асимптотическую сложность алгоритма. То есть, она показывает как, при прочих равных, изменяется время работы алгоритма при изменении размера входных данных. Например, если некоторый алгоритм имеет сложность O(n*n), то при увеличении размера входных данных в 3 раза, время его работы увеличится примерно в 9 (3*3) раз.

Ее же используют для сравнения эффективности алгоритмов. Так, если первый алгоритм имеет сложность O(n*n), а второй — O(n), то последний значительно быстрее первого. При увеличении размера входных данных в 3 раза, время работы первого алгоритма увеличится примерно в 9 раз, а второго — в три раза. Почему примерно?

Читать полностью →

Текстовый редактор для Git в среде Windows

Git требует, чтобы каждый коммит сопровождался текстовым пояснением. Для краткого пояснения вполне достаточно ключа -m, но назначение коммита не всегда можно описать одним словосочетанием. В этом случае использовать ключ -m неудобно.

Вообще грамотное составление коммитов и комментариев к ним — отдельная тема, которую мы не будем здесь обсуждать. Я хотел прежде всего сосредоточиться на инструментарии. Точнее поделиться своим личным опытом поиска оного в среде Windows. Читать полностью →

Две проблемы использования Git в Windows

Все знают, что Git изначально появился в Linux и только потом его портировали в Windows. Это наложило определенный отпечаток на его работу в «не родной» для себя среде. Сегодня я опишу две проблемы, с которыми я столкнулся при использовании Git в среде Windows. Читать полностью →

Шпаргалка Windows API теперь доступна на Bitbucket

Вчера наконец-то разместил на Bitbucket (аналог GitHub) исходные файлы всех трёх томов своего проекта Шпаргалка Windows API. Зачем я это сделал? Причин несколько. Читать полностью →

Итераторы не защищают от переполнения

Итераторы были введены в С++ в качестве основного механизма доступа к элементам контейнера. Они должны обеспечивать унифицированный объектно-ориентированный доступ к элементам. Но насколько он безопасен? То есть, защищают ли итераторы от индексного переполнения? Давайте проверим. Читать полностью →

std::vector при нехватке памяти

Контейнер std::vector представляет собой динамический массив, автоматически увеличивающийся в размере по мере надобности. Он описан в любом приличном руководстве по С++. Там же описываются его методы, достоинства и недостатки по сравнению с другими контейнерами.

В руководствах говорится, что при добавлении нового элемента может потребоваться выделение дополнительной памяти. Но ни одно из них (из тех, что я встречал) не дает ответа на вопрос: что произойдет, если выделить память не удастся? Память ведь не бесконечна. Читать полностью →

GCC требует открытого конструктора копирования для C++98

В одной из своих прошлых статей я рассказывал, что при возврате объектов GCC не использует конструктор копирования, сразу размещая объекты там, где они должны располагаться. Однако, в некоторых случаях GCC требует наличия открытого конструктора копирования. Читать полностью →

Wine неправильно обрабатывает исключения в 64-битных приложениях

Wine — популярная программа для запуска Windows приложений в среде Linux. Как оказалось в ней содержится серьезная ошибка, не позволяющая полноценно использовать 64-битные приложения. Читать полностью →

Не используйте std::move при возврате объектов

Конструкторы и операторы перемещения являются важным нововведением С++11. Про них много написано, и я не стану повторять основы. Вместо этого я хотел бы сосредоточиться на таком вопросе, как возвращение объектов. Нужно ли для этого использовать функцию std::move или нет? Читать полностью →