Денис
уж прям разорвал)
պլհկ
с block_on() прям удобно стало
պլհկ
https://play.rust-lang.org/?gist=f8ccf3a4cc5bcfd19d3fca5c3a226b87&version=stable&mode=debug
Max
Спасибо
Αλεχ
мне хватило
Денис
=))
Αλεχ
Короче я такую парашу намутил
Αλεχ
unsafe fn get_empty_vector<T>(size: usize) -> Vec<T> { let mut vec = Vec::with_capacity(size); let ptr = vec.as_mut_ptr(); std::mem::forget(vec); let result = Vec::from_raw_parts(ptr, size, size); result }
Αλεχ
не тратит время на аллокацию from_elem
Tuntz
Max
АЛЯРМ КОД КРАСНЫЙ СИШНИК В ЧАТИКЕ
Loo
Αλεχ
я хочу пустой вектор длины n
Αλεχ
типа mem::zeroed()
Денис
Я хз сработает ли, но стоит попробовать
Αλεχ
ещё вот это забыл
выше же кидали
Αλεχ
не сработает
Αλεχ
тут from_elem вызывается в любом случае
Αλεχ
а там идет в цикле копирование
Loo
Пустой вектор это с преаллокацтей with capacity
Денис
Ну кстати get_unchecked должен нормально работать на векторе, полученном через with_capacity
доня.
я шарпист, внезапно
не верю, ты открывающую скобочку не перенёс!
Loo
Loo
Ты сказал пустой вектор
Αλεχ
Да
https://play.rust-lang.org/?gist=c305f21f2796b8bbba50e0eae7c0e8d8&version=stable&mode=debug
Anton
https://play.rust-lang.org/?gist=c305f21f2796b8bbba50e0eae7c0e8d8&version=stable&mode=debug
Ну память на самом деле преалоцируется, элементы не инициализируются
Αλεχ
ну так я это и использую
Αλεχ
только толку от такого, если доступа прямого к нему нет?
Αλεχ
короче ночное АПИ для этого есть вроде
Αλεχ
https://doc.rust-lang.org/1.20.0/std/heap/trait.Alloc.html#method.alloc_zeroed
Αλεχ
но пока в стейбле нету
Αλεχ
Αλεχ
типичные плюсопроблемы
Loyd
Господа, а кто может рассказать, зачем понадобилось иметь async в синтаксисе?
Loyd
Ну ввели бы Pin в язык, а async-await остался бы в либах
Oleg
Для того, что borrow checker мог передавать заимствования через планировщик
Oleg
сейчас при композиции Future приходится владеть всеми данными
Loyd
Или нет?
պլհկ
Не хотят макросы стабилизировать
Berkus
макросам бы хоть какую-то конкатенацию до стабилизации прикрутить...
Маjко
потом затюним
Если точно данные перед использованием будут инициализированы по алгоритму, ты можешь smallvec с mem::uninitialized массовом сделать, чтобы не терять время на выделении и инициализации кучи на маленьких массивах
Αλεχ
mem::unitialized массивом непопнятно как сделать, ибо динамических массивов нема
Маjко
mem::unitialized массивом непопнятно как сделать, ибо динамических массивов нема
Делать статику, динамически ограничивать капасити в рантайме
Маjко
У тебя все равно анчекд
պլհկ
Воу воу а как же *компилятор соптимизирует*
Маjко
В общем случае соптимизирует, тут то речь о потенциальном боттлнеке, который надо ручками
Cat
выше же кидали
Это было про то, во что разворачивается vec! Это из исходников раста
Αλεχ
и по нему видно что вектор такд елать не будет
Berkus
там у котанов случился мощный прорыв с futures 0.3 - https://github.com/rust-lang/rfcs/pull/2418#issuecomment-389377007
Маjко
а по-русски?
Ну, э, у тебя есть границы сортировки, так? Обозначенные этим n От того что массив у тебя будет больше чуть-чуть ты ничего не теряешь и просто так же используешь get_unchecked() Если массив меньше, фоллбекаешься на использование динамической памяти в куче.
Αλεχ
эм
Αλεχ
у меня n <= 150000
Αλεχ
а массивы больше 500 или сколько там раст не умеет
պլհկ
Че за не умеет
Berkus
игрушечный язык же
պլհկ
Возможно, вы имели в виду: некоторые трейты не заимплеменчены для массивов > n
Маjко
Посуны, скиньте где доходчиво почитать про новый async-await и в частности про пиннинг
պլհկ
Ща
պլհկ
https://boats.gitlab.io/blog/post/2018-03-20-async-vi/
պլհկ
Там целая серия про пин
Αλεχ
добавил элемент в массив - перестало компилится
Αλεχ
ШТАА