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.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video