Скоро я буду справлять годовщину своей миграции на Linux. Надо сказать, программирование было одним из первоочередных пунктов, с которыми мне предстояло разобраться при переходе. В разговорах о Linux мне часто попадалась фраза «Linux написан программистами для программистов». Так ли это?

Первое, что заставляет обратить на себя внимание в Linux, — это поддержка разнообразных языков программирования. Парад открывают признанные гранды —C и C++ (реализованные GNU C Compiler'ом или просто gcc), на которых держится практически весь Linux. За ними следуют скриптовые языки —Perl (просто ас обработки текстов :-)) и стремительно набирающий популярность в сисадминских кругах Python. Не забыты и другие известные языки: Pascal (в образе Free Pascal Compiler и GNU Pascal), Java, Fortran, Ada, Lisp, Assembler. А еще не очень известные, к сожалению, Eiffel да Objective C и многие другие. Но главная прелесть всего этого разнообразия в том, что подавляющее большинство компиляторов и интерпретаторов бесплатны!

Библиотеки. Их очень много. Я не могу утверждать точно, но уверен, что процентов эдак 90 (а то и больше) того, что вам нужно, вы найдете. Имеются библиотеки для работы с архивами и базами данных, звуком и графикой, XML и PGP, сетями (без них-то и UNIX — не UNIX :-)) и еще много чего. Есть библиотеки для работы с трехмерной графикой (OpenGL) и создания игр (SDL — аналог DirectX). Понятно, не обошлось и без средств создания графических интерфейсов — можно выбрать из Gtk+, Qt, FOX, wxWindows и FLTK. Кроме того, в комплект поставки практически любого дистрибутива входит куча утилит, которые могут значительно облегчить процесс написания программ и их сопровождение. Таковыми я бы назвал, например, систему управления версиями CVS (в дистрибутивы также часто включают Cervisa — удобный фронт-энд для нее), утилиты lex (для автоматического создания лексикографических анализаторов), yacc (для создания парсеров), diff (для сравнения файлов), gprof (для статистического анализа функций и анализа их быстродействия), make, autoconf, automake (незаменимые при сборке больших программ) и многие другие.

Немного о средах разработки. Для консоли таковой является, например, Emacs. Но наиболее популярной среди продвинутых UNIX-программистов является vim. Несмотря на внешнее убожество и неудобство редактирования (те, кто хоть раз запускал старенький vi, меня поймут), за ней скрывается небывалая мощь, которую, причем, наращивать можно практически бес конца. Есть хороший текстовый редактор с подсветкой синтаксиса FTE, XEmacs. Чем-то они похожи, но FTE не хватает функциональности (например, нет возможности отлаживать программу), а XEmacs — удобства. Xwpe (есть и консольный вариант) и Motor для любителей сред разработки в стиле Borland C 3.x или Pascal 7.x. Среди чисто графических средств я бы отметил связки из сред разработки и визуальных строителей форм: Kdevelop+Qt Designer (можно найти в большинстве последних дистрибутивов), KDE Studio Gold+Qt Designer (правда, влетит это в копеечку — стандартная версия для закачки KDESG стоит $24.95; хотя возможность ее попробовать есть — зайдите на и скачайте демо-версию) и Anjuta+Glade для C/C++. «Паскалисты» могут опробовать компилятор FPC со средой Lazarus (я бы назвал это попыткой сделать бесплатный аналог Delphi). Так как из «графики» я больше знаком с Gtk+, мне лично по душе именно Anjuta и Glade. Остановимся немного на них.

Anjuta — удобная среда разработки. Она имеет весьма симпатичный редактор кода с некоторыми наворотами (например, есть возможность сворачивать комментарии и функции на манер дерева, также радуют всплывающие подсказки по параметрам функций — правда, пока не по всем). Кроме того, она генерирует множество дополнительных файлов, например makefile.am (для automake), configure.in (для autoconf), autogen.sh и т.д. Они хорошо знакомы тем, кто хоть раз собирал пакеты из исходников. В общем, среда определенно должна понравиться начинающим программистам. Кстати, один мой знакомый, краем глаза увидев Anjut’у, принял приложение за Visual C++ :-). К сожалению, есть у нее один маленький недостаток — после инсталляции нет поддержки кириллических шрифтов. Однако это дело легко поправимое. Достаточно заглянуть в файлы ~/.anjuta/user.properties и ~/.anjuta/session.properties и в первом раскомментировать строку:

character.set=204

Затем, если во втором тоже существует такой параметр, присвоить и ему значение 204. Вот и все сложности. При желании шрифты редактора потом можно настроить по своему вкусу.

Glade — это инструмент для создания графических интерфейсов на основе Gtk. Хочу дать один совет: начинайте создавать графические приложения, написав код вручную, чтобы понять, что и как делается, вникнуть в саму организацию, а потом уже используйте визуальные построители форм, чтобы ускорить работу. Это, кстати, относится не только к интерфейсу.

Этим коротким вступлением я собираюсь начать небольшой цикл статей, посвященный некоторым аспектам написания программ в Linux. Сразу хочу предупредить, что я не буду рассказывать, что такое указатели, динамические структуры данных, толковать о работе с файлами, и т.д. — подразумевается, что все это вы уже знаете (если же нет — Кернигана и Ритчи в руки, и вперед :-)!) В этом цикле будут рассмотрены некоторые из механизмов взаимодействия процессов UNIX, создание многопоточных приложений и оконных приложений на базе Gtk+, работа с сетью. Если же вы хотите разобраться в чем-нибудь, что не было затронуто, — пишите, подумаем над этим вместе. Основной язык программирования — C, но я постараюсь уделить немного внимания shell’у и perl’у, поскольку иногда использование всей мощи C, мягко говоря, не оправдано.

За сим прощаюсь. Следующая тема — системные вызовы fork() и exec().

Продолжение следует.