воскресенье, 26 августа 2012 г.

FPC-Notes: И с чем его едят...

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

Давайте рассмотрим различный софт, с которым нам, возможно, придется взаимодействовать при программировании на Free Pascal.

Обязательная программа

GNU BinUtils [1]
Этот пакет уже упоминался ранее в подразделе «Установка», без него обойтись вряд ли удастся, разве что только под Windows, где можно (и нужно) использовать внутренний компоновщик вместо ld, пользуясь исключительно готовой бинарной сборкой (потому что для сборки из исходников потребуется скомпилировать несколько ассемблерных файлов посредством as) и не используя файлы ресурсов, для которых по-умолчанию нужен windres, или же вручную компилируя их в объектные посредством некоего аналога, такого как GoRC [2], например.
GNU Make [3]
Обеспечивает сборку сложных проектов через описания в Makefile. Для разработки на FPC его сложно назвать необходимым, поскольку модульная структура программ позволяет обойтись без таких описаний. Однако оказывается более чем полезным, если в проекте задействованы разные языки, отдельная сборка документации и так далее и тому подобное. Все это можно обеспечить и batch/shell-скриптами, но make — общепринятый и, что немаловажно, кроссплатформенный способ.
Кроме того, значительно упрощает сборку Free Pascal из исходников. Обойтись без make, правда, можно, но придется набирать множество команд с длинными строками параметров, непосредственно в консоли или в файле скрипта, тогда как соответствующий Makefile уже есть готовый.
GDB [4]
GNU-отладчик. Вообще, полезность, а тем более необходимость отладчика — вопрос спорный, но тем не менее... Если вам нужен отладчик, то вот, пожалуйста — Free Pascal рассчитан на работу именно с GDB, то есть, при соответствующих ключах компилятора, вставляет нужную отладочную информацию. На него же ориентированы fp — IDE текстового режима, и Lazarus.

Замечу, что все вышеописанные GNU-утилиты легко находятся (а зачастую уже установлены по-умолчанию) в основных linux-дистрибутивах, а под DOS и Windows включены в поставку Free Pascal, т.е. ставятся вместе с ним одним установщиком, не требуя дополнительных телодвижений.

Go32v2 [5]
DOS-расширитель. Позволяет писать программы для защищенного 32-разрядного режима DOS. Соответственно, входит в комплект FPC для DOS. Это не единственный расширитель, с которым может работать Free Pascal (можно упомянуть, например, WDOSX [6]), но единственный, предлагаемый «из коробки».
XCode [7]
Для работы под Mac OS X потребуются установленные инструменты разработчика.

Управление версиями

Как уже говорилось ранее1, сами исходники Free Pascal и Lazarus находятся под управлением Subversion... Тем не менее, лично я считаю централизованные системы управления версиями вчерашним днем и даже с SVN предпочитаю иметь дело через Git, что уж говорить о начальном выборе для собственных проектов...

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

Apache™ Subversion® [8]
Самая популярная централизованная VCS2. Разрабатывается Apache Software Foundation [9], используется во многих проектах, поддерживается, в том числе, самым известным хостингом для исходного кода — SourceForge [10], а также Google code [11]. Кроме того, имеется интеграция с Windows Explorer (см. TortoiseSVN [12]), а также со множеством редакторов и IDE, включая Lazarus (требуется установить пакет lazsvnpkg).
Плюсы: интеграция с Lazarus.
Минусы: это все-таки централизованная VCS...
Git [13]
Наиболее популярная (и лично мне симпатичная) распределенная VCS. Проект был начат Линусом Торвальдсом для управления кодом ядра Linux. Поддерживается как SourceForge, так и Google code и многими другими хостингами, включая набирающий популярность GitHub [14]. Интеграция с Windows Explorer (см. TortoiseGit [15]) также имеется.
Плюсы: распределенная система, работа ориентирована на наборы изменений. Отлично подходит для индивидуального проекта, не требуя никакого выделенного сервера.
Минусы: пока что нет интеграции с Lazarus...

Редакторы кода

Собственные средства

Для начала замечу, что Free Pascal уже в своем составе имеет IDE текстового режима — fp, скриншот которой (в окне консоли KDE) можно видеть на рис. 1.

Данная среда имеет свои, кому-то, возможно, существенные, достоинства:

  • Интеграция с отладчиком GDB.
  • Во многом интерфейс повторяет хорошо известную, хотя и безнадежно устаревшую, среду Turbo Pascal от Borland. Это, в совокупности с режимом совместимости TP, позволяет, например, легко адаптировать старинные учебные пособия и планы, в которых, если отделить собственно программирование от используемых технологий, немало здравого и актуального.
  • Возможность работы без графической оболочки тоже может считаться достоинством: это позволяет использовать IDE на очень слабых компьютерах под управлением Linux или, скажем, FreeDOS [16].

