Esta semana en Rust #4
¡Hola y bienvenidos a otro número de This Week in Rust!
Rust es un lenguaje de programación que permite a todo el mundo crear software fiable y eficiente.
Este es un resumen semanal de su progreso y comunidad.
¿Quieres que se mencione algo? Etiquétanos en @ThisWeekInRust en Twitter o @ThisWeekinRust en mastodon.social, o envíanos una solicitud de extracción.
¿Quieres participar?
Nos encantan las contribuciones.
This Week in Rust se desarrolla abiertamente en GitHub y los archivos se pueden ver en this-week-in-rust.org.
Si encuentra algún error en la edición de esta semana,
envíe un PR.
Actualizaciones de la comunidad de Rust 🥰
Oficial
- Una historia de insignias rotas y 23.000 características
- crates.io: Abandono del soporte para descargas no canónicas
- Los generadores están muertos, larga vida a las corrutinas, los generadores están de vuelta
Actualizaciones de proyectos/herramientas
- ¡Ratatui 0.24.0 está disponible! (Biblioteca de Rust que se trata de cocinar interfaces de usuario de terminales)
- ¡Lanzamiento de Git-Cliff 1.4.0! (generador de registro de cambios altamente personalizable)
- registro de cambios de rust-analyzer #205
- Informe de situación sobre rustc_codegen_cranelift (octubre de 2023)
Observaciones/Pensamientos
- Las dependencias del sistema son difíciles (así que las hicimos más fáciles)
- ¿Valió la pena Rust?
- ¿Puede Rust evitar errores lógicos?
- Serialización de Rust más rápida
- Lidiando con dependencias en Rust
- Cómo aprendí a dejar de preocuparme y amar el orden de bytes
- Cómo moverse rápido con Rust
- Iniciar una reunión virtual de Rust
- [video] Impl Trait aka Look ma', no generics! por Jon Gjengset
Tutoriales de Rust
- Lanzamientos totalmente automatizados para proyectos de Rust
- La belleza de un procesador de mensajes Rust
- interrumpe es hilos
- htmx, Rust & Shuttle: A New Rapid Prototyping Stack
- [video] No se requiere 🦀 asíncrono
Investigación
- Propiedad funcional a través de la unicidad fraccionaria
- Grading on a Curve: How Rust Can Facilitate New Contributors While Reducing Vulnerabilities
Miscelánea
Crate de la semana
El crate de esta semana es silkenweb, una biblioteca para crear aplicaciones web con una reactividad de grano fino y una separación clara de la lógica y la interfaz de usuario.
¡Gracias a henrik por la sugerencia!
[Por favor, envíen sus sugerencias y votos para la próxima semana] submit_crate!
Convocatoria a la participación
¿Siempre quisiste contribuir a proyectos de código abierto pero no sabías por dónde empezar?
¡Cada semana destacamos algunas tareas de la comunidad de Rust para que las elijas y comiences!
Algunas de estas tareas también pueden tener mentores disponibles, visite la página de tareas para obtener más información.
- pubgrub - Pasar a la edición 2021
- pubgrub - Arreglar CI para commits convencionales
- pubgrub - Cambiar el nombre del rango v0.3 a BoundedRange
- pubgrub - 'OfflineDependencyProvider' debería tener su propio módulo
- Ockam - Biblioteca - Adelgazar el 'NodeManagerWorker' para 'node / tcp'
- Ockam - Hacer que 'ockam vault delete' (sin args) sea interactivo pidiendo al usuario que elija de una lista de bóvedas para eliminar (tuify)
- Ockam - Comando - refactorizar para usar interfaces con tipo para implementar comandos para 'servicios'
Si eres propietario de un proyecto de Rust y estás buscando colaboradores, envía tareas aquí.
Actualizaciones del Proyecto Rust
408 solicitudes de extracción fueron [fusionadas en la última semana][fusionadas]
- -Zunpretty help: añadir los valores posibles que faltan
- NVPTX: permitir 'PassMode::D irect' para kernels ptx por ahora
- 'OptWithInfcx' nomenclatura de nits, simplificaciones ligadas a rasgos
- 'deduce_param_attrs': explica un caso de solo lectura
- 'rustc_interface' limpiezas
- 'stack_overflow: get_stackp' usando la bandera 'MAP_STACK' en dragonflybsd también
- add bootstrap flag '--skip-stage0-validation'
- añadir método para convertir construcciones internas en estables
- añadir soporte para i586-unknown-netbsd como destino
- añadir soporte para mipsel-unknown-netbsd, mips LE de 32 bits
- agregar características de destino para LoongArch
- añadir una forma de diferenciar los locales de argumento de otros locales en MIR estable
- permitir valores parcialmente movidos en la coincidencia
- permitir que las especificaciones de destino usen un tipo de LLD y componentes de enlace autónomos
- permite que los atributos '#[diagnostic::on_unimplemented]' tengan múltiples
- ¡Evite el internamiento repetido de 'env! ("CFG_RELEASE")'
- evite 'O(n^2)' ilimitado al analizar args de tipo anidado
- evitar construcciones/reconstrucciones innecesarias de 'rust-demangler'
- evitar la renumeración innecesaria durante el préstamo
- Mejoras en el error c-variádico
- considere los límites de alias al calcular la vida en NLL (pero esta vez suena con suerte)
- const stabilize 'mem::d iscriminant'
- Manejar correctamente los patrones OR anidados en exhaustividad
- cobertura: eliminar consistentemente los ID de contador no utilizados de las expresiones/asignaciones
- Cobertura: Reemplace las sangrías de depuración manual con intervalos de seguimiento anidados en 'contadores'
- crear 'windows/api.rs' para una FFI más segura
- crear una nueva variante de ConstantKind (ZeroSized) para StableMIR
- declarar la dependencia de 'rustc_target' de objeto/macho
- denegar el suministro de parámetros de efecto explícitos
- derivar 'Ord', 'PartialOrd' y 'Hash' para 'SocketAddr*'
- Detectar cuándo se implementa el rasgo para el tipo y sugerir importarlo
- no sugiera ''Trait<Assoc=arg>'' cuando está en trait impl
- no normalizar a un opaco no revelado cuando alcanzamos el límite de recursividad
- no tratar los tipos de cierres/corrutinas como parte de la API pública
- no use símbolos LFS64 en el idioma
- coma paren cerrado si 'capture_cfg' para evitar parenes desequilibrados
- Habilitar pruebas 'cg_clif' para RISCV64GC
- error tipock por ruptura ilegal con valor
- arreglar ICE: Restringir sugerencia de restricción de parámetros
- Se corrigió la falla al detectar un tipo demasiado grande después de agregar relleno
- corregir la comprobación de inseguridad del patrón const en línea en THIR
- Se corrige el espacio inicial que falta en la sugerencia
- Soluciona el problema de lint de variables no utilizadas para args en macro
- Corregir sugerencia de desenvoltura para fn asíncrono
- generar constantes agregadas en DataflowConstProp
- manejar 'ReErased' en las respuestas en el nuevo solucionador
- ignorar las duraciones duplicadas de RPIT en 'opaque_types_defined_by'
- implementar la reducción del ITB C para CSKY
- implementar bloques 'gen' en la edición de 2024
- Mejorar la interfaz de propiedades de Android-NDK
- mejorar algunos diagnósticos en torno a '? Límites de rasgos
- mejorar los mensajes de advertencia para el '#[diagnostic::on_unimplemented]'
- aumentar el alcance de 'panic_immediate_abort'
- intern 'LocalDefId' lista de la consulta 'opaque_types_defined_by'
- introducir '-C instrument-coverage=branch' a la cobertura de la rama de la puerta
- sugerencia '' no válida en 'Ok(T)'
- lint superponiendo rangos como una pasada separada
- marcar los archivos '.rmeta' como '/SAFESEH' en Windows x86
- marcar el constructor de 'BinaryHeap' como const fn
- Nunca consideres que los lanzamientos de puntero en bruto sean trivales
- Sobre el error de seguridad del objeto, mencione una nueva 'enumeración' como alternativa
- en importaciones no resueltas, sugiera una ruta de desambiguación si es necesario para evitar colisiones con elementos locales
- solo llame a 'mir_const_qualif' si es absolutamente necesario
- solo emite un error por enlace sin tamaño, en lugar de uno por uso
- envenenar 'check_well_formed' si los receptores del método no son válidos para evitar que typeck se ejecute en él
- imprimir patrón de argumento variádico en impresora HIR bonita
- restaurar correctamente la instantánea cuando no se puede recuperar el análisis ternario
- falla silenciosamente si ya se ha producido un error
- rand use getrandom para freeBSD (disponible desde 12.x)
- Refactorizar el tipo de visitante caminando
- reasignar las dependencias de carga a /rust/deps
- remove -Zdep-tasks
- eliminar los respaldos RNG de Apple y simplificar la implementación
- eliminar el código de plegado y agregar 'Const::internal()' a StableMIR
- eliminar el soporte para el alias '-Z instrument-coverage'
- Requerir que las entidades de destino coincidan exactamente durante la inserción
- devuelve múltiples errores de violación de la seguridad de los objetos y mejoras de código en la comprobación de la seguridad de los objetos
- devuelve LEN no fijado si Pat ha informado de un error
- reelaborar la coherencia negativa para considerar adecuadamente los implicamientos que solo se superponen parcialmente
- rustdoc: elide cross-crate default arguments generive
- rustdoc: use 'ThinVec' en 'GenericParamDefKind'
- ver a través de agregados en GVN
- Seguimiento de la ruta de movimiento separada entre Borrowck y Drop Elaboration
- comparte algo de lógica 'track_caller' entre interpret y codegen
- pequeñas limpiezas 'ty::p rint'
- algunas mejoras de diagnóstico de los bloques 'gen'
- Ocultar y cancelar errores de ciclo para la fuga de rasgos automáticos en opacos
- deja de decirle a la gente que envíe errores para los ICEs de características internas
- almacenar el valor 'desde' del atributo '#[estable]' en forma estructurada
- sugerir assoc fn 'new' cuando se intenta construir la tupla 'struct' con campos privados
- sugerir unwrap/expect for let binding type mismatch
- Soporte de simulador de tvOS en Apple Silicon para rustc
- Ajustar el intervalo de sugerencia para el atributo externo y apuntar al elemento que sigue al atributo interno no válido
- eleva 'Canónico' a 'rustc_type_ir'
- eleva 'ClauseKind' y 'PredicateKind' a 'rustc_type_ir'
- use ImageDataType para el tipo de asignación
- valida los valores 'feature' y 'since' dentro de '#[stable(...)] «
- cuando se encuentran rasgos sellados, tipos de puntos que lo implementan
- cuando se espera el argumento de cierre pero se encuentra el bloqueo proporcionar una sugerencia
- solucione el hecho de que 'check_mod_type_wf' puede devolver falsamente 'ErrorGuaranteed'
- Hora: use 'clock_gettime' en macOS
- Windows: admite suspensión de menos de milisegundos
- refactorizar algunas funciones ASCII 'char', 'u8' para que no tengan ramas
- añadir '#[inline]' a algunos métodos recalcitrantes 'ops::range'
- estabilizar las características del objetivo RISC-V ratificadas
- estabilizar '[const_]pointer_byte_offsets'
- Estabilizar el uso de ASM en línea con 'rustc_codegen_cranelift'
- futuros: añadir adaptadores 'TryAll' y 'TryAny'
- futuros: arreglar la implicación de 'Sincronizar' de 'FuturosDesordenados'
- futuros: proporcionar AtomicWaker si la función de atómico portátil está habilitada, incluso si el CAS atómico no está disponible
- codegen_gcc: agregar conceptos básicos para el comando 'test' en el sistema de compilación
- codegen_gcc: arreglar 'volatile_load'
- cargo toml: Permitir manifiestos sin versión
- cargo toml: Desacoplar el análisis sintáctico del sistema de internado
- cargo: shell: Escribe de una vez en lugar de en fragmentos
- cargo: añadir nuevos paquetes a '[workspace.members]' automáticamente
- cargo: subir mirando el resumen del índice 'enum'
- cargo: eliminar binarios duplicados durante la instalación
- cargo: eliminar la opción obsoleta de las advertencias '-Zcheck-cfg'
- rustfmt: error corregido causado por la combinación de 'match_arm_blocks' y 'control_brace_style'
- clippy: 'ignored_unit_patterns': comprobar &(), &&(),
- clippy: 'iter_without_into_iter': corrige los recortes de papel en la sugerencia y restringe el linting a los tipos exportados
- clippy: 'let_and_return': Envolver con paréntesis si es necesario
- clippy: agregue la pelusa 'waker_clone_and_wake' para verificar clones innecesarios de 'Waker'
- clippy: se corrige el paréntesis que falta en la ayuda de coma flotante subóptima
- clippy: ignora las palabras en minúsculas en 'doc_markdown'
- clippy: mover 'read_zero_byte_vec' a la guardería
- clippy: eliminar la función interna de 'clippy_utils'
- clippy: eliminar la categoría de pelusa 'internal_warn'
- Rust-Analyzer: hacer que 'extract_variable' ayude en su lugar
Clasificación del rendimiento del compilador de Rust
Esta semana tenemos dos conjuntos de resultados, ya que los de la semana pasada llegaron más tarde de la fecha de publicación:
Triaje realizado por @rylev y @simulacrum.
Rango de revisión: b9832e72.. 650991d
En ambos informes:
9 Regresiones, 7 Mejoras, 5 Mixtas
127 comparaciones de artefactos realizadas en total
RFC aprobados
Los cambios en Rust siguen el proceso de Rust RFC (solicitud de comentarios). Estos
son los RFC que se aprobaron para su implementación esta semana:
Período final de comentarios
Cada semana, el equipo anuncia el 'período final de comentarios' para las RFC y las relaciones públicas clave
que están llegando a una decisión. Expresa tus opiniones ahora.
RFC
- [disposición: fusionar] Reglas de captura de por vida 2024
- [disposición: fusionar] Agregar RFC "Actualización de política crates.io"
Seguimiento de problemas y solicitudes de incorporación de cambios
- [disposición: fusionar] Anular 'Waker::clone'_from para evitar clonar Wakers innecesariamente
- [Disposición: Fusionar] dropck_outlives comprobar si el testigo generador needs_drop
- [disposición: fusionar] tipo oculto más estricto wf-check
- [disposición: fusionar] Problema de seguimiento de los iteradores GroupBy y GroupByMut
- [disposition: merge] No entres en pánico en '