Size: a a a

2020 October 16

DT

Dmitry Terekhov in Rust Beginners
Kai Ren
А что мешает просто взять срез, если ты и так его ожидаешь в let b: &[f32; 3] ?

let b: &[f32; 3] = &e[0][..3] ?
slice это же len + ptr?
источник

KR

Kai Ren in Rust Beginners
Dmitry Terekhov
slice это же len + ptr?
да
источник

DT

Dmitry Terekhov in Rust Beginners
Kitsu
а, сорри, слишком перегруженное слово
скасти реф и все
Всм?
источник

IB

Ivan Boldyrev in Rust Beginners
Dmitry Terekhov
slice это же len + ptr?
Да, но тут компилятор всё должен соптимизировать, так как и длина строки, и среза - известные константы.
источник

DT

Dmitry Terekhov in Rust Beginners
К примеру, в ++ я бы просто сделал reinterpret_cast<Vector3 *>(e[0]) без проблем.
источник

IB

Ivan Boldyrev in Rust Beginners
Ivan Boldyrev
Да, но тут компилятор всё должен соптимизировать, так как и длина строки, и среза - известные константы.
Если, конечно, ты не передашь это куда-то...
источник

DT

Dmitry Terekhov in Rust Beginners
Ivan Boldyrev
Да, но тут компилятор всё должен соптимизировать, так как и длина строки, и среза - известные константы.
Не хотелось бы в моем случае надеяться на компилятор.
источник

IB

Ivan Boldyrev in Rust Beginners
Dmitry Terekhov
Не хотелось бы в моем случае надеяться на компилятор.
Зря :)
источник

K

Kitsu in Rust Beginners
Каи выше привел пример с саб-слайсом, или тебе прям массив нужен?
источник

DT

Dmitry Terekhov in Rust Beginners
Массив.
источник

DT

Dmitry Terekhov in Rust Beginners
В общем, тип длинной 4 * f23 хочу скастить к типу 3 * f32.
источник

KR

Kai Ren in Rust Beginners
Не понятно зачем тебе это. Нельзя трансмутить в разные размеры. Что ты потом хочешь с этим массивом делать? Только читать его, писать в него, может дропать его?
источник

K

Kitsu in Rust Beginners
Dmitry Terekhov
Массив.
let x: &[f32; 3] = &*(e[0].as_ptr() as *const [f32; 3]);
источник

K

Kitsu in Rust Beginners
Только выше хороший вопрос, нужен ли тебе на самом деле массив или достаточно слайса
источник

JM

John Meow in Rust Beginners
Kitsu
let x: &[f32; 3] = &*(e[0].as_ptr() as *const [f32; 3]);
А тут ансейф не нужен?
источник

K

Kitsu in Rust Beginners
нужен конечно
источник

DT

Dmitry Terekhov in Rust Beginners
Kitsu
Только выше хороший вопрос, нужен ли тебе на самом деле массив или достаточно слайса
У меня лежит матрица трансформации, где последняя строчка 0 0 0 1. Мне удобно взять 4 Vector3 и через скалярное произведение получить трансформированный вектор, чем гору кода писать.
источник

K

Kitsu in Rust Beginners
Dmitry Terekhov
У меня лежит матрица трансформации, где последняя строчка 0 0 0 1. Мне удобно взять 4 Vector3 и через скалярное произведение получить трансформированный вектор, чем гору кода писать.
На всякий случай скажу, что есть крейты вроде nalgebra которые имеют нормальный интерфейс для работы с векторами/матрицами/отображениями и т.п.
источник

DT

Dmitry Terekhov in Rust Beginners
Это, скажем так, учебный проект, чтобы познать Rust.
источник

DT

Dmitry Terekhov in Rust Beginners
Поэтому nalgebra не нужна)
источник