Eclipse: будет ли затмение полным?

5 октябрь, 2006 - 16:13Вячеслав Колдовский

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

IDE for anything and nothing in particular.
Из первого описания Eclipse

История проекта

Для того чтобы понять, что из себя представляет Eclipse и почему так произошло, рассказ следует начать с проекта IBM VisualAge, в полном смысле слова предшественника Eclipse. В его рамках IBM удалось построить универсальную среду разработки с графическим интерфейсом, которая позволила бы создавать приложения для множества платформ (как собственных IBM, таких как OS AIX, OS/2 и OS/400, так и сторонних, в частности Mac OS, Linux и Windows), с применением наиболее популярных языков программирования – BASIC, COBOL, C/C++, Fortran, Java, Smalltalk и некоторых других. Только приведенного перечня платформ и языков достаточно для того, чтобы оценить грандиозность замыслов организаторов проекта, но еще больше впечатляет то, что он был успешно реализован в виде отдельных наборов язык/платформа (не все языки доступны для всех платформ) и пользовался определенной популярностью у разработчиков в середине 1990-х годов.

Отдельного внимания заслуживает реализация VisualAge – все основные ее составляющие, независимо от целевого языка и платформы, выполнены на Smalltalk, одном из первых образцов полноценного ООЯ, созданном в знаменитом исследовательском центре Xerox PARC (где была разработана и сама парадигма ООП), многие из идей которого значительно позже позаимствовали популярные сейчас Java и C#.

Eclipse будет ли затмение полным?
Eclipse построен по принципу модульной архитектуры

Но все же VisualAge был не столь хорош, как хотелось, – создать действительно единую универсальную среду для всех языков и платформ оказалось проблематично, и проект существовал в виде отдельных веток, основной из которых стала VisualAge for Smalltalk. При этом сам Smalltalk не пользовался большой популярностью у разработчиков, и в конце 1990-х годов на фоне роста популярности Java и заявлений Microsoft о предстоящем выпуске платформы .NET стало понятно, что для дальнейшего развития проекта необходимы какие-то кардинальные перемены.

И они не заставили себя ждать – в апреле 1999 г. IBM, спустя ровно три года после приобретения канадской компании Object Technology International (OTI), с которой ранее велось сотрудничество при создании VisualAge, объявляет о начале работ над Eclipse – IDE нового поколения для языка Java. Неудивительно, что именно бывшие сотрудники OTI играли ведущие роли в данном проекте.

Следует отметить, что к этому моменту у IBM уже имелись версии VisualAge, позволяющие создавать приложения для Java: в 1996 г. была выпущена VisualAge for Java, а вскоре началась разработка VisualAge Micro Edition (которая впоследствии стала отправной точкой для Eclipse). Но им были присущи определенные недостатки, препятствующие их признанию широкими кругами программистов. В первую очередь, язык Java не был «родным» для среды, созданной на Smalltalk. Однако проект Eclipse изначально не ограничивался исключительно Java, он должен был занять место VisualAge, что, как мы увидим позже, не преминуло отразиться на его архитектуре, отличающейся завидной гибкостью.

Релиз Eclipse 1.0 вышел в октябре 2001 г., а через месяц проект перешел в разряд Open Source, при этом был сформирован распорядительный совет (Board of Stewards), в который, помимо самой IBM, вошел ряд ее партнеров: Borland, MERANT, QNX Software Systems, Rational Software, Red Hat, SuSE, TogetherSoft и Webgain. К концу 2003 г. число членов данного консорциума превышало 80. А в феврале 2004 г. Eclipse реорганизовали в независимую неприбыльную организацию, и все разрабатываемые в рамках проекта технологии были выпущены под лояльной лицензией Eclipse Public License, допускающей создание на основе Eclipse коммерческих решений и не требующей при этом лицензионных отчислений.

Eclipse будет ли затмение полным?
Eclipse занимает центральное место в IBM Software Development Platform

Тем не менее в среде Java-разработчиков присутствовал определенный скепсис по поводу перспектив Eclipse. В частности, за год до его релиза компания Sun Microsystems перевела в разряд открытых собственный проект NetBeans (netbeans.org), который воспринимался не иначе как «официальная открытая IDE для Java», а к детищу IBM с ее стороны высказывался ряд претензий (в основном из-за использования библиотеки SWT, о чем мы поговорим чуть позже).

