Continuing on to the next language in the book: Factor.
Factor is…strange, and often frustrating. Where Lua felt simple and easy, Factor feels simple but hard.
Its concatenative syntax looks clean, just a list of words written out in order, but reading it requires you to keep a mental stack in your head at all times, so you can predict what the code does.
Here’s what I learned:
Day One
- not functions, words
- pull and push onto the stack
- no operator precedence, the math words are applied in order like everything else
- whitespace is significant
- not anonymous functions: quotations
- `if` needs quotations as the true and false branches
- data pushed onto stack can become "out of reach" when more data gets pushed onto it (ex: store a string, and then a number, the number is all you can reach)
- the `.` word becomes critical, then, for seeing the result of operations without pushing new values on the stack
- also have shuffle words for just this purpose (manipulating the stack)
- help documentation crashes; no listing online for how to get word docs in listener (plenty for vocab help, but that doesn't help me)
- factor is really hard to google for
Day Two
- word definitions must list how many values they take from the stack and how many they put back
- names in those definitions are not args, since they are arbitrary (not used in the word code itself)
- named global vars: symbols (have get and set; aka getters and setters)
- standalone code imports NOTHING, have to pull in all needed vocabularies by hand
- really, really hate the factor documentation
- for example, claims strings implement the sequence protocol, but that's not exactly true...can't use "suffix" on a string, for example
Day Three
- not maps, TUPLES
- auto-magically created getters and setters for all
- often just use f for an empty value
- is nice to be able to just write out lists of functions and not have to worry about explicit names for their arguments all over the place
- floats can be an issue in tests without explicit casting (no types for functions, just values from the stack)
- lots of example projects (games, etc) in the extra/ folder of the factor install