WWDC 2019: Черный стриж

21

В “яблочной” экосистеме грядут перемены. Скорее всего, радикальные. Для пользователя программа – это её пользовательский интерфейс, UI. До SwiftUI, с 1988 и до наших дней, в NeXTSTEP и в её потомках процесс создания UI оставался, в основном, тем же. И вот… Swift, которому как раз в эти дни исполняется 5 лет, действительно превращается в “гражданина первого сорта” в его вселенной. Когда-нибудь это должно было произойти, на нем уже сейчас пишут бóльшую часть программного обеспечения для macOS и iOS, а в относительно новых системах (tvOS и watchOS), почти без вариантов используется он.

Язык вырвался за пределы “яблочной” экосистемы, взлетел на самые первые позиции в чартах и даже успел опуститься в них на несколько пунктов – то есть, состоялся.

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

Года через два или три UI подавляющего большинства программ для операционных систем Apple будет создаваться с помощью SwiftUI. Чтобы это предсказание не сбылось, я даже не знаю что должно произойти. Что-то вроде конца света, ядерного апокалипсиса, второго пришествия или возвращения в Apple Скотта Форстолла в 2021 году (как планировал Стив).

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

Реальное его вторжение в мир случится осенью, после приземления (приводнения?) Каталины.

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

А теперь поговорим о том, что такое SwiftUI, придирчиво и беспристрастно…

Продолжение серии про WWDC 2019, предыдущие части здесь:

Первая часть: WWDC 2019: Возвращение “тёрки для сыра”.

Кто ты, Черный Стриж?

Это очень разноплановая сущность. Это и средство для создания и совершенствования пользовательских интерфейсов для всех “яблочных” платформ, и декларативный диалект Swift, и инфраструктура для поддержки всего этого встроенная в Xcode 11 и macOS 10.15, и долгожданная замена играм с запредельным энергопотреблением: теперь они не нужны.

Есть более увлекательный и экологически чистый способ получить кайф. Создавай. Миры. Сам.

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

Специально для SwiftUI в списке редакторов Xcode 11 появился Editor and Canvas. В сети я уже видел слово “канвас”, в роли перевода второй части этого названия. Обычно я руками и ногами “за” появление новых терминов в русском языке, заимствования обогащают язык и позволяют выражать смыслы более точно. Но в данном случае “холст” лучше. Полезные ассоциации, подтекст – все это работает в нужном направлении.

Декларативный диалект Swift – иносказание. Это обычные Swift-файлы, во всех магических проявлениях в “редакторе-и-холсте” виновны фреймворк SwiftUI (на самом деле, комплекс из нескольких фреймворков, извините за анатомический реализм) и особенности Swift 5.1. И еще что-то, встроенное в Xcode 11. Подробности на это ресурсе, видимо, неуместны.

Традиционное приложение для, например, iOS – это исходные файлы на разных языках (C, C++, Objective-C, Objective-C++, JavaScript, Swift и т.п.) и nib-файлы, с расширениями “xib” или “storyboard”, где в “засушенном” виде хранятся объекты интерфейсных элементов.

SwiftUI – это нечто параллельное традиционным ценностям. В SwiftUI интерфейс – Swift-файл или файлы. Холст в Editor and Canvas отображает, в режиме реального времени, все изменения исходного кода в описании интерфейса. В статике, но реалистично, как все это и выглядело бы в реальной программе если бы её построили прямо сейчас.

Холст не только изображает написанное в swift-файле. Элементы нарисованного UI живые, их атрибуты и параметры (цвет, прозрачность, форму, шрифт и много чего еще) с тем же успехом можно редактировать на холсте, как если бы это был графический редактор. Как в Interface Builder. При этом, все эти изменения синхронно отображаются в коде. Отличный способ изучения возможностей декларативного диалекта (огромного набора структур из которых в SwiftUI собираются интерфейсы).

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

Подробнее про “что это” можно узнать на портале developer.apple.com.

