Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Lazarus: Delphi, кроссплатформенная, Open Source?

01.01.2007

Вадим СТАНКЕВИЧ

 

Lazarus: Delphi, кросс-платформенная, Open Source?!

Вряд ли на просторах Родины нашей, как бы лесисты и болотисты они не были, найдется хоть один программист, кто о Delphi не слыхал никогда. А коли такие имеются, то сидят они, скорее всего, в болотах непролазных или в чащах дремучих и пишут Аленький Цветочек на Macro Assembler'е под "Корветы" старые, и ни к чему им Борланд. А другие многие, кому не по душе Цветочек Ассемблерненький, эту Delphi и глазами своими ясными видели, и даже писали на ней чего-нибудь. Кто-то "занятие дурное" это бросил после курса первого, и перешел, например, на Java, а кто-то "бесстыдный" и сейчас не стесняется Delphi, родимую, использовать.

Только кинула компания Borland дитя свое повзрослевшее и программеров, его пользовавших, тоже далече послала. Ибо занялась эта компания по прихоти начальства своего извращением заморским диковинным, имя которому - ALM. Но об этом в "Компьютерных вестях" уже писали.

А что программерам делать, Borland'ом брошенным? Али Basic визуальный учить? Али C# юзать, зело "Майкрософтом" попахивающий? Али до конца века пятой версией Delphi пользоваться? Не печальтесь, программеры, и без Borland'а проживем, и о том хочу вам всем сегодня поведать.

Что ж, на этом былину и закончим. И займемся немного психоанализом, чтобы понять, почему Паскаль, бывший в конце 80-х популярнейшим языком программирования, в начале 21-го века стал явным аутсайдером среди прочих своих собратьев. "А чего тут думать? - ответил мне на это один из моих друзей. - Просто Паскаль - он Паскаль и есть. Пока ты будешь свой begin писать, я на Си успею пять фигурных скобочек поставить". "А потом две недели отлаживать?" - не остался в долгу и я. "Нет, - сказал он, подумав, - две недели - это слишком мало..."

В дальнейшем, говоря Паскаль, я буду подразумевать не тот язык, который придумал в 1972 году профессор Никлаус Вирт, а его диалект Object Pascal, применяемый в Delphi и Free Pascal. Под Си я часто (и, в общем-то, безграмотно, но в данном случае это несущественно) буду понимать, в основном, С++, а иногда и C#. Под Бейсиком, соответственно, Microsoft Visual Basic. Потому что сейчас мало кто пользуется классическими стандартами Паскаля, Бейсика и Си, а названия уже прижились и стали привычны уху программиста.

К чему же я помянул психоанализ? А вот к чему. Как ни странно, все программисты, которые сейчас сидят за своими компьютерами, с умным видом пьют кофе и со скоростью 100 строк кода в минуту пишут свои application'ы, когда-то были детьми. Да-да, просто детьми. И, как это свойственно детям, познавали мир, искали себе новые увлечения, играли. Пока в один прекрасный день не натыкались на компьютер. Настоящий программист может часами рассказывать о том, где он впервые увидел "машину", какой она была, что на ней стояло, что он с ней делал... Начиналось все, конечно, с игр. Игры занимали дни и ночи, они овладевали воображением и миром: человек становился геймером. Потом (не у всех - только у самых продвинутых) приходила жажда повелевать умной машиной, и ребенок втягивался в удивительный и волшебный мир компьютерного программирования, которое Дональд Кнут когда-то назвал искусством. Первыми языками, встречавшими его на этом сложном пути, были, скорее всего, Паскаль и Бейсик. Дети учатся всему быстро. Буквально через месяц юный программист с гордостью демонстрировал друзьям первые игрушки, написанные на Quick Basic'е или Turbo Pascal'е. А еще через некоторое время появлялись и друзья, тоже зараженные этим увлечением, вместе с которыми нередко создавались настоящие шедевры программного кода. Сейчас эти времена вспоминаются как волшебный сон...

