Программирование в Linux. Часть первая. Обзор средств редактирования

Сегодня все больше пользователей мигрирует с платформы Win32 на Linux. Причин этому много, а результат один — программисты получают больше работы для этой платформы. В этой статье я расскажу о возможностях Linux для людей, которые занимаются разработкой и реализацией программного обеспечения.

Еще два слова, прежде чем начнем. Статья называется именно так потому, что задумывалась как продолжение статьи Влада Маслакова "Установка Linux" (КГ №26 (519) от 11 июля 2005 г.). Тем не менее, все, что будет сказано ниже о программировании в Linux, почти полностью подходит и для любой другой Unix- или Unix-подобной системы. Так что, если у вас стоит FreeBSD — смело читайте дальше. Многие сегодня сталкиваются с необходимостью разработки приложений для Linux. Однако программирование под Linux не проще и не сложнее, чем под DOS или Windows. Суть правильного разбиения задачи на подзадачи и ключевых алгоритмов от платформы не меняется. Меняются инструменты, при помощи которых создаются программы — о них и пойдет речь в этой статье. При написании ее я ориентировался на читателей, которые уже имеют некоторый опыт программирования под Windows и с интересом поглядывают в сторону Linux. Им будет небезынтересно узнать, что Linux — это совсем не страшно — это просто немного по-другому:-)! Итак, к делу. Язык программирования под Unix — С. Нет, конечно, в Unix есть компиляторы и Pascal, и Basic, и Fortran, и вообще всех распространенных языков. Тем не менее, почти все, что пишется под Unix включая и ядро системы, написано на С или C++. Так уж повелось от отцов- основателей: Керниган и Ритчи написали компилятор языка С, а потом — и сам Unix (вместе с Томпсоном и Пайком). Тогда, кстати, это была первая и долгое время единственная операционная система, написанная на компилируемом языке. И работала она, между прочим, только на самых могучих мейнфреймах, занимавших чуть ли не целые здания! Примерно в то же время было написано большинство инструментов программирования под Unix, которые потом стали стандартными. В первую очередь, это компилятор cc, утилита make и несколько текстовых редакторов. Сейчас, спустя 30 лет с того времени, мы пользуемся все теми же инструментами, только "слегка" переработанными. Начнем с текстового редактора. Давным-давно было два редактора: Vim и Emacs. Это очень мощные текстовые редакторы. Они поддерживают модули и скрипты, различные подсветки, разделение экрана на окна, запуск make и других утилит, получение вывода программы и много-много всяких самых экзотических, а порой — и бесполезных функций. Испокон веков их используют для написания кода под Unix, и все это время идет так называемая святая война (holy war) между фанатами этих редакторов. И не то чтобы эти две утилиты сильно отличались по функционалу или удобству использования — просто так уж повелось, что, если ты фанат Vim, то обязательно должен обругать Emacs. В Unix много старинных традиций! Впрочем, Vim и Emacs — это последнее, к чему должен прибегнуть "зеленый" линуксоид. Дело в том, что эти редакторы имеют крайне аскетичный и неудобный по сегодняшним стандартам интерфейс, а посему достаточно сложны в изучении. Ими все еще пользуются бородатые дядьки, которые программируют под Unix столько, сколько существует сам Unix, и, понятное дело, привыкли. Ну, а все остальные... Если вы не страдаете хроническими расстройствами психики и дальше не хотите ими страдать — то лучше выберите что-нибудь другое:-)! Еще один старожил Unix — Midnight Commander. Это файловый менеджер, похожий на Norton Commander, только с гораздо большим функционалом. В него встроен замечательный текстовый редактор (mcedit), который умеет подсвечивать синтаксис, сохранять количество отступов после нажатием Enter, копировать-удалять-вставлять-искать текст и т.д. Скажете: и все?! Да, именно все. В этой простоте его главное преимущество. Думаю, не ошибусь, если скажу, что 99% программистов и администраторов Unix свои первые программы написали именно при помощи mcedit.