SwiftUI превратит нынешние программы в бесполезный хлам?

Нет. Это было бы равносильно выстрелу себе в висок. Apple (и взаимно поглотившая её NeXT) не первый год в софтверном бизнесе, и отлично понимают что к чему.

Тем более что SwiftUI – технология новорожденная. Её подвергали всевозможным тестам, как космонавта, её пытали самыми немыслимыми пытками – но с чем он (UI – интерфейс, то есть “он”) встретится в реальной жизни можно узнать только попробовав.

В софтверном бизнесе в актуальной версии программ принято поддерживать, помимо актуальной мажорной версии системы, еще и версию N-1. Или N-1 и N-2. Например, если программа написана для macOS 10.15, она должна работать в macOS 10.14, без каких-то функций которые в X.14 недоступны, но корректно и предсказуемо. Это N-1. Поддержка N-2, то есть macOS 10.13, еще сложнее. Никто не запрещает программе работать в более старых системах (если для этого нет веских причин), её совместимость с ними просто не проверяют, ничего личного – это трудоемко и недешево.

В наше время мажорные версии операционных систем выходят каждый год. В ближайшие год или два нашествие SwiftUI маловероятно, он поддерживается только в macOS 10.15 и выше.

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

Все герои сегодняшнего дня остаются на своих местах: Objective-C, Interface Builder и прочие хорошие ребята. Но дорога в будущее проходит мимо них. Они останутся здесь.

С чем-то расставаться грустно. Но едва ли кто-то пожалеет об утрате AutoLayout, или Cocoa Bindings. В SwiftUI то что они делали делается проще, гибче и элегантнее.

Дежавю

Вводная лекция про SwiftUI для разработчиков началась с примера его применения. Это было увлекательно, захотелось немедленно все это попробовать, пощупать пределы всей этой невероятной магии (моя техника не потянет, увы) – вместо подробного рассказа о том что это, зачем и почему.

Об основах была другая лекция.

А ведь все это уже было. В конце 80-х и в начале 90-х Стив, в смокинге с галстуком типа “бабочка” (не путать с клавиатурой этого типа, не к ночи будь она помянута) вызывал у слушателей бурный восторг и иллюзию бесконечной легкости разработки программ этими средствами.

NeXTSTEP и в самом деле был самым мощным инструментом того времени, его талантов хватило на тридцать с лишним лет (Cocoa, Cocoa Touch, и всякие tvOS и watchOS – его современные версии). Бад Трибл (один из ключевых разработчиков первого Mac’а и его ОС, программирующий руководитель проекта NeXTSTEP) и Стив Джобс – гении, если бы они создали только эту среду разработки и её библиотеки, они вошли бы в историю.

Но иллюзия бесконечной легкости нанесла NeXTSTEP огромный, почти фатальный, ущерб.

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

Ущерб оказался не фатальным, но речь не о том.

SwiftUI – это безумно интересно, увлекательно, революционно (да, это не первая в мире реализация подобных идей, но и Apple II не был первым персональным компьютером, ни Mac, ни даже Lisa не были первыми компьютерами с графическим пользовательским интерфейсом, iPhone был далеко не самым первым смартфоном – можно не продолжать?), но…

Впрочем, на это раз Apple подготовилась основательно. SwiftUI создавался не один год, а программирующая публика 2019 года на порядок порядков мудрее чем публика 1988-89 годов.

Как и в NeXTSTEP, по мере усложнения интерфейса работать с SwiftUI становится трудней, число ошибок и неудачных решений растет экспоненциально. Как и NeXTSTEP, ему надо учиться, пробовать и ошибаться. Принципы просты и понятны, но есть еще и конкретика.

Продолжение следует

Предлагаем подписаться на наш канал в «Яндекс.Дзен». Там вы сможете найти эксклюзивные материалы, которых нет на сайте.

Лучший комментарий

 
Авторизуйтесь Чтобы оставить комментарий