Esta semana en Rust #19
¡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
- Resultados de la Encuesta Anual de Roya 2023
- Rust participa en Google Summer of Code 2024
- Selecciones de Representantes de marzo del Consejo de Liderazgo
Fundación
- Reserve la fecha: RustConf 2024 – 10-13 de septiembre
- El segundo informe de la iniciativa de seguridad detalla los avances de seguridad de Rust
Actualizaciones de proyectos/herramientas
- Bevy 0.13
- Bevy XPBD 0.4: Agnosticismo del colisionador, reelaboración de capas y Bevy 0.13
- uv: Empaquetado de Python en Rust
- git-cliff: ¿Qué hay de nuevo en la versión 2.0.0? (generador de registro de cambios altamente personalizable)
- rustc_codegen_gcc: Informe de Progreso #30
- Retrospectiva de actualizaciones de características de RustRover Q4 2023
- registro de cambios de rust-analyzer #221
- Anunciando Stabby 3.0
- argmin_testfunctions 0.2.0: funciones de prueba para problemas de optimización en Rust y Python
- vscode-rustup liberado: interfaz con rustup como extensión VSCode
- Publicado OpenPGP-card-tools 0.10.0. El proyecto proporciona la herramienta de línea de comandos 'oct' para inspeccionar, configurar y usar dispositivos de tarjeta OpenPGP como Nitrokey o Yubikey.
- Cliente de Rust para Timeplus Proton SQL Streaming
Observaciones/Pensamientos
- FuturosDesordenados y el orden de los futuros
- Herramientas de Rust: 8 herramientas que aumentarán su productividad
- Escribiendo mi modelo mental de inseguridad
- ¿Cómo puede Rust ser tan rápido en los puntos de referencia de TechEmpower Web Framework?
Tutoriales de Rust
- De 1 s a 4 ms
- Traducción de datos de OpenStreetMap a HTML5 Canvas con Rust y WebAssembly
- ¡macros_rule!
- Implementación de la autenticación JWT en Rust
- Implementación de Axum en Lambda y ECS, mediante el adaptador web de Lambda
- Interoperabilidad de Rust/C++ Parte 3 - Cxx
- [FR] Les closures en Rust
- [video] Safe Rust NO ES SEGURO!? (CVE-RS)
Miscelánea
Crate de la semana
El crate de esta semana es kind, una caja auxiliar para UUID con tipo.
¡Gracias a Denys Séguret por la autosugestión!
[Por favor, envíen sus sugerencias y votos para la próxima semana] submit_crate!
Convocatoria de pruebas
Un paso importante para la implementación de RFC es que las personas experimenten con el método
implementación y dar retroalimentación, especialmente antes de la estabilización. Lo siguiente
Las RFC se beneficiarían de las pruebas de usuario antes de seguir adelante:
Si usted es un implementador de características y desea que su RFC aparezca en la lista anterior, agregue la nueva 'llamada para pruebas'
a su RFC junto con un comentario que proporcione instrucciones de prueba y/o orientación sobre qué aspecto (s) de la función
necesitan pruebas.
Llamado a la participación; Proyectos y ponentes
CFP - Proyectos
¿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.
- Ockam - Resaltado de sintaxis para bloques de código cercados, en la salida de ayuda de comandos, en Linux funciona
- Ockam - Apagar el Trabajador/Procesador si falla la inicialización
- Ockam - Se ha mejorado la salida del ticket del proyecto ockam y la información no es opaca
- Hyperswitch - [FEATURE] : añadir el campo 'offset' a la lista de disputas
- Hyperswitch - [FEATURE]: añadir el campo 'offset' a la lista de mandatos
- Hyperswitch - [CARACTERÍSTICA]: agregar soporte de paginación para la lista de clientes
Si eres propietario de un proyecto de Rust y estás buscando colaboradores, envía tareas aquí.
CFP - Ponentes
¿Eres un orador nuevo o experimentado que busca un lugar para compartir algo genial? Esta sección destaca los eventos que se están planificando y están aceptando presentaciones para unirse a su evento como orador.
Si usted es un organizador de eventos que espera ampliar el alcance de su evento, envíe un enlace al sitio web de envío a través de un PR a TWiR.
Actualizaciones del Proyecto Rust
508 solicitudes de extracción fueron [fusionadas en la última semana][fusionadas]
- Habilitar implícitamente EVEX512 si AVX512 está habilitado
- 'const_mut_refs': permitir punteros mutables a estáticas
- 'macro_rules': Conserva todos los intervalos de metavariables en una tabla lateral global
- agregar APIs para obtener elementos externos
- añadir la opción de configuración 'rust.frame-pointers'
- añadir más comprobaciones de 'unnamed_fields' durante el análisis HIR
- permitir que los visitantes AST y HIR devuelvan 'ControlFlow'
- permitir referencias mutables en valores const cuando apuntan a que no hay memoria
- Evalúe siempre las constantes libres y las estáticas, incluso si ocurrieron errores anteriores
- evitar un ICE en el diagnóstico
- tener menos confianza cuando no se comprueba la seguridad del objeto de la sugerencia 'dyn'
- comprobar la firma de llamada normalizada para WF en mir typeck
- Considere los superrasgos auto-rasgos de la referencia de rasgo principal en dyn upcasting
- continuar compilando después de errores 'check_mod_type_wf'
- continuar la compilación incluso si fallan las comprobaciones impl inherentes
- continuar informando de los errores restantes en lugar de descartarlos silenciosamente
- detectar cuándo se puede eliminar la llamada al método en el argumento para cumplir con el enlace de rasgo fallido
- arreglar un ICE en la pelusa de recursividad
- ignorar los tipos sin tamaño al intentar determinar el tamaño del tipo original
- hacer que 'ConstPropLint' lint se ejecute en promocionados
- mejorar los errores de tipo de rasgo 'asíncrono Fn'
- tratar adecuadamente los tipos de alias débiles como tipos propios de impls
- cambiar el nombre de 'ConstPropLint' a 'KnownPanicsLint'
- almacenar inicializadores estáticos en metadatos en lugar del MIR de estática
- sugerir 'into_iter()' cuando se llama al método 'Iterator' en 'impl IntoIterator'
- desencadenar 'unsafe_code' lint en las invocaciones de 'global_asm'
- Usar cumplimiento en la siguiente coherencia del solucionador de rasgos
- miri: implementar intrínsecos x86 AVX
- optimizar el manejo de 'delayed_bug'
- Optimizar los protectores contra venenos cuando se construye STD con panic=abort
- revisión 'Diagnostic' y 'DiagnosticBuilder'
- implementar 'Instant' para UEFI
- implementar 'Default' para 'AsciiChar'
- almacenar 'core::str::CharSearcher::utf8_size' como u8
- hacer que 'Archivo::read_to_end' sea menos especial
- implementar los rasgos 'NonZero' genéricamente
- hacer genérico 'NonZero::get'
- hacer que 'io::BorrowedCursor::advance' sea seguro
- make 'is_nonoverlapping #[inline]'
- especializarse en aplanar iteradores con un solo elemento interno
- especializarse en algunos métodos de 'io::Chain'
- renombrar 'MaybeUninit::write_slice'
- no use 'mem::zeroed' en 'vec::IntoIter'
- optimizar 'VecDeque::d rain' para rangos (semi)abiertos
- arreglar el 'Cursor::remove_{next,prev}' de BTreeMap
- añadir 'Future' y 'IntoFuture' al preludio de 2024
- hashbrown: ajustes en línea a 'HashTable'
- hashbrown: make 'HashSet::insert' return OccupiedEntry
- codegen_gcc: maneja correctamente '--use-system-gcc'
- codegen_gcc: implementar dummy emit=llvm-ir
- CodeGen_gcc: usa la destrucción de Rust predeterminada
- codegen_cranelift: arreglar 'simd_select_bitmask' en sistemas big-endian
- CodeGen_cranelift: Se corrigió la verificación de hash de descarga en sistemas big-endian
- cargo add: Asegúrese de que los usuarios sepan que se está creando una función
- cargo add: Eliminar período inconsistente
- prueba de carga: Sugerir '--' para los argumentos libtest
- cargo: respete 'rust-version' al generar lockfile
- Rustdoc: Maneja correctamente los nombres largos de las cajas en el móvil
- Rustdoc: Reexportaciones entre cajas: renderizar correctamente los parámetros enlazados en tiempo de ejecución en orden de origen, incluso si los parámetros enlazados en tiempo de ejecución están presentes
- Rustdoc: Se corrigió el manejo de la función 'doc_auto_cfg' para los atributos CFG en la reexportación de globos
- rustfmt: corregir error al intentar formatear UTF8 no normalizado
- formatear los límites de rasgos 'asíncronos' en rustfmt
- añadir clippy a la lista conocida 'cfg'
- clippy: añadir nueva pelusa 'deprecated_clippy_cfg_attr'
- clippy: 'case_sensitive_file_extension_comparisons': No se activa en extensiones de solo dígitos
- clippy: 'implied_bounds_in_impls': evitar la pelusa en tys asociados superpuestos
- clippy: 'incompatible_msrv': permite expresiones que provienen de la eliminación de azúcar
- clippy: 'new_without_default': Ahora emite en const fns
- clippy: permitir literales negativos en 'redundant_guards'
- clippy: comprobar los elementos de rasgo en 'min_ident_chars'
- clippy: manejo de conflictos de salida de prueba predeterminado a error
- clippy: asegúrese de que la sintaxis de ASM detecte 'global_asm!' y 'asm!' solo en arquitecturas x86
- clippy: añadir comprobación de protecciones idénticas en lint 'match_same_arms'
- clippy: hacer que '#[permitir]' funcione en el campo para 'pub_underscore_fields'
- clippy: ignorar elementos importados en 'min_ident_chars'
- rust-analyzer: activar en el nivel superior los archivos 'Cargo.toml' y 'rust-project.json'
- rust-analyzer: deduplicar referencias cuando algunas de ellas están en expansiones de macros
- rust-analyzer: crear alias al cambiar el nombre de una importación
- Rust-analyzer: agregue un diagnóstico de permiso no exhaustivo
- Rust-Analyzer: agregar diagnóstico de identidad no resuelta
- rust-analyzer: admite múltiples tabulaciones para finalizaciones en VSCode
- rust-analyzer: se ha añadido soporte básico para las llamadas 'become' expr/tail
- rust-analyzer: no añadir '' antes de '{'
- rust-analyzer: no mostrar discrepancias de tipo para discrepancias '{unknown}' a discrepancias que no son '{desconocidas}'
- rust-analyzer: corrige el diagnóstico de "devolución innecesaria" para las declaraciones de elementos finales
- rust-analyzer: arreglar los scripts de compilación que no se reconstruyen en algunas ocasiones
- rust-analyzer: corrige falsos positivos para el diagnóstico de "otra cosa innecesaria"
- rust-analyzer: arreglar los fragmentos que se colocan hacia la izquierda de donde deberían estar
- rust-analyzer: mejora la recuperación en '=' para el inicializador y el patrón del campo de registro
- rust-analyzer: solo rasgos completos en 'impl .. for'
- Rust-Analyzer: Colocar fragmentos correctamente en las ayudas de edición múltiple
- rust-analyzer: servidor que cuelga en la tarea de script de compilación
Clasificación del rendimiento del compilador de Rust
Relativamente pocos PR que afecten al rendimiento, pero mejoras masivas gracias a la
actualización a LLVM 18 (PR #12005), así como la fusión de dos compiladores relacionados
consultas (PR #120919) y otras pequeñas mejoras de un paquete acumulativo (PR #121055).
Triaje realizado por @pnkfelix.
Rango de revisión:
74c3f5a1.. 5af21304
3 regresiones, 1 mejoras, 6 mixtas; 1 de ellos en rollups
65 comparaciones de artefactos realizadas en total
RFC aprobados
Los cambios en Rust siguen el proceso de Rust RFC (solicitud de comentarios). Estos
son las 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 los PR clave
que están llegando a una decisión. Expresa tus opiniones ahora.
RFC
Seguimiento de problemas y solicitudes de incorporación de cambios
Rust
- [Disposición: Fusionar] Cambiar la equidad para que los aglutinantes no dependan de la subtipificación
- [disposición: fusionar] Implementar RFC 3373: Evitar definiciones no locales en funciones
- [disposición: fusionar] Problema de seguimiento para 'waker_getters'
- [disposición: fusionar] [Estabilizar el espacio de nombres '#[diagnóstico]' y el atributo '#[diagnóstico::on_unimplemented]']](https://github.com/rust-lang/rust/pull/119888)
- [disposición: fusionar] Problema de seguimiento para cfg-target-abi
- [disposición: fusionar] hacer que las consts no tipificadas por PartialEq como patrones sean un error grave
- [disposición: cerrar] Permitir la conversión de ?-desde 'Resultado<T, E>' en funciones que devuelven 'Opción<Resultado<T, E>>'
- [disposición: fusionar] Añadir impl de lectura para &stdin
- [disposición: fusionar] Crear 'barrera::nuevo()' const
- [disposición: cerrar] Implementar 'Futuro' para 'Opción