Saltar al contenido

La ontología de Swift

El mapa mental del lenguaje: el modelo de tipos y valores, protocolos y genéricos, macros y result builders, memoria y ownership, concurrencia estricta, y Swift fuera de Apple.

Swift se presenta al mundo como “el lenguaje de las apps de iPhone” y esa etiqueta le hace un flaco favor. Por debajo hay un lenguaje de sistemas con un sistema de tipos de primer nivel, semántica de valor con copy-on-write, un modelo de concurrencia que el compilador verifica, y desde hace poco un sistema de ownership emparentado con el de Rust. Este track deja las apps a un lado —eso vive en el track de iOS— y se ocupa del lenguaje en sí: por qué está diseñado así y hasta dónde llega.

  • Ver el mapa mental completo del lenguaje Swift.
  • Entender la semántica de valor y el modelo de tipos como eje central.
  • Situar macros, result builders, ownership y concurrencia estricta.
  • Reconocer que Swift es un lenguaje de sistemas, no solo de apps.

El territorio, de un vistazo

Las ideas clave

El valor es el ciudadano de primera

En Swift lo normal es struct, no class. Un valor se copia, no se comparte, y por eso no hay aliasing sorpresa. Copy-on-write hace que esa copia casi nunca cueste lo que parece.

Los protocolos con genéricos

Swift no hereda de clases: compone con protocolos y los combina con genéricos. some y any son dos formas distintas de abstraer, con costes de rendimiento muy distintos.

La concurrencia la verifica el compilador

Desde Swift 6, un data race no es un bug que descubres en producción: es un error de compilación. Actores, Sendable y el aislamiento son parte del sistema de tipos.

El lenguaje se extiende a sí mismo

Property wrappers, result builders y macros permiten construir dentro de Swift cosas que en otros lenguajes exigirían cambiar el compilador. SwiftUI entero es un DSL hecho con esas piezas.

Por qué importa

Swift apuesta a que la seguridad puede ser ergonómica

Hay un eje incómodo en el diseño de lenguajes: cuanto más garantiza el compilador, más papeleo suele exigir. C te deja hacer cualquier cosa y no te protege de nada; Rust te protege de casi todo y te cobra en anotaciones de lifetime y en peleas con el borrow checker. Swift intentó algo difícil: quedarse con buena parte de las garantías sin la ceremonia. Los opcionales eliminan el null sin obligarte a razonar sobre memoria; ARC gestiona la vida de los objetos sin recolector de basura ni lifetimes explícitos; copy-on-write te da semántica de valor sin pagar la copia; y el aislamiento de actores convierte los data races en errores de compilación sin que tengas que anotar cada préstamo. El resultado no es magia y tiene costuras visibles —el retain/release tiene coste, los existenciales hacen dispatch dinámico, la migración a concurrencia estricta ha sido dura para muchos equipos—, pero la apuesta explica casi todas las decisiones del lenguaje. Cuando en el nivel 21 llegues a borrowing, consuming y los tipos no copiables verás la misma tensión llevada al extremo: Swift bajando al territorio de Rust para quien lo necesite, sin obligar a todos a vivir ahí. Entender esa apuesta —seguridad por defecto, control bajo demanda— es entender por qué Swift es como es.

El camino

  • Niveles 1–3 · Fundamentos — el toolchain, tipos y opcionales, el modelo de tipos (structs, enums, protocolos, genéricos), y la concurrencia moderna.
  • Niveles 4–10 · El lenguaje a fondo — sintaxis y control, strings y Unicode, colecciones, opcionales, closures, valor vs referencia y enums avanzados.
  • Niveles 11–18 · Abstracción — protocolos, genéricos avanzados, some/any, property wrappers, result builders, macros y errores tipados.
  • Niveles 19–23 · Memoria y bajo nivel — ARC, copy-on-write, ownership, unsafe e interoperabilidad con C y Objective-C.
  • Niveles 24–28 · Concurrencia — Swift 6 y el aislamiento, actores, AsyncSequence, concurrencia estructurada y actores distribuidos.
  • Niveles 29–39 · Ecosistema y maestría — SPM, testing, servidor, embedded, multiplataforma, el compilador, rendimiento, diseño de APIs y síntesis.

Sitúate en el mapa

  1. Estudia el mapa mental y localiza qué ramas te resultan familiares y cuáles son terreno nuevo.
  2. Abre un proyecto Swift tuyo y cuenta cuántas class hay frente a struct. La proporción dice mucho de tu modelo mental.
  3. Si vienes de otro lenguaje: anota qué esperas que Swift haga como tu lenguaje anterior. Ahí estarán tus sorpresas.
  4. Comprométete con la idea central: valor por defecto, referencia cuando la identidad importa.