Αλεχ
let slice = unsafe{ (slice.as_ptr() as *const [u8; 32]).as_ref().unwrap() };
Αλεχ
короче вот так норм
պլհկ
let p: &[u8;32] = unsafe { mem::transmute(&a[..].as_ptr()) };
պլհկ
умвр
Αλεχ
у меня просто так было
Αλεχ
error[E0512]: transmute called with types of different sizes --> src\lib.rs:139:48 | 139 | let slice: &[u8; 32] = unsafe {transmute(slice)}; | ^^^^^^^^^ | = note: source type: &[u8] (64 bits) = note: target type: &[u8; 32] (32 bits)
Αλεχ
почему разный размер я немного не понял
Αλεχ
указатели вроде везде один размер имеют
պլհկ
&[u8] жирный указатель
Антон
почему разный размер я немного не понял
Потому что слайс — толстая ссылка, хранящая и размер слайса, в отличие от массива, где размер вшит в тип
Αλεχ
он скорее обратную операцию делает
Αλεχ
без const generics тяжко
Αλεχ
возвращал бы chunk сразу &[T; N] было бы лушче
Loo
https://github.com/Plume-org/Plume
Loo
https://github.com/veloren/game
պլհկ
забанить что ли
Loo
https://github.com/oxy-secure/oxy
Cat
вы выглядите странно
Loo
https://github.com/danielpclark/rutie
Loo
https://github.com/maekawatoshiki/rapidus
պլհկ
>The Tie Between Ruby and Rust. plz ne nado
Крылатый
Бот, 100%
Sheldhur
ку, кто имел дело с smrsh?
Loo
https://github.com/harababurel/gcsf
Cat
Бот, 100%
приглашает другого юзера, который есть только в cxx чатах атака на c-like языки?
Berkus
о, ботоводы
Berkus
с ботами
Berkus
забанить что ли
бань оптом)
Berkus
почему?
too tied, ЕВПОЧЯ
Alex
там просто хелперы чтобы не писать лапши туда сюда
պլհկ
есть же helix
Berkus
@notplhk вот еще боты с ботоводами оптом
კაცი
я сильно сомневаюсь что это боты
კაცი
в противном случае, почему при попытке добавить бота телега выдаёт ошибку?
պլհկ
Они уже заблочены 🤔
Αλεχ
уже все получилось, спасибо
Loo
уже все получилось, спасибо
захайперформансил?
Loo
без копирования?
Loo
теперь как пуля летит?
Αλεχ
захайперформансил?
let mut arr = [0u8; 32]; for (i, chunk) in bytes.chunks(32).enumerate() { let chunk = if chunk.len() == 32 { unsafe { mem::transmute(chunk.as_ptr()) } } else { arr[..chunk.len()].copy_from_slice(chunk); &arr }; pwasm_ethereum::write(&(base_address + i.into()).into(), chunk); }
Αλεχ
&[u8]
Αλεχ
просто преждевременно оптимизирую нахуй
Αλεχ
и ветвления добавляю туда, где не обязательно
Αλεχ
у меня основная проблема в газе
Αλεχ
похуй на скорость
Αλεχ
но по количеству вычислений может просто нахуй послать всю транзакцию
Αλεχ
вот и дрочусь
Αλεχ
за каждое копирование
Loo
без замеров хуйнёй страдаешь
Αλεχ
без замеров хуйнёй страдаешь
хуже я явно не сделал
Loo
хуже я явно не сделал
сделал же. код уёбищней выглядит
Loo
պլհկ
let mut arr = [0u8; 32]; for (i, chunk) in bytes.chunks(32).enumerate() { let chunk = if chunk.len() == 32 { unsafe { mem::transmute(chunk.as_ptr()) } } else { arr[..chunk.len()].copy_from_slice(chunk); &arr }; pwasm_ethereum::write(&(base_address + i.into()).into(), chunk); }
опять наебалово какое-то обещали нулевые байты на конце а тут если первая итерация будет 31, а вторая 16, то что?
Loo
не нужны
Αλεχ
итерация либо 32 либо < 32
Αλεχ
тестов нет хуле
давно в гадалки записался?
Αλεχ
только что
не прошел
Αλεχ
почему into_iter по Vec<u8> дает Iterator<Item=&u8>?
Αλεχ
какого хера собсна
Αλεχ
result.into_iter().map(|x| *x).collect() - спасибо
Αλεχ
может потом сделаю копирование всегда
պլհկ
https://play.rust-lang.org/?gist=15794d72256d56bf55eb8e6fdf6e9a92&version=stable&mode=debug&edition=2015
Αλεχ
просто пока непонятно какой сценарий чаще
պլհկ
действительно, почему?
Αλεχ
действительно, почему?
error[E0277]: a collection of type `alloc::Vec<u8>` cannot be built from an iterator over elements of type `&u8` --> src\lib.rs:174:32 | 174 | result.into_iter().collect() | ^^^^^^^ a collection of type `alloc::Vec<u8>` cannot be built from `std::iter::Iterator<Item=&u8>` | = help: the trait `core::iter::FromIterator<&u8>` is not implemented for `alloc::Vec<u8>`
Αλεχ
let result: [u8; 32] = get_result(); result.into_iter().collect()
պլհկ
но… это не вектор
Αλεχ
а
Αλεχ
вот штирлиц и попался
Loo
)