Vercel creó un lenguaje de programación

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

Transcript

00:00:00Vassel acaba de lanzar un nuevo lenguaje de programación llamado Xero, y supuestamente lo que hace que
00:00:03este sea diferente es que ha sido diseñado desde cero para que los humanos y los agentes de IA
00:00:07puedan crear pequeños programas nativos juntos. ¿Pero no es esto lo que todos hemos estado haciendo de todos modos?
00:00:12Entonces, ¿qué hace que este sea mejor? ¿Es realmente una buena idea o es solo otro proyecto secundario
00:00:16del que nadie va a hablar en unos meses? Vamos a descubrirlo.
00:00:25Xero es un lenguaje de sistemas como Rust o Zig, así que tal vez sea algo en lo que BUN pueda reescribirse algún día.
00:00:30Y por lo que veo, la idea principal es que los lenguajes actuales fueron creados para humanos.
00:00:34Así que nosotros leemos los mensajes de error, las advertencias y las trazas, pero la IA funciona mucho mejor cuando tiene
00:00:38datos estructurados. Por eso, con Xero, toda la cadena de herramientas se ha creado con eso en mente,
00:00:43lo que significa que todo lo que produce el compilador se puede generar como JSON.
00:00:46Ahora, basándome solo en esos puntos, y en las frases de este sitio web que obviamente fueron escritas por IA,
00:00:51sigo siendo bastante escéptico sobre por qué existe esto y qué tan bien va a funcionar,
00:00:56pero me guardaré mis opiniones para el final. Primero exploremos el lenguaje en sí,
00:00:59porque, a ver, sigue siendo bastante genial. Empezaremos con el clásico proyecto
00:01:03de “estoy aprendiendo un nuevo lenguaje”, imprimiendo una cadena de texto muy simple. La mayor parte es bastante fácil de entender.
00:01:08Tenemos una función main pública como punto de entrada de este programa. Esta función va a devolver
00:01:12void, y aquí dentro estamos imprimiendo una cadena de texto. Pero la forma en que se imprime
00:01:16esa cadena destaca nuestras primeras características. Estamos usando la capacidad “world”. Necesitas esta
00:01:21capacidad si vas a realizar operaciones de E/S, como operaciones con archivos, impresiones, llamadas de red,
00:01:26cualquier efecto secundario de E/S, y todo es parte del principio explícito de este lenguaje.
00:01:31Si una función tiene esta capacidad “world”, es una señal inmediata de que realiza operaciones de E/S,
00:01:37y si no la tiene, significa que estará libre de efectos secundarios de E/S.
00:01:40La capacidad “world” también permite al compilador rechazar capacidades no disponibles según el
00:01:45entorno de destino en tiempo de compilación en lugar de en tiempo de ejecución, así que si intentas acceder al sistema de archivos
00:01:50dentro de esta función e intentas compilarlo para WebAssembly, el compilador arrojará un error primero,
00:01:54por lo que no te sorprenderá un error en tiempo de ejecución más adelante.
00:01:57Después de la capacidad “world”, en este programa también tenemos algunas palabras clave.
00:02:00Así que aquí tenemos “check”, que es cómo se manejan los errores. Si una función puede fallar,
00:02:05la marcas con “raises”, y luego usas “check” aquí para propagar ese error. Es bastante similar
00:02:09al operador de signo de interrogación de Rust, pero simplemente como una palabra clave. Eso es todo lo que necesitamos saber
00:02:13para nuestro primer programa en Xero, y podemos ejecutarlo ahora haciendo “xero run hello.xero”.
00:02:19Ten en cuenta que esta es la extensión de archivo para el lenguaje Xero. Si presiono enter ahora,
00:02:23pueden ver que dice “hello, subscribe to Betastack”. Algo que definitivamente deberías hacer.
00:02:26Pasando de nuestro programa hello, ya que claramente todos somos expertos en Xero ahora,
00:02:30el lenguaje tiene algunas primitivas más para cubrir tus aplicaciones básicas.
00:02:34Así que hice uno nuevo aquí, que es solo una aplicación aleatoria que clasificará si la entrada es texto,
00:02:39numérica o mixta, y pueden ver que usa algunas características como librerías estándar, tenemos
00:02:43tenemos enums aquí, tenemos “shapes”, bastante similares a las estructuras, luego tenemos las características
00:02:47habituales que esperarías de un lenguaje como declaraciones “if
00:02:52usar bucles “for”, y luego también tenemos “match” aquí abajo, que es muy parecido a una declaración “switch”.
00:02:56Así que nada demasiado inesperado o nuevo. Cuando se trata de conceptos más avanzados como la memoria, de nuevo con Xero
00:03:00todo debe ser explícito. Así que tenemos “spans” mutables para nuestras vistas de escritura y también hay “spans”
00:03:05para vistas de lectura, y aquí abajo tenemos un tipo “owned”. Esto esencialmente dice que este valor es
00:03:10propiedad de este bloque y cuando sale del alcance ejecuta la función “drop”. Definimos la función “drop”
00:03:14nosotros mismos en el “shape” de aquí, por lo que aquí es donde pondríamos nuestra lógica de limpieza. Otra forma en que puedes
00:03:18hacer esto es usando la palabra clave “defer” y luego poniendo una función aquí. Esencialmente lo que esto
00:03:22significa es que cuando esta función termine y salga de su alcance, ejecute esta función después. Así que básicamente
00:03:26tiene todo lo que necesitas para una aplicación muy básica hoy en día y hay algunas características más,
00:03:31pero realmente no quiero que esto sea un tutorial de programación, aunque siéntete libre de poner que tienes
00:03:35tres minutos de experiencia en Xero en tu currículum. Con todo eso fuera del camino, centrémonos en lo que
00:03:39creo que es la verdadera propuesta de Xero, y es su cadena de herramientas y el hecho de que ha sido creado para agentes de IA.
00:03:44Imagina que un agente de IA escribe algo de código en Xero e introduce algunos errores. Bueno, ellos afirman que
00:03:49en la mayoría de los lenguajes solo vas a recibir un bloque de texto y esos mensajes de error están diseñados
00:03:54para que los lean los humanos. In Xero, puedes obtener la versión legible para humanos y se va a ver
00:03:58algo así, pero puedes ver que esa no es una salida estructurada. Así que se han asegurado de que en
00:04:02cada parte de la cadena de herramientas haya una opción JSON. Así que si ejecutamos esa misma función de nuevo pero
00:04:07esta vez usando la opción JSON, y también canalizo esto a JQ solo para que se vea un poco mejor,
00:04:12pueden ver que recuperamos un mensaje de error con una salida estructurada agradable. Tenemos diagnósticos aquí como la
00:04:16severidad, el código y el mensaje. Tenemos dónde ocurre el error, su valor esperado y su
00:04:21valor real. Luego tenemos algo de ayuda para el propio LLM, así como un campo de seguridad de corrección que
00:04:26dice que esto va a requerir revisión humana y luego alguna información sobre cómo se puede reparar. Así que
00:04:31solo intenta dar suficiente contexto al LLM para que pueda solucionarlo por sí mismo. Otro comando que muestra
00:04:35bien eso es el de “xero fix”. Este lo estoy usando con el modo plan, así como con JSON, y también
00:04:40lo canalizo a JQ solo para que se vea bien en nuestra terminal. Cuando presiono enter en esto, esencialmente
00:04:44hace un diagnóstico del archivo dañado clasificado que le di y básicamente dice qué es lo que
00:04:49necesito hacer para solucionar realmente este archivo. Pueden ver que recuperamos una salida estructurada con campos que
00:04:53prácticamente solo un LLM necesita saber, como los niveles de seguridad, el modo, los cambios que aplica. Tenemos cosas más abajo
00:04:58como la política de reparación autoalojada. Luego tenemos la sección de diagnóstico, que es casi lo mismo
00:05:03que vimos en ese comando “xero check”, y aquí abajo también tenemos la solución para ese código de error
00:05:07en sí. Entonces, ¿cómo se soluciona esto normalmente? Esencialmente, parte de la idea parece ser: ¿y si el lenguaje
00:05:12proporcionara su propia documentación cuando fuera necesaria? De modo que si apuntamos un LLM a este nuevo lenguaje,
00:05:17realmente no necesitaría buscar ninguna documentación ni usar ninguna habilidad previa, simplemente sería capaz de obtener
00:05:21suficiente información de la cadena de herramientas cuando realmente se necesite. Así que para poner eso a prueba, puse
00:05:25nuestro archivo dañado en un directorio completamente nuevo que no tiene información sobre qué es el lenguaje Xero y ahora
00:05:30simplemente le pido a Claude que arregle ese archivo dañado y también le doy el comando que necesita para esos
00:05:34diagnósticos, porque necesita alguna información sobre cómo usar realmente la cadena de herramientas. Con eso,
00:05:38podemos seguir adelante y ver si Claude realmente puede arreglar este archivo. Bueno, ahí lo tienen, después de 31 segundos ha
00:05:43logrado corregir todos los errores del archivo; de hecho, yo introduje tres de ellos, los ha encontrado
00:05:47los tres y los ha corregido, y podemos desplazarnos hacia arriba y ver cómo lo ha hecho. Simplemente está ejecutando ese
00:05:51comando “xero fix” que le di. Esta vez nos devolvió “ok: true”, así es como sabe que no
00:05:56quedan errores, y si subimos podemos ver que hizo algunos cambios en el código, y lo hizo porque en
00:06:00el paso anterior ejecutó “xero fix” y obtuvo información precisa sobre cómo solucionar ese problema, y
00:06:05lo hizo con los tres problemas que teníamos. Así que este no tenía información previa sobre qué es el
00:06:10lenguaje Xero, no usó ninguna búsqueda web ni nada por el estilo para recuperar la documentación, simplemente
00:06:14utilizó la información que proporcionaba la cadena de herramientas como salidas estructuradas. De hecho, estoy
00:06:18un poco impresionado por esto; este es un lenguaje completamente nuevo que un LLM aún puede depurar gracias a
00:06:22cómo se ha construido el lenguaje, pero me queda una duda: ¿es esto realmente nuevo? Es decir,
00:06:28entiendo todo el argumento de venta de los errores y que todo en la cadena de herramientas tenga salidas
00:06:31estructuradas, pero ese no es realmente un concepto nuevo; hemos tenido mensajes de error estructurados durante décadas. Es decir,
00:06:37miren esto, tengo aproximadamente el mismo programa clasificado construido en Rust y tiene errores similares,
00:06:41y puedo simplemente pedir que la salida esté en JSON. No estoy muy seguro de que necesitáramos un lenguaje entero
00:06:46construido en torno a esta idea, y tal vez se podrían haber mejorado los existentes si se pensaba
00:06:51 que había una brecha en la información. También estoy bastante seguro de que si tomara ese código de Rust dañado y le pidiera
00:06:55a Claude que lo arreglara, sería capaz de hacerlo con facilidad, e incluso si no estuviera usando salidas
00:07:00estructuradas. Siento que los LLM hacen un trabajo perfectamente aceptable con mensajes normales, o tal vez simplemente no me he
00:07:05topado con ese problema. Además de eso, tenemos el hecho de que los LLM han sido entrenados con montones de lenguajes
00:07:10de programación existentes como Rust, por lo que van a ser bastante buenos depurando eso y tienen un montón de
00:07:14ejemplos en sus datos de entrenamiento, pero con Xero no tienen absolutamente ninguno. Ahora, eso no significa que nunca
00:07:19debas intentar agregar un nuevo lenguaje, solo significa que si estás construyendo una aplicación compleja no elegirías
00:07:24Xero, pero para ser honesto, ellos tampoco lo están promocionando así. En general,
00:07:28creo que esto es solo un experimento interesante y, en todo caso, demuestra que aún se puede construir un nuevo lenguaje
00:07:32y darle a los LLM el contexto necesario sin tener que entrenarlos en ese lenguaje, pero no estoy muy
00:07:37seguro de si esto era necesario. Nada de esto quiere decir que el lenguaje en sí no sea genial. Como dije, en realidad
00:07:42no es tan malo de usar y se compila a un tamaño bastante agradable. Solo dudo que alguna vez
00:07:47vaya a usar esto en lugar de los ya establecidos como Rust, Zig o Go. Estoy seguro de que va a haber un montón de
00:07:51opiniones sobre este tema, así que déjenme saber lo que piensan en los comentarios de abajo o presionen ese botón de suscribirse
00:07:55y, como siempre, nos vemos en el próximo.

