Esta semana en Rust #16
¡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 🥰
Fundación
Actualizaciones de proyectos/herramientas
- Revisión de Ruffle 2023
- Cuatro desafíos que aún no ha abordado el control de cargas
- rustc_codegen_gcc: Informe de Progreso #29
- Hoja de ruta para el backend de Xilem en 2024
- registro de cambios de rust-analyzer #217
- pq-sys 0.5.0
- Novedades de SeaORM 0.12.x
- Rust en chips Espressif - 24 de enero de 2024
Observaciones/Pensamientos
- Hacer que los binarios de Rust sean más pequeños por defecto
- Mi mejor y peor punto muerto en Rust
- ¿Por qué SQL se cuelga exactamente durante 940s? TCP y Async Rust!
- Hacer que el Rust asíncrono sea confiable
- Identificando la pistola de fuga de memoria collect::() de Rust
- [video] La embajada ya está en crates.io
- [video] Los frameworks web full stack de Rust tienen un futuro brillante
- [video] Rust Halifax - Rust & Tell #1
- [video] Por qué Rust seguirá creciendo en 2024
Tutoriales de Rust
- Uso de 'mem::take' para reducir las asignaciones de montón
- Escribir tu propio linter de Rust
- Usando Serde en Rust
- Análisis de JSON en Rust
- Desafío de mil millones de filas: tutorial de Rust
- Embajada en ESP: Temporizadores
- Soporte de LoRa en SparkFun expLoRaBLE Thing Plus con Rust
- Cómo trabajar con ! Tipos de tamaño en Rust
- Rocket - inicio de sesión en la aplicación web
- Rocket - acceder a la configuración personalizada en las rutas
- Pruebas con tempfiles y variables de entorno
Investigación
- Perfilado del aprendizaje de lenguajes de programación
- Rust-lancet: Corrección automatizada de la violación de la regla de propiedad con preservación del comportamiento
Crate de la semana
El crate de esta semana es apistos, una herramienta de documentación de OpenAPI.
¡Gracias a Romain Lebran por la autosugerencia!
[Por favor, envíen sus sugerencias y votos para la próxima semana] submit_crate!
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 - Tener una sola instancia de 'SqlxDatabase' por proceso
- Ockam - Mejorar las migraciones de bases de datos para emparejar código de migración sql y rust
- Ockam - Haz que install.sh no falle durante el proceso de actualización
- Hyperswitch - [CARACTERÍSTICA]: Hacer que la configuración de caché sea configurable en tiempo de ejecución
- Hyperswitch - [CARACTERÍSTICA]: Implementar Code cov para el sistema local usando makefile
- Hyperswitch - [CARACTERÍSTICA]: Cobertura de código de configuración para pruebas locales y CI
- Hyperswitch - [CARACTERÍSTICA]: Agregar tipo de dominio para el secreto de cliente
- 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í.
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
453 solicitudes de extracción fueron [fusionadas en la última semana][fusionadas]
- 'HashMap'/'HashSet': implementaciones 'plegadas' hacia adelante de iteradores
- 'dead_code' trata '#[repr(transparent)]' de la misma manera que '#[repr(C)]'
- 'fix(rust-analyzer)': use la nueva especificación pkgid para comparar
- 'large_assignments': Lint en argumentos grandes específicos pasados a funciones
- 'maybe_lint_impl_trait': separa 'is_downgradable' de 'is_object_safe'
- 'never_patterns': Cuenta los enlaces '!' como divergentes
- 'never_patterns': comprobación de tipos nunca patrones
- 'pat_analysis': No confíe en 'VariantId' contiguos fuera de rustc
- 'pattern_analysis': Eliminar 'Ty: Copiar' enlazado
- 'proc_macro': Añade el constructor 'Literal::c_string'
- 'single_use_lifetimes': No sugiera borrar vidas con límites
- añadir '#[track_caller]' a la implación "From implica Into"
- add 'Ipv6Addr::is_ipv4_mapped'
- añadir 'PatKind::Err' a AST/HIR
- añadir mensaje de ayuda para el error 'exclusive_range_pattern'
- añadir alias privado de tipo 'NonZero<T>'
- añadir forma de expresar que no se esperan valores con check-cfg
- añadido 'NonZeroXxx::from_mut(_unchecked)?'
- permitir cualquier bloque de expresión 'const' en 'thread_local!'
- use siempre RevealAll para consultas constantes
- evitar los ICE en los nombres de rasgos sin 'dyn'
- consolidar la lógica en torno a la resolución de impls de rasgos de corrutina integrados
- denegar invocaciones de macro entre llaves en let-else
- detectar el error 'NulInCStr' antes
- mejorar 'let_underscore_lock'
- Atributo 'collapse_debuginfo' mejorado, se agregó una bandera de línea de comandos
- hacer 'unsafe_op_in_unsafe_fn' migrado en la edición 2024
- restringir el acceso al campo privado de los índices newtype
- simplificar 'closure_env_ty' y 'closure_env_param'
- sugerir '.swap()' cuando se encuentran préstamos conflictivos de 'mem::swap' en un segmento
- desaprobar lint 'unstable_features' y hacer uso de él en el compilador
- hacer que el nombre del pase MIR sea una constante en tiempo de compilación
- hacer sonar 'stable_mir::with_tables'
- SMIR: hacer que los campos "privados" restantes sean realmente privados
- usar un intérprete en el subproceso de salto MIR
- usar el modo de compatibilidad de límites implícitos en MIR borrowck
- validar los tipos de AggregateKind en MIR
- sándwich de optimizaciones MIR entre DSE
- almacenar en caché las consultas locales con clave DefId sin hash
- Empaquetar u128 en el compilador para mitigar la nueva alineación
- use UnhashMap para algunos mapas más
- plegar identidades aritméticas en GVN
- optimizar la creación de matrices grandes en const-eval
- Implementar rasgos de especialización de iterador en más adaptadores
- optimizar la visualización de 'EscapeAscii' y la depuración de 'CStr'
- estabilizar 'bound_map'
- estabilizar 'round_ties_even'
- estabilizar 'slice_first_last_chunk'
- estabilizar 'offset_of!'
- implementar operaciones enteras estrictas que entren en pánico en caso de desbordamiento
- core: introduce 'split_at{,_mut}_checked'
- un-hide 'iter::repeat_n'
- corregida la desasignación con un asignador incorrecto en '(A)Rc::from_box_in'
- use 'bool' en lugar de 'PartialOrd' como valor devuelto del cierre de comparación en '{slice,Iterator}::is_sorted_by'
- regex: hacer que 'Input::new' se proteja contra implementaciones incorrectas de 'AsRef'
- cargo-rustdoc: use la misma ruta por lógica de formato de salida en todas partes
- cargo: use la especificación pkgid en los mensajes JSON
- cargo: reasignar solo prefijo común
- cargo doc: agregue un encabezado para resaltar "Cómo encontrar funciones habilitadas en dependencias"
- cargo: heredar el servidor de trabajo de env para todo tipo de corredor
- Cargo: Arreglar el enlace de seguimiento preciso-prelanzamiento
- cargo: volver a pasar un 'values()' vacío cuando no se declaran características
- cargo: mejorar la configuración de CI de GitHub Actions
- rustdoc: Permite enlaces en encabezados
- rustdoc: ocultar modales al cambiar el tamaño de la barra lateral
- rustfmt: comprueba que un token puede comenzar un tipo no terminal antes de analizarlo como un macro arg
- rustfmt: añadir la opción de configuración 'generated_marker_line_search_limit'
- clippy: 'blocks_in_conditions': no advertir si la condición proviene de la macro
- clippy: 'default_numeric_fallback': mejora la detección de contexto const
- clippy: 'no_effect_underscore_binding: _' se pueden usar variables con prefijo
- clippy: 'unused_io_amount' captura 'Ok(_)'s
- clippy: añadir pelusa 'suspicious_open_options'
- clippy: maneja correctamente el tipo relativo en 'trait_duplication_in_bounds' lint
- clippy: no emita 'derive_partial_eq_without_eq' lint si el tipo tiene el atributo 'non_exhaustive'
- clippy: encuentra referencias de ruta de función al principio del mismo paso de lint
- clippy: arreglar FP en 'semicolon_if_nothing_returned'
- clippy: corrige 'multiple_crate_versions' para normalizar correctamente los nombres de los paquetes y evitar perder el local
- clippy: se corrigió el intervalo de advertencia para 'no_effect_underscore_binding'
- clippy: respeta los atributos '#[allow]' en 'single_call_fn' lint
- clippy: mejorar la redacción y corregir el enlace muerto en la descripción de 'arc_with_non_send_sync' lint
- rust-analyzer: añadir "una" granularidad de importación
- rust-analyzer: añadir una nueva configuración para permitir el cambio de nombre de las definiciones no locales
- Rust-Analyzer: Acciones de tipo Goto para desplazamientos de rasgos notables
- rust-analyzer: muestra información de valor adicional al pasar el cursor sobre literales
- Rust-analyzer: muestra rasgos implementados notables al pasar el mouse
- rust-analyzer: añadir recuperación de errores para el análisis 'use_tree_list'
- rust-analyzer: corrige el pánico al extraer 'struct' de la variante 'enum'
- rust-analyzer: arreglar el informe de progreso que se atasca
- rust-analyzer: maneja mejor 'SelfParam' en "Inline call"
- rust-analyzer: incluir la construcción 'for' en las condiciones de retorno convertidas a protegidas
- rust-analyzer: inferir 'OUT_DIR' cuando la raíz del espacio de trabajo contiene un enlace simbólico
- rust-analyzer: hacer que la consulta 'value_ty' sea falible
- rust-analyzer: analiza 'macro_rules' como nombre de macro
Clasificación del rendimiento del compilador de Rust
Esta semana se han producido un montón de regresiones causadas por correcciones de corrección y, en general, por hacer más trabajo en el compilador. Estos fueron compensados por muchas mejoras (especialmente en torno al hash en el compilador) Eso mejoró el rendimiento en ~2% en un gran número de puntos de referencia. No te entusiasmes demasiado con el Sin embargo, grandes ganancias del 45+%, estas fueron solo para pequeños puntos de referencia como Helloworld. Fueron causados por un cambio en Carga que introduce la eliminación de la depuración símbolos de Rust liberan binarios de forma predeterminada y, a su vez, también mejora el tiempo de compilación para pequeños Cajones.
Triaje realizado por @kobzol. Rango de revisión: f9c2421a.. d6b151fc
Resumen:
| (instrucciones:u) | media | Gama | Recuento | |:----------------------------------:|:-----:|:---------------:|:-----:| | Regresiones ❌
(primaria) | 0.7% | [0,2%, 1,5%] | 11 | | Regresiones ❌
(secundaria) | 2,2% | [0.2%, 9.9%] | 26 | | Mejoras ✅
(primaria) | -3,2% | [-47,5%, -0,2%] | 191 | | Mejoras ✅
(secundaria) | -7,9% | [-46,5%, -0,1%] | 123 | | Todos ❌✅ (primario) | -3.0% | [-47,5%, 1,5%] | 202 |4 regresiones, 4 mejoras, 9 mixtas; 4 de ellos en rollups 48 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:
- 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 PR 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: cerrar] Añadir un indicador predeterminado para la documentación de enumeración
- [disposición: fusionar] impl 'De<&[T; N]>' por 'Vaca<[T]>'
- [disposición: fusionar] Problema de seguimiento para array_methods
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.
RFC nuevas y actualizadas
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 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.
Próximos eventos
Eventos oxidados entre 2024-01-24 - 2024-02-21 🦀
Virtual
- 24/01/2024 | Virtual (Berlín, DE) | Comunidad WeAreDevelopers
- 25/01/2024 | Virtual (Charlottesville, Carolina del Norte, EE. UU.) | Reunión de Charlottesville Rust
- 25/01/2024 | Virtual (Linz, AT) | Rust Linz
- 25/01/2024 | Virtual (Ciudad de México, DF, MX) | Rust MX
- 28/01/2024 | Virtual (Wrocław, PL) | Stacja IT Wrocław
- 30/01/2024 | Virtual | Desarrollo de juegos Bevy
- 30/01/2024 | Virtual (Búfalo, NY, EE. UU.) | Grupo de usuarios de Buffalo Rust
- 30/01/2024 | Virtual (Dallas, TX, EE. UU.) | Rust de Dallas
- 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 (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
- 2024-02-21 | Virtual (Vancouver, Columbia Británica, CA) | Rust de Vancouver
Europa
- 24/01/2024 | Zagreb, RRHH | impl Zagreb para Rust
- 25/01/2024 | Augsburgo, DE | Encuentro de Rust Augsburgo
- 25/01/2024 | Viena, AT | Rust Viena
- 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
- 06/02/2024 | Bremen, DE | Encuentro de Rust Bremen
- 07/02/2024 | Londres, Reino Unido | Grupo de usuarios de Rust London
- 08/02/2024 | Berna, CH | Rust Bern
América del Norte
- 24/01/2024 | Austin, TX, EE. UU. | Rust ATX
- 2024-01-27-28 | Calgary, AB, CA | Rust Calgary
- 25/01/2024 | Mountain View, CA, EE. UU. | Reunión de Rust de Mountain View
- 30/01/2024 | Cambridge, MA, EE. UU. | Reunión de Boston Rust
- 07/02/2024 | Brookline, MA, EE. UU. | Reunión de Boston Rust
- 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
Oceanía
- 06/02/2024 | Perth, WA, AU | Grupo de reunión de Perth Rust
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
Las raíces funcionales de ML del lenguaje, el primer compilador de Rust de Graydon que se escribió en OCaml, brillan e influyen en él desde el principio.
No es "C++ pero mejor".
Es Haskell parado sobre los hombros de Lisp, escondiéndose en el abrigo de C para colarse en PRDCTN. (El elegante club nocturno donde se reúnen todos los idiomas populares)
– tris en su canal de Youtube "No Boilerplate"
¡Gracias a PrototypeNM1 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