Swift Pills

Dosis rápidas de conocimiento sobre Swift y desarrollo en ecosistemas Apple

Swift 6.2 cambia las reglas del juego en concurrencia: ¿será finalmente sencillo para todos?

🎯 Swift 6 prometía seguridad ante condiciones de carrera, pero llegó con una barrera enorme: cientos de errores del compilador que aparecían al activar la concurrencia estricta. Muchos desarrolladores activaban Swift 6, veían el caos de advertencias y volvían atrás de inmediato.

🔄 Swift 6.2 introduce la Approachable Concurrency, un cambio fundamental en cómo el lenguaje trata la concurrencia. En lugar de obligarte a entender actores, el protocolo Sendable y aislamiento global desde el primer momento, ahora el compilador asume que tu código empieza siendo de un solo hilo.

🧵 La filosofía es simple: tu código corre en el hilo principal por defecto. Solo cuando introduces paralelismo de forma explícita, el compilador te pide que pienses en concurrencia. Es una introduccion progresiva en lugar de un muro de errores.

💡 El cambio más importante: las funciones asíncronas no aisladas (nonisolated async) ahora se ejecutan en el actor del llamador por defecto, no en un ejecutor global aleatorio. Esto significa que si llamas a un método async desde @MainActor, ese método permanece en el hilo principal.

⚡ Para salir explícitamente de un actor, Swift 6.2 introduce el atributo @concurrent. Es tu manera de decirle al compilador: «sí, quiero que este código se ejecute de forma concurrente». Sin ese atributo, tu código mantiene el contexto de aislamiento del llamador.

🔧 A nivel de opciones de compilación, se activan cinco características clave:

  • DisableOutwardActorInference: evita que los property wrappers propaguen aislamiento de actor inesperadamente
  • GlobalActorIsolatedTypesUsability: simplifica el uso de tipos aislados a actores globales
  • InferIsolatedConformances: permite conformaciones a protocolos limitadas al contexto del actor
  • InferSendableFromCaptures: infiere automáticamente @Sendable para métodos y key paths
  • NonisolatedNonsendingByDefault: ejecuta funciones async en el actor del llamador

📦 Para proyectos nuevos en Xcode 26, estas características vienen activadas por defecto. Para proyectos existentes, Apple recomienda migrar cada característica de forma individual usando las herramientas de migración automática.

⚠️ Es crucial migrar gradualmente. Si activas todo de golpe, tu código puede cambiar de comportamiento repentinamente. Métodos que antes corrían en hilos diferentes ahora permanecerán en el actor del llamador, lo cual puede afectar el rendimiento si no lo gestionas correctamente.

🎓 El equipo de Swift reconoce abiertamente que Swift 6 llegó demasiado rápido y con demasiadas exigencias para apps móviles, que tienden a ser más simples que software concurrente de propósito general. Swift 6.2 corrige ese rumbo.

📈 Los resultados en producción son claros: proyectos que antes generaban decenas de errores de concurrencia ahora compilan de forma limpia. El número de falsos positivos se reduce drásticamente, y solo aparecen advertencias cuando realmente hay riesgo de condiciones de carrera.

🚀 La estrategia de introducción progresiva define tres fases:

  • Fase 1: Escribe código simple de un solo hilo sin pensar en paralelismo
  • Fase 2: Usa async/await sin errores de seguridad ante carreras de datos
  • Fase 3: Mejora el rendimiento con paralelismo explícito cuando lo necesites

🔍 Para paquetes Swift, la configuración requiere actualizar a swift-tools-version 6.2 y habilitar manualmente las características en la configuración de cada target. El proceso es más manual pero te da control total sobre qué características adoptar.

🎯 La lección fundamental: la concurrencia debe ser una elección consciente, no una carga impuesta desde el primer momento. Swift 6.2 finalmente entiende que la mayoría del código en apps móviles no necesita paralelismo real.

👨‍💻 Si has pospuesto la migración a Swift 6 por la complejidad de la concurrencia, Swift 6.2 es el momento perfecto para empezar. El lenguaje por fin se alinea con cómo realmente escribimos apps. ¿Ya estás preparando tu migración?

Posted in

Deja un comentario