Key Takeaway

Xero demuestra que un nuevo lenguaje de programación puede ser depurado con éxito por modelos de lenguaje sin entrenamiento previo si la cadena de herramientas proporciona diagnósticos nativos en formato JSON estructurado.

Highlights

  • Vercel lanzó Xero, un lenguaje de programación de sistemas similar a Rust o Zig diseñado desde cero para la colaboración entre humanos y agentes de inteligencia artificial.

  • El compilador de Xero genera toda la información de salida en formato JSON estruturado, incluyendo mensajes de error con severidad, código, valor esperado, valor real e instrucciones de reparación para modelos de lenguaje.

  • La capacidad “world” en Xero etiqueta explícitamente las funciones que ejecutan operaciones de entrada y salida, permitiendo al compilador rechazar capacidades no disponibles en tiempo de compilación.

  • El comando “xero fix” analiza archivos con errores y devuelve un plan de diagnóstico estructurado en JSON con los cambios específicos que la inteligencia artificial debe aplicar.

  • El modelo Claude corrigió tres errores de un archivo dañado en 31 segundos sin entrenamiento previo ni documentación web externa, utilizando únicamente los datos JSON de la cadena de herramientas de Xero.

  • Lenguajes existentes como Rust permiten configurar la salida de errores en formato JSON, lo que cuestiona la necesidad absoluta de crear un lenguaje entero en torno a este concepto.

