Ideas & Insights

Explorando desarrollo AI-first, guardrails de código y la arquitectura de la descartabilidad.

Los LLMs pueden generar código en Rust. Las pruebas formales son un problema completamente distinto.

Los grandes modelos de lenguaje escriben código en Rust sorprendentemente bueno, pero cuando les pides una prueba formal alucinan invariantes e inventan sintaxis que ningún verificador acepta. Esto es lo que realmente hacen bien, dónde fallan y cómo usarlos de todos modos.

Los LLMs pueden escribir Rust que compila e incluso pasa . Lo que no pueden hacer de forma confiable es escribir una prueba formal de que el código es correcto…

Puedes verificar código con model checking sin aprender temporal logic

Los bounded model checkers como Kani y los relational model finders como Alloy permiten verificar propiedades con assertions y constraints ordinarios. Renuncias a las pruebas de liveness a cambio de una curva de aprendizaje medida en horas, no en semanas.

No necesitas aprender lógica temporal lineal para usar un model checker. Herramientas como Kani, CBMC y Alloy te permiten verificar propiedades con assertions…

Puedes probar que tu código Rust es correcto sin escribir una sola prueba, pero el espacio de estados es la factura

Herramientas de model checking como Kani te permiten verificar propiedades de Rust con assertions en lugar de pruebas formales. El problema es lo que ocurre cuando tus bucles no tienen límites pequeños.

Puedes probar que tu código Rust es correcto sin escribir una sola prueba. La herramienta que lo hace se llama model checker, y para Rust el más práctico en…

No puedes hacer pruebas unitarias de un protocolo distribuido, pero sí puedes verificarlo con model checking

Los errores distribuidos son costosos de corregir después del despliegue. El model checking te permite encontrarlos antes de escribir una sola línea de código de implementación. Así es como hacerlo con TLA+.

No puedes hacer pruebas unitarias de un protocolo distribuido. Una prueba unitaria ejecuta un proceso en una máquina en un orden determinado. Tu protocolo…

Copiar archivos `.env` entre entornos no es una estrategia de configuración

Cómo los equipos de infraestructura gestionan la configuración entre dev, staging y production mediante DSLs por contexto que hacen explícitas las diferencias entre entornos y son type-safe.

Tu entorno de staging funciona. Tu entorno de production no. El diff entre sus archivos es de 400 líneas, y la mitad son comentarios en los que ya nadie…

Grammar-constrained decoding: forzando a los LLMs a emitir sintaxis válida en cada token

Los LLMs alucinan sintaxis porque samplean tokens probabilísticamente. El grammar-constrained decoding filtra el vocabulario en cada paso para que solo se emitan tokens que preserven la validez sintáctica.

Pídele a un LLM que genere un objeto JSON y eventualmente emitirá una coma al final, un salto de línea sin escapar dentro de un string, o un bare word donde…

Traducir del inglés a un tema es fácil. Hacerlo determinista es el verdadero problema.

Puedes generar design tokens a partir de descripciones simples en inglés, pero solo si tratas la descripción como un DSL de contexto delimitado con un contrato de schema y snapshot tests.

Sí, puedes describir un tema en inglés y obtener un design system funcional. El truco es que la descripción en inglés no es un prompt. Es un archivo fuente. Y…

Olvida el archivo de gramática: escribe tu parser DSL en TypeScript puro

Los generadores de parsers son excesivos para la mayoría de DSLs de contexto acotado. Los combinadores de parsers te permiten construir un parser funcional en el mismo lenguaje que tu aplicación, sin código generado ni pasos de build.

Si alguna vez abriste un archivo de gramática de Yacc y te preguntaste por qué construir un lenguaje requiere aprender un segundo lenguaje, no estás solo. Los…