Artifact 5f1e9200f39a0062e5060a454a79b20bdeded2d764b9e9e0493097f9d100e8c4:
- File doc/Hyperstatic.md — part of check-in [0b0cd20ed6] at 2018-05-07 16:39:49 on branch trunk — rename references to old names in doc (user: crc size: 870)
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.