Загрузка...

среда, 30 апреля 2008 г.

Сравнение MFC и Qt

На самом-то деле и сравнивать нечего :) Не то, чтобы Qt превосходит MFC, а дело в том, что это две разные по духу библиотеки. Одна кроссплатформенна и элегантна, другая - громоздка и сложна.

Несмотря на это, сравнивать есть что. Хотел изложить собственный взгляд на вещи, однако погуглив, выяснил, что данная тема уже давно обговорена и решена: Qt рулит!

Почитать по теме:


воскресенье, 27 апреля 2008 г.

Coding Style. Part 1

»Стиль программирования. Часть 1«
Читать другие материалы серии статей "Стиль программирования":
Вступление, Часть 1, Часть 2

Общие рекомендации

Совет 1
Оптимизируй код, только если действительно уверен, что проблема заключается в производительности программы. Подумай дважды перед тем, как начнешь. Найди узкие места, и подумай снова. Ведь современные компиляторы C++ в плане оптимизации довольно хороши. А код, который, по-твоему, кажется быстрым, необязательно генерирует быстрый объектный код. Он только усложняет понимание и сопровождение.

Помни о следующем: "Преждевременная оптимизация — корень всех зол" (Дональд Кнут).

Совет 2
Перед тем, как закончить разработку программы, скомпилируй ее при помощи другого компилятора и на другой платформе. Если она была разработана при помощи MS Visual C++ под WinXP, скомпилируй и протестируй код при помощи компилятора GNU C++ на платформе Unix, и наоборот. Еще лучше попробовать скомпилировать каким-нибудь третьим компилятором. Возможно, обнаружатся едва уловимые ошибки и некоторые проблемы переносимости.

Совет 3
Старайся выполнять компиляцию на самом высоком уровне предупреждений. Многих ошибок можно избежать, обращая внимание на диагностические советы компилятора.Правило 1. (от авторов руководства - прим. перев.)
Если это руководство оставляет что-нибудь неясным, смотри, как это сделано для существующего базового подхода, и делай соответственно.

Структура исходного кода

Правило 2
Файлы заголовков (header files) в C++ всегда имеют файловое расширение ".h"

Правило 3
Файлы реализации (implementation files) в C++ всегда имеют файловое расширение ".cpp"

Именование файлов

Правило 4
Определяй имена файлов таким образом, чтобы они, по возможности, были уникальными в как можно большем контексте.

Файл заголовков для класса должен именоваться следующим образом: "<имя класса>.h". При этом используй прописные и строчные буквы так же, как и в исходном коде.

Так как имена классов уникальны в некотором большом контексте, это свойство отображается и на уникальность имен файлов.
Структура проекта

Правило 5
Каждый проект (библиотека или приложение) имеет свой собственный каталог с хорошо выстроенной структурой.

Каталог проекта содержит файлы настройки, make-файлы, а также каталоги для заголовочных файлов, файлов реализации, документацию и тестовый набор.

Тестовый набор по сути является отдельным проектом, и соответственно имеет такую же общую структуру внутри своего каталога. Так как тестовый набор не содержит открытые заголовочные файлы, не существует и каталога include в нем (подробно об этом каталоге читайте далее - прим. перев.).

Правило 6
Открытые файлы заголовков (условное название - файлы, которые можно напрямую подключать из проекта - прим. перев.) всегда помещаются в каталог include или в его подкаталоги. Чтобы избежать конфликты имен и для большей понятности, каталог include может содержать подкаталоги. Для проекта библиотек, эти подкаталоги соответствуют названиям отдельных библиотек.

Правило 7
Все файлы реализации и неоткрытые заголовочные файлы размещаются в каталоге src.

Правило 8
Все файлы с настроками проекта, make-файлы и другие файлы, не содержащие исходный код, должны находится непосредественно в каталоге проекта (в корне).

Совет 4
Если проект содержит дополнительную проектную документацию (например, спецификацию или другие стандартные документы), они должны находится в каталоге doc.

Продолжение следует...
Чтобы быть в курсе последних статей, подпишись на RSS. Это просто!

суббота, 26 апреля 2008 г.

