Xcode 3.1 - часть II (Прошлое).

Наверное, здорово открывать новые, никому неизведанные, земли. Пядь за пядью отвоевывать их у природы. Те из первопроходцев, кто победил в этой жестокой борьбе, становятся легендами. Им ставят памятники, потомки помнят их имена, а инструменты, с помощью которых прорубались первые тропинки в диких и опасных зарослях, становятся реликвиями и бережно хранятся в музеях.

NeXT была компанией первопроходцев, но про историю инструментария, в котором создавались операционные системы этой компании и было написано поразительно много программ, судьбоносных для компьютерной цивилизации, несмотря на то, что ни NeXTstep, ни OPENSTEP, никогда не были особенно популярны, известно не особо много.

Их историю пришлось собирать по крупицам. Люди, которым посчастливилось "жить" в самых лучших объектно-ориентированных библиотеках мира в 90-е (если у вас иное мнение, вы их просто не пробовали), с трудом припоминают подробности.

Между прочим, это тоже говорит кое о чем. Видимо, инструментарий довольно редко вставал у них поперек дороги, а милые странности его поведения (нет ни одной мало-мальски серьезной программы без странностей, которые лучше бы знать заранее) не приводили к фатальным последствиям.

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

4. Свидетельства очевидцев (1988 - 1996)

Всемирно известный Doom, игра, фактически положившая начало целому направлению в компьютерных играх, была написана в ProjectBuilder, на NeXT, в библиотеках NeXTstep. Само название компании, id Software, происходит от динамического типа данных в Objective-C.

Macromedia FreeHand. Электронные таблицы Lotus Improv (многие суперфункции современного "Экселя" взяты из нее). Современный интерфейс Mathematica. Многие программы, впоследствии завоевавшие пользователей массовых операционных систем, сначала рождались здесь.

И не только они. Тим Бернерс-Ли, фактически, с помощью NeXT и ProjectBuilder создал Интернет в его нынешнем виде. В 1989 он изобрел HTTP, протокол передачи гипертекста. В 1991 - опубликовал разработанный им формат (и язык) HTML, и первый в истории браузер для работы с HTTP и HTML.

Браузер назывался WorldWideWeb, от его названия произошло знаменитое "www" в начале URL веб-страниц, само слово "веб" (паутина), и поэтическое название сети Интернет ("всемирная паутина").

Каждому из тэгов в исконном HTML соответствуют методы (примерно то же самое, что функции-члены экземпляра класса в C++) "некстовского" класса Text из NeXTstep 1.0a. На других платформах функции для выполнения этих операций пришлось писать и сами отработчики этих операций, и пришлось здорово потрудиться.

В конце 80-х компания NeXT Computer была... очень популярна. В 1988 и 1989 годах ей было посвящено множество публикаций. Журналистов завораживал асбестово-черный куб, его странности и его цена. Чудеса странной операционной системы, которая ни на что не была похожа тоже обсуждались.

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

О том, что за всем этим стоит какая-то "полностью объектно-ориентированная операционная система", Джобс упомянул раза два или три, и об этом вспомнил далеко не каждый журналист.

Я же помню статью инженера по программному обеспечению, которому пришлось (или довелось) перенести свою программу (кажется, для Mac OS) в NeXTstep.

Это личное воспоминание, которое врезалось в память - но ни фамилии, ни названия журнала, ни тем более его номер, я не помню. Это было или в конце 80-х, или в начале 90-х. До сих пор я поражен, как отважный редактор решился ее опубликовать. Редакторы уверены, что единственная статья, которую не все поймут, опубликованная на страницах их издания, принесет ему неминуемую и быструю смерть.

Автор той статьи был поражен и восхищен. Вместо 2-3 месяцев, как он ожидал, работающий прототип удалось построить всего за пару недель. Увы, редакторы и в те времена пытались запретить математикам использовать в их статьях формулы, а программистам - фрагменты кода. Косвенные данные для нашего исследования: если бы инструментарий мешал разработчику, он бы об этом написал, и вообще не был бы столь успешен.

