172 похожих чатов

Https://Github.Com/Rust-Lang/Rust/Blob/Master/Library/Core/Src/Clone.Rs#L246 Что символизирует этот impl? Clone не auto trait, почему impl

!Clone вообще допустим?

19 ответов

23 просмотра
Max-Силинг Автор вопроса

TIL существует фича negative_impls, которая разрешает impl ! для любых трейтов. единственное предназначение — конфликтовать с другими попытками имплементировать.

Max-Силинг Автор вопроса
Max Силинг
TIL существует фича negative_impls, которая разреш...

https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=15b0289aea05a17a77d202d92dddc232

Max-Силинг Автор вопроса
Max Силинг
TIL существует фича negative_impls, которая разреш...

остался вопрос, зачем запрещать имплементацию Clone для мутабельной ссылки. да, её нельзя сделать логично, но почему это небезопасно?

Max Силинг
остался вопрос, зачем запрещать имплементацию Clon...

Проблема не в безопасности, а в том, что иначе компилятор не сможет разрешить impl for &mut _ и impl<T: Clone> for T

Max-Силинг Автор вопроса
вафля'
Проблема не в безопасности, а в том, что иначе ком...

хм а где эти две имплементации конфликтуют?

Max-Силинг Автор вопроса
Max Силинг
хм а где эти две имплементации конфликтуют?

и вроде как нельзя опираться на negative impls для целей coherence

Max-Силинг Автор вопроса
вафля'
impl Clone for &mut MyLocalTypeLol

ну, это сейчас запрещено

Max Силинг
ну, это сейчас запрещено

через impl !Clone, без него бы можно было

Max-Силинг Автор вопроса
вафля'
через impl !Clone, без него бы можно было

да и в чём проблема? где-то в стдлибе есть две имплементации, которые начинают конфликтовать при клонируемой мутабельной ссылке?

Max Силинг
и вроде как нельзя опираться на negative impls для...

можно, negative impls — гарантия что тип никогда не будет реализовывать трейт

Max Силинг
остался вопрос, зачем запрещать имплементацию Clon...

Потому что компилятор при кодогенерации опирается на предположение, что &mut-ссылка на значение есть только одна. Если оно нарушается, то компилятор может скомпилировать код неправильно

Max-Силинг Автор вопроса
вафля'
можно, negative impls — гарантия что тип никогда н...

> This is a prototype impl that extends impl !Trait beyond auto traits. It is not integrated with coherence or anything else, and hence only serves to prevent downstream impls (but not to allow downstream crates to rely on the absence of such impls for coherence purposes).

Max-Силинг Автор вопроса
Антон 🇦🇲
Потому что компилятор при кодогенерации опирается ...

это нерелевантно. сигнатура Clone::clone() не мешает имплементировать Clone для мутабельной ссылки, не нарушая алиасинг

Max-Силинг Автор вопроса
Max Силинг
это нерелевантно. сигнатура Clone::clone() не меша...

например, создав и ликнув ещё одно значение или просто запаниковав

вафля'
Проблема не в безопасности, а в том, что иначе ком...

upd: нет, я что-то наврал, impl<T: Clone> Trait for T {} impl<T> Trait for &mut T {} и сейчас не разрешён

https://github.com/rust-lang/negative-impls-initiative/issues/1

вафля'
https://github.com/rust-lang/negative-impls-initia...

по крайней мере есть планы coherence и negative_impls всё таки связать, это нужно для того, чтобы некоторые косяки пофиксить например в ошибках

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта