Сгенерировано Grok

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

Довольно далеко.

Полный список зарезервированных ключевых слов Swift можно посмотреть в репозитории swift-syntax с открытым исходным кодом

Современные языки программирования устроены иначе. Поговорим о том, насколько вредоносной является диктаторская система управления Swift, и посмотрим, насколько серьезной оказалась ситуация.

Но сначала — краткий экскурс в историю Swift.

Краткая история Swift

Swift был любительским проектом Криса Латтнера — создателя LLVM (Low Level Virtual Machine — низкоуровневая виртуальная машина) и старшего директора по инструментам разработки в Apple. В начале 2010-х годов по вечерам и выходным он закладывал основы языка, завоевавшего сегодня признание и популярность во всем мире.

Топ-менеджмент Apple был тогда представлен в основном разработчиками OG NeXT. Все они были в дружеских отношениях с Джобсом и использовали язык Objective-C. Потребовалось немало внутриполитических усилий, чтобы получить зеленый свет для Swift.

Пробивать дорогу для нового проекта приходилось в условиях традиционной для Apple секретности. До анонса конференции WWDC 2014 только 250 сотрудников компании знали о языке, который в конечном итоге изменит их кодовые базы.

В чем заключалось видение Латтнера?

Простота составных компонентов. Поэтапное представление информации. Исключение неопределенного поведения.

В следующем 2015 году Латтнер добился немыслимого: убедил вторую по секретности компанию в мире открыть исходный код Swift.

Став общедоступным, Swift прошел многолетний путь развития, на протяжении которого управлялся тремя заинтересованными сторонами, сдерживавшими друг друга:

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

В 2017 году Крис ушел из Apple и занялся исследованиями в области искусственного интеллекта. Приятели Тима Кука по MBA начали вносить свои доработки в Swift, готовя его к следующему эволюционному этапу.

Swift превратился в гигантский, суперсложный набор особых кейсов, особого синтаксиса, особых сущностей…
Крис Латтнер, 2024

К 2024 году этот язык пришел с вышеупомянутыми 217 ключевыми словами. Они не являются ни простыми, ни составными.

Без твердой руки Латтнера Swift попал в затруднительное положение, оказавшись между двумя противоборствующими сторонами: сообществом разработчиков открытого программного обеспечения и Apple Inc.

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

Apple Inc. является лидером проекта и выступает в роли его арбитра. Лидер проекта осуществляет назначения на руководящие должности.
Swift.org

Как управлять языком программирования

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

У каждого языка есть свои правила выбора, проектирования и реализации изменений, функций и расширений. Это очень важно для обеспечения стабильности, согласованности, совершенствования и совместимости с предыдущими версиями. Язык, используемый миллионами разработчиков, должен гарантировать им возможность зарабатывать на жизнь.

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

Python: проект великодушного пожизненного диктатора 

Python был создан Гвидо ван Рассумом в 1990 году (и назван в честь британского комедийного шоу «Monty Python»). Гвидо был первым BDFL (benevolent dictator for life — великодушный пожизненный диктатор). Титул BDFL считается невероятно крутым в мире свободного ПО (и, по сути, является эвфемизмом для обозначения «ведущего специалиста по сопровождению»). В 2018 году жаркие дебаты о выражениях присваивания привели к уходу Гвидо со своего поста.

Сегодня Python управляется координационным советом из 5 инженеров, которых ежегодно избирают около сотни сопровождающих специалистов открытого исходного кода. Изменения в Python вносятся через PEP (Python Enhancement Proposal — документ, включающий предложения по совершенствованию языка). Предложения обсуждаются сообществом разработчиков открытого исходного кода. Последнее слово остается за координационным советом.

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

Rust: проект с открытым исходным кодом, управляемый сообществом

Изначально Rust был личным проектом Грейдона Хоара. Новый язык был одобрен компанией Mozilla, в которой работал Хоар, и в итоге получил поддержку Rust Foundation — некоммерческой организации, сформированной AWS, Huawei, Google, Microsoft и Mozilla.

Изменения в языке Rust приветствуются сообществом разработчиков ПО с открытым исходным кодом и обсуждаются в рамках процесса RFC (request for comments — предложения для обсуждения). При этом команды Rust Foundation руководят такими направлениями, как язык, компилятор и инструменты разработки.

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

