What is the real difference in terms of performance and drawbacks?
For example, if I have a (relative small, 10-15line) proc, that gets call thousands of times (from 1-2 different locations).
Would it be preferable to simply declare it as a template?
In which case would you favor what?
Procs are fine. You can mark them with {.inline.} pragma to avoid call overhead. When you compile with --passC:-flto you do not need inline pragma, and often c compiler backend may do inlining itself. Well, not over module boundaries without -flto.
So use proc whenever possible. To verify replace with template and find that performance is the same. If not create github issue.
Note that template is copy of code, so executable size increases. Inline proc same. For your example, proc with more than 10 lines of code regular procs without inline should be fine.
Mratsim once gave an example where templates are really faster, but I can not remember details, maybe it was compiler bug.
I feel the Compiler will probably make the right choice on wether to inline or to not inline. So my gut feeling is that it would not matter what you do.
The main thing you should do is to always profile your code instead. That is the only way you can know what is better or what is worse in your specific case, for your specific for loop and the compiler and os combo you are using.