But why do you want a static Vec without lazy_static anyway? If your static is immutable, why don't you use a primitive, sized array instead? If your static is mutable, and you want to grow the vector, how do you want to ensure thread/concurrency/memory safety? Do you always want to make manual unsafe locking code around your static?
I’ve definitely seen Vec::new() get thrown around a few times as an example of a function that could be const fn, and now that we allow Drop types in consts I’m not aware of any reason not to make it a const fn. I think we just haven’t gotten around to it yet.
You can also use something like spin::Mutex, which has a const constructor and works on no_std.
I think it's always possible to use lazy_static. However, TBH, it really annoys me. I've tried many times to get used to it, but I really shouldn't need the extra layers around my static just to initialize it at the very beginning of the program anyway...