Rust: Desbordamiento en tipos de contenedores anidados dobles

Creado en 7 jun. 2016  ·  3Comentarios  ·  Fuente: rust-lang/rust

Tengo el siguiente código:

https://play.rust-lang.org/?gist=b8c78d5084a9b9ab7c53a2a9faa022af&version=stable&backtrace=0

Como se puede ver, la # [prueba] funciona bien, pero si trato de ejecutar una prueba de carga, obtengo el siguiente error en el doc_test:

fallas:

---- vec :: <& 'a Vector> :: add_0 stdout ----
error: desbordamiento al evaluar el requisito <&_ as std::ops::Add<_>>::Output [E0275]
: 1: 1: 1: 1 nota: considere agregar un atributo #![recursion_limit="128"] a su caja
error: abortar debido a un error anterior

Parece que la función fallará depende del compilador. Tengo la impresión de que en casa ambas implementaciones de Add for & Vector fallarán, pero podría estar equivocado y actualizaré este problema cuando llegue a casa.

Esta es la versión de óxido que estoy usando aquí:

rustc 1.10.0-dev (14f61c87f 18/04/2016)
binario: rustc
commit-hash: 14f61c87ff02e57d565d4fab4ce790156c9a596e
fecha de compromiso: 2016-04-18
host: x86_64-unknown-linux-gnu
lanzamiento: 1.10.0-dev

La discusión sobre los foros de rust se puede encontrar aquí:
https://users.rust-lang.org/t/weird-problems-with-recursion-in-type-bounds-in-tests-on-libs/6101/4

actualización: Me equivoqué, en casa tengo el mismo comportamiento. Pero como dijo @mbrubeck en la discusión del foro, si elimino los dos últimos Add impls, todo funciona.

A-typesystem C-bug T-compiler

Todos 3 comentarios

En caso de que sea útil, este programa mucho más corto da un comportamiento similar:
https://play.rust-lang.org/?gist=2f793999729aec2cd8274157f7012e5d&version=stable&backtrace=0

Compare esta versión, que se compila y funciona bien:
https://play.rust-lang.org/?gist=6ff433c8cc94c22985180210cc3a8e7d&version=stable&backtrace=0

Aquí hay una minimización adicional del programa de @ apt1002 :

https://play.rust-lang.org/?gist=0a77e1bd0f8e539d8a85ee30ed63b1f6&version=stable&backtrace=0

Un hilo común en todos estos programas fallidos es que hay 2 capas de "contenedorización", ya sea & , Vector , o una estructura contenedora.

Buena idea para eliminar las tonterías de toda la vida. Mucho más claro.

¡Creo que ambos hemos cometido errores! El mío era que "donde Target: From <& 'm T>" debería haber estado " donde Target: for <' a> From <& 'a T> ". Acabo de enterarme de esto. El suyo es que "(a.0) .0" debe ser " C ((a.0) .0) ".

El mensaje de error no se modifica en ambos casos, es decir, todavía parece un error del compilador. Creo que estos ejemplos deberían funcionar, pero al menos el compilador no da el mensaje de error correcto.

¿Fue útil esta página
0 / 5 - 0 calificaciones