5. Как это было (1988-1996)

Причины выбора Objective-C вместо C++ (который уже был популярен) интересны, но о них я расскажу в другой раз. Так или иначе, в 1986 пришлось позаботиться о реализации компилятора с этого языка, среды времени исполнения и всего остального. Судя по всему, на ранних этапах разработки, когда никакой своей операционной системы еще просто не было, использовались инструменты командной строки и BSD Unix.

Известно, что до 1991 года, NeXT использовала свой собственный компилятор с Objective-C, который, по словам Стива Нарофф, в наше время - одного из ведущих инженеров Developer Tools Group на Apple, был не слишком хорош. Генерируемый им код был медленнее, чем мог бы (отсюда и пошли сказки о фатальной неторопливости NeXTcube), да и сам компилятор был недостаточно надежен.

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

Лучшим была (и остается) GCC, коллекция компиляторов GNU, разработанная в 1984 году Ричардом Столманом как GNU C Compiler (если кто не знает, GNU = GNU is Not Unix, то есть, GNU Не Юникс), переименованный в CNU Compilers Collection после того, как к C добавились другие языки.

В 1990 году, Стив Нарофф совместно с Ричардом Столманом начали разработку компилятора Objective-C для этой коллекции. Осенью 1991 года, новый компилятор стал основным "оружием" NeXT Computer.

Кстати, первая версия WorldWideWeb, опубликованная в феврале 1991 года, была построена старым компилятором (и тем не менее!).

Новый компилятор многое упростил, но кое-чем пришлось и пожертвовать. С тех пор, в ProjectBuilder и Xcode есть еще один транслятор с Objective-C, без которого ни индексация исходных кодов (для быстрого поиска), ни синтаксическая раскраска в редакторе интегрированной среды не были бы возможны.

Если вы пробовали одну из версий ProjectBuilder или раннего Xcode (до 3.0), от вас не могла ускользнуть медлительность редактора исходных кодов, нарастающая при увеличении размера текста. Особенно этот порок (кажущийся странным) был заметен в ранних версиях интегрированной среды.

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

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

На NeXT разработкой среды разработчика, в основном, занимался один человек - Стивен Нарофф. Естественно, к ее разработке привлекались и другие инженеры, но все они занимались чем-то еще. Стив тоже занимался не только средой разработчика, принимая участие в разработке "генератора трансляторов на стероидах". Проект привел к неожиданным результатам: в 1995 году, на свет появился небывалый прежде гибридный язык, дважды объектно-ориентированный диалект C, Objective-C++.

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

И, в конце концов, Джобс сделал все, что замышлял. NeXTstep (Cocoa и CocoaTouch) играют все более важную и значительную роль в современных Маках, iPhone и iPod touch.

6. Как все было II (1996-1998)

Приобретение NeXT Apple'ом, в первые месяцы, почти ничего не изменило в жизни бывшей NeXT. Первый проект новой операционной системы был неплохой, но не имел никаких шансов на успех. Учиться программировать в новой, и довольно неуютной (по первым впечатлениям) среде разработки и ее странных библиотеках, а потом полностью переписывать для нее огромные программы, не хотел почти никто.

Кроме того, новая операционная система отлично работала на многих чужих платформах, и не работала только на Маках. Парадокс?

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

В итоге стало ясно, что старый добрый ProjectBuilder, проработавший верой и правдой много лет, нуждается в переработке. Операционная система, частью которой он должен был стать, радикально отличалась от среды NeXTstep/OPENSTEP. Кроме того, массовое пришествие разработчиков, привыкших к другим инструментам, было жизненно важно.

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

Летом 1998 года Стив Нарофф приступил к проектированию нового ProjectBuilder. Он опять работал один, все другие разработчики были заняты другими вопросами на 150 процентов. В декабре 1998 года, разработка новой среды разработчика с кодовым названием PBx началась. В помощь Стиву дали молодого программиста Дэвида Пейна.

