Проект Swift в 2023 году

21 ноября 2022

Проект Swift в 2023 году

18 НОЯБРЯ 2022 ГОДА                                                          Джон Макколл

Джон Макколл - инженер команды Apple Swift и член языковой рабочей группы.

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

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


Организация сообщества


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

Эти новые рабочие группы присоединяются к давним рабочим группам Swift on Server и Diversity (Разнообразие), людям становится легче вносить свой вклад, присоединяясь к рабочей группе, посвященной их интересам.

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

 

Обновление основной команды

 

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

 

Развитие языка

 

Языковая рабочая группа сосредоточена на достижении прогресса в пяти основных языковых областях:

  1. Параллелизм. Завершите языковую поддержку для строгой изоляции данных, предоставляемой Sendable и субъектами. Это включает в себя закрытие ряда известных дыр в безопасности потоков, таких как глобальные переменные и некоторые кросс-субъектные вызовы. Она также включает возможность добавления языковых функций для решения некоторых проблем с удобством использования, связанных со строгой изоляцией, например, возможность перемещения значений, не являющихся Sendable, между доменами изоляции в ограниченных ситуациях.
  2. Дженерики. Начните серьезно работать над языковой функцией вариативных дженериков,  реализация которой, как ожидается, займет несколько лет. Первоначально основное внимание уделяется разработке базовой языковой модели и реализации базового компилятора и инфраструктуры среды выполнения для ее поддержки. Одной из первых вех будет предоставление типам кортежей возможности условно соответствовать протоколам, таким как Equatable, когда их элементы соответствуют.
  3. Собственность. (Владение)
  •  Разработайте функции, чтобы дать программистам явный контроль над владением значениями в памяти. Это включает в себя функции для запрета неявных копий, передачи прав собственности между контекстами и явного «заимствования» значений без их копирования.
  • Добавьте базовую поддержку некопируемых типов. Это предоставит новые способы достижения высокой производительности за счет ограничения жизненного цикла критических значений. Эти элементы управления откроют новые способы работы с данными в памяти, сочетая производительность текущих «небезопасных» конструкций с безопасностью функций стандартной библиотеки Swift.

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

    5. Совместимость C++.

  • Напишите документацию, в которой будут изложены концепции дизайна того, как API-интерфейсы C++ можно будет использовать из Swift и наоборот.
  • Стабилизируйте текущие прототипы функций взаимодействия для использования C++ из Swift, которые включают собственные типы значений, тривиальные типы значений, шаблоны API, такие как внешние ссылочные типы и итераторы, а также некоторые фундаментальные вопросы, связанные с методами, указателями, l-значением и r- ссылки на значения.
  • Стабилизируйте текущие прототипы функций взаимодействия для использования Swift из C++, включая то, как типы значений Swift, ссылочные типы и функции предоставляются C++.

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

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

Наконец, языковая рабочая группа планирует завершить ожидаемые языковые изменения для предстоящего языкового режима (поколения) Swift 6. Swift периодически вводит новые языковые режимы, чтобы язык мог развиваться без нарушения совместимости с исходным кодом для существующего кода.

 

Интеграция системы сборки и улучшения 

 

Команды разработчиков компилятора работают над улучшением того, как компилятор взаимодействует с системой сборки и другими вызовами самого себя:

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

 

Реестр пакетов

 

Разработка менеджера пакетов Swift сосредоточена на начале работы над реализацией сервера реестра пакетов с открытым исходным кодом совместно с сообществом. Цель состоит в том, чтобы создать технические компоненты, необходимые для перехода экосистемы пакетов Swift от экосистемы, основанной на системе контроля версий, к единым реестрам, что повысит безопасность и надежность экосистемы. Мы будем работать с проектами сообщества, такими как индекс пакетов Swift, чтобы обеспечить отличное обнаружение пакетов наряду с преимуществами, которые дает реестр.

 

Улучшения реализации

 

Разработчики компиляторов сосредоточены на нескольких улучшениях на уровне реализации:

  • Разработайте синтаксический анализатор Swift, написанный на чистом Swift и функционально-дополненный текущей реализацией C++. Это открывает новые направления в разработке инструментов и в конечном итоге заменит парсер C++.
  • Повысьте производительность проверки типов построителей результатов путем переноса реализации вывода типов на более масштабируемую инфраструктуру, которая поддерживает вывод замыкания с несколькими операторами.
  • Повысьте надежность выполнения кода и зависящих от поиска инструментов, таких как Quick Help и Jump to Definition, особенно в неполном или неоднозначном коде, за счет более тесной интеграции со средством проверки типов.
  • Генерируйте меньше кода во время преобразования функций, устраняя необходимость в элементах преобразования в некоторых случаях, особенно при передаче замыканий в универсальные и импортированные функции.
  • Создавайте меньше кода при копировании и удалении сложных структур и перечислений, интерпретируя компактную кодировку макета типа вместо создания специализированных функций.
  • Добавьте поддержку оптимизатора SIL для новых языковых функций и предсказуемой оптимизации, связанной с временем жизни объектов и копиями. Разрабатывается новый набор низкоуровневых утилит SIL для поддержания инвариантов владения на протяжении всего существующего канала оптимизации. Это обеспечит надежную диагностику и предсказуемую производительность.
  • Перепишите текущие межпроцедурные анализы побочных эффектов и выхода(экранирования) в Swift, заменив текущие реализации C++. Новые реализации обеспечивают более точные результаты и значительно проще.

 

