Size: a a a

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

2021 June 20

D

Dmitry in Rust — русскоговорящее сообщество
как я понял, UB не будет, только если изначально пришёл *const, мы его кастанули в *mut для каких-то целей, а потом, опять в *const не разыменовывая. В остальных случаях, везде пишут, что UB

или я ошибаюсь?
источник

V

Vetro in Rust — русскоговорящее сообщество
вроде все так
источник

D

Denis in Rust — русскоговорящее сообщество
ну то есть если сишный код 100% ничего не меняет, то вроде всё сейф
источник

D

Dmitry in Rust — русскоговорящее сообщество
Ок, спасибо
источник

goldstein опять in Rust — русскоговорящее сообщество
Как я понимаю, мы можем даже разыменовать *mut, если мы из него только читаем.
И можем даже менять данные по нему, если данные лежат в UnsafeCell и мы не создаём data race таким образом.
источник

Э

Эрик in Rust — русскоговорящее сообщество
Разница между *const T и *mut T существует только для программистов, чтобы они меньше ошибались при работе с указателями. Для компилятора разницы между этими типами нет, не считая того, что они разные типы.
источник

Э

Эрик in Rust — русскоговорящее сообщество
Так что кастовать *const T в *mut T можно без UB.
источник

Э

Эрик in Rust — русскоговорящее сообщество
А вот использовать ptr::write на *mut T, полученный из *const T, полученный из &T — это уже UB.
источник

goldstein опять in Rust — русскоговорящее сообщество
«Можем ли мы менять данные по *mut-указателю, полученному из *const-указателя, если данные не лежат в UnsafeCell» зависит от того, как мы получили этот *const-указатель
источник

D

Denis in Rust — русскоговорящее сообщество
Ну кажется, что без UnsafeCell махинация &Kek -> *const Kek -> *mut Kek -> &mut Kek приведёт к нарушению правил алиасинга даже если дальше только читать
источник

Э

Эрик in Rust — русскоговорящее сообщество
Даже с UnsafeCell такие касты — это UB.
источник

Э

Эрик in Rust — русскоговорящее сообщество
Ты шаренную ссылку кастуешь к уникальной, это insta UB.
источник

D

Denis in Rust — русскоговорящее сообщество
Ну с unsafe cell можно избежать создание шаренной ссылки, а так да
источник

АИ

Ахмет Иванов... in Rust — русскоговорящее сообщество
А что нужно ?
источник

AL

Andrey @ozkriff Lesn... in Rust — русскоговорящее сообщество
Гм. Я чего-то не ожидал, что наивную поддержку RTL текста тоже в новом релизе разрешили. В RFC точно были обсуждения что чего-то с этим надо делать - но как это потом после стабилизации чинить будут?

let قيمة =3.14;

прям без всяких предупреждений компилируется спокойно себе, при этом совершенно ломает весь текст в редакторах без специальной поддержки rtl

2 |     let قيمة =3.14;
 |         ^^^^ help: if this is intentional, prefix it with an underscore: `_قيمة`
источник

П

Пух in Rust — русскоговорящее сообщество
ну логично, что ломает
источник

goldstein опять in Rust — русскоговорящее сообщество
ещё одна из многочисленных проблем, лол
источник

AL

Andrey @ozkriff Lesn... in Rust — русскоговорящее сообщество
"right-to-left scripts can lead to weird rendering in mixed contexts (depending on the software used), especially when mixed with operators. This is not something that should block stabilization, however we feel it is important to explicitly call out. Future RFCs (preferably put forth by RTL-using communities) may attempt to improve this situation (e.g. by allowing bidi control characters in specific contexts)"

в rfc такие мысли есть, но при всей мей лояльности к юникодным идентификаторам, мне не ясно почему "This is not something that should block stabilization". и обсуждений этого подвопроса чего-то не много гуглится в рамках общего срача
источник

А⚙

Антон ⚙️ in Rust — русскоговорящее сообщество
Просто это ёбаный Центрил уже не в первый раз продвигает сомнительные предложения
источник

goldstein опять in Rust — русскоговорящее сообщество
потому что это политическое решение, которое не заблокировала ни одна из его очевидных проблем
ни RTL, ни нормализация и диакритики, ни привязка к версии стандарта юникода, ни сомнительная полезность в целом
источник