Timeline

Arquitectura de Xero y optimización para inteligencia artificial

  • Xero es un lenguaje de programación de sistemas de bajo nivel diseñado para la creación de programas nativos pequeños.
  • Los lenguajes tradicionales entregan mensajes de error orientados a la lectura humana en bloques de texto plano.
  • La cadena de herramientas de Xero genera datos de salida estructurados en formato JSON para facilitar el procesamiento de los agentes de inteligencia artificial.

La premisa de este desarrollo radica en la desconexión entre los lenguajes actuales y las capacidades de los modelos de lenguaje. Mientras las personas leen trazas de error y advertencias convencionales, la inteligencia artificial procesa datos con mayor precisión cuando se presentan con estructura. Xero se posiciona como una opción de sistemas al nivel de Rust o Zig, con el potencial teórico de servir para reescribir herramientas como Bun en el futuro.

Control explícito de efectos secundarios y gestión de errores

  • La función de entrada main requiere la palabra clave “world” para ejecutar cualquier operación de entrada y salida.
  • El compilador intercepta errores de entorno incompatibles en tiempo de compilación antes de generar el binario de ejecución.
  • La palabra clave “check” propaga errores en funciones marcadas con la cláusula “raises” de forma similar al operador de interrogación de Rust.

El diseño del lenguaje obliga a declarar de forma explícita cada comportamiento del programa. Si una función carece de la capacidad “world”, se garantiza que está libre de efectos secundarios de red o sistema de archivos. Esta restricción permite que un intento de compilar código con acceso a disco hacia WebAssembly falle inmediatamente en el compilador, evitando excepciones imprevistas durante la ejecución del software.