Новый ProjectBuilder должен был уметь справляться с гораздо более широким кругом каждодневных задач. Миссия была невыполнима. Именно в те годы музыкальный трэк из Mission Impossible звучал во время всех презентаций Apple.

7. PBx (1998-2001)

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

Список "To Do" внимательно просмотрели на предмет отделения первостепенных задач от второстепенных и третьестепенных. Приоритетным стали функции PBx, что хоть и противоречило стандартам Apple, в той ситуации было единственно возможным решением. Среда разработчика прикладных программ должна, прежде всего, генерировать хороший код.

Во-вторых, процесс создания программ и управление генерацией кода должен быть настолько легким и удобным, насколько это будет возможно. Это - приоритет номер два.

Во время Великой Отечественной войны, ЗиСы и ГАЗы выпускались в упрощенной комплектации военного времени. С одной фарой, с упрощенной деревянной кабиной, по упрощенной технологии... PBx был продуктом "военного времени".

За несколько недель до выпуска Mac OS X Developer Preview 4, в которой обязательно должна была присутствовать новая среда разработчика программ, на помощь Стиву и Дэвиду пришли почти все инженеры компании. Все внутренние разработки теперь велись в PBx.


Фрагмент обзора нового Project Builder. Май 2000 года...

Перед выходом Mac OS X Developer Preview 4, PBx торжественно переименовали в Project Builder (обратите внимание на пробел: на нем настоял лично Джобс, желая таким образом показать, что Mac OS X не какая-то маргинальная система, а нечто неизмеримо большее), а старый, "некстовский", переименовали в ProjectBuilderWO - только он был совместим с разработкой сетевых приложений в WebObjects.

Новый Project Builder вызвал смешанные чувства: с одной стороны, "не Visual Studio". С другой, бесплатной надстройки над инструментарием с открытым исходным кодом такого уровня и качества в мире еще не было.

8. Каков он в деле (2001-2003)

Он многим не нравился. На фирме, где я трудился, умные люди приложили массу усилий к тому, чтобы и на новой платформе использовать тот же самый Code Warrior, потому что "нет ничего, в чем Project Builder был бы лучше", но под давлением обстоятельств было решено, что увы, придется использовать именно его. Честь стать первопроходцем в этой среде выпала мне.

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

Developer Tools Group увеличила штаты, теперь вместо двух программистов инструментарием занималось человек пять или шесть. Но уж больно велик был набор Developer Tools. Да, Project Builder не выдерживал сравнения ни с Visual Studio, ни CodeWarrior.

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

Версии Mac OS X сменяли друг друга, вместе с ними менялся и Project Builder, но очень медленно. "Он достаточно хорош для своей цены", "Apple не видит смысла вкладывать средства в бесплатный продукт", "Неужели они не понимают?" - так говорили разработчики, поддержка которых нужна была Apple как воздух.

Ситуация складывалась просто парадоксальная. Платформа Cocoa "затягивала" разработчиков примерно с такой же неотвратимостью, с какой новенький iPhone "совращает" самых разных людей. При этом, инструментарий был, мягко говоря, не слишком приспособлен для новичков. Многие "ломались" на его трудностях.

Тех, кто выдержал это испытание, уже трудно было чем-то испугать, и почти невозможно остановить. Мне повезло: когда я перешел в Cocoa в конце 2002, у меня уже был многомесячный опыт ежедневного общения с Project Builder, мне было легче.

Люди писали Джобсу. Обсуждали, например, как спасти Cocoa от Apple. "Cocoa - больше чем Мак или Apple" - говорили активисты этого движения. Но их никто не слышал.

Когда и в Mac OS 10.2, в новой версии Project Builder (не то 2.0, не то 2.2 - не догадался запомнить, а в Сети об этих версиях ничегошеньки нет, как будто кто-то постарался начисто стереть их из нашей памяти), всплыли практически все до одной старые проблемы, мы сошлись на том, что лучше бы Apple открыть код инструментария, раз уж сотрудники Developer Tools Group занимаются непонятно чем...