И все же IBM пошла своим путем, и ее главным козырем стало не урегулирование спорных вопросов с Sun Microsystems, а поддержка со стороны партнеров. К примеру, компания Rational Software, которая год спустя вошла в состав корпорации, сразу же после выпуска Eclipse начала рекомендовать данную платформу своим клиентам для управления жизненным циклом приложений – лучшую рекламу было сложно придумать.

Впрочем, главная угроза для Eclipse, пожалуй, исходила не от Sun Microsystems, а от Microsoft с ее платформой .NET. Поддержав Linux, Голубой Гигант вступил в прямую конфронтацию с софтверным гигантом, и потому был крайне заинтересован в появлении современных кросс-платформенных инструментальных средств, способных на равных тягаться с .NET и Visual Studio. В данном контексте становятся совершенно понятными и мотивы IBM к открытию Eclipse.

Соответственно, важным свойством проекта (которое принципиально не могла предложить Sun Microsystems) является возможность использования Eclipse для разработки не только на Java, но и на других языках. В этом наблюдается прямое противопоставление фактически языконезависимой .NET, тогда как Java подразумевает единство языка и платформы. И поэтому Eclipse наиболее корректно воспринимать не просто как универсальную IDE, а как расширяемую инструментальную платформу, предоставляющую множество дополнительных функций.

Архитектура

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

  • Platform – базовые службы;
  • JDT (Java Development Tools) – инструменты для разработки на Java;
  • PDE (Plug-in Development Environment) – механизм расширения возможностей.

Субпроекты основываются на документированных стандартизованных интерфейсах и благодаря им взаимодействуют друг с другом – это обеспечивает относительную независимость и возможность замены одних компонентов другими (например, JDT – на C/C++ Development Tools, в результате чего Eclipse превратится в IDE для C/C++).

Platform является центральным звеном архитектуры Eclipse, без которого невозможно существование всего проекта. Он предоставляет ключевые службы, на их основе строятся и функционируют остальные компоненты, – к таковым относятся Workspace (элементы рабочей области), Workbench (базовый пользовательский интерфейс), Help (справочная подсистема), Team (поддержка командной работы), Debug (служба отладки), Update (поддержка обновления). При этом сам Platform базируется на среде исполнения Platform Runtime, которая считается ядром всей системы. Фактически можно утверждать, что все элементы Eclipse являются подключаемыми модулями (plug-in) к Platform Runtime.

На нескольких службах Platform стоит остановиться подробнее.

Eclipse будет ли затмение полным?
Интерфейс Eclipse профессионален и внешне, и функционально

Workspace представляет данные – любые объекты, которыми манипулирует пользователь или программные расширения. В терминологии Eclipse они чаще называются ресурсами и бывают следующих типов: файлы, папки и проекты. Два первых в целом соответствуют аналогичным понятиям файловой системы, однако наделяются рядом дополнительных свойств – например, для них ведется история изменений, а храниться они могут не только на локальном диске, но и в удаленном репозитории системы контроля версий. Проекты предназначены для объединения любых ресурсов, в том числе и себе подобных.

Служба Workbench формирует собой пользовательский интерфейс среды разработки, предоставляющий стандартные средства навигации в наборах ресурсов и содержащий инструменты для управления ними. Она определяет такие элементы интерфейса, как редакторы, ответственные за изменение ресурсов различных типов, виды (views), обеспечивающие отображение информации и перспективы (perspectives), позволяющие группировать и выводить необходимые элементы в зависимости от требуемой роли, будь то редактирование проекта, отладка или что-то другое.

Говоря о графических интерфейсах, используемых и реализуемых в Eclipse, нельзя не коснуться темы, связанной с библиотекой Standard Widget Toolkit (SWT), которая в свое время стала яблоком раздора между Sun Microsystems и IBM в вопросах соответствия Eclipse стандартам Java.

Дело в том, что SWT примечательна использованием стандартных элементов операционной системы для построения интерфейса пользователя и в то же время обладает унифицированным API и умеет эмулировать те элементы, которые отсутствуют на целевой платформе. Например, диалоговые окна открытия или сохранения файлов в программах, созданных на основе SWT для платформы Win32, будут точно такими же, как и у нативных Win32-приложений. То же касается и Linux, и Mac OS X, и любой другой из множества поддерживаемых платформ.

