Size: a a a

Rust — русскоговорящее сообществo

2020 November 27

AK

Aleksandr Koltovich in Rust — русскоговорящее сообществo
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
символ & избыточный
источник

AK

Aleksandr Koltovich in Rust — русскоговорящее сообществo
Mikail Bagishov
символ & избыточный
Пора спать идти...
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
ты пытаешься взять ссылку, и поменять эту ссылку.
Если бы это и компилировалось, то менялась бы временно созданная ссылка.
источник

AK

Aleksandr Koltovich in Rust — русскоговорящее сообществo
Большое спасибо. А то я уже думал, что всё так сложно 🤣
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Mikail Bagishov
символ & избыточный
Вредный совет: вместо v[i] = a; можно писать *(&mut v[i]) = a;
источник

AK

Aleksandr Koltovich in Rust — русскоговорящее сообществo
Mikail Bagishov
ты пытаешься взять ссылку, и поменять эту ссылку.
Если бы это и компилировалось, то менялась бы временно созданная ссылка.
Да. Меня это осенило после ответа.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
вафель 🧇
Вредный совет: вместо v[i] = a; можно писать *(&mut v[i]) = a;
А почему бы не
*(&mut v[i] as *mut _ as *mut MaybeUninit<_>).write(a)?
источник

AK

Aleksandr Koltovich in Rust — русскоговорящее сообществo
Сейчас глянул на результат и понял, что у меня ошибка в алгоритме.
Но хочу сказать, что как альтернативу использовать remove по индексу, а потом insert по этому же индексу 😂
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Mikail Bagishov
А почему бы не
*(&mut v[i] as *mut _ as *mut MaybeUninit<_>).write(a)?
потому что unsafe (и можно просто ptr::write(&mut v[i], a))
источник

RR

Rokker Ruslan in Rust — русскоговорящее сообществo
Вопрос по борьбе с borrow checker, есть вектор структур (набор полей не важен), определённый алгоритм выбирает два элемента из вектора. Далее необходимо изменить один или оба элемента (например инкрементировать поле). Чтобы это сделать воспользуемся get_mut. Но так как get_mut не может статически вывести что вы не получите один и тот же элемент дважды, он заимствует весь вектор. И тут вступают правила запрета двух изменяемых ссылок. Ну короч вы и так всё знаете.

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

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Можно передавать слайс и два индекса.
Можно split_at_mut сделать
источник

RR

Rokker Ruslan in Rust — русскоговорящее сообществo
split_at_mut не должен сработать если мы выбрали один и тот же элемент дважды, не так ли?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Да.
Но брать две мутабельные ссылки на одну ячейку точно нельзя.
источник

RR

Rokker Ruslan in Rust — русскоговорящее сообществo
Вот, а вопрос заключается в том, как выразить такой алгоритм чтобы rust это скомпилировал.
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Rokker Ruslan
Вот, а вопрос заключается в том, как выразить такой алгоритм чтобы rust это скомпилировал.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Я бы передавал слайс целиком и два индекса
источник

H

Hirrolot in Rust — русскоговорящее сообществo
Αλεχ Zhukovsky
зачем сделали по-умолчанию дев?
в мастере последняя версия, в деве разработка. дев по умолчанию чтобы люди, заходя в репозиторий, не подумали, что он заброшен потому что последний коммит два месяца назад
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
Hirrolot
в мастере последняя версия, в деве разработка. дев по умолчанию чтобы люди, заходя в репозиторий, не подумали, что он заброшен потому что последний коммит два месяца назад
люди не подумают. Зато несобирающиеся примеры это бред
источник

p

polunin.ai in Rust — русскоговорящее сообществo
@hirrolot я думаю что экзамплы нужно обновлять только перед непосредственно релизом. то есть до релиза оставлять в деве старые экзамплы с мастера.
источник