Zarutian_HTC has quit [Read error: Connection reset by peer]
Zarutian_HTC has joined #forth
yyyyyy has joined #forth
yyyyyy` has joined #forth
boru` has joined #forth
boru has quit [Disconnected by services]
boru` is now known as boru
Zarutian_HTC has quit [Remote host closed the connection]
yyyyyy` has quit [Remote host closed the connection]
dave0 has joined #forth
sts-q has quit [Ping timeout: 260 seconds]
sts-q has joined #forth
hosewiejacke has joined #forth
gravicappa has joined #forth
_whitelogger has joined #forth
dave0 has quit [Quit: dave's not here]
birdwing has joined #forth
hosewiejacke has quit [Ping timeout: 256 seconds]
hosewiejacke has joined #forth
hosewiejacke has quit [Ping timeout: 240 seconds]
dave0 has joined #forth
iyzsong- has joined #forth
iyzsong has quit [Ping timeout: 256 seconds]
iyzsong- is now known as iyzsong
birdwing has quit [Ping timeout: 240 seconds]
<veltas>
floatcomplex: THEN resolves a forward reference, i.e. in IF THEN the IF creates a forward reference, and THEN resolves it. That 'forward reference' is used if the thing popped from the stack is zero at runtime
<veltas>
So it lets IF jump forwards
<veltas>
WHILE creates a forward reference under the reference BEGIN leaves to loop back
<veltas>
That forward reference is used to end the loop early when the thing popped is zero at runtime
<veltas>
So WHILE and IF are very similar, and THEN can be used to consume the forward reference (i.e. choose a different location for the WHILE to jump to) if the loop is ended with UNTIL instead of REPEAT, or if there are additional WHILE's before a REPEAT.
<veltas>
This is allowed by the forth200x standard, and is conventional for these words
<veltas>
So the BEGIN..WHILE..WHILE..REPEAT THEN lets you have two conditions in a loop, which is quite a common need
<veltas>
Two or more
birdwing has joined #forth
tabemann has quit [Remote host closed the connection]
tabemann has joined #forth
hosewiejacke has joined #forth
hosewiejacke has quit [Quit: Leaving]
dave0 has quit [Quit: dave's not here]
<floatcomplex>
veltas: yeah that makes sense, i think it might actually take some options off the table for how to implement it vs if "begin...until" and "begin...while...repeat" were the only allowed options though
<floatcomplex>
maybe possible to have fastpath code for if only those are used
gravicappa has quit [Ping timeout: 256 seconds]
gravicappa has joined #forth
Gromboli has quit [Quit: Leaving...]
Gromboli has joined #forth
Gromboli has quit [Ping timeout: 260 seconds]
Gromboli has joined #forth
the_cuckoo has quit [Ping timeout: 246 seconds]
birdwing has quit [Ping timeout: 256 seconds]
the_cuckoo has joined #forth
gravicappa has quit [Ping timeout: 246 seconds]
birdwing has joined #forth
xek has quit [Ping timeout: 246 seconds]
lispmacs[work] has quit [Remote host closed the connection]
<veltas>
floatcomplex: I think the only reason it's defined this way is because it was supported in FIG forth or something and too much code already relied on it
<veltas>
So it is conventional now whether we like it or not, a bit like allotting and -allotting memory, you could argue is not optimal for hash forths
<floatcomplex>
veltas: yeah it makes total sense now that i look at the spec for how it's expected to be implemented. but it does seriously constrain the implementation
<veltas>
Well you could have non-standard words that are less constrained, or just not follow standard at all