Это выгодно отличает SWT от пропагандируемой Sun Microsystems среды Swing, в которой используются собственные встроенные элементы интерфейса, непривычные большинству пользователей. Визуально отличить программы, построенные с применением SWT или стандартных библиотек ОС, практически невозможно, а значит, кросс-платформенные приложения выглядят иначе в разных ОС. Именно это прежде всего и не устраивало Sun, настойчиво требовавшую, чтобы «Java всюду была как Java». Отметим также, что другая среда построения графического интерфейса Java-приложений от Sun Microsystems – AWT (Abstract Window Toolkit), также позволяющая создавать приложения с нативным интерфейсом, по сути, не является конкурентом SWT, поскольку обладает существенно меньшей функциональностью.

Но упор специалистов IBM на SWT был сделан не случайно: помимо очевидного увеличения скорости отрисовки интерфейса, применение этого набора библиотек дает и другое преимущество, особенно актуальное в корпоративной среде, – конечных пользователей не нужно переучивать (чего нельзя исключить никакой интуитивностью). Практика показала, что решение оказалось правильным, и на текущий момент множество приложений, созданных с помощью Eclipse, успешно применяют именно SWT.

Еще одна составляющая графического интерфейса – это компонент JFace, который базируется на SWT и отвечает за более высокоуровневые задачи. В частности, он содержит классы для построения диалогов, отображения иерархических списков, управления шрифтами и др. При построении прикладных программ SWT обычно применяется совместно с JFace.

Eclipse будет ли затмение полным?
Встроенный отладчик Eclipse считается одним из лучших в индустрии ПО

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

Служба Debug отвечает за отладку приложений. К слову, встроенный в Eclipse отладчик считается одним из лучших не только для Java, но и вообще во всей программной индустрии. Среди его примечательных (хотя и не уникальных) особенностей следует отметить поддержку удаленной отладки и возможность подмены исходного кода во время исполнения программы без необходимости перезапуска.

Субпроект JDT (Java Development Tools) фактически представляет собой среду разработки для Java. Как уже упоминалось, это важный, но вовсе не обязательный компонент Eclipse – он может быть заменен на аналогичный для C/C++ или любого другого языка, хоть для COBOL.

Среди интересных свойств JDT в первую очередь следует отметить инкрементальную компиляцию (incremental compilation), которая автоматически выполняется в фоновом режиме после каждого внесенного изменения. Тем самым экономится время и появляется возможность просматривать ошибки компиляции в процессе редактирования кода. Помимо прочего, данный режим нужен для поддержки рефакторинга, механизмы которого весьма развиты в JDT. Следует также отметить, что Eclipse содержит встроенные средства для создания юнит-тестов с помощью JUnit, причем вызывать эту среду можно прямо из IDE.

PDE (Plug-in Development Environment) – субпроект, обеспечивающий разработку и подключение расширений для Eclipse. Поскольку весь Eclipse фактически состоит из подобных модулей, PDE можно определить как средство, позволяющее создать Eclipse в самом Eclipse.

Расширяемость, пожалуй, самая сильная сторона Eclipse, которая и обеспечивает ряд серьезных технологических преимуществ данному проекту. Вероятно, именно в этом механизме и проявилось в наибольшей мере наследие VisualAge как универсальной платформы для большого числа задач.

Реализация поддержки расширений в Eclipse поистине впечатляет – по сути, проект является самым настоящим конструктором, из которого можно собрать IDE для какого угодно языка и какой угодно платформы. Мало того, при этом речь не обязательно должна идти именно об IDE (т. е. инструментарии собственно программиста) – на официальном сайте eclipse.org в разделе проектов можно найти множество весьма «нетрадиционных» способов применения Eclipse.

Следует признать, что в случае Eclipse гибкость вовсе не подразумевает дополнительных сложностей. Создание расширений в Eclipse – задача достаточно тривиальная и к тому же прекрасно документированная. Описание модуля задается в файле-дескрипторе (plug-in descriptor), имеющем формат XML, а непосредственное использование обеспечивается специальными точками расширения (extension points), благодаря которым осуществляется привязка к определенной функциональности. При этом plug-in-модули могут как подключаться к известным точкам расширения, так и объявлять собственные.

Помимо прочего, интересной особенностью является поддержка фрагментов расширений (plug-in fragment), зависимых от основного модуля элементов, которые могут разрабатываться отдельно. С их помощью, например, удобно осуществлять локализацию различных компонентов, и участие в этом процессе оригинального разработчика совсем не обязательно.

