Download Leo Brodie THINKING FORTH
Transcript
then saying X + Or you can say : X X + ; One of the problems that’s most frustrating for me is knowing whether it’s worth creating a defining word for a particular data structure. Will I have enough instances to justify it? I rarely know in advance if I’m going to have more than one array. So I don’t define the word ARRAY. After I discover I need two arrays, the question is marginal. If I need three then it’s clear. Unless they’re different. And odds are they will be different. You may want it to fetch it for you. You may want a byte array, or a bit array. You may want to do bounds checking, or store its current length so you can add things to the end. I grit my teeth and say, “Should I make the byte array into a cell array, just to fit the data structure into the word I already have available?” The more complex the problem, the less likely it will be that you’ll find a universally applicable data structure. The number of instances in which a truly complex data structure has found universal use is very small. One example of a successful complex data structure is the Forth dictionary. Very firm structure, great versatility. It’s used everywhere in Forth. But that’s rare. If you choose to define the word ARRAY, you’ve done a decomposition step. You’ve factored out the concept of an array from all the words you’ll later back in. And you’ve gone to another level of abstraction. Building levels of abstraction is a dynamic process, not one you can predict. Tip 6.22 Today, make it work. Tomorrow, optimize it. Again Moore. On the day of this interview, Moore had been completing work on the design of a board-level Forth computer, using commercially available ICs. As part of his toolkit for designing the board, he created a simulator in Forth, to test the board’s logic: This morning I realized I’ve been mixing the descriptions of the chips with the placement of the chips on the board. This perfectly convenient for my purposes at the moment, but when I come up with another board that I want to use the same chips for, I have arranged things very badly. I should have factored it with the descriptions here and the uses there. I would then have had a chip description language. Okay. At the time I was doing this I was not interested in that level of optimization. 194 Factoring