some или any: один скрытый тип против коробки 📢

🧵 some P — это ровно один конкретный тип, зафиксированный на этапе компиляции и просто скрытый от вызывающего. any P — коробка, содержимое которой может отличаться от вызова к вызову. Отсюда всё остальное. some даёт идентичность типа: компилятор знает, что внутри, боксинга нет. any даёт гибкость: разные типы на разных вызовах, гетерогенные коллекции — ценой коробки и диспетчеризации через witness table.

⚠️ Формулировка, которую стоит поправить: «some даёт compile-time specialization» — это не гарантия языка. Гарантия — идентичность типа. Специализация же результат работы оптимизатора: надёжна внутри модуля или с @inlinable, но не через границы модулей. Мелочь для точности: some в позиции параметра (SE-0341, Swift 5.7) — это сахар над неявным дженериком, и работает он в противоположную сторону: конкретный тип выбирает вызывающий, а не вызываемый.

#Swift #AdvancedSwift #OpaqueTypes #Generics #iOS

some или any: один скрытый тип против коробки 📢 | Сетка — социальная сеть от hh.ru