Coding Style. Introduction

Тема, которую я собираюсь раскрыть, на английском языке носит название Coding Style. Это не только стиль форматирования исходного кода, но некоторые общие советы по программированию на языке C++.

Каждый уважающий себя программист должен следовать общепринятому стилю. Как сказал Steve McConnell - "Меньшая задача программирования состоит в написании программы в понятном для компьютера виде, большая - в том, чтобы написать ее так, чтобы другие люди могли ее прочесть". Это значит, что упор необходимо ставить не на сверхкомпактность кода, а на его читабельность и корректность.

В то же время, общепринятый стиль не означает стандартизированный. Есть несколько вопросов, компромиссных ответов на которые пока не найдено. Как пример — расставление фигурных скобок.

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

Поэтому, приучаться к правильному кодированию необходимо как можно раньше, чтобы в дальнейшем не пришлось с трудом ломать устоявшиеся привычки.

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

1. Единообразный стиль во всех проектах.
2. Повышенная читабельность, что позволяет сконцентироваться над самим кодом.
3. Простота дальнейшего сопровождения.
4. Помогает избавиться от некоторых мелких, но широко распространненых ошибок
5. Код понятен другим программистам, использующие такой стиль и т.д.

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

В качестве примечания, хочу отметить, что источником материала стало руководство "C++ Coding Style Guide. Rules and Recommendations" от Applied Informatics, и является его переводом, который не претендует на литературность и высокую точность.

Читайте и оценивайте! А чтобы не упустить новые статьи, подписываемся на RSS. Это просто!

суббота, 19 апреля 2008 г.

Утечка памяти в C++

Каждый программист рано или поздно сталкивается с проблемой, прямо или косвенно связанной с динамической памятью. Самой распространенной является утечка памяти.

Базовой операцией выделения памяти является оператор new, который может использоваться для создания массива динамической длины:

int size = 10;
int *array = new int[ size ];
// некоторый код
delete [ ] array;

Понятно, что к утечке может привести ситуация, когда перед вызовом оператора delete произошла безвозвратная передача управления (например, через оператор return). Поэтому настоятельно рекомендуется использовать контейнеры STL, в частности, vector. Они успешно справляются с такой ситуацией.

Однако, есть один ленивый программист, который предлагает использовать нестандартный подход для автоматического решения поставленного вопроса. Хотя сам подход совсем не для ленивых :)

Суть метода проста - выделение памяти не в хипе (она же куча), а в стэке. А как известно, стэк очищается при выходе из области видимости. Но как это реализовать? Для этого надо использовать функцию alloca() библиотеки времени выполнения C. А чтобы совсем все красиво работало, дополнительно надо создать шаблонный класс для работы с деструкторами сложных объектов и, наконец, один макрос, сокращающий длинную запись. Вот только непонятно, чем этот метод проще использования того же vector.

Но ведь главное не красота, а функциональность и скорость! Автор утверждает, что доступ к стэку осуществляется за O(1) против O(n) хипа. Это, видимо, и есть главное преимущество подхода.

Консерваторам лишь могу посоветовать ознакомиться со статьей, в которой расписан метод управления динамической памятью. Скачав исходники и использовав их в своих проектах, можно следить и гибко управлять сбором мусора (утечками). Читать статью полностью (осторожно, английский)...

Если не хочется заморачиваться на эту тему, лучший совет - использовать умные указатели.

Чтобы не упустить из виду новые статьи, подпишись на RSS. Это просто!

четверг, 17 апреля 2008 г.

MFC еще кому-то нужен?

На прошлой неделе в западной блогосфере был поднят вопрос, почему MFC до сих пор используется при разработке коммерческих приложений? Ведь уже все пересели на C# и на .NET Framework. Ведь на нем можно написать полнофункциональную программу в несколько строк, затратив минимум усилий.

Ответ прост: разработчик программы желает, чтобы его программа работала на как можно большем числе клиентских машин. А ведь для приложений, написанных с использованием MFC, особых дополнительных усилий для начала работы с ними не требуется. Не каждый пользователь захочет скачивать и устанавливать более 20 метров .NET фрэймворка, чтобы запустить простенькую утилиту в полметра.

