Настоящее и будущее Swift: вопросы взрослым
Скоро два года с того момента, когда язык Swift был официально представлен, но его состояние остаётся неопределённым. С одной стороны, в топе «самых любимых языков» на Stack Overflow он на втором месте — видно, что попытка Apple «улучшить Objective-C» разработчикам понравилась. А с другой, в топе «самых используемых» его при этом нет — там по-прежнему Objective-C. Более того: сообщается, что сама компания Apple сейчас толком не использует в iOS свой собственный язык, пока что реализовав на нём только калькулятор.
Одна из причин в том, что язык ещё не достиг стабильности ABI: сейчас никто не гарантирует, что после выхода новой версии языка ваш код не сломается. Но следующая версия 3.0, которая уже показалась на горизонте, должна исправить это. Означает ли это, что настаёт время браться за Swift всерьёз, или целесообразность его использования всё ещё под большим вопросом?
Мы решили расспросить о настоящем и будущем языка трёх специалистов из крупных компаний, уже использующих Swift и не понаслышке знакомых с темой. На наши вопросы ответили:
- Максим Соколов (Avito);
- Игорь Кашкута (Badoo);
- Егор Толстой (Rambler&Co).
Насколько активно используется Swift в вашей компании?
Максим Соколов
Avito развивает несколько мобильных продуктов. Наша команда работает над тремя мобильными приложениями. Мы активно используем и будем продолжать использовать Swift. Одно из наших приложений полностью написано на Swift и доступно в App Store. Два других мы начинали писать на Objective-C, но на текущий момент весь новый код пишем только на Swift.
Игорь Кашкута
Мы не только используем Swift, но и опубликовали на GitHub часть нашего проекта. Chatto был первой ласточкой, пробой языка в нашей CI инфраструктуре и проекте в целом — не без проблем, конечно, но дело удалось. В дальнейшем мы планируем использовать Swift и в остальных частях приложения.
Егор Толстой
Сейчас на Swift мы разрабатываем два проекта. Один из них, изначально разрабатывавшийся на этом языке, должен в течение месяца появиться в App Store. Второй, Рамблер.Почта, изначально был написан на Objective-C, но после первого релиза в рамках рефакторинга команда начала постепенно переводить его на новый язык.
Что дал этот опыт? С какими подводными камнями пришлось столкнуться? Рекомендуете ли использовать Swift другим, и в каких именно случаях?
Максим Соколов
Использование Swift имеет как преимущества, так и недостатки. К недостаткам я бы отнёс, во-первых проблемы со стороны IDE Xcode — случаются падения компилятора, самого Xcode, может отваливаться подсветка синтаксиса. Во-вторых, сам язык ещё очень молод, иногда не хватает каких-то инструментов: например, в сообществе всё ещё отсутствует адекватный мок-фреймворк, помогающий писать unit-тесты. Очень не хватает старого доброго OCMock, поддержка которого в Swift оставляет желать лучшего.
Некоторые конструкции языка могут существенно влиять на время компиляции, такие проблемы иногда вводят в ступор. Также большой проблемой сейчас является отсутсвие поддержки рефакторинга со стороны Xcode. Нужно учесть предстоящий выход Swift 3.0, где-то ломающий обратную совместимость. Будем надеяться, что Apple сделает шаги для улучшения ситуации.
Но, несмотря на все недостатки, я всё равно рекомендовал бы разработчикам начинать использовать Swift. Apple очень активно его развивает, и мы видим интерес к языку со стороны других крупных компаний, таких, как IBM. Компаниям стоит задуматься об этой инвестиции в будущее, поэтому Avito уже сейчас имеет приложение в App Store, полностью написанное на Swift. Swift помогает нам существенно повысить качество продукта и положительно сказывается на скорости разработки. Строгая типизация языка позволяет нам писать более безопасный код, поведение которого предсказуемо. Новые языковые конструкции, такие, как дженерики, отсутствующие в Objective-C, позволяют по-новому взглянуть на архитектуру приложения в целом и дают возможность писать код, который можно эффективно переиспользовать.
Игорь Кашкута
Мы не сталкивались с чем-либо, что было бы невозможно преодолеть, все проблемы решаемы. Где баг в языке находился (кстати, часто чинится новыми версиями компилятора, они молодцы), где надо было старый код подтюнить, чтобы его можно было использовать в свифте. Но в целом всё идёт достаточно хорошо. Лично я не вижу смысла в том, чтобы начинать новый проект на Objective-C, пишите сразу на свифте. Если только вам не нужен интероп с C++, эту часть всё же надо на objc делать, у свифта интеропа просто нет. Но опять, и это решаемо, можно сделать на objc и сверху нахлобучить свифт.
Егор Толстой
Опыт интересный — во-первых, поймали очень много различных подводных камней, и узнали, как с ними справляться. Во-вторых, поняли, что нужно срочно писать кодогенератор — время, требуемое на ручное создание моковых классов для написания юнит-тестов просто нереальное. Ну и, конечно, как и все остальные, успели огрести проблем со временем компиляции. Сейчас как раз занимаемся его оптимизацией.
Насчет рекомендаций — хороший вопрос. Как и в большинстве других случаев, здесь просто не может быть однозначного ответа. Нужно смотреть на конкретный проект, его команду, требования бизнеса. Если проект очень крупный и долгоиграющий — лично я все еще склоняюсь к Objective-C.
Как вы предполагаете, что будет со Swift в течение ближайшего года — например, произойдёт ли большой рост популярности с выходом версии 3.0? Может ли он оказаться востребованным ещё и за пределами iOS-экосистемы?
Максим Соколов
Я уже могу отметить большую популярность Swift. И в ближайший год мы наверняка увидим применение Swift за пределами мобильной разработки под iOS. Swift является open source-проектом, и мы уже можем наблюдать появление фреймворков для работы, например, с backend«ом и базами данных.
Игорь Кашкута
С моей точки зрения, версия 3.0 будет по-настоящему нормальной версией 1.0 — детские проблемы будут закрыты, ABI устоялось, гайды появились, Package Manager есть, исходные коды приложены. Большого скачка популярности я не ожидаю, язык принципиально не изменится — нет никаких преград, чтобы начать что-то делать уже сейчас. Я ожидаю, что рост будет происходить более плавно, по мере появления новых проектов — кажется, почти не осталось причин начинать что-то новое на Objective-C.
Что касается использования вне iOS (OS X, watchOS и tvOS), то здесь всё не так радужно. С iOS всё понятно, раньше выбора не было, в будущем тоже не будет. У свифта как языка нет никаких «фишек», которые бы побудили разработчиков его использовать. Сравните с другими: Go простой и у него есть горутины; Scala про строгую и гибкую типизацию, но на многолетней базе JVM; Clojure — lisp с интересной идеологией, встроенной в язык, на многолетней базе JVM; JavaScript в виде Node.js позволяет иметь один и тот же код на клиенте и сервере, что открывает путь к изоморфным приложениям + модель программирования в ноде весьма простая и понятная большинству веб-разработчиков + npm, где всё есть. Rust — это такой новый безопасный С++, где всё под контролем, с понятным оверхедом и возможностью использования без рантайма.
Свифт берёт всего понемногу у всех, он очень неплох, но я пока не понимаю, какую нишу он может занять. Мне и самому очень интересно, но всё, что остаётся, — наблюдать.
Егор Толстой
Думаю, что в ближайший год хайп постепенно уменьшится. С другой стороны, сообщество взрослеет, разрабатываются новые архитектурные подходы, компоненты и библиотеки, которые будут упрощать жизнь разработчикам — так что появится больше аргументов в пользу его использования.
Про востребованность за пределами экосистемы пока еще говорить рано, на мой взгляд — время покажет.
4 июня на петербургской конференции Mobius все ответившие выступят с докладами, касающимися iOS-разработки. Один из их докладов будет непосредственно о Swift: Максим Соколов подробно расскажет об использовании в нём дженериков. Если после этого материала вы ощутили, что для вашего проекта настало время использовать Swift — не пропустите:)