Еще одна отставка

Он пришел в NeXT в конце 80-х, он был одним из лучших в своей области, но даже не это было самым важным. Эксперты, склонные недооценивать и не доверять NeXT, меняли точку зрения узнав о том, что он работает на эту компанию.
Его имя и авторитет были одним из самых убедительных доводов в пользу Mac OS X, наследницы NeXTstep/OPENSTEP и классической Mac OS, в её ранние годы. Он был лучшим, но статья не столько о нём, и даже не о том, кто приходит ему на смену, сколько о раскрываемых этим событием тенденциях в развитии Apple.

frontPic3

Если вы представили себе гиганта духа, с седыми волосами и дерзким огоньком в выцветших от напряженной работы интеллекта глазах, вы почти не ошиблись. «Он» даже нечто большее: его создавали тысячи талантливых людей, не получая за это никакого вознаграждения (кроме морального), на протяжении многих лет.

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

«Он» — это GCC. С его помощью человеческие замыслы (мечты) превращаются в программы. Это коллекция компиляторов, отладчиков и оптимизаторов, и много чего еще, для огромного числа платформ. Среди его пользователей — Adobe, Google, Apple, разработчики Linux и многие другие. У него фантастическая репутация и он её честно заслужил.

508px-Gccegg

С июля 2012 года GCC больше не будет в составе инструментария разработчиков для OS X (в Xcode 4.4), осенью GCC покинет и iOS (его не будет в Xcode 4.5). Что это — безумие?

GCC

До 1989 года, в компании NeXT Computer (основанной Стивом Джобсом в 1985 году, после ухода из Apple), в среде разработки операционной системы NeXTstep, опережавшей своё время, по мнению Джобса, лет на 5, а на самом деле лет на 15, использовался неудачный компилятор своей разработки.

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

3406682

Самый первый NeXT

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

Желающих купить рабочую станцию NeXT было на порядок больше, чем тех, кому это удалось. Желающих не останавливали даже проблемы изделия, которых было немало. Компьютер был медлителен и задумчив.

Одной из причин этого, и самой трудноустранимой, был неудачный компилятор. Пишутся компиляторы долго и медленно, пишут их особенные люди, получающие от этого занятия фантастическое удовольствие, намного превосходящее все удовольствия, которые известны нам с вами. Если вам нужен компилятор, и нужен «позавчера», другого выхода нет: ищите его за пределами компании.

В 1989 году NeXT выбрала GCC, разглядев в этом бесплатном проекте с открытым исходным кодом особенный потенциал. Через несколько лет GCC был лучшим в своем классе, а также единственным и основным компилятором в NeXTstep.

next_slab

NeXT slab, начало 90-х

В начале 90-х компьютеры и программное обеспечение NeXT использовали спецслужбы США и гигантские транснациональные корпорации: заказчики были готовы платить немалые деньги за уникальный и качественный продукт на условиях сохранения отношений в тайне. Тайна перестала быть тайной в начале «нулевых».

Если бы не GCC, сегодня не было бы ни OS X, ни iOS — история NeXT закончилась бы задолго до кризиса на Apple.

Чем плох GCC?

GCC был написан очень давно. Он поражал новизной в 80-е и 90-е, но с некоторых пор, став непомерно большим и запутанным, он практически перестал развиваться.

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

Год за годом, GCC превращался в препятствие для развития компании. Некоторые его проблемы можно было бы устранить, но не все. Если вам нужен компилятор, и нужен «позавчера», другого выхода нет: ищите его за пределами компании.

Преемник

Профессор Джеф Раскин утверждал, что:

Сравнивать сложные сущности на лучше/хуже так же неправильно, как сравнивать точки в двухмерной системе координат на больше/меньше.

LLVM, универсальная система анализа, трансформации и оптимизации программ, а кроме того, еще и коллекция компиляторов — редкое исключение из этого правила.

LLVM_Logo

Логотип LLVM

LLVM начиналась как университетский эксперимент. Викрам Адве (Vikram Adve) и Крис Латнер (Chris Lattner) испытали на практике радикально новый подход к написанию компиляторов.

Через пять лет, в 2005 году, Apple пригласила Латнера и нескольких разработчиков LLVM в штат. С 2005 года этот проект с открытым исходным кодом финансируется Apple. В том же году, планы Apple относительно LLVM и Clang, фронт-енда для C-образных языков, были обнародованы. Мощь идей, заложенных в этих технологиях, была ощутима почти физически, создатели LLVM сообщали о своих разработках просто невероятные вещи, это было даже подозрительно.

Chris-Lattner

Крис Латнер

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

Apple считают сборищем сумасшедших, но в последнее время компания всё чаще поражает не отчаянной смелостью, а мудрой осторожностью. История адаптации LLVM к «яблочным» средам разработки в течение целых семи лет — один из примеров этого.

collegebuild

Университет штата Иллинойс в Урбана-Шампейн: здесь родился LLVM

В 2009 год компилятор на основе LLVM (экспериментальный) пришёл на Mac OS X. В 2010 году он появился в среде разработки для iOS. В последние два года применялся уже не «чистый GCC», а гибрид GCC/LLVM. Статус GCC постепенно снижался, а качество реализации LLVM доводилось до все большего и яркого блеска.

Основной компилятор для OS X и iOS образца 2011 года назывался Apple LLVM Compiler 3.0. В 2012 году на арену выходит его усовершенствованный вариант, Apple LLVM Compiler 4.0, и теперь ему абсолютно точно можно доверить судьбу «яблочных» платформ.

Champaign-Urbana_number_26_bus

Урбана-Шампейн, автобус до университета

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

Даже во время переходного периода, когда условности и ограничения сковывали LLVM, этот потенциал подарил Apple поразительные новшества. И не только Apple, «блоки», синтаксическая конструкция для C и C-образных языков разработанная в LLVM, имеет шанс войти в новый стандарт этих языков.

А ведь именно сейчас всё только начинается.

История Apple