Каждое важное решение в Rust начинается как предложение для обсуждения (RFC). К обсуждению предложения приглашаются все желающие, чтобы выработать общее понимание компромиссов. Хотя иногда это бывает очень трудно, но такое обсуждение в сообществе — секрет качества Rust.
основная управляющая команда Rust

Kotlin: проект с открытым исходным кодом, поддерживаемый корпорацией

Kotlin был создан  в 2011 году JetBrains — разработчиком IDE, который рассчитывал увеличить продажи копий IntelliJ, попутно предлагая пользователям другие инструменты для разработчиков. В 2017 году Google объявила о поддержке Kotlin для Android.

Kotlin управляется Kotlin Foundation — организацией, основанной совместно Google и JetBrains. Совет директоров Kotlin Foundation назначает ведущего дизайнера языка, который, по сути, является старшим инженером JetBrains. Члены сообщества могут представить на всеобщее обсуждение KEEP (Kotlin evolution and enhancement — предложения по развитию и совершенствованию языка), а разработчики — протестировать экспериментальные API до их окончательной доработки.

Дизайн языка отливается в камне, но этот камень достаточно мягкий, и, приложив некоторые усилия, мы можем впоследствии изменить его форму.
дизайн-команда Kotlin

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

Факторы стимулирования развития языка

Управление любым языком программирования базируется на согласовании факторов стимулирования его развития. Участниками управленческого процесса являются три основные силы:

  1. Разработчики, ориентированные на конечного пользователя и использующие язык ежедневно.
  1. Сообщество, представляющее (и реализующее) предложения по языку.
  1. Руководящая группа, за которой остается последнее слово.

Разработчики, ориентированные на конечного пользователя, просто хотят работать с эффективным языком. Язык — их стимул, и они голосуют за него своими клавиатурами. Исчисляемая миллионами, эта когорта наименее влиятельная, что объясняется чрезвычайно высокой стоимостью перехода на другой язык: большинство разработчиков не хочет отказываться от своего многолетнего опыта.

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

  • RDD (resume driven development — фокусировка на развитии своего резюме) — подход, подталкивающий инженеров к участию в дискуссиях только для того, чтобы повысить личную конкурентоспособность (между тем, тяжелая работа — это тяжелая работа);
  • байкшеддинг — распространенная модель поведения, заставляющая разработчиков идти по пути наименьшего сопротивления, то есть сосредоточиться не на техническом оформлении предложения, а на таких мелочах, как синтаксис и именование.

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

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

Так, в Python и Rust она формируется из наиболее влиятельных членов сообщества, которые ориентируют свой несовершенный набор стимулов на что-то «наиболее полезное для языка».

Компании, управляющие языком Kotlin, руководствуются мотивом прибыли. В случае JetBrains речь идет о росте продаж IDE, в случае Google — об увеличении численности и производительности Android-разработчиков.

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

Swift: проект пожизненного корпоративного диктатора

Apple и Swift создают худший из миров.

Apple однозначно является диктатором Swift. Компания платит зарплату большинству членов основной команды разработчиков и имеет право произвольно назначать членов руководства проекта.

Самый главный стимул Apple — максимизация прибыли акционеров.

В какой-то степени этот меркантильный интерес объединяет компанию Apple с когортой миллионов iOS-разработчиков. Совершенный язык для них означает больше iOS-инженеров, а значит, больше приложений, а значит, больше продаж устройств и выручки от магазинов.

Но неуемное стремление к прибыли ставит эти две силы в опасную конфронтацию с сообществом разработчиков, заинтересованным в продвижении языка, а также с основной командой Swift.

Swift 5.1 — канонический пример того, как Apple наплевать на сообщество. В этой версии появились непрозрачные типы результатов с some, неявные возвраты и обертки свойств. Были даже внедрены конструкторы функций в компилятор без какого-либо процесса эволюции!

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

В результате Swift UI выглядит немного лучше, чем при явном return View. Он стал понятнее без необходимости добавлять дочерние представления к родительскому результату. Но эти особенности также привнесли сложность и магию компилятора во весь язык.

Документ «Многопоточность в Swift» (Swift Concurrency Manifesto) был написан Крисом Латтнером в 2017 году. Однако внедрение нового UI-фреймворка в 2019 году стало более приоритетной задачей при распределении ресурсов команды Swift, что привело к задержке реализации многопоточности в Swift на несколько лет — до 2021 года.

