Swift 5.10 marca un hito importante en la evolución del lenguaje, estableciendo las bases para Swift 6 y enfocándose en fortalecer la seguridad y eficiencia de la concurrencia. Esta versión trae consigo una serie de mejoras y ajustes que hacen de Swift una herramienta aún más poderosa para el desarrollo de aplicaciones modernas.
Concurrencia Segura: El Protagonista
La característica más destacada de Swift 5.10 es su énfasis en la concurrencia segura. A través de una serie de mejoras en el chequeo de condiciones de carrera en tiempo de compilación, Swift se acerca cada vez más a garantizar que el código concurrente sea seguro y confiable.
1. Carreras de datos diagnosticadas en tiempo de compilación
El modelo de concurrencia de Swift se introdujo en la versión 5.5 del lenguaje. Sin embargo, su adopción pasó por un período de transición por los distintos marcos de Apple y nuestros proyectos.
Con Swift 5.10 se corrigen por completo todos los agujeros de seguridad conocidos en las carreras de datos mediante verificación de concurrencia estricta y completa. Esta comprobación de concurrencia por el compilador hace que nuestro código sea muy seguro, es decir evita que se comparta un estado mutable que pueda originar condiciones de carrera.
2. Permitir a protocolos ser anidados en contextos no genéricos: SE-0404
Ahora podemos colocar protocolos dentro de estructuras, enumeraciones, clases, actores y funciones con la condición de que aquello que contiene el protocolo (el contenedor) no sea genérico.
Para más información vea este post.
3. Dejar Obsoletos: @UIApplicationMainy @NSApplicationMain: SE-0383
Esto alienta a cambiar al atributo @main de propósito general que se introdujo en Swift 5.3.
//Antes:
import SwiftUI
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
// your code here
}
//Ahora:
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
// your code here
}
//En SwiftUI:
@main
struct SandboxApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
4. Refinamiento de la inicialización y desinicialización de actores: SE-0327
Se agregan algunas aclaraciones sobre como se crea y se destruye el estado dentro de los actores y también disminuye el nivel de restricción de algunas reglas.
Esta propuesta contiene una serie de cambios pequeños y específicos para los actores. Por ejemplo, ahora los actores con un inicializador asíncrono se muevan automáticamente al ejecutor del actor cuando se inicialicen todas sus propiedades.
El código a continuación hará que las dos llamadas a print() se ejecuten en subprocesos independiente, posiblemente:
actor Actor {
var name: String
init(name: String) async {
print(name)
self.name = name
print(name)
}
}
let actor = await Actor(name: "Margot")
Conclusión
Swift 5.10 es una versión sólida que demuestra el compromiso de la comunidad de Swift con la seguridad y la eficiencia. Las mejoras en la concurrencia, junto con otras características nuevas, hacen de Swift una herramienta aún más atractiva para el desarrollo de aplicaciones modernas y complejas.
Para saber más sobre las novedades de Swift 5.10 puede consultar la siguiente documentación:
Gracias por leer, si te ha gustado el cntenido puedes dejarme un comentario. Feliz codificación!