Anton
ну там выигрыш только если у него много векторов
պլհկ
там копировать вообще ничего не надо
Alexander
Эээ, что-то я торможу. Ну потому что объект db овнер + удобно все векторные штуки иметь + можно добавить если mut ну и тд
Alexander
Сорян, я не очень догоняю кто тогда слайсом будет владеть и ТД в другом случае.
Anton
слайс будет указывать на оригинальные данные
Alexander
На оригинальные данные из внутренностей serde?!?
Anton
=)
պլհկ
на оригинальные данные из файла прочитанные
Anton
Ты файл в память читаешь?
Alexander
Да
Anton
ну вот туда и будет указывать слайс =)
Alexander
Стоп. Я как бы его не читаю, читает bincode
պլհկ
ну ммапни файл, дай бинкоду слайс
Alexander
Т.е. наверное нельзя сказать что я его читаю в память, а как раз не хочу этого делать.
պլհկ
а бинкод что делает по-твоему?
Alexander
Вбрось код
Надо немного подготовить.
Alexander
а бинкод что делает по-твоему?
Ну даже если он временно читает, то он читает прилично больше размера файла.
պլհկ
потому что он потом веки аллоцирует и копирует
Alexander
В идеале я бы конечно ждал, что он читает через небольшой буффер, а не сразу всё в память.
Alexander
И сделает за тебя всю черную работу?
Но ведь это именно зачем его изобрели.
պլհկ
берешь memmap крейт получаешь из него слайс памяти десериалайзишь в слайс бинкодом => 0 аллокаций
Alexander
берешь memmap крейт получаешь из него слайс памяти десериалайзишь в слайс бинкодом => 0 аллокаций
Вот я про это выше и написал, но Децл обидно что bincode что-то не оправдал ожиданий что ли.
Alexander
Потому как для меня не очевидно почему надо загружать весь файл в память, а потом ещё и аллоцировать структуры несколько раз в размере больше чем данных в файле.
Alexander
Чтобы на выходе вернуть опять же структуру размером просто с файл.
Alexander
Можно поворчать? Ожидал что Раст 🔥 на итераторах - оказалось не так, но хоть исправили. Ожидал что bincode будет быстрее молнии , и это не оправдалось, так ещё и память жрёт.
Anton
некоторые вещи специфичны
Anton
В большинстве случаев итераторы жгут
Alexander
Из двух, что успел посмотреть - две специфичны :)
Anton
Я вот ждал что раст будет за меня код писать, а он...
Alexander
И все же к начальному вопросу, а вдруг поможет: где там serde аллоцирует? Вдруг какой хитрый флаг есть - типа экомить память .
Антон
Можно поворчать? Ожидал что Раст 🔥 на итераторах - оказалось не так, но хоть исправили. Ожидал что bincode будет быстрее молнии , и это не оправдалось, так ещё и память жрёт.
Раст вообще не 🔥 — HKT нет, impl trait нет, vararg нет, именованных аргументов нет, опциональных аргументов нет, специализации трейтов нет, const fn нет, наследования нет, замыканий на стеке нет...
պլհկ
толсто
Антон
Толсто — но всё правда
Loo
Щас бы именованные аргументы в Раст втащить
Антон
Я в курсе, что многое есть на ночной версии, но непонятно когда на стабильную версию завезут
պլհկ
импл трейт в следующем стейбле так-то
Антон
Щас бы именованные аргументы в Раст втащить
Ну, мне лично не очень нравится, что вместо этого в Rust builder pattern абъюзят
Loo
Нахуй стэйбл нужен если в Найтли все есть
Антон
импл трейт в следующем стейбле так-то
Целиком или пока только conservative?
պլհկ
оба
պլհկ
почему абьюзят-то? .ty(pidor).and(sosal) vs (ty = pidor, and = sosal)
Антон
Нахуй стэйбл нужен если в Найтли все есть
Потому что если ты юзаешь найтли фичи, то при очередном обновлении всё может поломаться, даже тот код, который найтли фичи не юзает
John
Толсто — но всё правда
Опциональные аргументы не нужны
պլհկ
fn f<I>(pook: I) where I: Into<Option<u32>> {} fn main() { f(5) } палю годноту пацаны
Loo
fn f<I>(pook: I) where I: Into<Option<u32>> {} fn main() { f(5) } палю годноту пацаны
Если бы ты был в гиттер чате тебя уже за пуки в аргументах забанили бы
Loo
Alexander
Потому что если ты юзаешь найтли фичи, то при очередном обновлении всё может поломаться, даже тот код, который найтли фичи не юзает
Так было такое, фиксируйте тулчейн по дате и обновляй только если всё норм на последнем и надо.
Судзумия
Elasticaearch + filebeat
Хм, спасибо
Loo
Loo
В вашем игрушечном расте появились мемори лики
Судзумия
Ору
Євгеній 😌
Ору
https://github.com/oru
Alexander
в продолжении bincode. Сделал просто сохранения Vec<String> и загрузка - и она 500Mb+ отжирает на de. Сам файл ~70Mb.
Alexander
параллельный вопрос. почему mem::size_of_val на этот вектор показывает 24 всего? там ~2млн элементов же.
Alexander
если сложить size_of_val строк внутри, то ~59Mb.
Денис
https://gist.github.com/mexus/099e92a1014f321de29638bf615e3475
Денис
измерения https://gist.github.com/mexus/1db435fdacdb828c008b8d45f7fb4ba2
Alexander
а вот тоже самое для Vec<f32> проверил - есть оверхед, но вполне норм на фоне того что со строками происходит.
Денис
или я чёто не догоняю, или в моём примере оверхед 1.8 кб
Alexander
я может не понял, но там 1.8Мb на ~10mln эээ, одно-двухбайтовых строк?
Денис
в смысле однобайтовых?
Денис
случайного размера, от 1 до 30
Alexander
ааа, ok
Alexander
тогда я торможу - как это всё вообще в 1.8Mb влезло?
Денис
-------------------------------------------------------------------------------- n time(i) total(B) useful-heap(B) extra-heap(B) stacks(B) -------------------------------------------------------------------------------- 0 0 0 0 0 0 1 699,405 568 552 16 0 2 699,923 704 672 32 0 3 700,079 1,736 1,696 40 0 4 700,302 1,848 1,816 32 0 5 816,495 1,848 1,816 32 0
Денис
размер в байтах
Денис
(третья колонка)
Денис
как влезло — сам не понимаю
Alexander
1.8kb???
Alexander
у меня bufreader ещё, но он-то тут причём
Денис
он же буферизует, выделяя каждый раз память под данные
Alexander
а файл норм размера? конечно сорян, очевидно, но не могу понять.
Alexander
Denis, ну он вроде ~40kb буффер и всё
Денис
671 метр