wandres.dev
ONTOLOGÍA · El mapa de Swift

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.

⏱ 12 min

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.

🎯 Al terminar esta lección sabrás
  • 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

mindmap
root((Swift))
  Tipos
    Value y reference
    Structs y enums
    Protocolos
    Genericos
    some y any
  Sintaxis
    Control de flujo
    Opcionales
    Closures
    Errores
  Metaprogramacion
    Property wrappers
    Result builders
    Macros
  Memoria
    ARC
    Copy on write
    Ownership
    Unsafe
  Concurrencia
    async y await
    Actores
    Sendable
    Distributed
  Plataforma
    SPM
    Testing
    Servidor
    Embedded
    Compilador

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.