Size: a a a

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

2020 March 24

Э

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

Э

Эрик in Rust — русскоговорящее сообществo
red75prime
MIRI что по этому поводу говорит?
Не знаю, не включал её на тот код.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Вот с Vec<SmallVec> так делать нельзя.
источник

Э

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

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
если бы ты сформулировал зачем такое понадобилось было бы лучше. Во-первых очень ногострельно, во-вторых я до сих пор не уверен что оно не уб
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
ничто не мешает вектору скопировать строку в новое место при аллокации и вызвать дроп на старой
источник

Э

Эрик in Rust — русскоговорящее сообществo
Alex Zhukovsky
ничто не мешает вектору скопировать строку в новое место при аллокации и вызвать дроп на старой
Здравый смысл и zero-cost'ы?
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
Эрик
Здравый смысл и zero-cost'ы?
Ага, здравый смысл. например аллокатор увидел что можно данные более кэш-френдли компактнее хранить, и вектор решил переаллоцировать строку (ведь это деталь реализации). Что, такого быть не может?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Вектор не вызывает Drop::drop() на элемент, пока тебе это не нужно будет в явном виде. Все реаллокации просто копируют байты без дропа.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Иначе была бы пизда хуёвая со всех сторон.
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
Эрик
Вектор не вызывает Drop::drop() на элемент, пока тебе это не нужно будет в явном виде. Все реаллокации просто копируют байты без дропа.
этого нет в апи, значит на такое поведение рассчитывать нельзя
источник

D

Denis in Rust — русскоговорящее сообществo
Alex Zhukovsky
ничто не мешает вектору скопировать строку в новое место при аллокации и вызвать дроп на старой
мешает то, что он не знает, как это сделать)
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
ИЧСХ если в расте например в стрингах появится оптимизация что строки до 16 символов например на стеке хранятся
источник

Э

Эрик in Rust — русскоговорящее сообществo
Не появится, потому что breaking change и надо делать rust 2.0
источник

Э

Эрик in Rust — русскоговорящее сообществo
Хочешь стековые массивы и стринги - бери SmallVec и SmallString.
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
Эрик
Не появится, потому что breaking change и надо делать rust 2.0
это не брекинг ченж потому что нет публичных апи которые бы требовали такое поведение
источник

r

red75prime in Rust — русскоговорящее сообществo
Эрик
Так что &str валидный, пока вектор не изменит String внутри себя явно или дропом.
Но компилятор этого не знает, и не знает, что ссылка как-то связана с массивом. Так что имеет право сделать например такую оптимизацию наша_типа_статическая_str.ptr_eq(&vec[0]) -> false.
источник

D

Denis in Rust — русскоговорящее сообществo
@iccsf а что мешает Cow/Rc/Arc заюзать?
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
благо для FFI есть отдельный CString
источник

Э

Эрик in Rust — русскоговорящее сообществo
Denis
@iccsf а что мешает Cow/Rc/Arc заюзать?
Дорого. Кроме коровы, но она может даже дороже выйти, если вдруг посчитает, что я что-то куда-то пишу.
источник