Rust: Meluap pada jenis wadah bersarang ganda

Dibuat pada 7 Jun 2016  ·  3Komentar  ·  Sumber: rust-lang/rust

Saya memiliki kode berikut:

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

Seperti yang dapat dilihat #[test] berfungsi dengan baik, tetapi jika saya mencoba menjalankan tes kargo, saya mendapatkan kesalahan berikut pada doc_test:

kegagalan:

---- vec::<&'vektor>::add_0 stdout ----
kesalahan: overflow mengevaluasi persyaratan <&_ as std::ops::Add<_>>::Output [E0275]
:1:1: 1:1 catatan: pertimbangkan untuk menambahkan atribut #![recursion_limit="128"] ke peti Anda
kesalahan: dibatalkan karena kesalahan sebelumnya

Sepertinya fungsi mana yang akan gagal tergantung pada kompiler. Saya mendapat kesan bahwa di rumah kedua implementasi Add for &Vector akan gagal, tetapi saya mungkin salah dan akan memperbarui masalah ini ketika saya tiba di rumah.

Ini adalah versi karat yang saya gunakan di sini:

rustc 1.10.0-dev (14f61c87f 2016-04-18)
biner: rustc
komit-hash: 14f61c87ff02e57d565d4fab4ce790156c9a596e
tanggal-komit: 18-04-2016
host: x86_64-unknown-linux-gnu
rilis: 1.10.0-dev

Diskusi di forum karat dapat ditemukan di sini:
https://users.rust-lang.org/t/weird-problems-with-recursion-in-type-bounds-in-tests-on-libs/6101/4

pembaruan: Saya salah, di rumah saya mendapatkan perilaku yang sama. Tapi seperti yang dikatakan @mbrubeck di forum diskusi, jika saya menghapus dua Tambahkan impls terakhir semuanya berfungsi.

A-typesystem C-bug T-compiler

Semua 3 komentar

Jika berguna, program yang jauh lebih pendek ini memberikan perilaku serupa:
https://play.rust-lang.org/?gist=2f793999729aec2cd8274157f7012e5d&version=stable&backtrace=0

Bandingkan versi ini, yang dikompilasi dan berjalan dengan baik:
https://play.rust-lang.org/?gist=6ff433c8cc94c22985180210cc3a8e7d&version=stable&backtrace=0

Berikut adalah minimalisasi lebih lanjut dari program @apt1002 :

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

Benang merah pada semua program yang gagal ini adalah bahwa ada 2 lapisan "containerization", apakah itu & , Vector , atau struct pembungkus.

Ide bagus untuk menghapus omong kosong seumur hidup. Jauh lebih jelas.

Saya pikir kami berdua telah membuat kesalahan! Milik saya adalah "di mana Target: Dari<&'m T>" seharusnya " di mana Target: untuk<'a> Dari<&'a T> ". Saya baru belajar tentang ini. Milik Anda adalah bahwa "(a.0).0" harus menjadi " C((a.0).0) ".

Pesan kesalahan tidak berubah dalam kedua kasus, yaitu masih terlihat seperti bug kompiler. Saya pikir contoh-contoh ini harus berfungsi, tetapi setidaknya kompiler tidak memberikan pesan kesalahan yang benar.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat