Unix как IDE: Введение
Профессиональные программисты, как новички, так и опытные, обычно придерживаются концепции IDE, или «интегрированной среды разработки». Правда, удобно же иметь самые необходимые средства организации, написания, поддержки и тестирования кода в одном приложении с единым интерфейсом для всех инструментов? К тому же, среда, специально спроектированная для программирования, дает ряд преимуществ, таких как автодополнение, проверка и подсветка синтаксиса.
Подобные средства есть для всех распространенных настольных ОС, включая Linux и BSD, и многие из них совершенно бесплатны, так что вряд ли имеет смысл ограничивать себя в Блокнотом Windows, nano или cat.
Однако, в среде поклонников Unix гуляет в разнообразных вариациях мем о том, что «Unix — это IDE», в том смысле, что средства, которыми разработчики располагают в терминале, легко реализуют основные возможности современных IDE. Вы можете соглашаться или отказываться признать Unix «IDE» в том самом смысле, что Eclipse или Microsoft Visual Studio. Так или иначе, вас скорее всего удивит, насколько законченную среду разработки может являть собой скромный Bash.
В каком смысле Unix — это IDE?
Смысл IDE состоит в том, чтобы объединить все инструменты общей концепцией интерфейса, и без лишних мучений научить их совместной работе. Это особенно важно для GUI-приложений, поскольку они обычно с большим трудом находят общий язык. Кроме возможности копипастить текст, у них нет других средств взаимодействия.
При этом интересно, что пользователи командной строки уже имеют под рукой отлично спроектированные и прошедшие проверку временем инструменты Unix. Эти инструменты с самого начала имеют общий интерфейс в виде потоков текста и файлов по причине заложенного в архитектуру Unix принципа «все является файлом». Почти все в Unix строится поверх файлов и потоков, которые и являются искомым общим интерфейсом. Сорок лет развития этих инструментов позволяют Unix по возможностям не уступать полновесным IDE.
Отличная идея
Такой подход не остался уделом только лишь убеленных сединой ветеранов Unix; вокруг современных воплощений Vi и Emacs (Vim и GNU Emacs) образовались сообщества разработчиков, работающие над расширениями для любых видов работы с текстом. Для обоих редакторов есть плагины под любые программистские задачи, и ряд из них я назвал бы жизненно важными.
Мне кажется, что в конечном счете разработчики расширений стремятся превратить названные текстовые редакторы в настоящие IDE. Нередко можно встретить посты о том, что Vim или Emacs можно вообще не покидать в процессе работы.
Но, думается, впихивать в текстовый редактор несвойственные ему возможности не есть верный подход к проблеме. Bram Moolenaar, автор Vim, похоже, в значительной степени согласен со мной, если судить по :help design-not. Командная строка всегда доступна по Ctrl-Z, и ее зрелый, хорошо интегрированный внутри себя инструментарий по возможностям заткнет за пояс любой текстовый редактор.
О этой серии публикаций
В этой серии постов я пройдусь по 6 важнейшим свойствам IDE и дам примеры того, как базовые средства Linux при совместной работе позволяют с легкостью использовать их для реализации этих качеств. Это ни в коем случае не исчерпывающий обзор, и средства, о которых я буду рассказывать, не единственно возможный выбор.
- Управление файлами и проектами — ls, find, grep/ack, bash
- Текстовый редактор и средства редактирования — vim, awk, sort, column
- Компилятор и/или интерпретатор — gcc, perl
- Средства сборки — make
- Отладчик — gdb, valgrind, ltrace, lsof, pmap
- Контроль версий — diff, patch, svn, git
О чем не буду говорить
Я не считаю, что IDE плохи; они великолепны, как раз поэтому я и пытаюсь утверждать, что Unix можно использовать аналогично, или по крайней мере думать о Unix в таком качестве. Я также не собираюсь утверждать, что Unix — всегда лучшее средство для задач программирования; вероятно, он гораздо лучше заточен для разработки на C, C++, Python или Shell, чем для таких мейнстримных языков, как Java или C#, особенно в части написания сложных GUI-приложений. Также я не собираюсь убеждать вас выбросить на свалку тяжко выстраданное знание Eclipse или Microsoft Visual Studio в пользу несколько эзотеричного мира командной строки. Я лишь хочу показать вам, чем мы занимаемся по ту сторону ограды.
Linux. Системное программирование.
Данная книга рассказывает о системном программировании в Linux. Системное программирование — это практика написания системного ПО, низкоуровневый код которого взаимодействует непосредственно с ядром и основными системными библиотеками. Иными словами, речь далее пойдет в основном о системных вызовах Linux и низкоуровневых функциях, в частности тех, которые определены в библиотеке C. Есть немало пособий, посвященных системному программированию для UNIX-систем, но вы почти не найдете таких, которые рассматривают данную тему достаточно подробно и фокусируются именно на Linux. Еще меньше подобных книгучитывают новейшие релизы Linux и продвинутые интерфейсы, ориентированные исключительно на Linux. Эта книга не только лишена всех перечисленных недостатков, но и обладает важным достоинством: дело в том, что я написал массу кода для Linux, как для ядра, так и для системных программ, расположенных непосредственно «над ядром». На самом деле я реализовал на практике ряд системных вызовов и других функций, описанных далее. Соответственно книга содержит богатый материал, рассказывая не только о том, как должны работать системные интерфейсы, но и о том, как они действительно работают и как вы сможете использовать их с максимальной эффективностью. Таким образом, данная книга одновременно является и руководством по системному программированию для Linux, и справочным пособием, описывающим системные вызовы Linux, и подробным повествованием о том, как создавать более интеллектуальный и быстрый код. Текст написан простым, доступным языком. Независимо от того, является ли создание системного кода вашей основной работой, эта книга научит полезным приемам, которые помогут вам стать по-настоящему высокопрофессиональным программистом.