Reescribiendo Rust
- El lenguaje de programación Rust se siente como un producto de primera generación
- El atractivo inicial de Rust: tipos algebraicos, seguridad de memoria, sin pérdida de rendimiento, un gestor de paquetes moderno
- Después de usarlo durante 4 años, Rust no siempre es perfecto
- La evolución del lenguaje se ha vuelto muy lenta
- Muchas funciones inestables no se han incorporado a Rust estable
Un lenguaje fantástico
- Quiero hacer un fork del compilador de Rust y crear una nueva edición llamada "seph"
- Sería posible mantener las funciones existentes de Rust y agregar nuevas capacidades
Traits de funciones (efectos)
- Rust define traits para structs, pero también hace falta definir traits para funciones
- Podrían representar varias características de una función
- si la función provoca un panic o no
- si tiene un tamaño de stack fijo o no
- si la función se ejecuta hasta el final o si queda en espera a mitad de camino
- si la función es pura o no
- si la función ejecuta código inseguro o no
- si la función garantiza terminación o no
Capacidades en tiempo de compilación
- Muchos proyectos de Rust usan numerosos crates de terceros
- Estos crates aumentan el riesgo en la cadena de suministro
- Se propone agregar una capacidad que obligue a permitir explícitamente llamadas de funciones sensibles a la seguridad
- Para llamar funciones como
fs_write, habría que permitirlo de forma explícita
Pin, Move y préstamo de structs
Pin es un hack complejo para resolver problemas del borrow checker de Rust
- En lugar de
Pin, sería más razonable usar el marker trait Move
- Se propone agregar sintaxis para marcar campos de structs en estado de préstamo
- Se propone introducir el marker trait
Move y el trait Mover
Tiempo de compilación
- Adoptar la función
comptime de Zig para reemplazar el lenguaje de macros de Rust
- Agregar un pequeño intérprete que pueda ejecutar código en tiempo de compilación
- Usar Rust mismo en lugar del lenguaje de macros de Rust
Pequeños ajustes
- corregir
impl<T: Copy> for Range<T>
- corregir
derive con tipos asociados
- soportar AND lógico en expresiones
if-let
- mejorar la usabilidad de los punteros crudos
- agregar un argumento
Allocator a todos los tipos de colecciones integradas
Reflexiones finales
- Las capacidades asíncronas también necesitan mejoras, pero requieren una publicación aparte
- La mayoría de los cambios no son compatibles con Rust existente
- Podría hacer falta una nueva edición de Rust
- Está considerando hacer un fork del compilador directamente, sin agotarse con el proceso de RFC en GitHub
Resumen de GN⁺
- Rust no es perfecto a pesar de su atractivo inicial
- La evolución del lenguaje se ha ralentizado y muchas funciones inestables no se han incorporado a Rust estable
- Hay varias propuestas, como traits de funciones, capacidades en tiempo de compilación y mejoras a Pin y Move
- Estas propuestas podrían mejorar mucho la usabilidad de Rust
- Zig es otro lenguaje con funciones similares
1 comentarios
Comentarios en Hacker News
Opinión sobre el proceso de RFC de Rust
El problema de las dependencias en Rust
Estado actual de Rust
Opinión sobre la reescritura de Rust
Quejas sobre el proceso de toma de decisiones de Rust
Comentario de Josh Triplett
Opinión sobre la complejidad de Rust
Opinión sobre la velocidad de Rust
Opinión sobre las mejoras a Mutex
Opinión sobre la velocidad de desarrollo de funciones en Rust
Opinión sobre el diseño de funciones en Rust
Problemas del borrow checker de Rust
Funciones de compile-time en Rust
Funciones inestables de Rust
Opinión sobre la velocidad de desarrollo de Rust
Reescritura de Rust