Как стать автором
Обновить

Swift не нужен?

Время на прочтение 10 мин
Количество просмотров 31K
Автор оригинала: Jeff Johnson
Не перестаю задаваться вопросом — какие у Apple планы на Swift и Objective-C? Когда в 2014 году появился Swift, его создатель Крис Латтнер утверждал, что эти два языка смогут сосуществовать бесконечно долго. Из почтовой рассылки пользователям Xcode:
3 Июня 2014
McLaughlin, Michael P.
Кто-нибудь знает, действительно ли Apple собирается прекратить поддержку С и С++? Fortran уже не поддерживается, хотя осталось еще много кода на Fortran, и сравнительно нового, как в MultiNest.
Пожалуйста, скажите, что это не так. Не все считают, что «опытные пользователи» — это те, кто просто создает полнометражные мультики. Многие из них ученые и инженеры.

Здравствуйте, Michael,
Мы не строили планы на что-либо подобное. Swift — это просто новый вариант разработки под платформу. Мы не собираемся прекращать поддержку ни C, ни C++, ни Objective-C. Если вы разрабатываете на одном из этих языков, можете свободно продолжать его использовать.

— Крис.
Оригинальный текст письма
> On Jun 3, 2014, at 5:45 AM, McLaughlin, Michael P. <mpm...@mitre.org> wrote:
> Does anyone know, for real, if Apple intends to stop supporting C and C++?
> That’s what it sounded like. They already do not support Fortran even though
> there is a *lot* of Fortran code out there, even fairly new code like MultiNest.
>
> Please say it isn’t so. Not all of us consider “power users” to be just those
> who create feature-length cartoons. Many are scientists and engineers.

Hi Michael,

We have no plans to do anything like that. Swift is a new option for developing
on the platform. We have no plans to drop C, C++ or Objective-C. If you’re
happy with them, please feel free to keep using them.

-Chris


Дело в том, что в это никто не верит. Крис Латтнер уже давно покинул Apple, и если его утверждение окажется ложным, он не сможет принять критику от лица компании. В целом разработчики согласились на том, что Apple в конечном итоге откажется от Objective-C, и Swift станет единственным языком «первого класса» для разработки Cocoa-приложений. Слова «языком первого класса» имеют значение, потому что нет никаких оснований для прекращения поддержки компилятора для Objective-C или его удаления вообще. Компилятор поддерживает многие языки программирования, в том числе малоиспользуемые и старые. Так что утверждение Латтнера может быть формально истинным, но не в этом дело. Вопрос в выборе языка для разработки Cocoa-приложений под iOS и macOS.

Сообщество разработчиков, вероятно, право. Я согласен, что Objective-C и Swift не могут продолжать сосуществовать неопределенное время. Однако, я не так уверен, что будущее за Swift. Что, если это так? Этому варианту развития событий я бы и хотел посвятить эту статью. Во-первых, позвольте рассказать, почему Swift и Objective-C не могут мирно сосуществовать.

Новая надежда?


Ни Swift, ни Objective-C почти не используются за пределами платформ Apple. Это может поменяться в будущем, но на данный момент это факт. Так что если вы хотите разрабатывать приложения под платформы Apple, вам нужно изучить какой-либо из них, либо оба. «Какой именно язык изучать?» — довольно трудный вопрос для новичка. Если брать один язык, то стандартным советом будет Swift. Хотя я не согласен с ним, но признаю, что он стандартен. Умные головы предложат изучать оба языка. Но тут кроется загвоздка. Если нужно осваивать оба специфичных для платформы языка лишь для написания приложений, Apple-платформы теряют свою привлекательность для разработчиков. Swift понравился разработчикам из-за своей «современности» и «привычности», нежели Objective-C. Но если все равно нужно учить Objective-C, то в чем преимущество? Сторонние разработчики приняли Swift, гм … быстро (в оригинале тут получился каламбур, Swift = «быстро» — прим. пер.) — Apple сказали прыгнуть — они прыгнули. Как Аполлония в «Озеро Миннетонка». Swift стал очень популярным. Это вызвало огромный спрос на Swift-ресурсы. В почтовых рассылках, форумах, блогах, Stack Overflow, твиттере, да везде, — разработчики хотят знать о Swift и обсуждать его. Swift повлиял на техническую книгоиздательскую индустрию. Даже на рынок труда повлиял — многие компании намеренно, или из-за моды на язык, или просто из-за безграмотности, нанимают только Swift-разработчиков. Многие разработчики под платформы Apple не знают Objective-C. И многие Objective-С-разработчики берутся использовать исключительно Swift, причем до такой степени, что начинают забывать Objective-C и испытывают трудности, если приходится снова к нему возвращаться. Увлечение Swift, спрос на него среди разработчиков угрожают заглушить Objective-C. Эти два языка могут сосуществовать «официально» в сознании Apple, но могут ли они сосуществовать неофициально в чьем-либо еще? Могут ли приводиться двойные — на каждый язык — письма, блоги и вики-страницы? Что насчет опенсорсных проектов — Objective-C или Swift? И, если рынок труда движется почти исключительно к Swift, у разработчиков нет другого выхода, как идти в этом же направлении.