Но дети, как известно, хотят вырасти. Игрушкам на Turbo Pascal'е было далеко до любимых Doom, Quake или Counter-Strike. А так хотелось написать что-нибудь такое, ЧТОБЫ ВСЕ АХНУЛИ. Что-нибудь по-настоящему ВЗРОСЛОЕ. На ВЗРОСЛОМ языке программирования. Смена языка программирования - такой же естественный этап взросления, как первая сигарета или первая рюмка водки. Просто некоторые, попробовав, втягиваются и становятся курильщиками, а некоторые в скором времени бросают. Точно так же, раз попробовав "взрослый" язык Си, некоторые пишут на нем долгие годы, а некоторые - возвращаются обратно, к знакомым Паскалю и Бейсику. Многие из тех, кто перешел на Си, - я бы даже сказал, к сожалению, очень многие, - потом считают их ренегатами, перебежчиками, неудачниками и просто инфантильными личностями. Мне не раз доводилось читать эти слова на форумах, где программисты, пишущие на Си, обсуждали коллег, пишущих на Паскале и Бейсике.

Дело в том, что, по всеобщему мнению, идеального языка программирования пока что не существует, да и вряд ли он в скором времени появится. C++, PHP и Java сегодня в моде. Сегодня большой спрос на специалистов по этим языкам. Кобол и Фортран - в упадке. Но кто может поручиться, что завтра не воскреснет Кобол (а то и Алгол - чем черт не шутит?), а корпорация "Майкрософт" не закроется и .NET не пойдет ко дну вместе со всеми, кто его использовал? Единственный язык программирования, который всегда может дать уверенность в завтрашнем дне - это ассемблер, потому что без низкоуровневых языков программирование в некоторых областях просто невозможно, и вряд ли ситуация в этой области рынка когда-нибудь существенно изменится.

Мир красив своим разнообразием. Те, кто любит Паскаль, имеют на это право. Ведь продолжают жить и Кобол, и Smalltalk, и Lisp, и не только Си или Java называют "выдающимися языками". Каждый язык чем-то по-своему выдающийся. Поскольку большинство языков создавалось с какой-то определенной специализацией, то они, соответственно, имеют свои инструменты, специально "заточенные" под эту самую специализацию. Конечно, время и пользователи по мере сил расширяют области применения того или иного языка, но первоначальная направленность все равно остается видна. В противном случае это уже новый язык. Но отдавать предпочтение любому из них никто никому не запрещает (кроме непосредственного начальника, конечно же).

Как раз для тех, кто привык к Паскалю и любит IDE Delphi (или для тех, кого это все попросило полюбить начальство), недавно появилась возможность программировать с использованием этих двух прекрасных вещей, не покупая лицензию на Delphi (будем считать, что обычно в нашей стране все от мала до велика ее покупают). И причем не только под Windows и Linux, но и под Free/Net/Open-BSD и MacOS X. А если полноценная графическая среда разработки вам не нужна, то платформ доступно еще больше: DOS, OS/2-i386 (OS/2 Warp v3.0, 4.0, WarpServer for e-Business and eComStation), Mac OS X/Darwin for PowerPC, Mac OS (classic) for PowerPC, Netware-i386, NetwLibc-i386 и другие, менее распространенные. Причем для многих систем (Linux, MacOS, *BSD) доступен как 32-битный, так и 64-битный компилятор. Что это за компилятор? Это Free Pascal.

Проект был основан в июне 1993 года, еще до появления первой версии Borland Delphi. Через три года компилятор вместе с исходными текстами (сам он написан тоже на Паскале) был выложен в интернет, а в 2000 году произошло долгожданное событие - вышла версия 1.0. Впрочем, сейчас более актуально использовать версию 2.0, которая была выпущена в 2005-м. Она умеет намного больше, чем версия 1.0: выдает более качественный код и поддерживает многое из того, что умеет Delphi (RTTI (Run-time Type Information, информация о типах времени выполнения)), AnsiStrings, перегрузку процедур и методов, динамические и вариантные массивы и многое другое). Кроме того, Free Pascal поддерживает качественную оптимизацию генерируемого кода, который по скорости выполнения может даже превосходить код Delphi.

Но одним только компилятором в наше время уже никого не удивишь. Вряд ли те, кто работал с интегрированной средой разработки Delphi, захочет переходить на текстовую среду, поставляемую с Free Pascal, которая всем своим видом и поведением напоминает Turbo Pascal. Спешу вас обрадовать: есть и IDE, очень похожая на Delphi 1-7 и Kylix 1-3 (см. скриншот). Называется этот продукт Lazarus. Первоначально "Лазарь" (а именно так переводится это название) стартовал как Medigo, "Delphi для Linux", однако с появлением Kylix (Delphi для Linux, продукт компании Borland, на сегодня его разработка уже долгое время "заморожена") постепенно зачах. Но когда Borland объявили о прекращении разработки Kylix, разработчики решили "воскресить" свой проект и назвали его Лазарем, который воскрес из мертвых согласно широко известной библейской притче.

