Loader forth changes for customization

Teske, Devin Devin.Teske at fisglobal.com
Thu Nov 14 00:58:59 UTC 2013


On Nov 13, 2013, at 10:58 AM, Alfred Perlstein wrote:

> 
> On 11/13/13, 10:01 AM, Jordan Hubbard wrote:
>> On Nov 13, 2013, at 6:57 AM, Alfred Perlstein <alfred at freebsd.org> wrote:
>> 
>>> It seems to work although I will talk to the team about making separate files for the set commands.
>> Since we’re talking about this, there is an old maxim amongst FORTH programmers that if a single word’s definition takes more than a page, it’s just too dang long.   There are some solid reasons for that, namely the fact that forth is already hard enough to read as it is (and I’m speaking as a FAN of the language) and you generally need to keep the “internal stack state” in your head while writing a word since the stack contract is only at word boundaries (e.g. word is defined as tacking stack parameters foo and returning stack parameters bar).   Keeping the definitions short and sweet really helps to aid in comprehension.
>> 
>> The definition for draw-beastie currently violates that maxim, and if you guys were to refactor it as part of this work, I’m sure future generations would not object! :)
> I'll give that a shot shortly.
> 

I've already tossed a few things at Alfred today that can help
make things a lot simpler.

Specifically, for draw-beastie... I came up with an idea that
would whack off that big huge if-then block for the various
logos. It would be much more efficient to just assume that
the function (word) that draws the logo is actually named
the same as the desired setting but with a "-logo" suffix.

But I went out of the box today on something new...

Yes, Forth is a stack based language. But...

It can also take its arguments from something known as the
"Text Input Buffer" (or TIB for short). In essence, I whipped up
this little diddy for Alfred's work...

: try-include ['] include catch if 0 parse 2drop then ; immediate

This new word is a lot like the "include" word (and a number of
other words) in that it takes no stack arguments. Instead, it takes
arguments from the input stream. Example...

	try-include /boot/loader.rc.local
	try-include /boot/menu.rc.local

I designed the "try-include" function to work this way so that it
would be more intuitive and would be more "at-home" inside an
*.rc file where all the words (like "set" and "include" etc.) are
"clean" (more easily understood by non-Forth programmers).

Also, regarding the ol' maxim...

Don't you find that use of "( before -- after )" inline comments are
helpful in reducing the load on mentally having to tabulate the
stack contents for larger words?

I've tried to use that style in my coding whenever words appear
to be getting unwieldy, and would like to know if perhaps it's not
that great in dealing with the maxim of keeping things short.
-- 
Devin

_____________
The information contained in this message is proprietary and/or confidential. If you are not the intended recipient, please: (i) delete the message and all copies; (ii) do not disclose, distribute or use the message in any manner; and (iii) notify the sender immediately. In addition, please be aware that any message addressed to our domain is subject to archiving and review by persons other than the intended recipient. Thank you.


More information about the freebsd-hackers mailing list