Тем не менее, прогресс не стоит на месте, и в Unix тоже появляются интегрированные среды. Справедливости ради надо сказать, что под Windows толковые IDE (Integrated Development Environment) появились гораздо раньше и с тех пор сильно превосходят по функционалу свои Unix-аналоги. Тем не менее, обратим свой взор и сюда. Лидером среди интегрированных средств разработки является, конечно, Kdevelop. По количеству функционала Kdevelop замахнулся на конкуренцию аж с Microsoft Visual Studio, зато вот по качеству... Впрочем, по порядку. Kdevelop — это уже полноценная современная IDE со всем, что должно быть у программиста: стандартный и очень красивый пользовательский интерфейс, файлы проекта, фронтенд к системе управления версиями, подсветка и автодополнение кода, дебагер, визуальный редактор пользовательских интерфейсов (qt3-designer от Trolltech). Количество поддерживаемых языков программирования поражает воображение: C, C++, C#, Pascal, Java, Python, Ruby, Perl, shell script и др. Да мало ли! Kdevelop — это такой комбайн — всех возможностей и не перечислишь! Сразу вспоминается анекдот. Стюардесса по микрофону объявляет: "Уважаемые пассажиры, для вас на борту самолета предоставляется кафе-бар, казино, кинотеатр, бассейн, сауна, тренажерный зал, боулинг, бильярд и кегельбан. А теперь пристегните ремни: мы попробуем со всей этой фигней взлететь!" Здесь та же ситуация: лететь-то Kdevelop летит, да по большей части вниз. Проекты между разными его версиями переносятся с трудом, а глючит он порой при открытии даже родных проектов. Функция автодополнения текста работает из рук вон плохо и знает в основном слова из того же файла, который в данный момент редактируется. Дебагер заставить работать тоже та еще задача, ну, а извлечь полезную информацию при помощи valgrind (хорошей, в общем-то, утилиты для поиска утечек памяти) в Kdevelop неопытный пользователь вообще не сможет. Управление файлами пользовательского интерфейса не реализовано вообще. То есть сначала создается интерфейс при помощи qt3-designer, который достаточно криво приклеили к Kdevelop, затем нужно вручную создать класс, который наследует от класса-интерфейса, и т.д. Бр-р-р! К счастью, в QT4 с этой проблемой справились очень элегантно, применив паттерн проектирования "мост", и теперь интерфейсы можно разрабатывать отдельно от их воплощений в классах. Подробнее о QT4 в третьей части статьи. Тем не менее, несмотря на перечисленные недостатки, Kdevelop — пожалуй лучшая IDE, доступная по лиценизии GPL. Впрочем, под Unix есть и коммерческие IDE, способные оказать немалую помощь при кодировании. SlickEdit — одна из наиболее толковых. Полная версия на просторах СНГ распространяется по платной лицензии или с "бесплатным" крэком. И вот уж что касается SlickEdit, то про эту IDE могу сказать только хорошее. Во-первых, это приятный и легкий к освоению MDI-интерфейс, внешне напоминающий на Microsoft Visual Studio 6. Причем в настройки входит эмуляция нескольких других IDE включая и ту же "вижуалку". Так что, если вы привыкли для билда нажать Ctrl+Shift+B, а затем F5 — возрадуйтесь! Все keybindings от "вижуалки" работают здесь в наилучшем виде уже при первом запуске IDE безо всяких дополнительных настроек! Во-вторых, и в главных, у SlickEdit'а самый удобный текстовый редактор, который мне доводилось пользовать под Unix. Он ничем не уступает аналогичному в Visual Studio или Delphi и умеет все то, что и положено уметь программерскому текстовику: подсветка и автодополнение текста здесь на высоте. Еще при установке SlickEdit долго шуршал по каталогу /usr в поисках заголовочных файлов и поднял оттуда все определения функций, классов и глобальных переменных. Ну и, разумеется, он знает все определения из текущего проекта.

Рис. 1. SlickEdit 10.0

