Nikolay Markov
Сережа
Я не знаю как ваш жмаллок работает но вряд ли он «объекты» в памяти перетасовывает
Сережа
Так что он не умный
分解物質
Loyd
А как ты себе перетасовывание представляешь?
Max
О, еще один глупый вопрос вроде по теме: почему иногда функции принимают мутабельную ссылку и кладут туда результат, а не просто возвращают его?
fn some(buf: &mut [u8]);
VS
fn some() -> [u8];
Типо так будет производительней?
Loyd
Ссылки все протухают?
Сережа
Вон выше определение написали
Nikolay Markov
Сережа
И куски перетасовывает?
Сережа
Ну это другое дело
Nikolay Markov
а, ну да, я некорректно выразился
Nikolay Markov
разумеется, он не компактизирует объекты языка, он плотностью упаковки кусков занимается
Filipp
Loyd
Сережа
Это был сарказм
Loyd
Интересно, конечно, но повторю ещё раз: что делать с существующими ссылками на память?
պլհկ
Ничего, перетасовка обьектов это маняфантазии
Anonymous
В гц их мутатор перепишет
Сережа
Жвм перетасовывает, цлр перетасовывает, а жмаллок нет)))
Loyd
И..... что используется в кейса, где rc/gc неприменим?
Сережа
Систем аллокатор))))
Anonymous
Ничего
Сережа
Или статик массив Чаров на микроконтроллере)))
Сережа
Сережа
В чате про раст живо обсуждаются перемещающие аллокатор, а вопросы про раст игнорируются))))
Max
Ну там не совсем про руст вопрос
Сережа
Точно, тебе в чатик системных архитекторов
Max
Не, это слишком
Vladimir
Vladimir
Или ты про кейс когда длина известна?
Vladimir
Ignat
перемещающие гербейж коллекторы!
Max
[u8] там лишь для примера
Я прост биндинг к openh264 пишу, там в EncodeFrame такой принцип
(у VP[8,9] такая же ситуация)
Vladimir
Ну вообще кажется что так в общем случае оптимальнее
Vladimir
+ апи проще
Vladimir
Не нужно самому после вызова таких функций делать memcpy
Vladimir
copy_from_slice и тд
Ignat
Vladimir
Буфер на стеке
Vladimir
Не такая уж проблема
Vladimir
Знаешь ли
Ignat
ну одна из основных, во всяком случае
Vladimir
Ты и так будешь переиспользовать стек. Так что незачет
Ignat
щас бы возвращать буфер на стеке
Ignat
или о чём ты
Сережа
С эскейп анализисом как в го
Vladimir
Vladimir
Але
Vladimir
Или где по твоему [u8;255] выделит?
Vladimir
fn x()->[u8;255]
Сережа
Я на си так делал, главное до вызова других функций буфер этот использовать
Ignat
типичные сишники с «моё уб не уб»
Сережа
Ты хотел сказать хакиры, в хорошем смысле
Max
Ок, тогда еще один вопрос: есть "грязный" struct, который сгенерировал bindgen (на скрине)
Я хочу написать такую же структуру только "чистую" (с нормальными именами, но такой же структурой). Можно просто копировать, но как понимаю будет оптимальней использовать mem::transmute() (но небезопасно, конечно) (переживаю о *mut)
Ignat
нет, не хотел
Max
Сережа
И это наверняка не уб а имплементейшн дефайнд
Ignat
одно дело, если ты там pwn-таску решаешь и в буфере лежит какой-нибудь пароль или шеллкод
Ignat
и совсем другое, если ты полагаешься на это в продакшон-коде
Сережа
Ты видел, что я здесь пишу, я невменяем. Какой продакшон код?
Ignat
Vladimir
Сережа
А если результат функции не будут получать будет копироваться?
Сережа
И если будет, то куда?
Filipp
Filipp
Я кстати не Лев толстой совсем, я чисто логически рассуждаю
Сережа
Да, а я думал что будет без оптимизаций
Сережа
Значение из функции возвращается через стек
Сережа
Внутри функции ты не знаешь требуется ли вовне это значение
Сережа
В конце ложишь его на стек
Filipp
У тебя же сигнатура есть