Swift Добавляет Больше Поддержки Дженериков


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

Swift был запущен Apple в 2014 году в качестве более простой альтернативы Objective C. Он включает в себя некоторые из лучших идей из таких языков, как C# и JavaScript, и стремится быть простым в использовании.

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

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

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

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

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

Другие улучшения дженериков включают в себя хэширование стандартных типов индексов библиотек и введение Sequence.compactMap(_:) для замены спорной версии метода Sequence.flatMap и предоставления той же функциональности под другим и потенциально более описательным именем.

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


Добавить комментарий