Рабочая группа по документации

 

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

Чтобы способствовать большему количеству качественной документации в экосистеме Swift, инициативы рабочей группы будут двоякими (двойственными, двунаправленными):

  1.  Упростите процесс, чтобы начать писать и публиковать документацию с помощью Swift-DocC. Одна из целей - дать возможность разработчикам создавать документацию без настройки дополнительного плагина.
  2. Расширьте сферу охвата Swift-DocC для поддержки многоцелевых конфигураций проектов и объемного письменного (текстового) контента (материала). Для пакетов, состоящих из нескольких библиотек, создайте поддержку публикации документации для всего пакета, чем для каждой из его отдельных библиотек.

Рабочая группа также поддержит разработку новой книги с открытым исходным кодом «Язык программирования Swift» с целью замены существующего канала публикаций содержимым нового репозитория. Эта работа будет включать в себя определение руководящих принципов для написания отличной документации для языка Swift с долгосрочной целью определения руководящих принципов документации для экосистемы Swift в целом, аналогичных рекомендациям по именованию API.

 

Рабочая группа веб-сайта

 

Новая рабочая группа веб-сайта сосредоточена на улучшении веб-сайта swift.org несколькими способами:

  • Улучшение содержание наиболее посещаемых страниц веб-сайта, включая домашнюю страницу, руководство по началу работы и страницу загрузки. Важно, чтобы эти страницы были интуитивно понятны в использовании и содержали только правильную информацию для достижения этой цели. Рабочая группа также улучшает обнаруживаемость документации, которую часто ищут посетители других разделов веб-сайта.
  • Итерация по дизайну макета и навигации. Рабочая группа планирует заложить основу системы визуального дизайна, которая может помочь сообществу внести свой вклад в конкретные области, такие как направления Swift on Server.
  • Поощрение участия более широкого сообщества Swift в эволюции swift.org, облегчая участие в веб-сайте и документации Swift.
  • Поддержка публикации статей в блогах, ориентированных на сообщество, рационализацию процесса и определение руководящих принципов для таких статей.
  • Продолжение изучения технологий на основе Swift для создания веб-сайта.

 

Рабочая группа Swift on Server

 

Рабочая группа Swift on Server продолжает фокусироваться на продвижении состояния Swift на сервере и Linux, работе с сообществом над созданием высококачественных библиотек и инструментов и повышении осведомленности в отрасли. Данная группа сосредоточена на нескольких областях:

  • Продвижение полного внедрения модели параллелизма Swift в серверной экосистеме, приняв API async/await в качестве стандарта для пользовательских API.
  • Содействие стандартизации функциональности сервера более высокого уровня, включая трассировку, промежуточное программное обеспечение, общие типы HTTP и основные типы серверов маршрутизации/HTTP.
  • Повышение осведомленности о том, как плагины SwiftPM могут быть использованы для улучшения состояния инструментов для сценариев использования серверов, включая развертывание на облачных платформах.
  • Увеличение охвата и соответствия цепочки инструментов, библиотек и инструментов на всех платформах, официально поддерживаемых проектом Swift.
  • Расширение руководств по Серверам, доступных на swift.org.
  • Продвижение поддержки Swift в популярных отраслевых инструментах, таких как Dependabot, GitHub Security Advisory DB и других.

 

Дифференцируемый Swift

 

Продолжаем работу по поддержке приложений AI/ML с помощью Differentiable Swift, сосредоточенная на ряде улучшений:

  • Повысьте надежность, исправив проблемы в дифференцируемом Swift, которые влияют на рабочие приложения по мере их возникновения. Со временем наблюдается все меньше и меньше таких проблем, но в системе отслеживания проблем все еще есть некоторые известные проблемы (многие с простыми воспроизводителями).
  • Значительно улучшите производительность скомпилированного кода с помощью дифференциального Swift. Один пример касается сгенерированного компилятором «обратного прохода» через функцию Swift. В принципе, выполнение этого прохода должно быть почти таким же быстрым, как исходная («прямая») версия функции. В настоящее время обратный проход во многих случаях на порядки медленнее; есть некоторые запланированные оптимизации на следующий год, которые должны сделать обратный проход намного быстрее.
  • Реализуйте улучшения производительности для KeyPath. Хотя key paths не являются строгой частью дифференциального Swift, они становятся чрезвычайно важными при оптимизации строго типизированных моделей для самоанализа. В качестве первого шага мы попытаемся добавить в комплект компилятора мощный набор тестовых заданий key path.

 

Участие


Если вы заинтересованы в участии, есть много способов сделать это.

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

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

Выпущен Swift 5.7!

 

Оригинал статьи

Содержание