- Unison es un lenguaje de programación funcional basado en una estructura que identifica las definiciones de código por su contenido (hash), no por su nombre), replanteando por completo la forma de almacenar, versionar y distribuir código
- Todo el código se guarda no en archivos de texto sino en una codebase (BD), y los nombres se tratan solo como etiquetas, por lo que problemas como colisiones de nombres/archivos o conflictos de refactorización desaparecen de forma estructural
- A través de UCM (Unison Codebase Manager) se realizan altas, eliminaciones, movimientos, cambios de nombre, pruebas y ejecución de definiciones, y se ofrece un ecosistema de herramientas colaborativas conectado con LSP, UCM Desktop y Unison Share
- Además de funciones del lenguaje como un sistema de efectos basado en Abilities, cálculos diferidos y pattern matching estructural, se expande hacia un modelo integrado donde dentro del mismo programa se definen tanto la lógica de la aplicación como el despliegue en la nube (Cloud/BYOC)
- Gracias a su estructura basada en hashes, características como la eliminación de compilación duplicada, menos conflictos de versión y exploración estática de referencias pasan a ser propiedades básicas, ofreciendo una experiencia coherente de desarrollo distribuido que incluye Share, Cloud, Projects y el sistema de Branch
Resumen del lenguaje Unison
- Administra definiciones con una estructura de identificación basada en contenido (content-addressable code), por lo que aunque el nombre sea el mismo, si el contenido es distinto se consideran definiciones completamente separadas
- Sin necesidad de recompilar, con mínima fricción en la evolución de APIs y estabilidad total de referencias
- La codebase se mantiene como una BD basada en SQLite y el código, los nombres y la documentación se almacenan todos como datos
- Exploración de la estructura con comandos de UCM como
ls y view
- Los archivos de texto son solo una interfaz para editar; la única fuente de verdad real es la BD
- Las colisiones de nombres, los conflictos al fusionar archivos y la gestión de estructura del repo se reducen a conceptos obsoletos
Funciones del lenguaje
- Abilities: función para controlar efectos como IO y Exception mediante el sistema de tipos
- Pattern matching estructural: compone el flujo de control descomponiendo tipos estructuralmente
- Cálculos diferidos (Delayed computations): expresa explícitamente la evaluación no estricta
- Ofrece tipado estático fuerte + inferencia de tipos rica + kind-checking
Entorno de desarrollo y toolchain
- UCM (Unison Codebase Manager)
- Creación, eliminación, cambio de nombre, pruebas y ejecución de definiciones
- Integra en el lenguaje una gestión de versiones similar a Git como proyectos, branches, clones y merges
- UCM Desktop
- Exploración de la estructura de la codebase, navegación de definiciones con clics y renderizado de documentación
- Soporte LSP
- Permite usar funciones de IDE en la mayoría de los editores populares
- Unison Share
- Hub central de código: hosting de proyectos, búsqueda, revisión, contribuciones (=Pull Request), búsqueda basada en tipos
- Como todas las definiciones se basan en hash, las referencias siempre se pueden seguir como hipervínculos
Modelo de despliegue: Unison Cloud & BYOC
- Con el mismo lenguaje se escribe tanto la lógica de la aplicación + definición de infraestructura y se despliega directamente
- Sin YAML, Helm ni protocolos RPC complejos, se pueden componer sistemas distribuidos solo con “código”
- Con BYOC (Bring Your Own Cloud) también es posible ejecutar el stack de Cloud sobre una infraestructura propia de contenedores
- Incluye almacenamiento con seguridad de tipos como OrderedTable, soporte para Daemon y orquestación automática
Ejemplo: Guessing Game
- Ejemplo simple de CLI que aprovecha Abilities (IO, Exception)
- Forma en la que se combinan naturalmente elementos del lenguaje como Random, console IO, pattern matching y cálculos diferidos
Ecosistema y comunidad
- Soporte para contribuciones, revisiones y cuentas organizacionales a través de Share
- Búsqueda en todo el ecosistema basada en tipos y provisión de servidor MCP para agentes de IA
- Trabajo en curso para C FFI
- Expansión de funciones de productividad colaborativa como visor de diff estilo Git y comentarios en branches
Historia principal (resumen)
- 2018: fundación de Unison Computing
- 2019: primer lanzamiento alfa
- 2021: migración de la codebase a SQLite (reducción de 100x)
- 2021: lanzamiento público de Unison Share
- 2022~2024: LSP, Projects, kind-checking, Pull Request, Cloud GA
- 2025: Desktop App, optimización masiva del runtime, servidor MCP, soporte BYOC
- Nov 2025: lanzamiento oficial de Unison 1.0
FAQ
- ¿Por qué un lenguaje nuevo?
- El modelo de código basado en hashes es casi imposible de portar a lenguajes existentes como un addon
- Como el almacenamiento de código, la gestión de versiones, el despliegue y la colaboración derivan naturalmente de esta idea, era necesario diseñarlo como un lenguaje nuevo desde el inicio
- ¿Casos de uso reales?
- Todo Unison Cloud está escrito en el propio Unison y está en operación
- Se ha construido un flujo de trabajo de nivel comercial para colaboración entre organizaciones/equipos y desarrollo de aplicaciones distribuidas
- Preocupación por dependencia de proveedor: es un lenguaje open source, puede desplegarse libremente con Docker, etc., y soporta BYOC
- Forma de colaboración: soporta organizaciones, tickets, code review, PR, etc., y los conflictos solo ocurren a nivel de definición
- Gestión de versiones: ofrece funciones propias de proyectos, branch, push, pull y merge sin Git
- Sin restricciones de IDE: se puede usar una variedad de editores gracias al servidor LSP
- Interoperabilidad con otros lenguajes: C FFI en desarrollo
- Acceso a codebases sin archivos: se puede explorar la estructura con comandos CLI (UCM) o con la app Desktop
1 comentarios
Opiniones de Hacker News
He estado siguiendo Unison desde hace muchísimo tiempo. Desde la época del blog personal de Paul, así que ya van más de 10 años. Este lanzamiento 1.0 es un hito enorme, pero sinceramente me deja un poco decepcionado
Me gustan mucho los lenguajes de programación, así que también he visto crecer a lenguajes como Rust, Go y Zig, y siento que Unison tiene poca capacidad de expansión del ecosistema para el nivel de madurez que ya alcanzó
Creo que la razón es que la mayoría de sus funciones están diseñadas alrededor de un modelo de negocio dependiente de la nube. Hay una opción BYOC, pero no es suficiente. Algo no termina de cuadrar
El proyecto Share es open source, y GitHub también tiene dependencias reales y aun así sigue siendo popular.
No intento negar ese punto, pero ojalá la gente lo pruebe por sí misma y vea qué partes podrían ayudar también al diseño de otros lenguajes
Pero la mayoría del material de aprendizaje da por hecho el uso de infraestructura en la nube, así que en entornos offline uno se queda sin camino claro.
Tal vez exista un enfoque al estilo Unison para eso, pero la capa de marketing está tapando esa ruta
Si aparecen usuarios de pago, habrá un incentivo para mantener la tecnología realista y práctica.
Sin ese componente comercial, se habría sentido como otro esolang más. Ahora sí estoy pensando en usarlo en un proyecto personal
En la documentación se menciona Unison Share, y esto también está alojado en unison-lang.org.
Hay una opción BYOC, pero sigue requiriendo una cuenta y suscripción de unison.cloud. Ojalá esto se explicara con claridad en el marketing y la documentación
Hola, soy uno de los co-creadores del lenguaje Unison. Si tienen dudas, pueden preguntar lo que sea
Unison fue uno de los primeros lenguajes en poner algebraic effects (Abilities) como una función principal.
Recuerdo que al principio no estaban seguros de qué tan bien sería recibido esto, así que me da curiosidad saber si ahora están satisfechos.
También me interesa saber si el sistema de efectos se integra bien con las demás partes del lenguaje, si les gusta la sintaxis, y escuchar alguna historia interesante sobre la implementación interna
Documentación relacionada: Unison Abilities
¿Solo almacenan el hash de la expresión y el valor “passed”, o también pueden calcular el hash de todos los valores?
Si fuera lo segundo, parecería posible extender builds reproducibles al estilo de Nix o Trustix.
Supongo que por ahora el caché trata solo expresiones enlazadas, pero también podría servir como puente entre el runtime y el mundo exterior
Pero por ahora se siente como una solución en busca de un problema.
Me gustaría saber a quién va dirigido este lenguaje y si hay usos reales en producción además de Unison Cloud
Al principio pensé que era un lenguaje basado en BEAM, pero corre sobre su propia VM.
Me gustaría saber qué diferencias hay frente a los lenguajes de BEAM en términos de fault tolerance, y en qué casos de uso encaja mejor Unison
Quisiera saber si llaman a una base de datos externa o si están implementados dentro de Unison mismo.
Junto con la abstracción de Database, es una combinación muy interesante, pero no es fácil captar por completo el concepto
Considero que Unison es uno de los lenguajes más interesantes.
Creo que los algebraic effects serán un concepto clave de la próxima generación.
Además de eso, Unison tiene muchas otras ideas excelentes.
Personalmente, creo que también podría servir para desarrollo de mods de juegos.
Ahí hay que ejecutar código no confiable en el cliente, y gracias al sistema de abilities de Unison parecería fácil crear un entorno sandbox.
También podría ser útil para implementar ECS(Entity Component System).
Si se pueden inferir las capacidades que necesita una función, entonces se podría garantizar automáticamente la seguridad para ejecución en paralelo
En Cloud no se puede usar directamente la ability de IO; en su lugar solo se permiten cosas como una Http ability controlada de forma segura.
Así se evita que los usuarios puedan acceder al sistema de archivos.
Yo también estoy pensando en aprovechar esta función para desarrollo de juegos.
Otros usuarios incluso podrían contribuir al juego implementando abilities como native service.
Enlaces de referencia: Unison Cloud, código de validateSandboxed, ejemplo de ECS
Cuando vi este proyecto por primera vez, pensé “¿qué será de esto en 5 años?”, y de verdad ya pasó todo ese tiempo.
Me da muchísimo gusto ver ahora el lanzamiento 1.0
Es un logro impresionante haber hecho que un lenguaje tan radical pueda usarse también en entornos industriales reales. Felicidades
Creo que sistemas como Unison son el futuro de la computación.
Pero no sé cuándo llegará ese futuro.
La belleza de este tipo de sistemas está en que la infraestructura, los datos y la capa de servicios viven dentro de un único sistema integrado.
Tal vez incluso sea una mejor base para agentes de codificación con IA.
Aun así, me parece que le queda mejor un modelo de desarrollo independiente y sostenible que uno de VC.
Es realmente admirable que este equipo siga adelante con un proyecto tan de largo plazo
Recuerdo el día en que Rúnar dijo que iba a empezar Unison.
Pensé que era un proyecto que abría un paradigma completamente nuevo, y ahora que veo el lanzamiento 1.0 me siento de verdad orgulloso.
Ojalá algún día Unison se convierta en mi lenguaje principal
Me gustaría que en el sitio web de Unison hubiera benchmarks.
Hay que conocer sus características de rendimiento para tener idea de para qué tipos de uso sirve.
Aunque fueran números sencillos, como una comparación de velocidad de manejo de requests frente a Django, Express.js o ASP.NET, ayudaría mucho.
La idea es interesante, pero ojalá también aparezcan targets de runtime fuera de la web.
Personalmente, me resulta más fácil probar un lenguaje nuevo en algo como herramientas CLI que en un gran proyecto web
Revisé esta reseña de Unison publicada en 2023, y me ayudó bastante
La idea es interesante, pero Unison es una estructura todo en uno en la que hay que adoptar al mismo tiempo lenguaje + manejo de código fuente + hosting.
Si no te convence una sola parte del stack, se vuelve difícil usar el conjunto completo.
Por eso creo que estas ideas, de forma directa, tendrán dificultades para difundirse ampliamente
La calidad del tooling del lenguaje en sí es muy alta, y también permite integrarse con sistemas existentes.
Por ejemplo, Unison Cloud está escrito en su mayor parte en Unison, pero algunas partes usan Haskell.
Discusiones relacionadas: HN hilo 1, HN hilo 2
Creo que hay mucho valor en diseñar varias tecnologías de forma orgánica para que funcionen bien juntas