I'm designing and currently rethinking a low-level interpreted programming language with similarities to assembler.

I very soon came across the functions/loops/gotos decision problem and thought that while loops like `while` and `for` would be too high-level and unfitting, gotos would be too low level, unmaintainable and generally evil again.
Functions like you know them from most languages that have return values and arguments aren't fitting in the language's concept either.

So I tried to figure out something between a function and a goto which is capable of

* Recursion
* Efficient loops

After some thinking I came up with the idea of subroutines:

* They have a beginning and an end like a function
* They have a name but no arguments like a goto
* You can go into one with jump and go out of it again before its end with `return` (doesn't give back any result, only stops the subroutine)
* Handled just like normal code -> Global scope like goto

So I wanted to know:

* Is the idea above good? What are the (dis)advantages?
* Would there be a better combination of function and goto or even a completely new idea?