retroforth/doc/Hyperstatic.md
crc c676b83793 fix many uses of deprecated names (thanks john_cephalopoda) [first of a few patched related to this]
FossilOrigin-Name: faa0b6ed0fa09b4307285cfc8a6172762636285bb7864e64cff2995e4d9ba324
2020-09-30 23:02:23 +00:00

868 B

Hyperstatic Global Environment

This now brings up an interesting subpoint. Retro provides a hyper- static global environment. This can be difficult to explain, so let's take a quick look at how it works:

    #1000 'a var-n
    :scale (x-y) @a * ;
    #3 scale n:put
    >>> 3000
    #100 !a
    #3 scale n:put
    >>> 300
    #5 'a var-n
    #3 scale n:put
    >>> 300
    @a n:put
    >>> 5

Output is marked with >>>.

Note that we create two variables with the same name (a). The definition for scale still refers to the old variable, even though we can no longer directly manipulate it.

In a hyper-static global environment, functions continue to refer to the variables and earlier functions that existed when they were defined. If you create a new variable or function with the same name as an existing one, it only affects future code.