К плюсам SlickEdit'а можно отнести еще много дополнительных возможностей: толковое управление файлами, выделение определений классов, функций и переменных, множество настроек, разные фичи текстового редактора (автодополнение и поиск скобок, выделение всего текста внутри текущего блока и т.д.) и многое другое.

Теперь по нисходящей посмотрим, какие еще IDE остались для тех, у кого нет SlickEdit'а и кому не нравится Kdevelop. Очень неплохая IDE Anjuta. Здесь мы видим все то же управление проектами, правда, слишком навороченное и неудобное к "ручному" редактированию, приятный интерфейс, неплохой редактор с подсветкой кода и автодополнение текста на основе libscintilla с претензиями на конкуренцию со SlickEdit (знает определения лишь в пределах текущего файла). В общем, если не нужно использовать библиотеку QT, то Anjuta — оптимальный выбор. На основе библиотеки libscintilla, которая используется как раз при выделении и автодополнении текста, написан еще ряд приложений. Это, например, Scite или qScintilla. Однако Anjuta сильно превосходит все эти поделки. Ну, а если вам не нужны лишние навороты, вы цените здоровый минимализм и доверяете консоли больше, чем скриптам IDE, но при этом хотели бы иметь современный интерфейс, то ваш выбор — Kate. Это уже не совсем IDE, но чуть больше, чем просто хороший программерский текстовый редактор. В его возможности входит подсветка и автодополнение, как у Anjuta, одновременное редактирование и навигация по нескольким файлам, показ закладок и номеров строк, извлечение определений из текущего проекта, и, пожалуй, все. Этим редактором удобно пользоваться, когда make-файлы пишешь сам.

Все описанные выше инструменты предназначены в основном для редактирования исходного кода. Однако среди рутинной работы программиста встречается еще и создание пользовательского интерфейса. В Windows эта задача давно автоматизирована, и нормальным считается создавать интерфейсы, например, при помощи встроенного в Visual Studio редактора ресурсов, работающего в режиме WYSIWIG. В Unix такие редакторы ресурсов тоже есть, хотя они и не пользуются особой популярностью. Причина кроется в еще одной старинной традиции Unix. Эта операционная система с самого начала стала прибежищем самых продвинутых программистов. В их среде сформировалось мнение, что чем сложнее процесс создания программы, тем круче создавший ее программист. Тем не менее, некоторые специалисты считают, что создавать интерфейс пользователя вручную — неоправданная трата сил и времени. Лучше создавать сложные программы простыми методами, чем простые программы сложными. Так появилось несколько редакторов ресурсов, два из которых определенно заслуживают внимания. В первую очередь, это, конечно, QT4 Designer. Выглядит он примерно как и редактор ресурсов в Delphi и создает файлы ресурсов для использования с библиотекой QT4. Дизайнер, поставлявшийся ранее с библиотекой QT3, умел также редактировать и исходный код, но в четвертой версии эту возможность посчитали лишней и убрали. На панели компонентов дизайнера достаточно объектов, чтобы создать самый развитый графический интерфейс, кроме того, в соответствующей панели отображается набор свойств для текущего компонента, а также перечисляются все установленные сигналы и слоты. Дизайнер умеет создавать как диалоговые, так и SDI/MDI-окна, а также мастера и пользовательские виджеты. Для библиотеки компонентов GTK — конкурента QT — также есть свой WYSIWIG-дизайнер. Это редактор пользовательских интерфейсов Glade. Он умеет все то же, что и QT Designer, только для библиотеки GTK, и, в общем-то, тоже заслуживает похвалы. Итак, мы рассмотрели основные инструменты редактирования кода, с которыми сталкивается почти каждый Unix-программист. В следующей части статьи я расскажу еще о некоторых утилитах, облегчающих жизнь кодеру: коллекции компиляторов GNU, утилите make, дебагере gdb и некоторых других. Кроме того, мы приступим непосредственно к написанию исходного кода для Unix.

Дмитрий Бушенко, nop@list.ru


Компьютерная газета. Статья была опубликована в номере 28 за 2005 год в рубрике soft :: ос

©1997-2024 Компьютерная газета