TGViewer
Random Rust Dev Random Rust Dev @random_rust_dev · 472 subscribers
Post #413 1.61K
Я два дня сражался с тем фактом, что в Rust нельзя просто взять и написать

trait Foo {
const fn bar(arg: Arg) -> Ret;
}

почему? потому, оставили невозможным что бы дизайнить взаимодействие конста и трейтов в спокойствии еще несколько лет.

Если бы без Arg - я бы просто сделал const BAR: Ret.
Если что const BAR<const ARG: Arg>; Тоже нельзя, но хотя бы в найтли можно.

Пробовал сделать функцию не const, но писать её, как если бы она была const. Надеялся, что соптимизируется.
До некоторой глубины действительно оптимизировалось.

В итоге пришел вот к такой форме "конст-функции-на-стейбле"

trait Foo {
type Bar<const ARG: Arg>: RetType;
}

trait RetType {
const VALUE: Ret;
}


impl Foo for FooImpl {
type Bar<const ARG: Arg> = FooBar<ARG>;
}

struct FooBar<const ARG: Arg>;
impl RetType for FooBar<const ARG: Arg> {
const VALUE: Ret = {
// faked const fn body.
};
}


Это ужасно выглядит? Да.
Это гарантирует, что в результате компиляции на месте FooImpl::Bar::<ARG>::VALUE будет константа, а не вызов функции? Тоже да.
  • ❤ 6
  • 👍 4
  • 🔥 1
More from @random_rust_dev
  1. Sep 20, 2026И всё же ИИ отличная штука. Никакой поисковик не мог мне дать ответ на вопрос, почему шурш…
  2. Sep 20, 2026Скелетор злодей, но не врун
  3. Sep 18, 2026Я попросил GPT Astra повысить производительность Alkahest. GPT смог прогнать профайлер и у…
  4. Sep 16, 2026PC gaming with extra steps
  5. Sep 14, 2026Сегодня снова загадка. Вот в этом коде будет ли соптимизирован bound check в последнем выр…
  6. Sep 13, 2026Чуть не забыл. Поздравлчю всех с днём промпт-инженера!
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →