Yeah, you can think of it as translating the code “twice”, but that is not the whole picture.
You can break out the compilation process into any number of steps! Depends what you count as a “translation” step. I think of nim being 1 step: nim -> exe comes out. But you can think of it as 2 steps: nim -> C -> exe comes out. But really C has its own steps, so maybe 4 steps: nim -> C -> Assembler -> Linker -> exe comes out. But really there are a ton of steps in the middle too, maybe 18 steps is more accurate: Nim lexical Nim syntax Nim semantic Nim generics folding Nim macro expansion Nim code generator C preprocessor C lexical C syntax C intermediate code generator C code optimizer C target code generator Assembler preprocessor Assembler Lexical Assembler Syntax Assembler code generator Linker Exe comes out. Is one step better than any other step? Does the number of steps matter? If you stuff compiles fast - and it does compile fast with nim - it does not matter at all. How many “translation” steps does nim have? Depends how you count.