Esta semana en Rust #2
¡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
Fundación
Boletines informativos
Actualizaciones de proyectos/herramientas
- Anuncio de EtherCrab, una implementación de Rust del protocolo de automatización industrial EtherCAT
- registro de cambios de rust-analyzer #203
Observaciones/Pensamientos
- ¿Por qué Rust asíncrono?
- Compile Times and Code Graphs
- Containerizar aplicaciones de Rust en Ubuntu y Alpine, con GitHub Actions
Tutoriales de Rust
- Un nivel de tipo contiene una operación para una lista heterogénea que utiliza tipos asociados
- Uso de GraphQL en Rust
- Escribir analizadores sintácticos en Winnow
Investigación
- Yuga: Detección automática de errores de anotación de por vida en el lenguaje Rust
- Análisis rápido de todo el programa basado en resúmenes para identificar accesos inseguros a la memoria en Rust
Miscelánea
- Reflexiones de Eurorust
- Reflexiones de EuroRust 2023: ¿Para qué sirve una conferencia?
- [audio] RustShip: Graphite - Gráficos Rasterizados y Vectoriales en Rust
Crate de la semana
El crate de esta semana es rinf, una biblioteca para escribir Rust en Flutter.
¡Gracias a Kim Dong-Hyun por la autosugerencia!
[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.
- Hyperswitch (Hacktoberfest) - [OpenNode] Conversión de unidades monetarias
- Hyperswitch (Hacktoberfest) - [Stax] Conversión de unidades monetarias
- Hyperswitch (Hacktoberfest) - [ACI] Conversión de unidades monetarias
- Ockam - Hacer que 'ockam space show' (sin argumentos) sea interactivo pidiendo al usuario que elija de una lista de nombres de espacios para mostrar (tuify)
- Ockam - Mejorar el texto 'ockam tcp-inlet delete --help' (comando 'clap')
- Ockam - Inscribir "correo electrónico: no se permite el carácter '+'"
Si eres propietario de un proyecto de Rust y estás buscando colaboradores, envía tareas aquí.
Actualizaciones del Proyecto Rust
Se presentaron 409 solicitudes de incorporación de cambios [fusionadas en la última semana][fusionadas]
- 'const_eval': permite firmas de puntero de función que contengan &mut T en contextos const
- Limpiezas 'rustc_hir_pretty'
- añadir la devolución de llamada 'Config::hash_untracked_state'
- agregue la extensión V (vector) a la especificación de destino riscv64-linux-android
- también considere call y yield como MIR SSA
- ampliar las consecuencias de la inicialización recursiva de TLS
- limpiar 'rustc_features' un poco más
- calcular los ámbitos de préstamo de NLL utilizando el modelo de Polonio
- const-eval: permitir llamar a funciones con características targat deshabilitadas en tiempo de compilación en WASM
- const-eval: hacer que la desalineación sea un error grave
- Cobertura: Separe la extracción inicial del intervalo del procesamiento del intervalo
- Detectar cierre de estilo rubí en el analizador
- No comprobar si hay predicados imposibles en const-prop lint
- no haga UB en la deref ptr colgante, en su lugar verifique los entrantes en las proyecciones
- exhaustividad: reelaboración de la división del constructor
- Manejar explícitamente la fuga de rasgos automáticos en coherencia
- arreglar el estado de salida / estado de espera en plataformas 'cfg(unix)' que no sean Unix
- Corregir la comprobación de desbordamiento en los patrones de rango
- manejar varios atributos '#[diagnostic::on_unimplemented]' correctamente
- implementar la opción de exclusión de '-Clink-self-contained=-linker'
- Mejorar el diagnóstico de check-cfg
- Mejorar el manejo de errores de aserción con condiciones muy largas
- en smir use 'FxIndexMap' para almacenar identificadores indexados
- enlazador: también pasa los indicadores de compresión debuginfo
- hacer que las revisiones de "solicitar cambios" se apliquen 'S-waiting-on-author'
- en caso de error de tipo que implique el cierre, evite ICE
- en el error de tipo del argumento de llamada de cierre, apunte a llamadas anteriores que afectaron a la inferencia
- opt-dist: deshabilitar características no utilizadas para crates en mesa
- Pasar las marcas de corrección de compatibilidad de rustc usando la variable de entorno
- evitar más pelusas de patrón inalcanzables espurias
- evitar que se muestren métodos de impls generales de rasgos extranjeros no disponibles para que aparezcan en los resultados de búsqueda
- evitar pelusas espurias de 'patrón inalcanzable'
- relacionar alias ty con varianza
- eliminar 'DefiningAnchor::Bubble' de la comprobación de wf opaco
- muestra el discriminante 'enum' si se usa un repr compatible
- estabilizar 'async fn' y return-position 'impl Trait' en trait
- normalizar estructuralmente para el cierre
- sugiera agregar 'return' si el para semi que puede coaccionar al tipo de retorno fn
- sugerir el bloque de etiquetado si 'break' está en el bloque desnudo
- sugerir límites de rasgos para el tipo asociado utilizado en el parámetro de tipo
- soporte AIX en la biblioteca estándar de Rust
- use 'PatKind::Error' cuando un valor const de ADT tenga violación
- use la variable env para controlar los identificadores de subprocesos en 'rustc_log'
- agregar la capacidad de obtener líneas/nombre de archivo para Span en smir
- miri: implementa los intrínsecos 'llvm.x86.sse41.*'
- miri: hacer que la generación de NaN no sea determinista
- copiar matrices de 1 elemento como escalares, no vectores
- optimizar 'librustc_driver.so' con BOLT
- optimizar el archivo leído en 'Config::verify'
- optimizar la compresión sobre los iteradores de matriz
- estabilizar 'atomic_from_ptr'
- estabilizar 'const_maybe_uninit_assume_init_read'
- stabilize '{IpAddr, Ipv6Addr}::to_canonical'
- impl Not, Bit{And,Or}{,Assign} para direcciones IP
- impl Default for ExitCode
- añadir invariante a 'Vec::p op' que lleva la tapa '<' si aparece correctamente
- implementar 'BufRead' para 'VecDeque<u8>'
- implementar 'OnceCell/Lock::try_insert()'
- implementar 'slice::split_once' y 'slice::rsplit_once'
- añadir variantes de 'String::from_utf16' explicit-endian
- implemente FusedIterator para DecodeUtf16 cuando el iterador interno lo haga
- implementar 'sys::args' para UEFI
- en línea 'Bytes::next' y 'Bytes::size_hint'
- make 'try_exists' return 'Ok(true)' para Windows Unix Sockets
- marque 'new_in' como 'const' para las colecciones BTree
- regex-automata/meta: revertir la ampliación de la optimización del sufijo inverso
- regex-lite: ajustar el límite de anidamiento en la prueba de desbordamiento de pila
- regex: aflojar las reglas compatibles con ASCII + mejorar la optimización del sufijo inverso
- regex, regex-automata: corrige la compilación de doctests en arquitecturas de 32 bits
- regex-lite: corrige la compilación de doctests en arquitecturas de 32 bits
- regex: revertir las optimizaciones recientes del conjunto de intervalos de sintaxis de expresiones regulares
- cargo: 'fix(install)': Sugerir una versión alternativa en caso de fallo de MSRV
- cargo: añadir un mensaje detallado cuando la ruta de la carpeta de destino no es válida
- cargo: añadir el nombre y la versión del paquete a los mensajes de advertencia
- cargo: admite la configuración de dependencias 'públicas' con el espacio de trabajo deps
- rustfmt: soporte let-chains
- rustdoc-search: añadir desambiguador impl a los elementos asociados duplicados
- rustdoc: oculta '#[repr(transparent)]' si no forma parte de la ABI pública
- rustdoc: mostrar el nombre de la crate junto al logotipo más pequeño
- clippy: 'get_first': pelusa en rebanadas no primitivas
- clippy: 'manual_is_ascii_check': Comprueba también 'is_ascii_hexdigt'
- clippy: 'unnecessary_lazy_eval': reduce la aplicabilidad si el cierre tiene una anotación de tipo de retorno
- clippy: arreglar ICE en la pelusa interna del autor
- rust-analyzer: add 'replace_is_ok_with_if_let_ok' assist
- rust-analyzer: add 'replace_is_some_with_if_let_some' assist
- rust-analyzer: agregar mensajes de diagnóstico para caracteres y errores literales de bytes
- rust-analyzer: haga que el cursor seleccione en '_tmp'
- rust-analyzer: diagnóstico de literales de cadena
Clasificación del rendimiento del compilador de Rust
En general, una semana interesante en cuanto a rendimiento, con pequeñas mejoras en un vasto número de puntos de referencia que parecen superar a un conjunto aislado de índices de referencia (ligeramente) Regresiones. Incluía una serie de recuentos de instrucciones de regresión de PR, pero no no importa para los tiempos de ciclo, además de una misteriosa regresión a 'check_match' y 'mir_borrowck' de la reelaboración de la división del constructor (consulte el informe sobre la 116391 de PR para detalles), y un impresionante conjunto de mejoras a partir de la inserción automática pequeñas funciones en todas las crates (consulte el informe sobre PR 116505 para obtener más detalles).
Triaje realizado por @pnkfelix. Rango de revisión: 84d44dd1.. B9832E72
4 regresiones, 1 mejoras, 4 mixtas; 3 de ellos en rollups 84 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 los RP clave que están llegando a una decisión. Expresa tus opiniones ahora.
RFC
- [disposición: fusionar] Edición 2024
Tracking Issues & PRs
- [disposición: fusionar] Problema de seguimiento para result_option_inspect
- [disposición: fusionar] Permitir valores parcialmente movidos en coincidencia
- [disposición: fusionar] 'read_dir' tiene un comportamiento inesperado para '""'
- [disposición: fusionar] rustdoc: alinear la insignia de estabilidad con la línea de base en lugar de con la parte inferior
RFC nuevas y actualizadas
- [nuevo] RFC: Sustitución de dependencias públicas/privadas
- [nuevo] añadir semántica flotante RFC
- [nuevo] Reserve la palabra clave 'gen' en la edición de 2024 e inicie una implementación experimental de los generadores 'Iterator'
Llamada para 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-10-18 - 2023-11-15 🦀
Virtual
- 18/10/2023 | Virtual (Cardiff, Reino Unido)| Rust y C++ Cardiff
- 18/10/2023 | Virtual (Vancouver, Columbia Británica, CA) | Rust de Vancouver
- 19/10/2023 | Virtual (Charlottesville, Carolina del Norte, EE. UU.) | Reunión de Charlottesville Rust
- 19/10/2023 | Virtual (Stuttgart, DE) | Comunidad Rust Stuttgart
- 24/10/2023 | Virtual (Berlín, DE) | OpenTechSchool Berlín
- 24/10/2023 | Virtual (Washington, DC, EE. UU.) | Rust DC
- 31/10/2023 | Virtual (Dallas, TX, EE. UU.) | Rust de Dallas
- 01/11/2023 | Virtual (Cardiff, Reino Unido)| Rust y C++ Cardiff
- 01/11/2023 | Virtual (Indianápolis, IN, EE. UU.) | Indy Rust
- 02/11/2023 | Virtual (Charlottesville, Carolina del Norte, EE. UU.) | Reunión de Charlottesville Rust
- 09/11/2023 | Virtual (Núremberg, DE) | Rust Nuremberg
- 15/11/2023 | Virtual (Cardiff, Reino Unido)| Rust y C++ Cardiff
- 15/11/2023 | Virtual (Richmond, VA, EE. UU.) | Conferencia de plomeros de Linux
Asia
- 18/10/2023 | Tokio, JP | Reunión de Rust en Tokio
- 20/10/2023 | Singapur, SG | Encuentro de Rust Singapur
- 21/10/2023 | Pune, IN | Rust Pune
Europa
- 19/10/2023 | Ámsterdam, Países Bajos | Grupo de desarrolladores de Rust Amsterdam
- 19/10/2023 | Wrocław, PL | Rust de Breslavia
- 20/10/2023 | Saarbrücken, DE | Sarre herrumbroso
- 24/10/2023 | Bucarest, RO | Reunión de Rust Lang Bucarest
- 25/10/2023 | Dublín, IE | Rust Dublín
- 25/10/2023 | París, FR | Rust Paris
- 25/10/2023 | Zagreb, RRHH | impl Zagreb para Rust
- 26/10/2023 | Augsburgo, DE | Rust - Programación de sistemas modernos en Leipzig
- 26/10/2023 | Delft, NL | Rust Nederland
- 26/10/2023 | Lille, FR | Rust Lille
- 30/10/2022 | Estocolmo, SE | Estocolmo Rust
- 01/11/2023 | Colonia, DE | Colonia Rust
- 07/11/2023 | Bruselas, BE | Rust Aarhus
- 09/11/2023 | Barcelona, ES | BcnRust
- 09/11/2023 | Reading, Reino Unido | Taller de lectura de Rust
América del Norte
- 18/10/2023 | Brookline, MA, EE. UU. | Reunión de Boston Rust
- 19/10/2023 | Mountain View, CA, EE. UU. | Reunión de Rust de Mountain View
- 19/10/2023 | Nashville, Tennessee, Estados Unidos | Desarrolladores de Music City Rust
- 19/10/2023 | Seattle, WA, EE. UU. | Grupo de usuarios de Seattle Rust
- 24/10/2023 | Pasadena, CA, EE. UU. | Pasadena Thursday Go/Rust
- 25/10/2023 | Austin, TX, EE. UU. | Rust ATX
- 25/10/2023 | Chicago, IL, EE. UU. | Rust de plato profundo
- 04/11/2023 | Boulder, CO, EE. UU. | Reunión de Boulder Rust
- 15/11/2023 | Richmond, VA, EE. UU. + Virtual | Conferencia de plomeros de Linux
Oceanía
- 17/10/2023 | Christchurch, Nueva Zelanda | Grupo de encuentro de Christchurch Rust
- 9/10/2023 | Sídney, Nueva Gales del Sur, Australia | Rust Sydney
- 26/10/2023 | Brisbane, QLD, AU | Rust Brisbane
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
Cuando los tiempos de compilación de Rust se vuelven más lentos después de agregar algunas macros de procedimiento:
A eso lo llamamos la sintaxis 🦀
¡Gracias a Jacob Pratt 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