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>