Империя наносит ответный удар


Судя по вышеуказанным аргументам, Objective-C обречен. Все больше разработчиков предпочитают Swift. Однако не все потеряно, потому что не разработчики управляют платформами Apple. Единственное место, где Swift еще не доминирует, это, как бы иронично ни звучало, сами Apple. Компания очень медленно осваивает Swift. К настоящему времени Apple внедрили удивительно мало Swift-кода. Хороший анализ этого можно найти в одном блоге. Было предложено несколько объяснений — многие могут называть это извинениями. Например, фреймворки Apple не могут использовать Swift, потому что он еще не достиг ABI-стабильности (или даже source-стабильности, если уж на то пошло). Каким бы ни было объяснение, факт остается фактом: внутренняя кодовая база Swift у Apple относительно крошечная, в то время как база Objective-C, скорее всего, самая большая в мире.

Если Apple придется отказаться от одного языка прямо сейчас, то от какого именно? Отказ от Swift будет чрезвычайно болезненным для сторонних разработчиков. С другой стороны, для самих Apple это пройдет почти незаметно — слишком мало Swift-кода придется конвертировать в Objective-C. Разумеется, Apple приложили немало усилий в Swift, особенно в отношении Xcode, однако, это невозвратные затраты. Apple не будут кидать денег на ветер. В Objective-C тоже было вложено немало, и эти затраты даже более невозвратны, чем у Swift. Значение имеет не цена, которую уже заплатили, а цена, которую придется заплатить в будущем. Apple ничего не имеют против невозвратных затрат. По слухам, они вложили огромную кучу денег в автомобильный проект, по которому еще ничего нет, и что он был по большей части отложен.

Apple могут переписать весь свой Objective-C-код на Swift, если захотят. Конечно, у них есть на это ресурсы. Объем ликвидных активов, которыми они владеют, просто ошеломителен, беспрецедентен в истории. Тем не менее, их нынешняя корпоративная культура предполагает, что они не могут или не будут выполнять это преобразование. За этим стоит несколько факторов. Во-первых, Apple перешли на годовой цикл выпуска для всех своих основных версий ОС. Действительно, по сообщениям, компания ударилась в Agile-философию разработки ПО. Такой подход оставляет слишком мало времени для полных переделок. И мы уже видели, как качество идет на спад, а функциональность теряется, когда Apple переписывает технологию или приложение с нуля.

Во-вторых, Apple гордятся тем, что нанимает «лучших» инженеров. Я знаю много специалистов как из Apple, так и нет, поэтому считаю это мифом. Но независимо от того, правда это или нет, это точка зрения компании, и, следовательно, вряд ли они смогут нанять огромное количество людей и бросить все ресурсы в перезапись Objective-C-кода.

В-третьих, опираясь на предыдущие моменты, скажу, что количество знающих Objective-C снижается. Даже если Apple захотят перевести кучу людей на эту задачу, где они их найдут? Если нужно переписать Objective-C в Swift, естественно, понадобятся специалисты, понимающие оба языка, без знания Objective-C вся затея превратится в катастрофу.

Внутренние исследования Apple также указывает, что если бы Софи пришлось выбирать (означает тяжелый выбор — прим.пер.) между двумя языками сегодня, то остался бы точно не Swift. Если вы сторонний разработчик, полностью окунувшийся в Swift, эта мысль, как минимум, должна вас напугать. И спросите себя, если сегодня маятник качнется в этом направлении, сколько времени должно пройти, и что должно произойти, чтобы он качнулся обратно? В какое время, в каком году для компании будет более болезненным отказаться от Swift, нежели от Objective-C?

