1 puntos por GN⁺ 2024-09-27 | 1 comentarios | Compartir por WhatsApp

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

 
GN⁺ 2024-09-27
Comentarios en Hacker News
  • Opinión sobre el proceso de RFC de Rust

    • Que el equipo central de Rust dificulte agregar nuevas funciones es una decisión correcta para mantener la consistencia y la previsibilidad del lenguaje
    • En el caso de Swift, la introducción de muchas funciones nuevas lo volvió complejo y al final eso llevó a abandonarlo
    • Es importante mantener Rust lo más conciso posible
  • El problema de las dependencias en Rust

    • Usando como ejemplo el crate Cargo-watch, aunque es una app simple para vigilar archivos, por sus dependencias termina teniendo 4 millones de líneas de código
  • Estado actual de Rust

    • Rust ahora está en la etapa de "trabajo para una adopción amplia"
    • Un desarrollo lento de funciones es algo natural y saludable, y decisiones de diseño equivocadas pueden causar un daño mayor
    • El atractivo de Rust no está tanto en las funciones nuevas, sino en que es un lenguaje listo para producción, con seguridad de memoria y sin GC
  • Opinión sobre la reescritura de Rust

    • Reescribir Rust en Rust parecía un chiste meta-satírico
  • Quejas sobre el proceso de toma de decisiones de Rust

    • Hay quejas sobre lo lento del proceso de decisión, pero esto es más un problema de personas y tiempo que un problema técnico
    • Algunas funciones antiguas están estancadas, pero muchas funciones no están destinadas a estabilizarse
  • Comentario de Josh Triplett

    • Señaló que un ejemplo específico era incorrecto y compartió un enlace relacionado
  • Opinión sobre la complejidad de Rust

    • Rust ya tiene muchas funciones, pero hay personas que siguen pidiendo más
    • Zig es más simple y rápido, y tiene menos drama en la comunidad
  • Opinión sobre la velocidad de Rust

    • A medida que el proyecto madura, se necesita mucho esfuerzo para pulir las funciones existentes
    • La colaboración entre equipos se ha vuelto más difícil, y hay objetivos del proyecto para mejorar eso
  • Opinión sobre las mejoras a Mutex

    • Ha habido mucho esfuerzo para mejorar las primitivas de sincronización de Rust
    • Se han agregado funciones como las async functions, y eso sirve como base para implementar funciones más complejas
  • Opinión sobre la velocidad de desarrollo de funciones en Rust

    • Hay personas que se quejan de que el lenguaje evoluciona demasiado rápido o demasiado lento
    • Algunas funciones avanzan con lentitud, pero hay mucha actividad en curso
  • Opinión sobre el diseño de funciones en Rust

    • En funciones como los function traits, recientemente ha habido una exploración de diseño importante
    • Las funciones de compile-time no pueden resolverse a nivel del lenguaje, y soluciones como WebAssembly parecen más probables
  • Problemas del borrow checker de Rust

    • Entender las estructuras autorreferenciales es un problema muy difícil
    • Ya se sabe cómo dar soporte a préstamos parciales, pero el problema es exponer eso en el sistema de tipos
  • Funciones de compile-time en Rust

    • Se escribió un RFC para hacer más poderosas las reglas de macros
    • Hace falta más trabajo para el análisis sintáctico programático
  • Funciones inestables de Rust

    • Hay muchas funciones inestables y hace falta ordenarlas
  • Opinión sobre la velocidad de desarrollo de Rust

    • La salida de Mozilla ralentizó el proyecto, pero aun así es mejor que ir por el camino equivocado
  • Reescritura de Rust