Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 14 Nov 2013 00:58:51 +0000
From:      "Teske, Devin" <Devin.Teske@fisglobal.com>
To:        Alfred Perlstein <alfred@freebsd.org>
Cc:        FreeBSD Hackers <freebsd-hackers@freebsd.org>, Devin Teske <dteske@freebsd.org>, "Teske, Devin" <Devin.Teske@fisglobal.com>, Jordan Hubbard <jkh@mail.turbofuzz.com>
Subject:   Re: Loader forth changes for customization
Message-ID:  <86F0F59A-2DE0-42A3-9B8B-ADB1F3CA55A1@fisglobal.com>
In-Reply-To: <5283CBD1.9010606@freebsd.org>
References:  <5282E56F.4020307@freebsd.org> <52832003.8080406@freebsd.org> <09673101-DB54-4D25-9989-8C80D06E266B@fisglobal.com> <5283933E.30603@freebsd.org> <A0800C10-2455-477C-A2DF-FBE5A6FE6F87@mail.turbofuzz.com> <5283CBD1.9010606@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

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

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

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.
--=20
Devin

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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?86F0F59A-2DE0-42A3-9B8B-ADB1F3CA55A1>