Скоро я буду справлять годовщину своей миграции на 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; хотя возможность ее попробовать есть зайдите на http://www.thekompany.com/products/ksg/и скачайте демо-версию) и 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 и в первом раскомментировать строку:
Затем, если во втором тоже существует такой параметр, присвоить и ему значение 204. Вот и все сложности. При желании шрифты редактора потом можно настроить по своему вкусу.
Glade это инструмент для создания графических интерфейсов на основе Gtk. Хочу дать один совет: начинайте создавать графические приложения, написав код вручную, чтобы понять, что и как делается, вникнуть в саму организацию, а потом уже используйте визуальные построители форм, чтобы ускорить работу. Это, кстати, относится не только к интерфейсу.
Этим коротким вступлением я собираюсь начать небольшой цикл статей, посвященный некоторым аспектам написания программ в Linux. Сразу хочу предупредить, что я не буду рассказывать, что такое указатели, динамические структуры данных, толковать о работе с файлами, и т.д. подразумевается, что все это вы уже знаете (если же нет Кернигана и Ритчи в руки, и вперед :-)!) В этом цикле будут рассмотрены некоторые из механизмов взаимодействия процессов UNIX, создание многопоточных приложений и оконных приложений на базе Gtk+, работа с сетью. Если же вы хотите разобраться в чем-нибудь, что не было затронуто, пишите, подумаем над этим вместе. Основной язык программирования C, но я постараюсь уделить немного внимания shell’у и perl’у, поскольку иногда использование всей мощи C, мягко говоря, не оправдано.
За сим прощаюсь. Следующая тема системные вызовы fork() и exec().