- La función de depuración que pidieron más de 2,000 desarrolladores finalmente llegó a Zed
- El depurador fue diseñado con foco en la velocidad, familiaridad y capacidad de configuración
- Ofrece soporte para lenguajes populares como Rust, C/C++, JavaScript, Go y Python, además de extensiones basadas en Debug Adapter Protocol (DAP)
- Con el sistema intuitivo de LOCATORS, es posible depurar fácilmente en la mayoría de los proyectos sin configuración adicional
- La arquitectura separada entre UI y capa de datos sienta una base sólida para la depuración colaborativa y la extensibilidad
Lanzamiento del depurador de Zed
- A petición de más de 2,000 desarrolladores, el editor Zed incorporó oficialmente una función de depuración. Se trata de un avance muy importante en el camino hacia Zed 1.0
Objetivos principales
- Velocidad: ofrecer cambios rápidos de contexto y una experiencia de depuración eficiente
- Familiaridad: armoniza con el lenguaje de diseño de Zed y ofrece todas las funciones esperadas en el flujo típico de un depurador
- Capacidad de configuración: el usuario puede personalizar libremente la UI, los atajos de teclado y la configuración de depuración
Soporte de lenguajes y extensiones
- Soporta de forma nativa lenguajes principales como Rust, C/C++, JavaScript, Go y Python
- Puede integrarse con cualquier adaptador de depuración que implemente Debug Adapter Protocol (DAP)
- A través del sistema de extensiones, se pueden agregar fácilmente más lenguajes y funciones de depuración
Configuración sencilla de la depuración
- Se introdujo un nuevo sistema llamado LOCATORS que convierte la configuración de compilación en configuración de depuración
- Una vez que se define una tarea de compilación en
tasks.json, se puede referenciar desde debug.json o aprovechar la función de configuración automática de Zed
- Zed ejecuta automáticamente los locators desde ejecutables integrados o desde el Language Server
- En la mayoría de los casos, se puede usar de inmediato sin una configuración de depuración aparte
- Actualmente hay soporte de locator para Cargo, Python, JavaScript y Go (se añadirán más lenguajes)
Funciones de las sesiones de depuración
- Dentro de Zed, es fácil revisar el estado del programa, como hilos, variables, puntos de interrupción y pila de llamadas
- El panel del depurador es completamente personalizable, por lo que se pueden arrastrar y ordenar pestañas o mover paneles libremente
- También admite depuración centrada en teclado, con navegación de código, cambio de puntos de interrupción y movimiento entre sesiones sin usar el mouse
Arquitectura altamente extensible
- Para permitir depuración en varios lenguajes, entornos colaborativos, soporte de extensiones y administración eficiente de caché y datos, se diseñó una arquitectura de 2 capas
- Capa de datos: se comunica directamente con el adaptador de depuración, mantiene el estado de la sesión, almacena respuestas en caché y gestiona la invalidación de datos obsoletos
- Capa de UI: solicita solo los datos necesarios y se enfoca en renderizar la interfaz
- Gracias a esta separación, resulta más sencillo implementar funciones de depuración colaborativa (multijugador) y también se ahorra ancho de banda de red
API de extensiones y aplicación de DAP
- Como existen más de 70 implementaciones distintas de DAP, en lugar de dar soporte nativo a todo, se amplió la API de extensiones de Zed para hacer posible la integración del depurador
- Es posible ampliar el soporte DAP mediante definición directa de esquemas, implementación de lógica de descarga y ejecución de adaptadores, inyección de valores predeterminados en la configuración de depuración, y conexión automática con locator
- De forma similar al modelo de extensiones LSP (Language Server Protocol), los desarrolladores pueden integrar fácilmente sus propios adaptadores de depuración en Zed
Soporte para valores de variables en línea
- La función de mostrar valores de variables en línea no pertenece a DAP sino a LSP, por lo que solo puede ofrecerse de la forma tradicional cuando DAP y LSP están conectados
- Los emparejamientos simples, como con expresiones regulares, pierden precisión por cuestiones de alcance, comentarios y otros factores
- Con Tree-sitter, la identificación de variables dentro del alcance del código en ejecución se realiza con mucha más precisión
- Es posible dar soporte por lenguaje mediante archivos
.scm sin integración LSP adicional
- En el lanzamiento hay soporte para Python, Rust y Go, y después se añadirán más lenguajes
- Zed es un editor creado por los fundadores de Tree-sitter
Próximos planes
- Nuevas vistas: se planea agregar funciones avanzadas como lista de observación, vista de memoria, vista de desensamblado y stack trace
- Configuración automática: el objetivo es ampliar el soporte de configuración automática para más lenguajes y sistemas de compilación
- Pulido y expansión: recibirán feedback por Discord, GitHub y otros canales, con una clara intención de seguir mejorando
Apéndice
- Zed puede usarse en macOS y Linux
- Están contratando desarrolladores (si te interesa, revisa el sitio oficial)
2 comentarios
¿Habrá alguien que use Zed con Java...? jaja
Opiniones en Hacker News
Me da muchísimo gusto ver que el trabajo en el depurador sigue avanzando. Esta función es precisamente la principal razón por la que aún no me cambio por completo a zed. Aun así, todavía le falta para poder decir “ya está”. Me decepciona la ausencia de una ventana de watch, una vista de stack trace y que no se mencionen los data breakpoints, así que lo considero todavía en beta. Sé que esas funciones llegarán en algún momento, pero lo que hay ahora no alcanza para cubrir el 97% de mis sesiones de depuración. También me gustaría que el anuncio mencionara con más claridad el soporte para varias sesiones de depuración al mismo tiempo y los planes para depuración multihilo. En particular, me intrigan ideas interesantes para depuración multihilo, como en RemedyBG, por ejemplo “congelar” un hilo específico o ejecutar solo uno en modo “solo”
Hola Laserbeam, yo desarrollé el depurador y escribí esa publicación. Ya hay soporte para una vista básica de stack trace. Pronto se integrará una vista de stack trace dentro del sistema de múltiples buffers, y de hecho ya ahora, durante una sesión de depuración, puedes expandir el call stack en el multibuffer con la acción “show stack trace” para ver cada frame. Solo que todavía no alcanza el nivel de calidad alto que exigimos en Zed, así que no lo hemos promovido públicamente. El PR para variables/expresiones watch también debería mergearse en unos días. La funcionalidad ya está terminada, pero nos dio cautela incluir algo tan poco probado justo antes del lanzamiento. Los data breakpoints son una prioridad importante, pero por un tiempo pensamos enfocarnos en la configuración automática, así que es difícil dar una fecha exacta. El soporte para múltiples sesiones y depuración multihilo también ya existe; todavía hay cosas por pulir, pero el soporte básico está
En la publicación del blog se menciona que hay vistas avanzadas en desarrollo. Este primer lanzamiento y el anuncio están enfocados en sentar las bases. Más adelante se agregarán vistas avanzadas como watch list, memory view, disassembly view y stack trace view [enlace relacionado]
Mis sesiones de depuración siempre se reducen a breakpoints normales y stepping. Así que, desde mi punto de vista, esto ya es suficiente
Yo también estoy de acuerdo, pero viendo la velocidad a la que desarrolla el equipo de Zed, me da la impresión de que esas funciones llegarán muy pronto
Aún no he probado el depurador, pero en mi caso siento algo parecido con las funciones de Git. Zed tiene funciones básicas de Git, pero todavía no alcanza para reemplazar por completo todo mi flujo de trabajo actual. Espero que sigan metiéndole enfoque al desarrollo de Git también
Zed es un editor realmente bueno. Últimamente me estoy pasando de neovim a zed y estoy bastante satisfecho. Todo es muy rápido y los bindings de vim están bien integrados. El modo agente también es conveniente. En comparación con VSCode, todavía le falta ecosistema de extensiones, pero cubre bastante bien muchas de las cosas que necesito. El depurador era una carencia grande hasta ahora, así que da mucho gusto que por fin lo hayan agregado
Me da curiosidad qué tan auténtica se siente la experiencia de los bindings de vim. La mayoría de los emuladores de vim se parecen lo suficiente, pero justo por eso quedan en un punto ambiguo y termino equivocándome mucho al teclear, lo cual me frustra más. A veces hasta me resulta menos molesto un editor que no se siente nada como vim, porque así mis dedos no siguen “fallando” constantemente
Me da curiosidad cómo está el autocompletado para código Rust en Zed. Si hubiera un entorno casi mágico como Windsurf o Cursor, donde todo se autocompleta de forma natural con “tab-tab-tab”, sería increíble. Sobre todo en TypeScript o lenguajes de scripting, ese estilo de autocompletado funciona tan bien que casi parece automatización de refactorización. Incluso usando modelos de JetBrains o Co-pilot, IntelliJ/RustRover no ha alcanzado el nivel de Cursor o Windsurf. Creo que es por la propia naturaleza de Rust. 1) Quisiera saber si ese tipo de autocompletado natural ya es posible también en Rust, y si funciona en Zed. 2) También me interesa saber cómo se siente comparado con Zed, Cursor y Windsurf, y además frente a la forma en que RustRover y JetBrains manejan el AST de Rust
Zed da la impresión de haber logrado lo que Lapce, Helix y Neovim no pudieron concretar hasta ahora. Cuando usé Helix por ahí de 2021~2022, al final lo dejé por bugs y falta de integración, y en particular casi no tenía soporte para PHP, que era lo que usaba en mi antiguo trabajo. Neovim era con el que me sentía más cómodo, pero muchos plugins populares de la comunidad tenían estilos muy rígidos y las alternativas eran demasiado lentas. Era agotador tener que pensar entre tantas opciones solo para conseguir un entorno estable. Lapce simplemente me parecía una “copia de VSCode”, y no sentía que tuviera nada especial. Todavía siento que no está al nivel de usarse como daily driver. En ese sentido, Zed se convirtió en el mejor editor en muy poco tiempo, y últimamente lo agradezco todos los días. También da mucho gusto que hayan agregado un depurador
No hace falta la aclaración de “en mi antiguo trabajo” sobre el soporte para PHP
También es interesante calificarlo como una “copia de VSCode”. Es una interpretación curiosa del editor más popular de la historia humana
Me impresiona ver cómo Zed se está convirtiendo cada vez más en un IDE ligero, completo y con muchas funciones. En mi opinión, DAP y LSP han sido las mejores innovaciones en herramientas de programación de los últimos diez años
Al principio me interesaba Zed, pero en cuanto empezó a integrar “AI”, perdí el interés. Ya estoy cansado de tanta “AI”. Planeo seguir usando Neovim hasta que salga algo mejor, y siento que ese cambio no llegará hasta que reviente la “burbuja AI”
Zed fue el primer editor que me hizo querer probar funciones de AI. En general sentí una base muy sólida, y la parte de AI está presente solo al nivel de autocompletado que ya ves en otros editores. Da la impresión de “lo que quieres no es AI, sino un editor bueno y rápido; nosotros hicimos eso y además le pusimos funciones de AI”. Los competidores se sienten más como “lo principal es la AI y el editor va de acompañamiento”, pero en Zed el centro es distinto
Busqué neovim y me sorprendió ver que incluso recibe patrocinio de dos productos de AI. No llega al nivel de integrar AI directamente, pero ya se está volviendo cada vez más difícil evitarlo por completo
Yo simplemente desactivo todas las opciones relacionadas con AI y lo uso así. Es un editor bastante bueno. Todavía tengo que irme a VSCode para resolver merge conflicts, pero en general estoy satisfecho
Me da curiosidad qué tan invasivas son realmente las funciones de AI de Zed y si se pueden desactivar desde la configuración
Cuando uso Zed normalmente, las funciones de AI no me molestan para nada. A veces sí me resultan útiles, pero no las uso con frecuencia
Desde que salió el soporte para Linux, reviso cada vez si ya agregaron soporte para pantallas normales (LoDPI). Todavía no lo han hecho y me da bastante lástima
Es realmente desesperante. El renderizado de texto es lo más básico en un editor de código, pero parece que en el equipo de Zed nadie usa pantallas normales (non-retina). Enlace al issue de GitHub relacionado
Es una solución temporal, pero si instalas BetterDisplay (herramienta gratuita) y conviertes la pantalla LoDPI a HiDPI, el renderizado de texto mejora bastante
Lo uso todos los días en una laptop Linux con pantalla 1920x1200 y no noto nada raro
Si tampoco hay soporte para Windows y además en Linux no soportan pantallas normales, entonces me pregunto si en la práctica no será una empresa centrada en Mac
Ahora mismo, en un proyecto de Python con Pyright, quiero cambiarme de Cursor a Zed, pero el consumo de batería es tan alto que no logro justificarlo. Este issue ya está en GitHub, y me decepciona mucho que el equipo no le esté dando alta prioridad
Creo que Zed es un ejemplo de desarrollo de producto de verdad. Da muchísimo gusto tener una opción que no sea otro reempaque más del motor de Chrome
Honestamente, me sorprendió porque sí se siente lento en algunas cosas. Hay retraso al cambiar de archivo desde la lista de tabs, y la respuesta al teclear también se siente más lenta que en Emacs (con lsp-mode activado) o incluso que en un navegador web. Además usa como 60MiB más de memoria que Emacs. Eso sí, inicia realmente rápido. A diferencia del eslogan de “editor rápido”, en la práctica termina siendo más lento que Emacs Lisp + núcleo en C. Viendo la arquitectura de plugins, parece que se compilan a WASM y corren en una VM. Me pregunto si esa será la causa
Me intriga cómo lograste que zed se sintiera más lento que emacs. En mi experiencia, zed es tan rápido que casi no tiene latencia. Editing, lsp y file switching se sienten inmediatos. En cambio, con emacs muchas veces terminé rindiéndome por los problemas de latencia, especialmente en entornos de desarrollo remoto
Sobre si los plugins corren en WASM dentro de una VM y por eso va lento: por lo que he visto, los plugins solo hacen cosas como lanzar servidores, así que no tendrían relación directa con la respuesta al teclear. Yo más bien sospecharía del uso de GPU. En el GPU compositing es fácil que aparezca latencia, y además puede duplicarse con el renderizado del sistema operativo. También recuerdo que emacs usaba trucos como saltarse el event loop y refrescar la UI directamente, lo que generó problemas de compatibilidad
emacs tiene un depurador basado en DAP muy bien diseñado llamado dape. Enlace relacionado Está diseñado sin dependencias, así que en el futuro podría incluso incluirse en emacs por defecto
También podría ser un problema del pipeline de renderizado. Me da curiosidad qué sistema operativo usas
Lo que me gustaría pedirle al equipo de zed es que haga una detección correcta de C y C++. Todos los editores repiten el mismo error de tratar C como si fuera C++ (C es distinto de C++ y no deben confundirse); incluso si se especifica el estándar de C en
compile_commands.json, muchas veces reconocen el código como C++ aunque tenga errores de sintaxis propios de C++. Si solo corrigieran bien la detección de lenguaje, ya sería un editor muy bueno