Size: a a a

2020 August 14

RP

Roman Proskuryakov in rust_offtopic
Constantine Drozdov
подобная реализация swap является точным выражением is_swappable только в случае, если она использует destructive move
А она не использует destructive move. потому что в С++ его нет.
источник

CD

Constantine Drozdov in rust_offtopic
Roman Proskuryakov
А она не использует destructive move. потому что в С++ его нет.
утверждение, что переменную после destructive move нельзя использовать - фейк
источник

CD

Constantine Drozdov in rust_offtopic
в частности, к этой переменной может быть применена операция =
источник

RP

Roman Proskuryakov in rust_offtopic
Constantine Drozdov
утверждение, что переменную после destructive move нельзя использовать - фейк
лол.
источник

RP

Roman Proskuryakov in rust_offtopic
окей. ты победил и всё такое.
источник

RP

Roman Proskuryakov in rust_offtopic
только отъебись от меня
источник

Т8

Т-34 85 in rust_offtopic
Casual tears
А что дальше?
а дальше написано, что раз это небезопасно, то при -O2 уберём нахуй проверки, потому что они лишние в правильном коде (кстати, а всё равно чекается!). Но если вы не хотите убирать, юзайте флаг -fno-delete-null-pointer-checks
источник

Ct

Casual tears in rust_offtopic
Т-34 85
а дальше написано, что раз это небезопасно, то при -O2 уберём нахуй проверки, потому что они лишние в правильном коде (кстати, а всё равно чекается!). Но если вы не хотите убирать, юзайте флаг -fno-delete-null-pointer-checks
Именно. Про то, к чему именно дереференс нулла будет приводить там не написано.
источник

CD

Constantine Drozdov in rust_offtopic
но если тебе очень хочется, ты можешь записать swap следующим образом
auto x = std::move(y);
y.~T();
new (&y) T(__no_matter_what);
y = std::move(z);
z.~T();
new (&z) T(__no_matter_what);
z = std::move(x);
источник

RP

Roman Proskuryakov in rust_offtopic
от ъе би сь
источник

CD

Constantine Drozdov in rust_offtopic
думаю, строки
y.~T();
new (&y) T(__no_matter_what);
можно удалить, не правда ли?
источник

RP

Roman Proskuryakov in rust_offtopic
больной ублюдок)
источник

CD

Constantine Drozdov in rust_offtopic
Roman Proskuryakov
больной ублюдок)
и если ты ниасиливаешь просто увидеть ответ перед своими глазами, а продолжаешь думать, что нужно обязательно разъобявить переменную, а иначе это будет недостаточно деструктивно, то кажется у тебя проблемы с адаптацией к реальности
источник

SP

Stanislav Popov in rust_offtopic
я правильно понимаю что в крестах нет мехенизма передачи овнершипа и поэтому все так сложно?
источник

Ct

Casual tears in rust_offtopic
Stanislav Popov
я правильно понимаю что в крестах нет мехенизма передачи овнершипа и поэтому все так сложно?
По сути да. На уровне типов никаких мувов не существует считай. Есть специальный тип ссылок по которым конструкторы для "мува" оверлоадятся.
источник

CD

Constantine Drozdov in rust_offtopic
Stanislav Popov
я правильно понимаю что в крестах нет мехенизма передачи овнершипа и поэтому все так сложно?
в общем, тут если внимательно посмотреть, это деструктивный мув, который чуть-чуть не доделан до конца - остаётся вызвать деструктор
источник

Ct

Casual tears in rust_offtopic
Constantine Drozdov
в общем, тут если внимательно посмотреть, это деструктивный мув, который чуть-чуть не доделан до конца - остаётся вызвать деструктор
C++ безопасный, просто чуть-чуть безопасность не доделана до конца, ага.
источник

CD

Constantine Drozdov in rust_offtopic
Casual tears
C++ безопасный, просто чуть-чуть безопасность не доделана до конца, ага.
никто не обещал, что на пути без упрощения возможности писать программы будет легко)
источник

Т8

Т-34 85 in rust_offtopic
Casual tears
Именно. Про то, к чему именно дереференс нулла будет приводить там не написано.
хз, лень копаться в доке. Судя по тому, что это checks, а на практике - код возврата с ошибкой, то видимо, к завершению приложения с соотв. ошибкой
источник

CD

Constantine Drozdov in rust_offtopic
Roman Proskuryakov
семантическая категория должна совпадать с невозможностью использовать переменную после вызова std::move, остальное - сахарок и линейные типы. что из этих слов тебе не ясно?
и да, если ты будешь читать не жопой, ты неожиданно заметишь, что
We define a new verb, "relocate," which is equivalent to a move and a destroy — это работает только для destructive move
analogous to the existing verb "swap," which is equivalent to a move, two move-assignments, and a destroy — это работает только для destructive move
все тела методов — это работает только для destructive move
определение Trivially relocatable type (раздел 5.5) —  в точности повторяет соответствующее для trivially moveable
источник