2024-09-03 data array works. next: push/pop 2024-09-05 push and pop work getting word tokens works 2024-09-06 dictionary name table works Problem: I can easily store a token sequence in the directionary. But to make a return stack function correctly, I would need to store both the name *and* position of the last call site? Solution?: Instead of storing the token sequences in separate table entries, what if I store all source in the same string and just store pointers to it? And if the return stack is empty, we're reading from stdin. 2024-09-10 Holy cow, this works: : 2x DUP + ; 5 2x . CR : 4x 2x 2x ; 5 4x . CR Words calling words. So the return stack works. Whew. Definitely had some tough bugs there for a bit, but nothing some "print debugging" can't fix. 2024-09-11 Well, now that my initial goal is accomplished, I feel a bit aimless. I could just start implementing various words, but that doesn't exactly fill me with joy. So I've decided to go get a new goal. I've always liked the 99 Bottles of Beer exercise where you print out the lyrics to the song in your favorite programming language. I found a good one and threw it into a 99.forth file. Is it weird that it's kind of a relief to see errors so I know what to do next? No, it is not weird. $ snobol forth.sno <99.forth ERROR: '(' not in dictionary. ERROR: 'Bottles' not in dictionary. ERROR: 'of' not in dictionary. ERROR: 'Beer' not in dictionary. ... Looks like I need to implement "( ... )" comments first. This, of course, will cause a whole cascade of other words needing to be defined. But that's the whole idea. It looks like the total list of words to implement the traditional bootstrapped functionality needed for 99 Bottles is something like: ' ( +LOOP , - -1 . ." 0BRANCH 1- = ?DUP @ BEGIN DO ELSE HERE I IF KEY SWAP THEN UNTIL [CHAR] (To get this list, I did a little manual recursive walk through JonesFORTH to get the definitions of the words used in 99 Bottles.) ' ( +LOOP , - -1 . ." 0BRANCH 1- = ?DUP @ BEGIN DO ELSE HERE I IF KEY SWAP THEN UNTIL [CHAR] ... Many days later ... Went a totally different direction. Not slavishly following traditional implementation of the Forth words. Nope, just making straightforward Snobol functions for what's needed for 99 Bottles. ... Aaaaand, DONE ... I guess I wasn't very good about keeping up the log but I will have some conclusions about how this went that I'll be writing somewhere.