Естественно, не только по этой причине Microsoft продолжает поддержку библиотеки MFC. Если ее сравнивать с другими, можно утверждать, что MFC является достаточно простой в использовании. Она будет особенно полезна для начинающего программиста, который хотел бы приобрести какой-то опыт, понять внутреннюю структуру типичных приложений. Тем более она идет в стандартной поставке Visual Studio, и, видимо, еще долго входить в опцию по умолчанию.

вторник, 8 апреля 2008 г.

Twitter-трансляции блогпостов

Сегодня, занимаясь оформлением блога (а именно: добавлением ссылок в блогролл), в очередной раз убедился, что тематических блогов не так уж и много. В разы меньше, чем SEO-блогов, что вполне естественно :) Либо я плохо искал, либо на самом деле все обстоит очень плохо...

Сегодня пришла интересная мысль прикрутить одну фичу от модной ныне тенденции Web2.0. Многие наверняка слышали о Twitter. Там я создал аккаунт codeBlogZ, где можно следить за последними новостями, связанными с этим блогом. Это могут быть анонсы статей, а также другие мелкие сопутствующие заметки. Получать такие новости будет удобно тем, кто не любит читать полные статьи в своем RSS-ридере. (Если вам понравилась идея, и вы решите использовать ее в своем блоге, не сочтите за труд - поставьте на меня ссылку :) Буду признателен всеми фибрами души)

Загаловки последних постов с ссылками на них транслируются при помощи сервиса TwitterFeed.com. Очень удобная штука, рекомендую!

Но лучше подписывайтесь на полную RSS-ленту!

Highlight.js: скрипт подсветки для Blogsot.com

Перед всеми блогами по программированию стоит проблема подсветки кода, особенно для блогов на бесплатном хостинге. (Хм, интересная мысль - сделать технический блогхостинг.)

Мне также надо было решить такую проблему. Blogger тем хорош, что можно редактировать шаблоны. Почему я и выбрал его. Поэтому особых затруднений по установке скрипта возникнуть не должно.

Для начала решил пошуршать в Google Reader в поисках упоминания о скриптах подсветки. gReader имеет приятную особенность выдавать те посты, которые раньше и в глаза не видывал (например, вышедшие до момента твоей подписки). Вот и на этот раз он меня обрадовал!

Мне удалось выйти на два скрипта: Highlight.js и Code Syntax Highlighter. Возможно есть другие. (Если так, прошу отписать в комментариях.)

Их отличительная особенность - работа на стороне клиента со всеми вытекающими отсюда последствиями. У каждого из скрипта есть свои плюсы и минусы. Я решил остановиться на Highlight.js. Поддержу отечественного производителя! По крайней мере, он прост в настройке и дальнейшем использовании.

Мне понравилась дополнительная фича - экспорт кода! Она дает возможность получить на выходе безопасный html-код, который можно прямиком вставлять в пост. А чтобы в блоге все красиво отображалось, достаточно в шаблоне прописать URL к CSS-стилю. И никаких JavaScript'ов!

Вот пример того, что у меня получилось:

#include <iostream>
using namespace std;

int main()
{
···cout << "Hello World!" << endl;
···return 0;
}


Конечно, подсветка далека от совершенства. Думаю свой стиль навоять, близкий к MSVC.

Скачать highlight.js
Скачать syntaxhighlighter

UPD. В данный момент на блоге используется именно SyntaxHighlighter.

воскресенье, 6 апреля 2008 г.

С обновкой меня!

Ну что? Будем знакомы!

Я запускаю этот, как сейчас модно говорить, проект с целью увеличения числа качественной и практической информации, касающейся темы программирования. В свое время мне критически не хватало ее. Выход из положения приходилось искать в западном интернете. Уже имея некоторый материал, я хотел бы поделиться с ним. Может он кому-нибудь станет полезным, в чем я никак не сомневаюсь!

Этот блог можно расценивать как записную книжку, в которой всегда можно найти полезные записи.

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

Приступим-с!



 
^

Powered by BloggerCreative Commons License