El ecosistema de verificación de tipos de Python ha estado dominado durante mucho tiempo por mypy – el verificador de tipos original que pionero la tipificación gradual para Python. Pero la implementación basada en Python de mypy siempre ha tenido dificultades con el rendimiento en bases de código grandes. Ty es la respuesta de Astral a este problema: un verificador de tipos Python y servidor de lenguaje escrito completamente en Rust, diseñado para ser de 10 a 60 veces más rápido que las alternativas existentes.
Astral, la empresa detrás del increíblemente popular linter Ruff, ha aplicado la misma filosofía de rendimiento impulsada por Rust a la verificación de tipos. Ty se basa en la profunda experiencia de Astral con herramientas Python en Rust, aprovechando la misma arquitectura multiproceso y patrones de cómputo incremental que hicieron de Ruff el estándar de la industria para el linting de Python.
Los números hablan por sí solos. En monorepos grandes con cientos de miles de líneas de Python, Ty completa la verificación de tipos inicial en segundos en lugar de minutos. Las verificaciones incrementales después de cambios en archivos son efectivamente instantáneas, lo que hace factible ejecutar la verificación de tipos en cada guardado de archivo incluso en los proyectos más grandes. Para los desarrolladores que han tolerado los tiempos de verificación de varios minutos de mypy, Ty representa una mejora transformadora en la experiencia del desarrollador.
¿Cómo Logra Ty Mejoras de Velocidad Tan Dramáticas?
La ventaja de rendimiento de Ty proviene de una combinación de decisiones arquitectónicas y elecciones de implementación, no de una sola optimización.
graph LR
A[Archivos Fuente Python] --> B[Descubrimiento Paralelo de Archivos]
B --> C[Análisis AST en Rust]
C --> D[Motor Incremental Salsa]
D --> E{¿Resultado en Caché?}
E -->|Sí| F[Reutilizar Información de Tipo Cacheada]
E -->|No| G[Inferencia y Verificación de Tipos]
G --> H[Almacenar en BD Incremental]
F --> I[Recopilar Diagnósticos]
H --> I
I --> J[Emitir Resultados]
El motor de cómputo incremental basado en Salsa es clave para el rendimiento de Ty. Rastrea dependencias entre archivos y definiciones de tipos a un nivel granular. Cuando un archivo cambia, solo se re-ejecutan los cálculos que dependen de las partes modificadas, en lugar de volver a verificar todo el proyecto. Este es el mismo enfoque utilizado por el sistema de compilación incremental del compilador de Rust.
¿Cómo se Compara Ty con Otros Verificadores de Tipos Python?
El panorama de verificación de tipos de Python tiene varios actores establecidos, cada uno con diferentes características de rendimiento y conjuntos de funciones.
| Característica | Ty | mypy | pyright | pyre | pytype |
|---|---|---|---|---|---|
| Lenguaje | Rust | Python | TypeScript | OCaml | Python |
| Velocidad | 10-60x más rápido | Línea base | 5-10x más rápido que mypy | Moderado | Lento |
| Servidor LSP | Integrado | Separado | Integrado | Separado | Separado |
| Soporte PEP 695 | Sí | Parcial | Parcial | No | No |
| Sistema de plugins | Planificado | Extenso | Limitado | Mínimo | Mínimo |
| Soporte monorepo | Nativo | Via configuración | Via configuración | Nativo | Básico |
| Configuración | pyproject.toml | mypy.ini, setup.cfg | pyproject.toml | Config personalizada | setup.cfg |
El diseño desde cero de Ty en Rust le permite adoptar las últimas características del sistema de tipos de Python sin las restricciones de compatibilidad heredadas que ralentizan la evolución en herramientas más antiguas. Su servidor LSP integrado elimina la necesidad de configuración separada del servidor de lenguaje, proporcionando una experiencia de cadena de herramientas unificada.
¿Qué Características del Sistema de Tipos Soporta Ty?
Ty apunta a una cobertura integral del sistema de tipos en evolución de Python, incluyendo tanto características establecidas como emergentes.
| Característica | Estado | Referencia PEP |
|---|---|---|
| Anotaciones de tipo básicas | Completo | PEP 484 |
| Tipos genéricos | Completo | PEP 484, PEP 695 |
| Tipos unión (X | Y) | Completo | PEP 604 |
| Protocolos (subtipo estructural) | Completo | PEP 544 |
| TypedDict | Completo | PEP 589 |
| Tipos Literal | Completo | PEP 586 |
| TypeVarTuple / ParamSpec | Completo | PEP 646, PEP 612 |
| Estrechamiento de tipos | Completo | – |
| Decorador de sobrecarga | Completo | PEP 484 |
| Tipo Self | Completo | PEP 673 |
| TypeIs (estrechamiento de tipos) | Completo | PEP 742 |
| Alternativas TypedDict | Completo | PEP 728 |
| Características de tipo Python 3.14 | Planificado | PEPs más recientes |
Ty sigue de cerca los últimos desarrollos de PEP, con el objetivo de soportar nuevas características de tipo poco después de su aceptación. Este ciclo de adopción rápida asegura que los proyectos que utilizan las versiones más recientes de Python puedan beneficiarse de las características modernas del sistema de tipos con soporte completo del verificador de tipos.
¿Cómo se Integra Ty con los Flujos de Trabajo del Editor?
El servidor LSP integrado de Ty proporciona una experiencia de desarrollo fluida en todos los editores e IDE principales.
| Editor/IDE | Método de Integración | Características LSP Clave |
|---|---|---|
| VS Code | Extensión LSP | Diagnósticos en tiempo real, autocompletados |
| Neovim | Cliente LSP integrado | Errores en línea, hover, ir a definición |
| JetBrains | Plugin LSP | Integración IDE completa |
| Helix | LSP integrado | Configuración automática |
| Sublime Text | Plugin LSP | Diagnósticos, autocompletados |
| Emacs | eglot/lsp-mode | Soporte LSP completo |
El servidor LSP proporciona diagnósticos en tiempo real mientras escribe, autocompletados que respetan restricciones de tipo, ir a definición y buscar referencias con navegación consciente de tipos, información al pasar el cursor con tipos inferidos y mensajes de error en línea con correcciones sugeridas.
FAQ
¿Qué es Ty? Ty es un verificador de tipos Python y servidor de lenguaje escrito en Rust por Astral, diseñado para ser 10-60x más rápido que herramientas existentes como mypy y pyright. Proporciona verificación de tipos en tiempo real con integración IDE.
¿Cómo logra Ty su velocidad en comparación con mypy? Ty está escrito en Rust y utiliza una arquitectura multiproceso con compilación incremental, almacenamiento en caché de AST y análisis paralelo de archivos. Procesa archivos de forma independiente utilizando un modelo de cómputo incremental basado en Salsa.
¿Ty soporta completamente las anotaciones de tipo Python? Ty apunta a un soporte casi completo del sistema de tipos de Python, incluyendo genéricos, sobrecargas, Protocolos, TypedDicts, tipos Literal y las últimas especificaciones PEP. Sigue el PEP 695 (sintaxis de parámetros de tipo) y estándares posteriores.
¿Puede Ty reemplazar a mypy en proyectos existentes? Sí, Ty está diseñado como un reemplazo directo. Soporta configuración compatible con mypy y puede integrarse en pipelines CI/CD y flujos de trabajo de editores existentes. Muchos proyectos pueden cambiar simplemente modificando su comando de verificación de tipos.
¿Ty incluye una implementación del protocolo de servidor de lenguaje? Sí, Ty incluye un servidor LSP integrado que proporciona verificación de tipos en tiempo real, autocompletados, ir a definición, buscar referencias, información al pasar el cursor y diagnósticos de errores en línea en cualquier editor compatible con LSP.
Lecturas Adicionales
- Repositorio de GitHub de Ty – Código fuente, problemas y documentación
- Ruff (Linter Python de Astral) – El proyecto hermano de Ty para linting ultrarrápido
- Documentación Oficial de Mypy – El verificador de tipos Python original para comparación
- Guía de Verificación de Tipos de Python – Documentación oficial de tipificación de Python
- Framework de Cómputo Incremental Salsa – El framework Rust que impulsa el motor incremental de Ty
無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分!