Forwarded from Nikolay Osaulenko
Наверное можно через
union так как его поля находятся в одной области памяти. Ну и так как Copy не хотелось бы навешивать, то остаётся только с ManuallyDrop. Как-то такfn cast_me<T: 'static, U: 'static>(value: T) -> Result<U, T> {
if value.type_id() != TypeId::of::<U>() {
return Err(value);
}
union Wrapper<T, U> {
t: ManuallyDrop<T>,
u: ManuallyDrop<U>,
}
unsafe {
let wrapper: Wrapper<T, U> = Wrapper {
t: ManuallyDrop::new(value),
};
Ok(ManuallyDrop::into_inner(wrapper.u))
}
}😭4🙏3
Почему внезапно 8 из 12 сетов мотыги стали выпускаться по лицензиям других франшиз?
В основном по диснеевским.
В основном по диснеевским.
🤔1
Хотел сегодня обмануть матан и упростить количество умножений в MLP путём замены скаляр на тензор с поэлементным умножением.
Но оказалось, что так я уменьшаю количество параметров, а общая сложность вычисления по отношению к количеству параметров не меняется.
Но оказалось, что так я уменьшаю количество параметров, а общая сложность вычисления по отношению к количеству параметров не меняется.
Придумал что бы еще такого сделать лиши бы не делать движок (который я делаю лишь бы не делать игру).
Как многие могут угадать это атлас текстур.
Зачем нужны вообще атласы текстур?
Во-первых что бы не создавать миллион маленьких текстур, потому что на каждую идет оверхэд.
К тому же можно будет больше объектов в один вызов фрагментного шейдера впихнуть.
Алгоритм заработал почти сразу, результат вроде неплохой. Особенно если перед запаковкой отсортировать по площади.
Как многие могут угадать это атлас текстур.
Зачем нужны вообще атласы текстур?
Во-первых что бы не создавать миллион маленьких текстур, потому что на каждую идет оверхэд.
К тому же можно будет больше объектов в один вызов фрагментного шейдера впихнуть.
Алгоритм заработал почти сразу, результат вроде неплохой. Особенно если перед запаковкой отсортировать по площади.
🥰4👍1
Пошел рюхать упаковку произвольных полигонов, сломал думатель.
Зачем это так сложно?
Мне опять на месяц нырнуть в это придется?
На расте есть имплементация, но не на crates.io.
Неужто у меня рука поднимется форкнуть?
Зачем это так сложно?
Мне опять на месяц нырнуть в это придется?
На расте есть имплементация, но не на crates.io.
Неужто у меня рука поднимется форкнуть?
❤3
Не так давно - в rustc-1.81 - в stable завезли обещание оптимайзеру.
Обычно под именем
поэтому в
THE WHAT?
Looks inside
Ладно уж, что в имени тебе моём, ведь розу как не назови, а UB будет, если наврёшь.
Предлагаю кому-то, кто на работе пишет на Rust, немедленно использовать в проде и выкатить в пятницу.
Обычно под именем
assume, в стандартной библиотеке раста решили не пойти простым путём,поэтому в
core::hint, вы можете найти assert_unchecked!THE WHAT?
fn assert_unchecked(cond: bool)Looks inside
intrinsics::assumeЛадно уж, что в имени тебе моём, ведь розу как не назови, а UB будет, если наврёшь.
Предлагаю кому-то, кто на работе пишет на Rust, немедленно использовать в проде и выкатить в пятницу.
👏7🤝4👍3👎1
Random Rust Dev
Не так давно - в rustc-1.81 - в stable завезли обещание оптимайзеру. Обычно под именем assume, в стандартной библиотеке раста решили не пойти простым путём, поэтому в core::hint, вы можете найти assert_unchecked! THE WHAT? fn assert_unchecked(cond: bool)…
Загадка
Есть такая вот реализация
Зачем делать такой
Вроде как без бранча сильно лучше было бы для перформанса?
Есть такая вот реализация
lerp#[inline(always)]
pub fn lerp(a: f32, b: f32, t: f32) -> f32 {
if t < 0.5 {
(b - a).mul_add(t, a)
} else {
(a - b).mul_add(1.0 - t, b)
}
}
Зачем делать такой
lerp вместо a.mul_add(1.0 - t, b * t) или b.mull_add(t, a * (1.0 - t)) или даже b.mull_add(t, a.mull_add(-t, a)), да хоть тот же (b - a).mul_add(t, a) из первого бранча?Вроде как без бранча сильно лучше было бы для перформанса?
🤔4
Что вообще за
Оно может быть слабенько инкриментировано?
Предлагаю пропозал -
Попытка инкриментить его второй раз за неделю вызывает UB.
Для нечадов будет метод, который бросает исключение вместо этого.
Никто точно не спутает со
std::weakly_incrementable ?Оно может быть слабенько инкриментировано?
Предлагаю пропозал -
std::weekly_incrementable, который инкриментится только раз в неделю, не чаще.Попытка инкриментить его второй раз за неделю вызывает UB.
Для нечадов будет метод, который бросает исключение вместо этого.
Никто точно не спутает со
std::weakly_incrementable!😁18🤡5💯5👍3
Пишу в отдел железячников, все очень удивились, что я в последний рабочий день привезу оборудование - что я должен сделать по процедуре оффбординга.
Договорился с одним, приехал в офис, ехал долго, пишу ему - игнор.
Игнорил меня, пока его рабочий день не кончился.
Машину у офиса припарковать негде, стою у мусорки.
Но пересилил себя, не стал компы в мусорку кидать.
Покружил еще, встал на освободившееся место. Захожу в офис.
И? Правильно, меня совершенно не ожидают увидеть. В списках ожидаемых посетителей меня нет.
Пока что жду на ресепшене, может кто-то из отдела железок еще остался.
Договорился с одним, приехал в офис, ехал долго, пишу ему - игнор.
Игнорил меня, пока его рабочий день не кончился.
Машину у офиса припарковать негде, стою у мусорки.
Но пересилил себя, не стал компы в мусорку кидать.
Покружил еще, встал на освободившееся место. Захожу в офис.
И? Правильно, меня совершенно не ожидают увидеть. В списках ожидаемых посетителей меня нет.
Пока что жду на ресепшене, может кто-то из отдела железок еще остался.
😢16
Нашелся ответственный человек, выписали пропуск на внутреннюю парковку, на телеге завезли компы и прочее.
Подписали акт передачи и я наконец-то безработный!
Подписали акт передачи и я наконец-то безработный!
🔥8👍5🥰1🎉1