Решения

В первую очередь, решения на основе Eclipse стали продвигать сама IBM и ее партнеры, благодаря чему вокруг проекта очень быстро сформировалось стойкое сообщество разработчиков, готовых инвестировать свои усилия в развитие новой технологии.

IBM активно начала использовать Eclipse в собственных разработках и включила решения на основе проекта в продуктовую линейку WebSphere. Текущая версия IDE от IBM называется IBM Rational Application Developer for WebSphere Software V6.0 и продвигается в качестве составного элемента комплекса решений по разработке и управлению жизненным циклом IBM Software Development Platform, в котором Eclipse отводится центральное место.

Eclipse будет ли затмение полным?
Bioclipse – открытая система визуализации химической и биологической информации, построенная на платформе Eclipse

Компания QNX Software Systems успешно использует Eclipse в качестве среды разработки для своей ОС реального времени QNX, известной как самая распространенная платформа для систем повышенной надежности и используемой в военной и космической сферах, авиации, промышленности и здравоохранении.

Borland, выпускавшая до недавнего времени одну из наиболее успешных IDE для Java – JBuilder, вскоре после выхода JBuilder 2006 объявила о том, что следующая версия уже будет основана именно на Eclipse.

Помимо решений, использующих Eclipse в качестве платформы для разработки, существует огромное количество проектов, созданных в Eclipse на основе расширений. К таковым относятся популярный BitTorrent-клиент Azureus, среда визуализации химической и биологической информации Bioclipse, набор модулей для оперативного отображения биржевой информации Eclipse Trader (eclipsetrader.sourceforge.net) и множество других.

Заключение

Итак, отмечая свой первый скромный юбилей, проект Eclipse имеет на своем счету немало замечательных достижений. Благодаря поддержке IBM и сплоченного ею сообщества партнеров, а также, и не в последнюю очередь, изысканным архитектурным решениям и их качественному воплощению он очень быстро завоевал популярность.

Без сомнения, сегодня Eclipse – это очень серьезный конкурент не только для Sun NetBeans, но и для Microsoft Visual Studio. Обладая высокой гибкостью архитектуры, он давно вышел за рамки еще одной IDE для Java и может предложить возможности, которых нет у схожих решений. Официальный сайт проекта содержит информацию о множестве стратегических партнеров и десятках субпроектов различной направленности – число тех и других продолжает неуклонно увеличиваться. Летом этого года было объявлено о новой инициативе – Eclipse Calisto, подразумевающей синхронное обновление десяти наиболее популярных проектов и имеющей свой целью выравнивание их жизненных циклов для улучшения координации действий разработчиков.

Однако перспективы проекта вряд ли стоит оценивать как однозначно радужные. Не исключено, что слово «затмение» в названии проекта сыграет злую шутку с IBM. Подобные явления обычно носят временный характер, и слава земная, как известно, преходяща. Во всяком случае, Sun Microsystems не собирается сдаваться, и последняя версия NetBeans 5.5 (в настоящий момент доступная в виде второй беты) во многом уже не уступает недавно вышедшей Eclipse 3.2, а в определенных ключевых моментах даже превосходит ее. К примеру, появилось расширение NetBeans C/C++ Development Pack, позволяющее использовать данную платформу для разработки приложений на C/C++, а за ним, вероятно, последуют и другие. К тому же NetBeans обладает полнофункциональным профайлером, а для текущей версии Eclipse среди Open Source проектов нет ничего сравнимого по возможностям.

Говоря о коммерческих IDE для Java, следует упомянуть IntelliJ IDEA, которая пока не собирается повторять путь JBuilder, а напротив, смогла перетянуть на себя достаточное число серьезных разработчиков, не жалеющих денег на мощные и надежные инструменты. Несомненно, это специфическая ниша, но если стоимость не имеет значения, то продукт от JetBrains, пожалуй, выглядит намного предпочтительней (конечно, там, где речь идет исключительно о Java).

С другой стороны, нельзя не отметить возникший в последнее время интерес к Eclipse со стороны не-Java-разработчиков, и все более частое использование проекта в непрограммистских решениях. Поэтому сделать сегодня какие-то далеко идущие выводы крайне непросто. В любом случае, вряд ли стоит уповать на полное затмение, но частичное, несомненно, уже произошло.

e-mail автора: [email protected]