Недостатки текстового режима вполне очевидны... Стоит отметить, пожалуй, только тот печальный факт, что fp IDE не умеет работать с Unicode в исходных текстах, что, помимо прочего, мешает использовать русский язык в современных дистрибутивах Linux, которые по умолчанию задают кодировку консоли UTF-8. К счастью, Linux всегда можно отконфигурировать на однобайтную кодировку, такую как KOI8-r или CP866...

Lazarus (рис. 2) — интегрированная среда разработки, о которой мы еще будем говорить много и подробно. И о преимуществах и об особенностях.

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

Тем не менее, интеграция с компилятором, встроенный отладчик, средства анализа кода, расширяемость и визуальные компоненты делают Lazarus лучшим выбором для реальной разработки. Посему в дальнейшем мы будем рассматривать его как основной вариант. А сейчас я кратко приведу рекомендации, чем еще можно воспользоваться при программировании на Free Pascal.

Другие редакторы

В отличие от fp и Lazarus, перечисленные далее программы не кроссплатформенны. И это нормально — если мы ищем легковесный редактор с поддержкой множества языков, чем-то придется пожертвовать: или легковесностью (но тогда стоило ли отказываться от Lazarus'а?), или кросс­платформенностью.

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

Так, для Linux я бы рекомендовал использовать Kate [17] (рис. 3), если работа ведется в окружении KDE, и gedit [18] (рис. 4), если вы предпочитаете Gnome или Xfce3. Это наиболее развитые редакторы для своих оболочек. Хотя, безусловно, можно использовать и любой другой... Пожалуй, главное — обратить внимание на две вещи: подсветка синтаксиса Pascal, желательно — настраиваемая, и возможность вызова прямо из редактора внешних программ с перехватом вывода, чтобы видеть сообщения компилятора. Хотя, например, в Kate реализован другой механизм, лично для меня даже более удобный — встроенная консоль. Отдельно замечу, что в Kate очень хорошо реализован список открытых файлов — в виде дерева с подкаталогами, а также имеется возможность сохранять набор этих файлов в виде «Сеанса» — чрезвычайно важная вещь, когда приходится параллельно работать над несколькими проектами.

Оба редактора поддерживают расширения в виде плагинов, кроме того, Kate — еще и сценарии, написанные на JavaScript.

Вообще, как нетрудно заметить, я вообще предпочитаю KDE и особенно люблю редактор Kate. Если для разработки на Free Pascal он и уступает Lazarus, в качестве универсального программистского редактора у него практически нет конкурентов.

Что касается Windows, стоит в первую очередь обратить внимание на Notepad++ [19] — отличный универсальный расширяемый редактор с поддержкой Unicode, множества языков программирования, русского интерфейса и т.д. Его скриншот — на рис. 5.

Чтобы закончить с редакторами, кратко перечислю еще несколько, стоящих внимания, возможно, кому-то они окажутся наиболее подходящими... Только список, без скриншотов и подробных характеристик.

  • KDevelop [20] (Linux, KDE) — вообще, это IDE для разработки на C++ с умеренной поддержкой других языков. Соответственно, имеет довольно широкие возможности, но для Free Pascal они малополезны. Т.е. его вполне можно использовать как универсальную среду, но в этом качестве преимущества перед Kate, мягко говоря, неочевидны.
  • Anjuta DevStudio [21] (Linux, Gnome) — можно сказать, аналог предыдущего, только для Gnome — тоже умеет много гитик, которые не пригодятся при работе с Free Pascal, тоже довольно тяжеловесная среда.
  • Вероятно, наиболее удобный linux-редактор, из тех, кого я не внес в рекомендованный список ранее — Geany [22] (Linux, GTK2) — универсальный, расширяемый... По функциональности несколько обгоняет gedit, но в отличие от него, не входит в установку по-умолчанию. На мой взгляд, это не компенсируется преимуществами Geany. Впрочем, я мало имел дела с GTK-редакторами вообще, так что мое мнение тут не авторитетно.
  • SciTE [23] (кроссплатформенный: Windows и Linux, GTK2) — довольно специфичный в настройке редактор, хотя и с приемлемой функциональностью. Может пригодиться тем, для кого желательно использовать один и тот же софт в разных системах (например, чтобы не менять программу обучения).

К сожалению, ничего конкретного не могу сказать относительно редакторов кода под Mac OS X, поскольку придерживаюсь принципа писать о том, что знаю.

Что еще?..

Теоретически, много о чем еще можно поговорить, поскольку разработка программ предполагает не только программирование, но и работу с графикой для интерфейса, формирование справочной системы и так далее. Для всего этого существуют программы, в том числе хорошие и интересные... Однако, это уведет нас далеко от основной темы «Заметок».

Рассмотрим, пожалуй, еще две программы, благо они имеют непосредственное отношение к Free Pascal — не только используются вместе с ним, но и на нем же написаны. Это утилиты автодокументирования исходников fpDoc [24] (входящая в состав FPC) и PasDoc [25]. Обе обрабатывают исходные тексты, обе формируют документацию в различных форматах, основными из которых можно назвать HTML и LaTeX (для последующего получения PDF или PostScript). В обоих случаях структура документа соответствует структуре исходных текстов. Разница между ними в том, откуда берутся описания элементов программы: fpDoc берет их из отдельного xml-файла, тогда как PasDoc — из комментариев в тексте исходников.

Оба подхода имеют свои преимущества и недостатки. Первый более удачен для создания полноценной документации на многих языках и с подробностями, тогда как второй позволяет документировать «по ходу дела», держа краткие описания вместе с объявлениями того, что описывается. Какой из них вы- брать, зависит от масштабов проекта и требований к документации. Ну, и от личных предпочтений, конечно же.


1) См. подраздел «Текущие исходники с SVN».

