The need for more structured code support has arisen with the addition of bigger and more sophisticated bindings like GTK one or the (soon to be released) work on alpha version of Red compiler (which emits Red/System code). So, v0.2.6 introduces namespaces support using a very simple, but efficient model.
For example, to encapsulate some variables and functions in a local context:
b: 1 a: context [ b: 2 inc: func [i [integer!] return: [integer!]][ i + b ] ] a/inc 5 ;-- will return 7
Local variables take precedence other global ones with same name. This simple rule also applies to nested contexts, the nearest one has priority, e.g.:
a: context [ b: 123 c: context [ #enum colors! [red green blue] b: "hello" foo: func [print-line b] ] print-line b ;-- will output 123 c/foo ;-- will output hello ] print-line a/b ;-- will output 123 a/c/foo ;-- will output hello print-line a/c/b/2 ;-- will output e print-line a/c/blue ;-- will output 2
As you can see from this example, enumerations can also be defined locally to a context, but not only. Aliases and imported functions can also be defined locally too! With that powerful new feature, you can now modularize your Red/System programs simply and efficiently.
See the namespaces documentation for more features and info.
In this release you will also find several bugfixes, mainly for floats support. Thanks to Rebolek for his aggressive floats testing. ;-)