Valen, el lenguaje que quiere hablar con rustc sin perder genéricos ni seguridad de memoria
El autor de Vale presenta Valen, un lenguaje experimental que busca interoperar con rustc con genéricos, tipos lineales y seguridad de memoria cruzando la frontera de C.
El creador del lenguaje Vale ha puesto en marcha Valen, un lenguaje experimental cuyo compilador, valenc, pretende entenderse con rustc al punto de compartir genéricos, seguridad de memoria y tipos lineales a través de la frontera entre ambos. El autor lo describe como un proyecto descabelladamente ambicioso y muy poco aconsejable, y avisa de que hoy tiene agujeros y aristas por todas partes.
El problema que quiere resolver
Llamar a código de otro lenguaje suele pasar por la ABI de C: funciones envoltorio, rituales de enlazado y, con suerte, ninguna deidad enfadada. C no tiene genéricos, así que un tipo como SomeRustStruct no existe al cruzar la barrera, y la seguridad de memoria se pierde por el camino. De ahí que no haya lenguajes tipo "Rust++": integrar dos compiladores de verdad es caro y, hasta ahora, mantener genéricos y memoria segura a ambos lados se daba por imposible.
El autor recurre al golden spike, el clavo dorado que en 1869 cerró el primer ferrocarril transcontinental de Estados Unidos en Promontory Summit, como imagen de lo que busca: unir dos sistemas que hoy están a mundos de distancia.
Qué funciona hoy
Valen tiene tipos lineales, aunque todavía no permite declarar que un tipo de Rust ya existente sea lineal. Tiene group borrowing salvo en closures, y el borrow checking cruza la frontera. Las structs se pasan de un lado a otro, incluidas structs de Valen que implementan traits de Rust, con la limitación de que deben ser zero-sized. Las referencias generacionales están desactivadas de momento.
El caso de uso que persigue el autor es su propia biblioteca gráfica Glass Domino, basada en wgpu y con refracción en espacio de pantalla, que quiere invocar desde Valen con genéricos cruzados.
Su lista de deseos incluye un borrow checker sin shared-xor-mutable, mejor rendimiento en ejecución, seguridad de recursos con tipos lineales, comptime al estilo de Zig, referencias generacionales, un Rc que aguante datos mutables sin RefCell ni Cell, mejor historia de async, mejores enums, optimizaciones mustprogress, closures que implementan traits, UFCS y buenos tiempos de compilación. Sobre el rendimiento prometido, admite que aún no ha hecho benchmarks: la ventaja está sin demostrar.
El repositorio ya es público y viene con aviso, aquí hay dragones. Valen es el experimento de una sola persona, sin empresa detrás, y depende de que todas esas piezas encajen en los próximos meses. Vale, el lenguaje del que nace, sigue ahí como referencia de lo que cuesta llevar ideas así a algo usable.


