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: > > On 11/13/13, 10:01 AM, Jordan Hubbard wrote: >> On Nov 13, 2013, at 6:57 AM, Alfred Perlstein <alfred@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.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?86F0F59A-2DE0-42A3-9B8B-ADB1F3CA55A1>
