Библиотека сайта rus-linux.net
Кросс-платформенная разработка с Free Pascal 2.2.0
Оригинал: Cross-Platform Development with Free Pascal 2.2.0
Автор: Joost van der Sluis
Дата: 10 сентября 2007
Перевод: Александр Тарасов aka oioki
Дата перевода: 3 октября 2007
Скриншоты взяты из статей Free Pascal,
Lazarus Русской википедии
При копировании материала обязательны указание автора, переводчика и ссылки на оригинал статьи и настоящую страницу как первоисточник перевода!
Недавно вышел Free Pascal (FPC) версии 2.2.0. Благодаря своей давней истории (первая версия вышла в 1993 году) этот компилятор языка Pascal сегодня является одним из самых примечательных компиляторов с открытым кодом. Каждый день все больше программистов узнают о FPC и начинают разработку своих приложений на Object Pascal. Особенно этому благоприятствует развитие Lazarus, графической среды разработки для FPC, которая содержит расширенный набор средств для разработки графических (GUI) приложений.
В чем сила FPC?
Многих программистов удивляет возрождение интереса к Pascal. Ведь многие думают, что Pascal - устаревший язык, который больше не используется после того, как давно проиграл войну с C. Тем не менее, FPC достаточно функционален, чтобы быть выбором программистов.Рисунок 1: Free Pascal, запущенный из среды cygwin
Кросс-платформенность
Самое главное достоинство FPC - это его кросс-платформенность. Разработка этого компилятора начиная с серии 2.0 была сфокусирована именно на возможностях переносимости.Эта функция устраняет необходимость рутинной работы по написанию сложных Makefile, которые различны для каждой платформы, и должны быть получены с помощью средств типа autoconf и configure. С FPC же программисту не нужно искать различные библиотеки, для портирования достаточно скопировать компилятор и исходный текст проекта на платформу. Очевидно, что также возможна кросс-компиляция с одной платформы (к примеру, Linux) на другую (Windows как самая популярная).
Причина переносимости кода Free Pascal проста: в комплекте предлагается набор кросс-платформенных стандартных библиотек, обходящих различия между Posix и Windows API. Возможно симулировать одну платформу на другой, однако такое решение требует громоздких библиотек и непростой установки, при этом часто программы отмечаются странным поведением и внешним видом на неродной платформе.
Компилятор Free Pascal поставляется с богатым набором библиотек: библиотека RTL (Run-Time Library, библиотека времени выполнения) предоставляет базовую функциональность, такую как доступ к файлам, классы, манипуляции со строками и RTTI (Run-Time Type Information, информация о типах времени выполнения) для создания потоков. Библиотека FCL (Free Class Library, библиотека свободных классов) - объектно-ориентированная библиотека, нацеленная на работу с XML, веб-программирование, взаимодействие с базами данных, обработку изображений и др. Если программист опирается на эти библиотеки и избегает системно-зависимых API, его программа будет работать не только на Linux, но также на Windows, Free BSD, Mac OS X, Windows CE и многих других платформах.
Очевидно, что прямые указания путей, специфические для какой-либо ОС, например, 'c:\program files' или '/etc/myprog.cfg' не являются кросс-платформенными. Подпрограммы FPC (к примеру класс TRegistry) берут на себя работу, специфичную для ОС: реализация библиотеки FCL для этой платформы знает где и как система хранит конфигурационные данные. Это практически устраняет необходимость в системно-зависимых API-вызовах.
Рисунок 2: Скриншот Lazarus, IDE для FPC
Графические (GUI) приложения
Графические (настольные) приложения сегодня стали нормой. Однако это не проблема: интегрированная среда разработки (IDE) Lazarus с самого начала разрабатывалась с тем же уклоном на переносимость, что и FPC. Библиотека LCL (Lazarus Class Library), поставляемая с Lazarus позволяет разрабатывать настольные приложения, которые используют стандартный Windows 32 или 64 API. На Linux используются библиотеки GTK 1 или 2, а поддержка библиотек Qt и Carbon находится на стадии завершения.Используя Lazarus, можно разработать приложение в Linux, и оно будет использовать GTK. Все, что нужно будет сделать, чтобы получить версию приложения для Windows - указать опцию компилятора. Тогда перекомпиляция произведет исполняемый файл для Windows, который будет работать на любой версии Windows - без каких-либо дополнительных библиотек. Все, что требуется для такого программистского приема - стандартная установка Lazarus.
64-битная Windows
Компилирование из Windows в Linux немного более сложно: компилятору нужен редактор связей GNU, чтобы собрать бинарный файл ELF, а также копия всех требуемых библиотек. Но принцип остается тем же. Для сборки исполняемых файлов Windows FPC содержит встроенный редактор связей, что позволяет создавать бинарные файлы для 64-битной версии Windows, в то время как средства GNU пока не позволяют этого делать. Это делает FPC+Lazarus первой крупной средой разработки с открытым кодом для Win64.Новые возможности Object Pascal
В прошлом в FPC были реализованы некоторые расширения языка Pascal, в частности перегрузка операторов, которая впоследствии была реализована и в коммерческих компиляторах. В новой версии 2.2 реализована экспериментальная поддержка шаблонов, что может быть чрезвычайно полезно при программировании, например, классов списков.Скорость
FPC - быстрый компилятор. FPC компилирует код примерно в 7 раз быстрее, чем, к примеру, GCC. Это может быть не так важно, но все же сокращает время разработки. Скорость полученного кода сравнима со скоростью кода, полученного компилятором GCC: согласно измерениям Shootout, код FPC 2.0.4 лишь на 30% медленнее, чем код GCC. С другой стороны код FPC использует меньше памяти, чем код GCC. В сравнении с интерпретируемыми языками (например, Ruby) код FPC выполняется в 50 раз быстрее. Разница между PHP или Java меньше, однако эти программы используют в 14 (PHP) и в 17 (Java) раз больше памяти, чем программы, написанные на FPC.Кто-то может удивиться, почему ничего не говорится о скорости работы графических приложений. При сравнении отклика популярной Java IDE Eclipse с откликом Lazarus, можно моментально почувствовать разницу. Родной код выполняется быстрее, чем интерпретируемые или JIT-языки, даже с предварительной компиляцией. Родной код использует меньше памяти, такие программы легче устанавливать, так как на компьютере пользователя не нужно будет доустанавливать дополнительные компоненты.