@nedzadarek so, now you disagree with technical details and objective facts? Whatever.
Words and variables are different both in their implementations and at conceptual level. Words can serve as variables in a very, very special sense (to the degree that you can't just call them "variables" without wasting your breath on 1-2 hour explanation of difference between the two) , but they are not variables, neither technically (they differ in implementations) nor conceptually (we use "words" and "bindings" for a reason!).
any-word!s are bound to
system/words("global context") on
loadphase and are
unset(there's no value associated with them). Then, at run-time, words are rebound by functions to other contexts, change their values in the available conexts, or remain untouched.
>> foo: has [x][x: 42 'x] == func [/local x][x: 42 'x] >> foo == x >> get foo *** Script Error: context for x is not available *** Where: get *** Stack:
>> probe bind? foo make object! [ x: 42 ]
>> #do [simulate-external?: true] == [simulate-external?: true] >> #either simulate-external? [*** Script Error: simulate-external? has no value *** Where: catch *** Stack:][ ]
.Call-Powershell: function[.powershell-command /out /silent][ powershell-command: to-powershell .powershell-command either not out [ call powershell-command ][ output: copy "" do-events/no-wait print powershell-command do-events/no-wait call/output powershell-command output unless silent [ print output ] return output ] ]
>> foo: has [ datatype!: datatype! unset!: unset! none!: none! logic!: logic! block!: block! paren!: paren! string!: string! file!: file! url!: ur >> rebind :foo :foo context? foo == func [ ][ ]][ ] == func [ ][ ] >> context? foo == func [ ][ ] >> x: 'whatever rebind :foo system/words context? foo == make object! [