Возможно, вы сейчас ворчите, мол, Apple не может так предать разработчиков, отказавшись от Swift. Как вообще руководителям Apple спится по ночам? Подозреваю, на матрасах, начиненных наличкой. Они не станут думать дважды. Они даже могут хвалить себя за смелость. Если вы посмотрите историю взаимоотношений Apple с разработчиками, то увидите целую цепочку отказов в поддержке, разочарований, страданий и несдержанных обещаний. Сборщик мусора в Objective-C, 64-битный Carbon, интерфейс Cocoa-Java, Yellow Box для Windows, Dylan. Нужно ли продолжать? Я мог бы. Евангелисты Apple скажут вам, что Swift — лучший язык программирования, а затем передумают и заявят, что они всегда были против Swift.

Приквелы


Когда Apple решили создать Swift, каков был их план? Я вижу три варианта.

  1. Они действительно намеревались поддерживать оба языка какое-то неопределенное время.
  2. Планировали в конце концов отказаться от Objective-C и перейти на Swift, во что и верят разработчики.
  3. У них не было конкретного плана, да и вообще не были уверены, что Swift даже выстрелит.

Первый вариант не подходит по вышеописанным причинам, так что его сразу можно отмести.

Если действующим был второй план, я бы очень хотел, чтобы Apple в открытую его выразили. Сообщение от Латтнера, как минимум, вводит в заблуждение. Если Swift — будущее, так почему бы не быть откровенными с разработчиками, не делиться с ними своими планами, чтобы те смогли подстроиться под них? Неопределенность — худшее, что может быть в этом отношении. Мы сможем согласиться, что Swift — наше будущее, если у нас не останется выбора. Но если Swift — выбор Apple, и они кормят нас иллюзиями, что выбор все еще есть, тогда некоторые из разработчиков могут сделать неправильный выбор, что губительно для всех.

Я считаю, что верен третий вариант. Я знаю, многие люди думают, что Apple работают в соответствии с каким-то грандиозным, секретным, мегабольшим планом. Есть ли у Apple долгосрочные планы? Несомненно. Являются ли эти планы конкретными? Сомневаюсь. В технической сфере вы можете делать долгосрочные планы, но не рассчитывайте, что сможете им придерживаться. Технологии меняются… быстро. Вам надо быть гибкими (не как Agile, а просто гибкими). Вы должны уметь реагировать на то, что делают ваши конкуренты. Например, уход Леттнера — было ли это в планах Apple? Планы меняются. Они должны меняться. Сторонние разработчики сразу же набросились на Swift, но Apple также должны были учесть возможность того, что он пройдет незаметно для них. Надеясь на лучшее, планируй худшее.

Изгой-один


По общему мнению, проект «Swift» был секретным даже внутри Apple. О нем знали лишь несколько избранных. Когда о нем объявили в открытую, для большинства инженеров Apple это стало такой же неожиданностью, как и для разработчиков. Сотрудники Apple оказались не готовы для этого. И это представляет собой самую большую проблему для Swift: внутренние конфликты между командами разработки в Apple. Команда-за-Swift с поддержкой в лице руководства преподносят Swift как будущее разработки приложений Apple. Но Команда-за-Swift не может просто так отмести настоящее и поставить на его место будущее как установленный факт. Настоящее для Apple — Objective-C. Много Objective-C. Десятилетия Objective-C, накопившиеся еще до покупки NeXT. Вся кодовая база Objective-C не может просто так исчезнуть, как по мановению волшебной палочки. Вы представляете Swift группе команд Apple, которые ограничены как во времени, так и в ресурсах, все, что они сделают — пошлют вас к черту. Им может понравиться сама идея, но WWDC близко и нужно выполнить кучу работы. Может быть, через год… Или через два.

Как Apple может согласовать эти конкурирующие интересы? Они хотят закрепить будущее за Swift, но также есть тонна Objective-C-кода, и они хотят продолжить свою гибкую разработку ПО, при этом нанимая исключительно лучших инженеров. Да еще и поддерживать качество ПО. (Надеюсь, можно предположить, что там все-таки заботятся о качестве.) Чем-то придется пожертвовать. Между тем, сторонние разработчики будут предъявлять бОльшие требования к ресурсам Swift. Описания API, вероятно, в значительной степени автоматизированы, так что двойной стек не будет большой проблемой, но разработчикам на Swift потребуется документация и примеры кода. Если официальная позиция Apple состоит в поддержке обоих языков, они пишут двойную документацию и двойные примеры кода? И как много усилий они вкладывают в обновление старой Objective-C-документации?

