Esta semana en Rust #9
¡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 🥰
Actualizaciones de proyectos/herramientas
Observaciones/Pensamientos
- Vida útil temporal de Rust y "super let"
- Detrás de escena del formato de cadenas de Rust: ¡format_args! ()
- Perfilar programas de Rust de la manera más fácil
- Tres problemas de fijación
- ¿¡Rust std fs más lento que Python!? ¡No, es hardware!
- Leafpipe - Convirtiendo montones y montones de material audiovisual en bonitos estímulos
- Por qué es importante la seguridad de los tipos
Tutoriales de Rust
- "Rustificación" sin servidor: Aumente el rendimiento de AWS Lambda con Rust - AWS re:Invent talk
- [video] Acelerando el código de Rust con benchmarks y flamegraphs
- Hacer una ruta segura de Axum
Miscelánea
- Funciones divergentes - funciones que nunca regresan
- Primeros pasos con Loco, el framework web unipersonal para Rust
- Construyendo un interpolador de hipercubo (en Rust)
- Embajada en ESP: GPIO
- [video] Axum 0.6 a 0.7 en 5 pasos rápidos
Crate de la semana
El crate de esta semana es symbols, una utilidad para crear rápidamente macros proc para solidificar las tablas de la base de datos en enumeraciones que permiten comprobaciones de claves externas en tiempo de compilación.
¡Gracias a Marco Napetti por la autosugestión!
[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.
- Ockam - Biblioteca - Validar estructuras CBOR de acuerdo con el esquema cddl para 'nodos/models' misc
- Ockam - Comando - refactorizar para usar interfaces tipadas para implementar comandos para 'nodos'
- Ockam - Biblioteca - Adelgazar el 'NodeManagerWorker' para 'nodo / estado del nodo'
- zerocopy - Probar la salida de zerocopy-derive
- zerocopy - Use cargo-semver-checks para asegurarse de que la función 'derivar' no cambie la superficie de la API
- zerocopy - Verifique que el trabajo de CI 'all-jobs-succeeded' dependa de todos los demás trabajos
- Hyperswitch - Refactor - Nuvei - Validación de metadatos MCA
- Hyperswitch - Función - Mediodía - Sincronización con Referencia de Hyperswitch
- Hyperswitch - Función - Payme - Referencia de sincronización con Hyperswitch
- Hyperswitch - Error - Los errores de deserialización de metadatos MCA deben ser 4xx
- Hyperswitch - Función - Zen - Referencia de sincronización con Hyperswitch
Si eres propietario de un proyecto de Rust y estás buscando colaboradores, envía tareas aquí.
Actualizaciones del Proyecto Rust
369 solicitudes de extracción fueron [fusionadas en la última semana][fusionadas]
- add '-Zfunction-return={keep,thunk-extern}' option
- cuenta por '!' brazo en cola 'match' expr
- añadir puerta de función 'never_patterns'
- añadir 'pretty_terminator' a bastante estable-mir
- añadir una suposición de que el índice es entrante a 'slice::get_unchecked'
- 'rustc_span': Usar la distancia de edición correcta para las sugerencias
- se agregaron métodos de rasgo de enlazador 'linker_arg(s)' para link-arg para que tengan el prefijo "-Wl", para argumentos de enlazador similares a cc y no textualmente
- Permitir la configuración de etiquetas 'RLA' a través de 'rustbot'
- evitar expansiones de cierre por registro
- 'generic_const_exprs': sugerir agregar la función, no usarla
- cambiar la representación de 'SwitchTarget' en StableMIR
- 'rustc_hir_typeck': Arreglar ICE al sondear la alternativa de función no ASCII
- constProp: eliminar correctamente const si se le asigna un valor desconocido
- Cobertura: omitir intervalos que no se pueden desexpandir de nuevo al cuerpo de la función
- Tamaño del código de corte para hash de características
- detectar cortes similares a los de Python y sugerir cómo solucionarlo
- detectar y rechazar sugerencias 'repr(Rust)' malformadas
- dispose 'llvm::TargetMachines' antes de que se elimine 'llvm::Context'
- no sugiera '!' para la ruta en la llamada a la función si tiene args genéricos
- devuelve ansiosamente 'ExprKind::Err' en 'yield'/'await' en un contexto de corrutina incorrecto
- efectos: ejecuta 'enforce_context_effects' para todas las llamadas a métodos
- explique una buena razón por la que LocalValue no almacena el tipo de local
- arreglar ICE: 'fn_arg_names: elemento inesperado DefId(..) «
- corrige los argumentos de 'PartialEq' cuando '#[const_trait]' está habilitado
- arreglar un ICE cuando un valtree no se evaluó
- arreglar el ICE del analizador de attrs
- Se soluciona el problema de sugerir desenvolver/esperar para el campo abreviado
- dar un mensaje de error amigable para el desarrollo para perfiles de configuración incorrectos
- Controlar el límite de recursividad para subtipos y predicados bien formados
- implementar el estacionamiento de subprocesos para XOUS
- Errores más específicos cuando los tipos externos terminan en lugares donde no deberían
- Nuevo solucionador: Mejorar las anotaciones de los instrumentos
- en Fn arg discrepancia para una ruta fn, sugerir un cierre
- pase + función de atómicos forzados para riscv32{i,im,imc}-unknown-none-elf
- realizar optimizaciones de LTO con wasm-ld + -Clinker-plugin-lto
- Imprimir lista de características de destino faltantes al llamar a una función con características de destino fuera de un bloque no seguro
- proporcionar una sugerencia estructurada para la discordancia de tipos en el bucle
- eliminar la suposición memcpy-on-equal-ptrs
- reemplace 'once_cell::sync::OnceCell' con std 'OnceLock'
- Informar de errores en el servidor de trabajo heredados a través de variables de entorno
- restaurar '#! [no_builtins]' en la LTO
- [restringir qué símbolos se pueden usar en cadenas de formato '#[diagnostic::on_unimplemented]']](https://github.com/rust-lang/rust/pull/118495)
- rustc: armonizar 'DefKind' y 'DefPathData'
- simplificar la sangría en la impresión THIR
- mensaje de ajuste en ADT con construcción de campos privados
- Ajustar la recuperación de análisis sintáctico de enumeraciones, para exprs y patrones de brazo de coincidencia
- advertir contra el uso de intrínsecos que se salgan del alcance de nuestro modelo de memoria
- añadir más información a la instancia de StableMIR
- codegen, miri: se corrige el cálculo del desplazamiento de un campo sin tamaño en una 'estructura' empaquetada
- Miri: Admite una alineación 'prometedora' para la verificación de alineación simbólica
- miri: Máscaras de bits SIMD: use 'redondear a múltiplo de 8' en lugar de 'sujetar al menos a 8'
- miri: añadir nuevos intrínsecos SIMD
- miri: eliminar la heurística de GC de préstamos apilados
- añadir también 'is_empty' a const raw slices
- mover las API de procedencia expuesta a una puerta de características separada
- estabilizar literales de cadena C
- agregar API de subcadena para 'OsStr'
- optimize 'str::iter::Chars::advance_by'
- añadir 'track_caller' para operaciones aritivas
- expandir la especialización de iteración in situ a Flatten, FlatMap y ArrayChunks
- solucionador de carga: Quitar prioridad a la versión sin Rust en el solucionador de MSRV
- solucionador de carga: Eliminar el manejo de errores de deps públicos no utilizados
- cargo toml: Desacoplar la lógica del esquema
- cargo: añadir '--public' para 'cargo add'
- Cargo: añadir más comentarios en el documento para los cambios en GC
- cargo: reorder los indicadores '--remap-path-prefix' para '-Zbuild-std'
- cargo: se corrigió que la desinstalación de un binario en ejecución falló en Windows
- Cargo: corrige que la visualización del recuento de errores es diferente cuando solo queda un error
- cargo: haz que cargo agregue --optional '' <dep>crea una característica '' <dep>= '"dep:<dep>'
- cargo: incluir la lista declarada de características en la huella dactilar para '-Zcheck-cfg'
- cargo: eliminar el comentario obsoleto
- rustdoc: Añadido resaltado para comentarios en la declaración de artículos
- rustdoc-search: permitir espacios alrededor de ':' en la consulta de ruta
- clippy: 'missing_asserts_for_indexing': aceptar comprobaciones de igualdad de longitud
- clippy: 'option_if_let_else': no se activa en expresiones que devuelven '()'
- clippy: 'redundant_closure_call': evita la palabra clave 'async' duplicada cuando se activa en el cierre que devuelve el bloque 'async'
- clippy: 'redundant_guards': atrapa 'is_empty', 'starts_with' y 'ends_with' en rebanadas y 'str's
- clippy: agregar lint contra pruebas unitarias en doctests
- clippy: permitir 'permitir' 'upper_case_acronyms' en variantes de 'enumeración'
- clippy: expandiendo lint 'blocks_in_if_conditions' para verificar que coincida con expr también
- clippy: nueva pelusa: 'repeat_vec_with_capacity'
- rust-analyzer: depurar el uso de la raíz del espacio de trabajo de carga como 'cwd'
- rust-analyzer: implementa la finalización de los campos invocables
- Rust-analyzer: soporte inicial para sugerencia implícita de incrustación de caída
- rust-analyzer: no hacer el diagnóstico 'MissingMatchArms' para el cuerpo del fósforo vacío
- rust-analyzer: mejora el manejo de errores para las sentencias 'let' de nivel superior
Clasificación del rendimiento del compilador de Rust
Un pequeño número de cambios de rendimiento que, por desgracia, dieron lugar a bastantes regresiones de rendimiento. Una gran parte de esas regresiones estaban en rustdoc y se consideraron aceptables, ya que rustdoc ahora está haciendo estrictamente más trabajo. Algunas otras regresiones ya se han corregido y es de esperar que pronto se fusionen. La última de las regresiones aún está bajo investigación, pero esperemos que se resuelva pronto.
Triaje realizado por @rylev. Rango de revisión: df0295f0.. 9358642E
Resumen:
| (instrucciones:u) | media | Gama | Recuento | |:----------------------------------:|:-----:|:--------------:|:-----:| | Regresiones ❌
(primaria) | 3.0% | [0,2%, 12,3%] | 53 | | Regresiones ❌
(secundaria) | 4.1% | [0.2%, 11.6%] | 102 | | Mejoras ✅
(primaria) | -0,3% | [-0.5%, -0.1%] | 65 | | Mejoras ✅
(secundaria) | -0,6% | [-1,2%, -0,2%] | 25 | | Todos ❌✅ (primario) | 1.1% | [-0,5%, 12,3%] | 118 |4 regresiones, 1 mejoras, 1 mixta; 1 de ellos en rollups 60 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:
- Esta semana no se aprobaron RFC.
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
- Ninguna RFC entró en el Período de Comentarios Final esta semana.
Seguimiento de problemas y solicitudes de incorporación de cambios
- [disposición: fusionar] Agregar lint contra comparaciones ambiguas de puntero ancho
- [disposición: fusionar] Estabilizar 'ptr::{from_ref, from_mut'}
- [disposición: fusionar] Problema de seguimiento para 'any::type_name_of_val'
- [disposición: fusionar] rustdoc: permitir cambiar el tamaño de la barra lateral / ocultar la barra superior
- [disposición: fusionar] No fusionar los atributos cfg y doc(cfg) para reexportaciones
- [disposición: fusionar] Convertir 'IMPLIED_BOUNDS_ENTAILMENT' en un error grave de una pelusa
- [disposición: fusionar] Exhaustividad: revelar correctamente los tipos opacos
- [Disposición: Fusionar] Arreglar los límites implícitos de los elementos Fn/Const y la comprobación de WF
- [disposición: fusionar] garantizar que char y u32 son compatibles con ABI
- [disposición: fusionar] Usar la clasificación de versiones para todas las clasificaciones
- [disposición: fusionar] Problema de seguimiento para 'arc_unwrap_or_clone'
- [disposición: fusionar] añade un número de columna a 'dbg!() «
- [disposition: merge] Permitir cualquier bloque de expresión 'const' en 'thread_local!'
- [disposición: fusionar] comprobar el tipo de retorno 'FnDef' para WF
Referencia del idioma
- Ninguna RFC de referencia lingüística entró en el Período Final de Comentarios esta semana.
Directrices de código inseguro
- Ninguna RFC de la Guía de Código Inseguro entró en el Período Final de Comentarios esta semana.
RFCs nuevas y actualizadas
- RFC: Hacer que Cargo respete la versión mínima admitida de Rust (MSRV) al seleccionar dependencias
- RFC: Rasgo para ! Punteros finos de tamaño
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:
- Ninguna RFC emitió una convocatoria para pruebas esta semana.
Si usted es un implementador de funciones 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.
Próximos eventos
Eventos oxidados entre 2023-12-06 - 2024-01-03 🦀
Virtual
- 06/12/2023 | Virtual (Indianápolis, IN, EE. UU.) | Indy Rust
- 10/12/2023 | Virtual (Cardiff, Reino Unido) | Rust y C++ Cardiff
- 12/12/2023 | Virtual | Materia principal
- 12/12/2023 | Virtual (Dallas, TX, EE. UU.) | Rust de Dallas
- 14/12/2023 | Virtual (Charlottesville, Carolina del Norte, EE. UU.) | Reunión de Charlottesville Rust
- 14/12/2023 | Virtual (Núremberg, DE) | Rust Nuremberg
- 17/12/2023 | Virtual (Tel Aviv, IL) | Expertos en código
- 18/12/2023 | Virtual (Múnich, DE) | Rust Munich
- 19/12/2023 | Virtual (Berlín, DE) | OpenTechSchool Berlín
- 19/12/2023 | Virtual (Washington, DC, EE. UU.) | Rust DC
- 20/12/2023 | Virtual (Vancouver, Columbia Británica, CA) | Rust de Vancouver
- 26/12/2023 | Virtual (Dallas, TX, EE. UU.) | Rust de Dallas
- 28/12/2023 | Virtual (Charlottesville, Carolina del Norte, EE. UU.) | Reunión de Charlottesville Rust
- 03/01/2024 | Virtual (Indianápolis, IN, EE. UU.) | Indy Rust
Asia
- 10/12/2023 | Tokio, JP | Reunión de Rust en Tokio
- 16/12/2023 | Delhi, IN | Rust Delhi
Europa
- 06/12/2023 | Colonia, DE | Colonia Rust
- 07/12/2023 | Aarhus, Dinamarca | Rust Aarhus
- 07/12/2023 | Lille, FR | Rust Lille
- 07/12/2023 | Londres, Reino Unido | Grupo de usuarios de Rust London
- 14/12/2023 | Augsburgo, DE | Rust - Programación de sistemas modernos en Leipzig
- 14/12/2023 | Basilea, CH | Rust Basel
- 18/12/2023 | Múnich, DE + Virtual | Rust Munich
- 19/12/2023 | Heidelberg, DE | Elimina tus insectos y oxida tus motores
- 19/12/2023 | Leipzig, DE | Rust - Programación de sistemas modernos en Leipzig
América del Norte
- 07/12/2023 | Seattle, WA, EE. UU. | Grupo de usuarios de Seattle Rust
- 11/12/2023 | Minneapolis, MN, EE. UU. | Reunión de Rust en Minneapolis
- 12/12/2023 | Seattle, WA, EE. UU. | Cap Hill Rust Codificación/Hackeo/Aprendizaje
- 12/12/2023 | Nueva York, NY, EE. UU. | Rust de Nueva York
- 13/12/2023 | Chicago, IL, EE. UU. | Rust de plato profundo
- 14/12/2023 | Lehi, UT, EE. UU. | Rust de Utah
- 14/12/2023 | Mountain View, CA, EE. UU. | Reunión de Rust de Mountain View
- 15/12/2023 | Somerville, MA, EE. UU. | Reunión de Boston Rust
- 19/12/2023 | San Francisco, CA, EE. UU. | Grupo de Estudio de la Roya de San Francisco
- 27/12/2023 | Austin, TX, EE. UU. | Rust ATX
Oceanía
- 11/12/2023 | Perth, WA, AU | Grupo de Meetup de Rust Perth
Si está ejecutando un evento de Rust, agréguelo al calendario para obtener que se menciona aquí. Recuerde agregar un enlace al evento también. Envíe un correo electrónico al [Equipo de la comunidad de Rust] comunidad para acceder.
Empleos
Por favor, vea el último hilo de Quién está contratando en r/rust
Frase de la semana
el firmware de NVIDIA, dijo Airlie, viene con un conjunto de archivos de inclusión que, a su vez, definen estructuras que cambian con el tiempo. Para hacer frente a estos cambios, el controlador va a necesitar algún tipo de generación automatizada de ABI; señaló que los desarrolladores que trabajan en el controlador de GPU M1 de Apple se han encontrado con el mismo problema. Este problema podría ser más fácil de abordar, sugirió, si el controlador, como el controlador M1, se reescribiera en Rust.
– Jonathan Corbet parafraseando a David Airlie en Linux Weekly News
¡Gracias a Brian Kung por la sugerencia!
¡Por favor, envíe sus cotizaciones y vote para la próxima semana!
This Week in Rust es editado por: nellshamrell, llogiq, cdmistman, ericseppanen, extrawurst, andrewpollack, U007D, kolharsam, joelmarcey, mariannegoldin, bennyvasquez.
El alojamiento de la lista de correo electrónico está patrocinado por The Rust Foundation