2) Version Control System.

3) Это не значит, что нельзя воспользоваться программой для другого окружения. Просто работа с «родными» приложениями во многом проще и удобнее.

Ссылки

[1] GNU BinUtils
http://www.gnu.org/s/binutils/ [en]

[2] The «Go» Tools, Jeremy Gordon
http://www.godevtool.com/ [en]

[3] GNU Make
http://www.gnu.org/s/make/ [en]

[4] GDB: The GNU Project Debugger
http://www.gnu.org/s/gdb/ [en]

[5] DJGPP, DJ Delorie
http://www.delorie.com/djgpp/ [en]

[6] Wuschel's DOS eXtender
http://tippach.business.t-online.de/wdosx/ [en]

[7] XCode
https://developer.apple.com/xcode/ [en]

[8] Apache™ Subversion®
http://subversion.apache.org/ [en]

[9] The Apache Soware Foundation
http://www.apache.org/ [en]

[10] SourceForge.net
http://sourceforge.net/ [en]

[11] Google code
http://code.google.com/ [en] [ru]

[12] TortoiseSVN: the coolest interface to (Sub)version control
http://tortoisesvn.net/ [en]

[13] Git — Fast Version Control System
http://git-scm.com/ [en]

[14] github: social coding
https://github.com/ [en] [ru]

[15] tortoisegit: Porting TortoiseSVN to TortoiseGIT
http://code.google.com/p/tortoisegit/ [en]

[16] The FreeDOS Project
http://www.freedos.org/ [en]

[17] The Kate Editor
http://kate-editor.org/ [en]

[18] gedit text editor
http://projects.gnome.org/gedit/ [en]

[19] Notepad++
http://notepad-plus-plus.org/ [en]

[20] KDevelop: KDE Development Environment
http://kdevelop.org/ [en]

[21] Anjuta DevStudio: GNOME Integrated Development Environment
http://projects.gnome.org/anjuta/ [en]

[22] Geany
http://www.geany.org/ [en]

[23] SciTE: A free source code editor for Win32 and X
http://www.scintilla.org/SciTE.html [en]

[24] FPDoc: Reference Manual, Michaël Van Canneyt
Файл: [fpdoc.pdf] [en]

[25] PasDoc
http://pasdoc.sipsolutions.net/ [en]

5 комментариев:

  1. А где же vim в списке редакторов? Легковесный и кроссплатформенный :)

    ОтветитьУдалить
    Ответы
    1. Человеку, для которого vim — оптимальный выбор, мои советы не требуются :)

      Удалить
  2. В Mageia Russian Community существует полностью русская версия FP IDE с русским интерфейсом (fp-ide), поддерживаемая в рамках проекта EduMageia.

    ОтветитьУдалить
    Ответы
    1. А она при этом умеет работать с юникодными исходниками?

      Удалить
  3. Там используется внутренняя и внешняя кодировки CP866. Соответственно, надо перевести исходники в CP866:
    iconv -c -s -f UTF-8 -t CP866 ./TriaFractal.pas > ./TriaFractal.pas.tmp
    Поддержку UTF-8 разработчики делать отказались из-за сложности http://bugs.freepascal.org/view.php?id=23657 , поэтому, было принято решение использовать только CP866 силами сообщества.

    ОтветитьУдалить