Какова реакция сообщества на эту проблему? Люди, считающие, что Apple откажется от Objective-C, — как вы думаете, как они с этим справятся? Некоторые предположат, что Apple откажутся от внешнего использования Objective-C, но продолжат использовать его внутри компании. Однако, я думаю, что эти люди недооценивают проблему. Учитывая объем кодовой базы Objective-C и ограничения, с которыми Apple работают, переход на Swift действительно затянется. По-вашему, как долго компания будет поддерживать все инструменты для Objective-C? Если ваш ответ не 5 лет, не 10 лет и даже не более 10 лет, я думаю, вы не представляете объема всей задачи. Для меня кажется крайне маловероятным, что Apple будет выделять отдельные ресурсы для разработки и поддержки внутренней версии Xcode, внутренних Objective-C API, внутренней Objective-C-документации (всем нужна документация) и т. д. И еще раз, если бы компания официально отказалась от Objective-C, количество Objective-C-разработчиков падало бы еще более стремительными темпами, чем сейчас, так что где вообще Apple собирается найти людей для поддержки кодовой базы в будущем?

Эпизод C


Позвольте опровергнуть возможные контраргументы к вышеуказанным мной. Контраргумент состоит в том, что Apple и так тянут двойной стек технологий: Objective-C и C. Foundation и Core Foundation. Поэтому добавление еще одного языка не является чем-то новым и неизведанным. Это возражение на первый взгляд кажется убедительным, но тут есть брешь. Да, Objective-C и C являются двумя разными языками, но провести аналогию со Swift нельзя, потому что Objective-C — это, по сути, надстройка над C. Если вы изучаете Objective-C, и изучаете хорошо, значит вы знаете и C тоже. Не имеет значения, что многие берутся сначала за C, а потом за Objective-C. На самом деле, я шел именно по этому пути, и советовал бы следовать ему и другим. Но изучение C и затем Objective-C — не то же самое, что учить два языка программирования. Фактически, это попросту двухэтапное изучение Objective-C. Все, что вы узнали о C, применимо и к Objective-C. Это просто работает, так сказать. Но Swift это не касается. Конечно, есть некоторые пересечения, потому что Swift был разработан людьми, оперирующими Objective-C, но ни в коем случае ни один из них не является надстройкой над другим. Swift и Objective-C несовместимы гораздо хуже, чем, скажем, C++ и C, которые весьма близки, но не совсем совместимы.

Кроме того, C не является языком разработки приложений под iOS и macOS. Можете ли вы создать приложение на чистом C? Возможно, но, конечно, не легко. API для разработки на C был не Cocoa, а, скорее, Carbon, а от Carbon Apple в значительной степени отказались. Существует несколько поддерживаемых API для C в Apple-платформах, но все же C не так близок к разработке iOS- и macOS-приложений, как Objective-C и Swift.

Какая-то там месть


Это лишь мои подозрения, но мне кажется, что Apple не ожидали, что Swift так быстро станет популярным. Вся эта стратегия имела бы больший смысл, если бы Swift медленно развивался в течение долгих лет. Двойной стек выгоден, если разработчики распределены на два лагеря примерно равномерно. У Apple и сторонних разработчиков было бы достаточно времени, чтобы переписать существующий код с Objective-C на Swift. Swift может быть нашим будущим, может быть единственным языком для разработки, но это отдаленное будущее. Может оказаться ошибкой в планировании или игрой воображения, что Swift может внезапно подавить Objective-C в мышлении разработчиков. И теперь Apple столкнулась с трудным выбором. Как они справляются с неожиданной популярностью Swift за пределами компании, когда внутри нее к нему еще не готовы?

Я подозреваю, что Apple отступятся от Swift. Как я думаю, отставка Леттнера делает эту возможность еще более вероятной. Многие разработчики положили все свои ресурсы на Swift. Это могло казаться неплохим вложением в то время, и возможно, оно окупится. Вероятно, это окупится. Что, если нет? Вдруг произойдет смена управления, или просто изменятся настроения внутри управления? Что если Apple внезапно решит, что их внутренние ограничения труднее преодолеть, чем они ожидали и смена языка невыгодна? Можете ли вы исключить эту возможность? Боюсь, многие не готовы к настолько жестокому миру. Если это произойдет, будет много слез и криков. Но не среди разработчиков Objective-C, которые будут смеяться и веселиться, как будто на дворе 1999. В крайнем случае, 2001.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Как вы считаете, какова судьба Objective-C и Swift?
8.82% Останется Objective-C 50
37.57% Останется Swift 213
30.51% Objective-C и Swift останутся оба и будут развиваться параллельно 173
23.1% Objective-C останется лишь для внутренних нужд Apple 131
Проголосовали 567 пользователей. Воздержался 121 пользователь.
Теги:
Хабы:
+3
Комментарии 33
Комментарии Комментарии 33

Публикации

Истории

Работа

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн