Esta semana en Rust #17
¡Hola y bienvenidos a otro número de This Week in Rust!
Rust
¿Quieres que se mencione algo? Etiquétanos en @ThisWeekInRust en Twitter o @ThisWeekinRust en mastodon.social, o envíanos una solicitud de extracción
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
envíe un PR.
- API del sistema de archivos Rust y C (proyecto Rust-for-Linux)
- Progreso hacia un compilador de Rust basado en GCC
- Paleta 0.7.4
- Motor de juego Fyrox 0.33
- Dos meses en Servo: mejor diseño en línea, Rust estable y más!
- Propiedad y flujo de datos en GPUI
- Contratos de función para Kani
- Slint 1.4 lanzado con aspecto adicional y API mejoradas
- Esta semana en Fluvio #58 - El sistema de streaming de código abierto de Fluvio se puede implementar localmente como un solo binario
- Lanzamiento de Quickwit 0.7: compatibilidad con la API de Elasticsearch y ganancias de rendimiento del 30%
- Cómo comparar el código de Rust con Criterion
- Jugando con combinadores de nom y analizadores
- ¿A dónde se va el tiempo? El problema de Rust con las compilaciones lentas
- ESP32 Embedded Rust at the HAL: I2C Scanner
- Construimos cadenas X.509 para que usted no tenga que hacerlo
- Rendimiento de generación de procesos en Rust
- Presentación de Foundations: nuestra biblioteca de bases de servicio Rust de código abierto
- Videojuegos gráficos vectoriales de alto rendimiento
- Algunos cambios recientes y notables en Rust
- Visualización de la programación dinámica con FireDBG
- [video] Nueve reglas para estructuras de datos en Rust
- Guías de diagnóstico de fugas de memoria de Rust mediante gráficos de llamas
- WebSockets - La Guía para Principiantes
- Escribir cronjobs en Rust
- Simultaneidad intrépida con Rust, gatos y algunos PI de Raspberry
- Macros de Rust que se encargan aún más de la plantilla de Lambda
- Depuración de instrumentación de Tokio
El crate de esta semana es Apache Iceberg Rust, una implementación de Rust de un formato de tabla para grandes conjuntos de datos analíticos.
¡Gracias a Renjie Liu por la autosugerencia!
[Por favor, envíen sus sugerencias y votos para la próxima semana] submit_crate!
Algunas de estas tareas también pueden tener mentores disponibles, visite la página de tareas para obtener más información.
- GreptimeTeam - Corrige un error menor en 'join_path' para un código más elegante
- GreptimeTeam - Añadir pruebas para 'MetaPeerClientRef' para mejorar la estabilidad de GreptimeDB
- Ockam - Resaltado de sintaxis para bloques de código cercados, en la salida de ayuda de comandos, en Linux funciona
- Ockam - Se ha mejorado la salida de 'ticket de proyecto ockam' y la información no es opaca
- Ockam - Se ha mejorado la salida tanto para 'ockam project ticket' como para 'ockam project enroll', con soporte para '--output json'
- Hyperswitch - [FIX]: Añadir una validación de configuración para los trabajadores
- Hyperswitch - [CARACTERÍSTICA]: Crear un punto final de eliminación para la tabla de configuración
- Hyperswitch - [CARACTERÍSTICA]: Cobertura de código de configuración para pruebas locales y CI
- Hyperswitch - [FEATURE]: Tener get_required_value usar ValidationError en OptionExt
Si eres propietario de un proyecto de Rust y estás buscando colaboradores, envía tareas aquí.
¿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.
Esta semana no se han presentado convocatorias de ponencias.
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.
Se presentaron 409 solicitudes de incorporación de cambios [fusionadas en la última semana][fusionadas]
- 'pattern_analysis': deja que 'ctor_sub_tys' devuelvan cualquier Iterador que quieran
- 'pattern_analysis': reutiliza la mayor parte de la impl 'DeconstructedPat Debug'
- añadir '#[coverage(off)]' a los cierres introducidos por '#[test]' y '#[bench]'
- añadir la puerta de características 'min_exhaustive_patterns'
- agregue la opción inestable para reducir el tamaño binario de la biblioteca dinámica...
- normalizar siempre 'LoweredTy' en el nuevo solucionador
- afirmar que se pasa un solo ámbito a 'for_scope'
- evitar ICE en el rasgo sin pelusa 'dyn'
- Patrones const en línea de comprobación prestada
- clasificar los argumentos de cierre en un patrón refutable en el error de argumento
- Const-eval interning: deshacerse del recorrido basado en tipos
- cobertura: desmantelar 'Instrumentor' y aplanar el refinamiento del tramo
- [cobertura: no instrumentar las funciones '#[automatically_derived]']]](https://github.com/rust-lang/rust/pull/120185)
- Cobertura: Nunca emitas regiones de cobertura mal ordenadas
- no normalizar la firma de cierre al construir una corrección de compatibilidad 'FnOnce'
- no llames a las funciones 'walk_' directamente si hay un método 'visit_' equivalente
- no dispares 'OPAQUE_HIDDEN_INFERRED_BOUND' en el retorno de tamaño de AFIT
- no resolver manualmente los cierres asíncronos en 'rustc_resolve'
- emitir sugerencia al intentar escribir rangos exclusivos como '.. <'
- arreglar asumir y aserción en subprocesos de salto
- corrección: Corrección de la sugerencia arg para el rasgo impl
- mejorar el manejo de expresiones en patrones
- mejorar el manejo de números en 'IntoDiagnosticArg'
- hacer '#! [allow_internal_unstable(..)] ' trabajar con 'stmt_expr_attributes'
- implementar manualmente rasgos derivados 'NonZero'
- modificar las estructuras GenericArg y Term para usar reglas de procedencia estrictas
- condición de movimiento que habilita el pase a 'is_enabled'
- normalizar los tipos de campo antes de comprobar la validez
- solo ensamblar candidatos enlazados a alias para alias rígidos
- recuperarse correctamente del ataque de arrastre en el cuerpo
- proporcionar más contexto sobre el desbordamiento de evaluación 'impl' recursiva
- riscv32im-risc0-zkvm-elf: add target
- scopeTree: eliminar 'destruction_scopes' como no utilizado
- split Diagnostics for Uncommon Codepoints: Add List to Display Characters Involved
- Rasgo de división de tait e impl en la lógica de los elementos de la asociación
- dejar de usar derivada en 'rustc_pattern_analysis'
- sincronización de subárbol para 'rustc_codegen_cranelift'
- sugerir 'array::from_fn' para la inicialización de array
- use 'assert_unchecked' en lugar de 'asumir' intrínseco en la biblioteca estándar
- interpretar: 'project_downcast': no hacer ICE para variantes deshabitadas
- retorna un número finito de AllocIds por ConstAllocation en Miri
- Miri: añadir '__cxa_thread_atexit_impl' en FreeBSD
- Miri: añadir error portable-atomic-util a la lista de "errores encontrados"
- Miri: FreeBSD añade *soporte de interceptación de llamadas STAT
- solo usar conjuntos de bits densos en análisis de flujo de datos
- eliminar todos los ConstPropNonsense
- eliminar el rasgo StructuralEq
- aumentar el rendimiento del iterador 'interscalar(_with)'
- estabilizar métodos de matriz
- std: hacer que el inicializador 'HEAP' nunca esté en línea
- añadir familia de rasgos 'AsyncFn'
- add 'ErrCode'
- add 'NonZero*::count_ones'
- añadir 'str::Lines::remainder'
- ajustar el comportamiento de 'read_dir' y 'ReadDir' en la implementación de Windows: comprobar si existe la ruta de búsqueda
- core: add 'Fromcore::ascii::Char' implementaciones
- manejar errores de memoria insuficiente en 'io:Read::read_to_end()'
- impl 'De<&[T; N]>' por 'Vaca<[T]>'
- rc,sync: no crear referencias a valores no inicializados
- implementación inicial de 'str::from_raw_parts[_mut]'
- eliminar el tratamiento de casos especiales de 'vec.split_off(0)'
- reescribir la API del cursor 'BTreeMap' usando huecos
- especialice 'Bytes' en 'StdinLock<'_>'
- estabilizar 'slice_group_by'
- cambiar la dirección del alias 'NonZero'
- regex: hacer públicos los metadatos adicionales del prefiltro
- cargo: 'docs(ref)': Intenta mejorar los documentos de autenticación de registro
- cargo: 'fix(cli)': Mejora de los errores relacionados con el script de carga
- cargo: 'fix(config)': Dejar de usar archivos que no son de extensión
- cargo: 'refactor(shell)': Usa una nueva y elegante API de estilo
- cargo: doc: reemplace la versión con 'latest' para el enlace del servidor de trabajo
- cargo: arreglar la descripción de la opción de lista que comienza con mayúsculas
- cargo: refactorizar: eliminar la opción innecesaria en 'Frescura::D irty'
- cargo: test: corrección de diseño de datos para 'x86_64-unknown-none-gnu'
- rustfmt: macro de envoltura que comienza con bloques de cuerpo anidados
- rustfmt: formatear la línea diff para que se pueda hacer clic fácilmente
- clippy: añadir pelusa 'to_string_trait_impl'
- clippy: añadir nueva pelusa 'unnecessary_result_map_or_else'
- clippy: falso positivo: 'needless_return_with_question_mark' con conversión de error implícita
- clippy: 'redundant_closure_for_method_calls' Sugerir rutas relativas para módulos locales
- clippy: 'multiple_crate_versions': añadir una opción de configuración para cajas duplicadas permitidas
- clippy: 'never_loop': reconocer bloques 'try' desazucarados
- clippy: evite el cierre redundante de linting cuando el destinatario está marcado como '#[track_caller]'
- clippy: no adviertas sobre la aritmética de módulos cuando se compara con cero
- clippy: assert* en varias condiciones después de desenrollar hará que lint 'nonminimal_bool' emita una advertencia
- clippy: corrige las sugerencias incorrectas generadas por 'manual_retain' lint
- clippy: falso positivo en 'redundant_closure_call' cuando los cierres se pasan a macros
- clippy: sugerir la opción de configuración existente si se encuentra una
- clippy: avisa si se utiliza un elemento que viene de una versión más reciente que MSRV
- rust-analyzer: add postfix completion for let else
- Rust-analyzer: filtra los campos deshabilitados por CFG al reducir los patrones de registro
- rust-analyzer: reemplazado 'adjusted_display_range' por 'adjusted_display_range_new' en 'mismatched_arg_count'
Esta fue una semana muy tranquila en la que solo una solicitud de incorporación de cambios tuvo un impacto real en el rendimiento general del compilador. La eliminación del rasgo interno 'StructuralEq' supuso una mejora de aproximadamente el 0,4% de media en casi 50 puntos de referencia del mundo real.
Triaje realizado por @rylev
d6b151fc7.. 5c9c3c7
Resumen:
(instrucciones:u) | media | Gama | Recuento |
---|---|---|---|
Regresiones ❌ (primaria) | 0.5% | [0.3%, 0.7%] | 5 |
Regresiones ❌ (secundaria) | 0.5% | [0.2%, 1.4%] | 10 |
Mejoras ✅ (primaria) | -0,5% | [-1,5%, -0,2%] | 48 |
Mejoras ✅ (secundaria) | -2,3% | [-7,7%, -0,4%] | 36 |
Todos ❌✅ (primario) | -0,4% | [-1,5%, 0,7%] | 53 |
Los cambios en Rust siguen el proceso de Rust RFC (solicitud de comentarios)
Cada semana, el equipo
- [disposición: fusionar] mut estático: permitir referencia mutable a tipos arbitrarios, no solo rebanadas y matrices
- [disposición: fusionar] Hacer que async-fn-in-trait sea compatible con un futuro concreto en la implementación
- [disposición: fusionar] Decisión: semántica del atributo '#[expect]'
- [disposición: fusionar] guía de estilo: Al romper binops se maneja mejor el primer operando de varias líneas
- [disposición: fusionar] guía de estilo: Modificar el formato 'Cargo.toml' para no poner la descripción al final
- [disposición: fusionar] style-guide: Formato de un solo tipo asociado donde las cláusulas en la misma línea
- [disposición: fusionar] PartialEq, PartialOrd: actualizar y sincronizar el manejo de cadenas transitivas
- [disposition: merge] 'std::error::Error' -> Implementaciones de rasgos: mejora de la consistencia de las vidas por vida
- Ninguna RFC de referencia lingüística entró en el Período Final de Comentarios esta semana.
- Ninguna RFC de la Guía de Código Inseguro entró en el Período Final de Comentarios esta semana.
Las RFC se beneficiarían de las pruebas de usuario antes de seguir adelante:
- Ninguna RFC emitió una convocatoria para pruebas esta semana.
necesitan pruebas.
Eventos oxidados entre 2024-01-31 - 2024-02-28 🦀
- 31/01/2024 | Virtual (Cardiff, Reino Unido) | Rust y C++ Cardiff
- 01/02/2024 | Virtual + Presencial (Barcelona, ES) | BcnRust
- 01/02/2024 | Virtual (Berlín, DE) | OpenTechSchool Berlín + Rust Berlin
- 03/02/2024 | Virtual + Presencial (Bruselas, Bélgica) | FOSDEM 2024
- 03/02/2024 | Virtual (Kampala, UG) | Círculo de Rust
- 04/02/2024 | Virtual | Especialista en Rust
- 07/02/2024 | Virtual (Indianápolis, IN, EE. UU.) | Indy Rust
- 08/02/2024 | Virtual (Charlottesville, Carolina del Norte, EE. UU.) | Reunión de Charlottesville Rust
- 08/02/2024 | Virtual (Nürnberg, DE) | Rust Nüremberg
- 10/02/2024 | Virtual (Cracovia, PL) | Stacja IT Kraków
- 10/02/2024 | Virtual (Wrocław, PL) | Stacja IT Wrocław
- 13/02/2024 | Virtual (Dallas, TX, EE. UU.) | Rust de Dallas
- 15/02/2024 | Virtual (Berlín, DE) | OpenTechSchool Berlín + Rust Berlin
- 15/02/2024 | Virtual + Presencial (Praga, CZ) | Rust República Checa
- 2024-02-21 | Virtual (Vancouver, Columbia Británica, CA) | Rust de Vancouver
- 22/02/2024 | Virtual (Charlottesville, Carolina del Norte, EE. UU.) | Reunión de Charlottesville Rust
- 10/02/2024 | Hyderabad, IN | Idioma Rust Hyderabad
- 01/02/2024 | Híbrido (Barcelona, ES) | BcnRust
- 03/02/2024 | Bruselas, BE | FOSDEM '24
- 03/02/2024 | Nürnberg, BY, DE | Campamento de Rust de Paessler 2024
- 05/02/2024 | Bruselas, BE | Grupo de usuarios de Rust de Bélgica
- 06/02/2024 | Bremen, DE | Encuentro de Rust Bremen
- 07/02/2024 | Colonia, DE | Colonia Rust
- 07/02/2024 | Londres, Reino Unido | Grupo de usuarios de Rust London
- 08/02/2024 | Berna, CH | Rust Bern
- 15/02/2024 | Praga, CZ - Virtual + Presencial | Rust República Checa
- 2024-02-21 | Lyon, FR | Rust Lyon
- 22/02/2024 | Aarhus, Dinamarca | Rust Aarhus
- 07/02/2024 | Brookline, MA, EE. UU. | Reunión de Boston Rust
- 08/02/2024 | Lehi, UT, EE. UU. | Rust de Utah
- 12/02/2024 | Minneapolis, MN, EE. UU. | Reunión de Rust en Minneapolis
- 13/02/2024 | Nueva York, NY, EE. UU. | Rust de Nueva York
- 13/02/2024 | Seattle, WA, EE. UU. | Cap Hill Rust Codificación/Hackeo/Aprendizaje
- 15/02/2024 | Boston, MA, EE. UU. | Reunión de Boston Rust
- 15/02/2024 | Seattle, WA, EE. UU. | Grupo de usuarios de Seattle Rust
- 2024-02-20 | San Francisco, CA, EE. UU. | Grupo de Estudio de la Roya de San Francisco
- 28/02/2024 | Austin, TX, EE. UU. | Rust ATX
- 06/02/2024 | Perth, WA, AU | Grupo de reunión de Perth Rust
- 27/02/2024 | Canberra, ACT, AU | Grupo de usuarios de Canberra Rust
- 27/02/2024 | Sídney, Nueva Gales del Sur, Australia | Rust Sydney
Si está ejecutando un evento de Rust, agréguelo al calendario
Envíe un correo electrónico al [Equipo de la comunidad de Rust] comunidad para acceder.
Por favor, vea el último hilo de Quién está contratando en r/rust
La gran estabilidad de este programa es lo que me hizo usar Rust para todo en el futuro. El servicio social tiene un tiempo de actividad del 100% desde hace casi 2,5 años. Ha procesado 12,9 TB de tráfico y sigue usando 1,5 MB de RAM como el día que lo ejecutamos hace 2,5 años. El uso de recursos es tan bajo que se me llenan los ojos de lágrimas. Como alguien que viene de Java, la falta de errores OOM o problemas de GC ha sido un gran beneficio de Rust y nunca me veo usando ningún otro lenguaje de programación. Soy un gran admirador de la mentalidad de "constrúyelo una vez, pero constrúyelo de la manera correcta", por lo que el Rust es siempre mi elección.
¡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