СРЕДСТВА РАЗРАБОТКИ
Как мы уже писали (PC Week/RE, N 25/2003, с. 3), одновременно с летним анонсом следующей версии операционной системы Mac OS X компания Apple продемонстрировала и новый набор средств разработки ПО, получивший название Xcode. Сегодня, после начала поставки пользователям финального варианта Mac OS X 10.3 Panther, мы можем сравнить свои летние ожидания с реальными возможностями Xcode.
Как это принято в мире UNIX, операционная система Mac OS X с момента ее выпуска поставляется с полным набором средств разработки приложений. Диск с этим набором входит и в комплект "коробочной" версии системы, предназначенной для установки на ранее приобретенных Маках и стоящей в США 129 долл., и в вариант системы, поставляемый бесплатно с новыми компьютерами. Средства разработки можно скачивать и из Интернета, предварительно бесплатно зарегистрировавшись на сайте разработчиков ПО компании Apple.
Xcode представляет собой не что иное, как следующий вариант этого бесплатного набора средств разработки. Однако внесенные в него изменения оказались столь существенными, что набор заслужил собственное имя.
Прежде ядром IDE (Integrated Developer Environment) компании Apple являлась программа Project Builder, с которой интегрировались дополнительные программы, предназначенные для разработки GUI, компиляции, связывания и отладки программ, оптимизации кода и т. д.
Project Builder ничем особенным не выделялся (а в некоторых отношениях даже существенно отставал) от ряда других IDE, хотя и позволял полноценно выполнять весь цикл создания программ. Многие, однако, предпочитали ему широко известную систему разработки CodeWarrior фирмы Metrowerks, даже несмотря на то, что с ее поглощением компанией Motorola былое лидерство этой многоплатформной IDE таяло на глазах. С развитием комплектного набора ПО и введением в него дополнительной функциональности все большее число корпоративных разработчиков переходило на Project Builder, но программисты-любители по-прежнему предпочитали CodeWarrior.
Вероятно, в Apple посчитали такое положение вещей вызовом и ответили на него вполне достойно - почти полной модернизацией Project Builder и входящих в его комплект системы дополнительного ПО разработчика. В результате получилось нечто совершенно новое как по интерфейсу пользователя, так и по функциональным возможностям.
Интерфейс Xcode вобрал в себя все плюсы GUI Aqua, разработанного для Mac OS X, причем это касается не только графических "прибамбасов". Отметим лишь самые явные изменения.
В Xcode появились хорошо зарекомендовавшие себя в программах семейства iLife элементы GUI, скажем, мгновенный поиск файлов по имени или "разумные списки файлов", обновляемые автоматически при изменении набора входящих в проект файлов (можно создавать и нестандартные группы файлов, приписывая им маски имен файлов на базе регулярных выражений).
Полностью обновилась подсистема просмотра классов и методов, с встроенным редактором наконец-то интегрирована подсистема показа контекстной привязки сообщений компилятора об ошибках и предупреждениях, также имеется и инструмент встроенной контекстной подсказки, помогающий мгновенно обратиться к шаблонам выражений и "дописать" строку, вызвавшую у программиста затруднение.
Но основные преимущества Xcode связаны не с новым интерфейсом и даже не с более совершенными средствами работы с текстом программы - они касаются скорости компиляции приложений и удобства их отладки.
Ранее в Project Builder для отслеживания взаимозависимостей и сборки программы использовалась поставляемая в соответствии с принципами открытого ПО внешняя подсистема Jam компании Perforce Software Inc. Теперь же подобная подсистема встроена в Xcode, причем ее возможности гораздо шире того, что предлагала прежняя Jam.
Давайте немного отвлечемся от Xcode и вспомним, как выглядит процесс создания приложения. Разработчик пишет часть программы, компилирует ее, связывает код в программу, отлаживает ее, а затем процесс повторяется - вводятся изменения в текст программы, снова проходят этапы компиляции и сборки, снова отладка...
В этом цикле затраты времени на компиляцию и сборку являются совершенно непродуктивными, их минимизация приводит к росту производительности труда разработчика ПО. Обычно эта минимизация осуществляется установкой более производительных компьютеров, однако даже для них задержка оказывается вполне ощутимой. Так, на полную сборку программы Finder (чуть более 100 тыс. строк кода на С++) на двухпроцессорном 1 ГГц Power Mac G4 система CodeWarrior 8.3 тратит 223 с, а набор ПО разработчика из Mac OS X 10.2 - целых 838 с. Подумайте только - почти четверть часа простоя на каждую сборку программы! Конечно, в реальной жизни далеко не всякое изменение текста программы ведет к перекомпиляции заметной части модулей, но все равно временные затраты вполне ощутимы.
Усилия создателей ПО разработчика из Mac OS X 10.3 позволили "собирать" программы заметно быстрее, но CodeWarrior все еще удерживает свое лидерство - Xcode выполняет ту же задачу за 434 с.
Однако тут вступает в бой первое "секретное оружие" Xcode, называемое Distributed Build. Xcode умеет задействовать для сборки ресурсы других компьютеров, формируя этакую распределенную компилирующую сеть. Можно использовать и компьютеры других разработчиков (ведь загрузка процессора при редактировании программы или ее отладке редко превышает несколько процентов), и специально выделенные для этого "компилирующие фабрики" (что может быть выгодным для крупных компаний, занимающихся разработкой ПО). Важно, что время компиляции сокращается почти обратно пропорционально числу компьютеров. Так, при подключении к тестовому Power Mac G4 "фабрики" из шести Xserve (два процессора PowerPC G4 1,33 ГГц в каждом) время сборки Finder’а упало до 87 с, в пять раз, так что рекорд CodeWarrior был побит.
Но, как оказалось, распределенная сборка - это только начало. Для Xcode было создано несколько технологий кардинального уменьшения времени простоя программиста.
Первой жертвой парней из Apple стало время связывания программ. Для этого ими была придумана технология Zero Link, являющаяся некой разновидностью динамического связывания. В результате все ссылки (в том числе статические) разрешаются уже на этапе исполнения программы, что позволяет почти полностью избавиться от этапа связывания как такового: Xcode приходится лишь корректировать символьные таблицы ссылок, да и то только для измененных с момента предыдущего прогона программы модулей. Конечно, при генерации окончательного кода вам придется собрать программу заново, но время, сэкономленное на этапе ее отладки, значительно перекроет затраченное на этот дополнительный этап.
Повсеместная динамическая компиляция открыла путь к реализации в Xcode еще одной интересной технологии - Predictive Compilation, позволяющей проводить значительную часть работы по компиляции программы еще на этапе корректировки кода, в фоновом режиме. Так что вполне может статься, что ваша программа окажется уже полностью скомпилированной уже до того, как вы нажмете пиктограмму "Build".
Наконец, настоящим алмазом в короне технологий сокращения временных расходов является Fix and Continue, часто приводящая вообще к отказу от этапа перекомпиляции. В процессе отладки приложения вы можете вносить исправления в программу, и во многих случаях Xcode сразу разрешает дальнейшую отладку уже скорректированного кода без фазы повторной перекомпиляции и сборки. Разумеется, вообще без компиляции тут не обходится: компилятор обрабатывает лишь небольшой кусок программы, объединяемый затем при помощи подсистемы динамического связывания с остальной частью программы.
Насколько все эти технологии реально работают? Если в нашем тесте на сборку программы Finder внести одно изменение в код и потребовать быстрой сборки приложения и перезапуска его в отладчике, то прежний набор ПО из Mac OS X 10.2 справится с задачей за 30 с, CodeWarrior - за 9 с, a Xcode - за 3 с.
В Xcode, кроме редактора программ, браузера объектов и подсистемы сборки программ, входят многие другие подсистемы, часть из которых является существенно переработанными версиями знакомых нам по прежним версиям ПО разработчика инструментов (например, Interface Builder, AppleScript Studio, OpenGL Profiler, QuartzDebug, CHUD Tools), а часть - появилась только в Xcode. Среди новинок особо надо отметить существенно обновленную подсистему построения профилей программы и ее оптимизации, важной в связи с начавшейся массовой адаптацией кода под недавно вышедшие процессоры PowerPC G5. Обновился и входящий в набор ПО компилятор - вместо gcc 3.1 в Xcode предлагается gcc 3.3 либо любой другой, с ним совместимый по библиотекам (например, с Xcode можно использовать созданные в IBM xlc и xlf).
Конечно, нельзя сказать, чтобы Xcode - первый в мире IDE с реализованными в нем технологиями быстрой компиляции и сборки программ. Однако все существовавшие до этого решения такого типа являлись скорее экспериментальными, довольно часто не поддерживали всех тонкостей языков и вариантов их стандартов и, безусловно, не были предназначены для широкого промышленного использования. В случае с Xcode мы имеем стандартное и рекомендуемое производителем операционной системы средство разработки.
В настоящее время Apple активно развивает Xcode, причем дело ограничивается не только "латанием" замеченных дыр. Уже в самое ближайшее время увидит свет версия 1.1 этого ПО, в которой будет расширена функциональность почти каждого модуля этого IDE.