Кстати, забыл сказать: и Lazarus, и Free Pascal распространяются на условиях GNU GPL, т.е. они доступны в виде исходных текстов на сайтах freepascal.org и lazarus.freepascal.org.

На сегодняшний день Lazarus - вполне комфортная среда разработки, на мой взгляд, что-то среднее между Delphi 2 и Delphi 2006. Да-да, именно смесь этих двух версий. До 2006-й ей Lazarus'у не хватает только фолдинга (сворачивания участков кода) и встроенных средств моделирования, а все остальное, включая рефакторинг, присутствует. Кстати, рефакторинг в Lazarus появился на год раньше, чем в Delphi, что свидетельствует о высоком качестве этого проекта. К сожалению, со 2-й версией Delphi его объединяет отсутствие пакетов (packages) и неразвитые возможности Tools API. Впрочем, по всей видимости, это - следствие кросс-платформенности продукта, хотя я лично надеюсь, что раньше или позже эти мелочи исправят. Кстати, IDE поддерживает локализацию интерфейса, и среди прочих языков есть и русский. Единственный минус: отсутствие справки, но если что-то неясно, всегда можно посмотреть исходный текст или спросить на форуме на официальном сайте проекта.

С помощью Lazarus можно разрабатывать кросс-платформенные приложения. Многие скажут, что в Delphi 6/7 и Kylix тоже можно создавать многоплатформенные программы. Но есть существенное отличие: CLX (библиотека, используемая для создания кросс-платформенных приложений в Delphi и Kylix) основана на Qt, что делает ее весьма громоздкой. Под Win32, например, программа, основанная на CLX, должна была "тащить" с собой 4-мегабайтную DLL-библиотеку. Не слишком изящно, на мой вкус. LCL (Lazarus Class Library) осуществляет непосредственное обращение к графическим средствам платформы, что делает приложение более быстрым и надежным. С другой стороны, для Linux Вам придется компилировать его отдельно для каждого графического интерфейса (GTK, GTK2, Gnome, Carbone).

Еще один минус Lazarus'а: просто громадные размеры получаемых программ. Пустая программа с одним-единственным окном занимает почти 6 (!) мегабайт (вот тут-то мне и вспомнят эту DLL-ку в 4 мегабайта...). Происходит так потому, что среда разработки всегда добавляет отладочную информацию в получаемый файл. Поправить это можно с помощью утилит strip и UPX из комплекта Lazarus. Тогда пустая программа будет занимать около 400 Кб.

Что касается дополнительных библиотек и компонентов, которыми славится Delphi, то уже сейчас Lazarus поддерживает многие из них. Прямо в дистрибутив входят портированные под "Лазаря" Internet Professional, HTML Lite, SynEdit, TDBF и другие. Кроме того, в интернете можно встретить версии RXLib, FIB, JCL специально для Lazarus. Поддержка баз данных тоже присутствует: Interbase, MySQL, SQLite и др. Впрочем, если у вас есть какая-то своя любимая библиотека компонентов Delphi, распространяемая с исходными текстами, ее несложно переписать под Lazarus: хоть LCL и отличается от VCL/CLX, эти различия по большей части внутренние, и вряд ли вы с ними столкнетесь.

Ко всему прочему, Lazarus поддерживает кросс-компиляцию своих проектов. То есть можно скомпилировать проект для Windows из-под Linux и наоборот.

Таким образом, Lazarus - вполне достойный конкурент Delphi (и особенно Kylix). Качественная среда разработки, быстрый оптимизирующий компилятор, бесплатность и наличие дополнительных библиотек делают этот продукт привлекательным для разработчиков. Кроме того, высокая степень совместимости с Delphi позволит использовать уже имеющиеся наработки, и, возможно, даже расширить их. Присоединяйтесь к сообществу пользователей Free Pascal и Lazarus! Продолжайте любить и использовать Паскаль!