▲ | gingerBill 2 days ago | |||||||
When I write the backend (this repo isn't even 24 hours old yet), you'll find out why variable declarations are at the top of a procedure. (Hint: it has something to do with the stack). | ||||||||
▲ | alexjplant a day ago | parent | next [-] | |||||||
I wondered why my university made us use C90 for Systems Programming class (circa 2010) until I took Compilers. This quirk specifically stood out to me when considering code generation from an AST - it's a lot easier to simply allocate all required memory at the top of a stack frame when you have the variable declarations at the top of the function. | ||||||||
▲ | Lerc a day ago | parent | prev [-] | |||||||
I'm aware that it lets you do things in a single pass manner, but this is the instance where I think the cost for allowing that is too great. I always thought there must be a better solution, like emitting the compiled function body first which just increments the offset whenever a space for a variable is required and emit the function entry after the function exit last, so you can set up the stack frame with full knowledge of it's use. Then the entry can jump to the body. Scoping to blocks would let you decrement the offset upon exiting the block which would result in less stack use which would almost always be more beneficial than the cost of the additional jump. | ||||||||
|