И вдруг...

9. Новое начало

24 октября 2003 года, Apple выпустила очередную версию Mac OS X, Mac OS 10.3 "Panther", с почти бессчетным числом инноваций. Стало очевидно, что от обороны, исправления ошибок и заделывания "дыр", компания перешла в наступление.

Обновление коснулось и инструментария разработчика. Вместо того, чтобы латать дыры в не слишком удачной, написанной в условиях жуткого дефицита ресурсов и времени, интегрированной среды разработчика Project Builder, его переписали заново. Теперь это был совсем другой инструментарий, он даже назывался по другому - Xcode. Xcode 1.0.

Больше всего меня поразило молчание тех, кто был в курсе происходящего задолго до 24 октября. Те, у кого был доступ к дорелизным версиям любого программного обеспечения Apple, терпеливо помогали новичкам, но ни в спорах, ни в акциях протеста, не участвовали.

Xcode был написан практически теми же людьми, и временные рамки для его написания были очень тесными, и дебют "спасителя" был не так уж и безоблачен. Нашлись и такие, кто с удовольствием бросал камни несправедливой критики в крошечную героическую команду разработчиков Xcode, в частности, обвиняли ее в том, что прежний интерфейс (Project Builder), который они же сами и изругали вдрызг, был лучше...

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

В Xcode 1.1 часть неполадок была устранена, но вместо ушедших появились новые. Xcode 1.2 был почти идеален. Я не догадался запомнить точные даты их выпуска. И, как выяснилось, узнать их теперь не так-то и легко. Эти версии почти нигде не упоминаются, но 1.2 я отлично помню - когда вышел Xcode 1.5, и разработческие форумы захлестнуло криками о помощи, я отложил апгрейд до лучших времен.

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

В конце 2003 года Apple как-то сразу стало везти на самых разных направлениях ее деятельности. Нет, Маки все еще не вышли из пике, их доля на мировом, и даже на американском, рынках продолжала снижаться, хоть и медленнее, чем раньше. Может быть, медленнее от того, что дальше снижаться было уже почти некуда.

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

Некоторые из них потом освоили 3-мерную графику (OpenGL), и стали профи по созданию игровых программ - кое-кого я уже видел в App Store. Мне приятно, что когда-то я тоже протягивал им руку помощи, когда они делали свои первые, и самые тяжелые шаги.

Я не согласен, что невероятный успех iPod был единственной причиной воскрешения Маков и Apple. iPod всего лишь заставил мир еще раз заинтересоваться Apple, и, из чистого любопытства, еще раз понаблюдать за Маками "в деле", и даже попробовать их - благо и iPod, и iMac лежали на соседних столах в розничных магазинах Apple Store.

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

10. Вектор перемен

Xcode был написан заново. Но, несмотря на это, многие "механизмы" из прошлого все еще оставались даже в Xcode 2.0, новой версии, вышедшей вместе с Тигром (Mac OS 10.4). Примерно в это самое время, среда разработки CodeWarrior, очень хорошая и любимая многими поколениями маковских разработчиков, "приказала долго жить".

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

Коммерческий продукт не смог выдержать конкуренции со стороны бесплатного инструментария. Печально - но наступили другие времена.

На Xcode обрушивались новые валы критики. Многие из тех, кому пришлось переходить в Xcode из CodeWarrior, были раздражены и озлоблены. Неуклюжие попытки разработчиков Xcode "добавить в интерфейс немного CodeWarrior" не встречали понимания.

И опять, как в последние месяцы жизни Project Builder, казалось, что Apple не слышит. На этот раз, правда, критика касалась (большей частью) не самых важных сторон дела. Большую часть из того, что требуется разработчику для успешного завершения проекта, Xcode обеспечивал на достаточно высоком уровне.

Xcode 2.1 стал первой версий Xcode, генерирующей не только код для PowerPC, но и для Intel, так называемый "универсальный код". Именно переход на Intel стал последним смертельным ударом для

Источник: Олег Свиргстин