Las bondades de Gleam: un recorrido por sus características más atractivas

Gleam, un lenguaje funcional que compila para BEAM (la máquina virtual de Erlang), incorpora una serie de pequeñas decisiones de diseño que simplifican el trabajo diario del desarrollador. Este artículo repasa cinco de sus características más llamativas, útiles tanto para quienes ya trabajan en la p

Rust activa por defecto en nightly su nuevo resolvedor de traits

El equipo de Rust ha activado por defecto en el canal nightly el nuevo resolvedor de traits (next-generation trait solver), un componente del compilador desarrollado durante casi cuatro años que cambia por completo la forma de demostrar where-clauses y normalizar tipos asociados. El cambio estará di

Una formulación alternativa del borrow checker de Rust basada en alias

Niko Matsakis presenta una propuesta experimental para reformular el borrow checker de Rust. El objetivo es superar algunas limitaciones del diseño actual (NLL) y, a la vez, mejorar su velocidad de cómputo. Matsakis ya cuenta con un prototipo implementado que supera la suite completa de pruebas de N

TSON: un sistema de esquemas inmutables con un JSON mejorado

TSON (Typed Schema Object Notation) es un sistema de esquemas con una particularidad central: las definiciones son inmutables y se identifican mediante hashes criptográficos. Cada documento declara el esquema que lo valida y ese esquema, a su vez, nombra a su meta-esquema; un único hash permite veri

Haskell en cinco puntos: elección incondicional mediante parametricidad

Justin Le publica la segunda entrega de su serie «Five-Point Haskell», centrada en el principio que bautiza como «elección incondicional». La idea aprovecha la parametricidad de Haskell: cuando una función tiene un tipo polimórfico como `forall a. a -> a`, el compilador deduce propiedades que toda i

Convertir la estabilidad referencial en un tipo de TypeScript

En cualquier base de código mediana hecha con React o Preact, garantizar que una referencia no cambie entre renderizados exige recordar manualmente reglas que el sistema de tipos no expresa. El ingeniero de software Jovi De Croock propone elevar esa intención al propio tipo mediante un tipo genérico

Tipos de prueba en Dart: clases finales como testigos computacionales

Los tipos de prueba, también conocidos como tipos testigo o de evidencia, son un patrón de programación en el que la mera existencia de un valor garantiza que un determinado cómputo se ha ejecutado. En Dart 3.0, este patrón se materializa combinando cuatro mecanismos: el modificador final, que impid

Curiosidades del C pre-ANSI: lo que K&R no enseñaba en clase

Una investigación个人 sobre las peculiaridades del C de K&R (pre-ANSI) revela diferencias notables con el lenguaje estandarizado que se enseña hoy. El autor, tras leer la primera edición de "The C Programming Language", el documento de razonamiento de C89 y el código del compilador de Unix 7ª edición,

Cómo un segundo middleware colapsó los tipos de TypeScript en Inngest

Un ingeniero del equipo de Inngest descubrió un bug sutil en los tipos genéricos de TypeScript de la librería inngest-js: al encadenar dos middleware, el tipo devuelto por step.run se colapsaba a {} y las propiedades de los objetos dejaban de ser accesibles, aunque en tiempo de ejecución el código f

Validar no es parsear: tipos de marca en TypeScript al estilo Haskell

Este artículo recupera el principio "parse, don't validate" de Alexis King y lo aplica a TypeScript, un lenguaje cuyo sistema de tipos estructural no obliga a distinguir entre datos sin revisar y datos ya verificados. La idea central es que un validador devuelve true o false y olvida lo que comprobó

Nueve formas de simular herencia en Rust, el lenguaje sin clases

Rust carece de herencia de clases al estilo de los lenguajes orientados a objetos: no existen clases, declaraciones de subclases ni campos heredados de una clase padre. Sin embargo, las necesidades que la mayoría de los programadores resuelve con herencia —interfaces compartidas, comportamiento reut

Elixir v1.20 ya es un lenguaje de tipado gradual sin anotaciones

El equipo de Elixir ha publicado la versión 1.20 del lenguaje de programación, que incorpora un sistema de tipado gradual sin necesidad de añadir anotaciones de tipo. Se trata del primer hito de desarrollo del proyecto de tipos, iniciado en 2022, que convierte a Elixir en un lenguaje gradualmente ti

Phel 0.36.0 introduce variables como valores de primera clase

Phel 0.36.0 es una versión mayor del lenguaje de programación funcional que compila a PHP, introduciendo capacidades fundamentales que amplían significativamente su poder expresivo. Entre las adiciones más relevantes se encuentran lasfirst-classVars, que permiten tratar las variables como valores de

Rust: Dependencia en 'serde' frena desarrollo

El ecosistema de Rust enfrenta un problema fundamental relacionado con la forma en que se desarrollan sus bibliotecas (crates). El problema central radica en la dependencia de crates fundamentales como `serde` para la serialización de datos. `serde` define traits (interfaces) como `Serialize` que ca

Error en compilador Rust al emular tipos avanzados

Este artículo técnico explora una peculiaridad en el sistema de tipos de Rust y cómo un intento de emular tipos de orden superior (HKTs) llevó a un error de desbordamiento en la evaluación de requisitos de traits, causando que el compilador fallara. El autor, en su intento de crear un lenguaje de sc

Tipos y errores: un análisis de Map.take! en Elixir

Este artículo explora las limitaciones de los sistemas de tipos en lenguajes de programación dinámicos, utilizando como ejemplo la propuesta de una función `Map.take!/2` en Elixir. `Map.take/2` es una función existente en Elixir que extrae un subconjunto de claves de un mapa, ignorando las claves in