Sujet : Re: Avoid treating the stack as an array [Re: "Back & Forth" is back!]
De : the.beez.speaks (at) *nospam* gmail.com (Hans Bezemer)
Groupes : comp.lang.forthDate : 07. Sep 2024, 13:40:41
Autres entêtes
Organisation : KPN B.V.
Message-ID : <nnd$26b4d59b$27bdb181@ce638e508b04426e>
References : 1 2 3 4 5 6
User-Agent : Mozilla Thunderbird
On 06-09-2024 23:03, Buzz McCool wrote:
On 9/5/2024 8:18 AM, Hans Bezemer wrote:
Given that the area of the circle doesn't change - why recalculate that every time?
Excellent observation.
Would you have any videos talking about Forth locals? You and dxf are far more adept at stack manipulations than I. I'm thinking I can get a word up and working with locals and then convert to manual stack manipulations afterwards if necessary.
Oh, I talk a lot about locals: don't use them. The point is: you have random access to locals. So I doubt very much it will help you to uncover a smart way to do it without them. Basically any non-Forth Algol-like language will do the job.
And that's in essence you I am opposed to them. It takes out what makes Forth unique - and the way thinking of Forth unique.
When is it necessary? dxf showed a word w/o locals to have ~%30 fewer instructions than a word with locals. Is that a common occurrence?
I can't really tell. In 4tH (my own implementation) the use of locals requires an external library - so it always consumes more instructions. It also heavily depends on the style and the skill of the programmer. If you're a newbie doing a lot of stack acrobatics, I doubt it.
What bothers me most technologically is that parameters flow through the stack undisturbed. You break that paradigm when using locals. With locals you *HAVE TO* create some kind of stack frame that you have to destroy when you exit.
Needless to say this copying, releasing and stuff takes time. Even when you don't use locals. In all honesty I must state that this overhead is not always translated to a diminished performance - at least not in the tests I did.
****
TL;DR my objections are mostly based on pure architectural arguments, rather than practicality. I also don't like Python, PHP and Perl for those very same reasons - one because I think its paradigms are fundamentally flawed, the second and third because of their "have we thrown in the kitchen sink yet" mentality.
I don't think there will ever be a "Back&Forth" episode on locals - frankly, because - apart from some demonstrations - there is only one single, ported program that uses locals in my repository. How can you teach if you never used them yourself?
****
Note that 4tH features R@, R'@ and R"@ which can server very conveniently as "local variables" - provided you leave the Return Stack alone. I learned that trick from the programmer of the FIG editor.
See:
https://sourceforge.net/p/forth-4th/code/HEAD/tree/trunk/4th.src/lib/gcircle.4th for a nice example of that one.
Hans Bezemer