Estructuras de datos básicas y gestión manual de memoria

  • Las aplicaciones en Xero utilizan enums, enrutamiento mediante expresiones “match” y estructuras de datos denominadas “shapes”.
  • La gestión de memoria emplea las etiquetas “spans” mutables e inmutables junto con el tipo de propiedad “owned”.
  • La palabra clave “defer” pospone la ejecución de una rutina de limpieza hasta el cierre del bloque actual.

El lenguaje cuenta con las características habituales de la programación moderna, como bucles “for” y condicionales. El control de la memoria exige una sintaxis clara donde los desarrolladores definen una función “drop” dentro de un “shape” para liberar recursos cuando el valor sale de alcance. El ecosistema provee las primitivas necesarias para construir aplicaciones lógicas básicas, aunque su enfoque principal no es competir como un entorno de desarrollo general de alta complejidad.

Diagnósticos en JSON y depuración autónoma con modelos de lenguaje

  • La opción JSON de Xero entrega metadatos detallados que incluyen severidad, código, ubicación exacta y un campo de seguridad de corrección.
  • El comando “xero fix” en modo plan detalla el diagnóstico del archivo y las políticas de reparación que requiere el código.
  • Claude solucionó tres errores introducidos de forma manual mediante la ejecución iterativa de comandos de la cadena de herramientas.

El valor central del entorno es la entrega de contexto especializado para sistemas de automatización. Al canalizar la salida estructurada a través de herramientas como JQ, se observan campos diseñados exclusivamente para el consumo de modelos de lenguaje, ofreciendo indicaciones sobre si el cambio requiere revisión humana. En una prueba práctica, un modelo sin datos de entrenamiento específicos del lenguaje logró corregir la totalidad de los fallos de un archivo en 31 segundos, apoyándose únicamente en las respuestas del compilador.

Comparativa con herramientas tradicionales y viabilidad del lenguaje

  • Los mensajes de error estructurados existen desde hace décadas en ecosistemas consolidados mediante banderas de compilación.
  • Rust genera salidas en formato JSON equivalentes y cuenta con la ventaja de poseer un volumen masivo de datos de entrenamiento previos.
  • Xero funciona de forma correcta y genera binarios optimizados, pero su adopción frente a soluciones estables como Go o Zig es improbable.

La novedad del concepto de salida estructurada es cuestionable, dado que herramientas como Rust permiten obtener diagnósticos JSON nativos idénticos con argumentos estándar. Los modelos de lenguaje actuales resuelven problemas eficazmente con trazas de texto normales y poseen un entrenamiento profundo en lenguajes establecidos, del cual Xero carece por completo. El proyecto destaca como un experimento técnico viable sobre transferencia de contexto en tiempo real, pero no ofrece argumentos suficientes para desplazar a las tecnologías de sistemas actuales en proyectos de producción.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video