Size: a a a

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

2020 October 18

Э

Эрик in Rust — русскоговорящее сообществo
UNsafe MUTability.
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Эрик
Тогда и публично будет можно поля некоторые показывать.
На самом деле это звучит как геттеры/сеттеры на уровне языка. Типо

{ pub get; pub unsafe set; }
источник

Э

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

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Ещё из доступных костылей можно юзать дереф (не мут например) в структуру с публичными полями
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
впрочем с вектором это не прокатит
источник

MP

Mag Pie in Rust — русскоговорящее сообществo
А в чем соль? Почему установка длинны - ансейф?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Mag Pie
А в чем соль? Почему установка длинны - ансейф?
Инварианты.
источник

MP

Mag Pie in Rust — русскоговорящее сообществo
Эрик
Инварианты.
Ну это внутри имплементации, len же ни разу не pub.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ты видел, какой у кода для вектора размер?
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Mag Pie
А в чем соль? Почему установка длинны - ансейф?
Потому что если длинна будет больше, чем на самом деле есть элементов — можно будет прочитать не инициализированную память.

А если больше чем capacity то ещё хуже
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Mag Pie
Ну это внутри имплементации, len же ни разу не pub.
1) мы обсуждали теорию на счёт того, что его можно было бы сделать pub
2) из-за этого получается что unsafe распространяется по всему модулю совсем не заметно
источник

MP

Mag Pie in Rust — русскоговорящее сообществo
Эрик
Ты видел, какой у кода для вектора размер?
1600 loc из которых 3/4 доки
источник

D

Denis in Rust — русскоговорящее сообществo
Mag Pie
1600 loc из которых 3/4 доки
не похоже на 1600 loc с 3/4 комментариев
источник

Э

Эрик in Rust — русскоговорящее сообществo
А итераторы в том же модуле?
источник

D

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

MP

Mag Pie in Rust — русскоговорящее сообществo
Denis
не похоже на 1600 loc с 3/4 комментариев
Я смотрел на impl<T> Vec<T> {} https://doc.rust-lang.org/beta/src/alloc/vec.rs.html
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Ещё RawVec, так-то
источник

Э

Эрик in Rust — русскоговорящее сообществo
вафель 🧇
Ещё RawVec, так-то
RawVec длину не менеджит.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Drain и IntoIter тоже длину трогают.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Хотя вру, IntoIter не трогает, у него там тупо указатели.
источник