Наследие Латтнера

Вернемся к философии дизайна Криса Латтнера и сравним ее с современным Swift:

  • Простота составных компонентов — cложные функции, которые не годятся в качестве составных компонентов).
  • Исключение неопределенного поведения — конструкторы результатов и макросы?!

Несмотря на то, что Латтнер покинул Apple в 2017 году, он оставался в основной команде Swift до 2021 года. Причина его ухода заключалась в пессимистичном прогнозе развития Swift:

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

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

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

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

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

Apple на словах поддерживает свое сообщество разработчиков, делая вид, что учитывает их предложения. Однако руководство компании обычно продвигает собственные предложения: ему нужно выпускать фреймворки.

Стратегические цели, такие как выпуск оригинальных UI-фреймворков и обеспечение кроссплатформенной функциональности, которые укрепляют закрытую экосистему Apple, навсегда останутся приоритетными. Кого волнует, что это раздражает каких-то ноющих ботаников?

Технический долг и компиляторы

Крис Латтнер неоднократно рассказывал в подкасте о техническом долге, связанным с компилятором. Эта проблема была неизбежна еще на ранних этапах, когда его крошечная команда успешно обеспечивала счастье миллионов разработчиков, переводя всю их среду разработки с Objective-C и со Swift 2 на 3.

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

Современный Swift — раб прихотей командно-приказной MBA-клики Apple, которая ценит секретность и пренебрегает вкладом сообщества. Независимо от влияния Латтнера или даже от неустанного стремления к мастерству, требуемого Джобсом, все сводится к тому, чтобы предложить новейший запатентованный механизм получения прибыли.

Apple — убийца Swift?

Apple не ведет себя неразумно по отношению к Swift, учитывая структуру стимулов компании. Оценим текущую ситуацию:

  • Трудно поспорить с тем, что SwiftUI невероятно эффективен.
  • С точки зрения бизнеса, выпуск декларативного UI-фреймворка к 2019 году был необходим, чтобы выдержать соперничество с быстро растущими кроссплатформенными конкурентами React Native и Flutter.
  • Объединение платформ (iOS, macOS, watchOS, TVOS, а теперь и VisionOS) также было важной стратегической задачей, которая укрепила экосистему на всех Apple-устройствах.
  • Крейг Федериги (старший вице-президент по разработке ПО Apple. — Примеч. переводчика), под руководством которого усложнялся язык, отдавал отчет в своих действиях: это было необходимым компромиссом. Как всегда, выгода для бизнеса превалирует над интересами странноватых противников автоматизации, жалующихся на исключения в компиляторе при проверке типов.

Есть ли надежда для Swift?

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

Swift заимствует идеи из модели Rust — специализированные руководящие группы (steering groups) и рабочие группы (workgroups), куда входят не только сотрудники Apple.

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

Немного забавно, что компании нужна целая руководящая группа для получения опыта от участников комьюнити («Contributor Experience»). Латтнер назвал это слабым местом.

Акцент на использовании Swift за пределами экосистемы Apple вселяет надежду на то, что руководство Apple начнет видеть «лес» отличного языка программирования за «деревьями» оригинальных фреймворков. Сейчас создана руководящая группа по платформам, занимающаяся внедрением Swift на Windows и Arduino.

Внутри компании Apple Swift используется на некоторых собственных бэкенд-системах, обрабатывая миллионы запросов в секунду. Хотя это не совсем альтруистично, инвестиции в рабочую группу «Swift on Server» довольно внушительны.

Наконец, Apple работает над переписыванием Foundation в виде пакета Swift с открытым исходным кодом, который одинаково удобно переносится на все платформы. Многие новые библиотеки, такие как AsyncAlgorithms, также поставляются в виде пакетов, а не привязаны к ОС, как стандартная библиотека.

Swift далеко отошел от первоначального видения простых составных компонентов; но язык еще может достичь своей цели — стать лучшим в мире языком программирования общего назначения.

Очень надеюсь, что так и будет.

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Jacob Bartlett: Apple is Killing Swift

Предыдущая статьяis-A против has-A
Следующая статьяC++: полное руководство по explicit