We are changing stuff (#2128, #666). Some people want to run code with the old stuff. Most of that code doesn't depend on the old evaluation model, it just needs some of the old functions and stuff. This is fixable.
For functions and some other values which have been intentionally redefined in Rebol 3 to make things better for us going forward, we don't necessarily have to get rid of the old stuff; we just need to make it optional. The best way to make it optional is with a (formerly known as "private", see #2115) module. And the best way to make the use of that stuff self-documenting is to name that module 'old.
Every function which we're renaming or changing the API of in #2128 should have the old version in 'old. Also, we should put deprecated stuff like FUNCT in 'old even though it's still there, because it won't be in the main namespace forever. And we should move the stuff we're exporting in 'old to a separate source file, so people can make a minimal build of Rebol without that stuff if their code doesn't need it.
This is a better proposal than R3-Backward for most people. Most of the time you only need a few functions, not the whole different evaluation model. Plus, whole applications written in the old script style can often get by with a single script-level import of what they need at the beginning; the rest of the app will just use the stuff imported earlier.
This requires all of #2114, #2115 and #2126 to be able to work. You would almost never want to import 'old without specifying exactly what you need in selective export. There's a lot of bad old stuff in there, you're really better off just importing the stuff you really need until you can migrate to the new stuff. Plus, some of the stuff going in 'old right away is native!, not command!, so we need a proper internal module, not just an extension.
Example code:
; With new FOR
rebol []
for [x: 1] [x <= 5] [x: x + 2] [print x]
; With old FOR
rebol [needs: [old [for]]]
for x 1 5 2 [print x]
Submitted by: BrianH
We are changing stuff (#2128, #666). Some people want to run code with the old stuff. Most of that code doesn't depend on the old evaluation model, it just needs some of the old functions and stuff. This is fixable.
For functions and some other values which have been intentionally redefined in Rebol 3 to make things better for us going forward, we don't necessarily have to get rid of the old stuff; we just need to make it optional. The best way to make it optional is with a (formerly known as "private", see #2115) module. And the best way to make the use of that stuff self-documenting is to name that module 'old.
Every function which we're renaming or changing the API of in #2128 should have the old version in 'old. Also, we should put deprecated stuff like FUNCT in 'old even though it's still there, because it won't be in the main namespace forever. And we should move the stuff we're exporting in 'old to a separate source file, so people can make a minimal build of Rebol without that stuff if their code doesn't need it.
This is a better proposal than R3-Backward for most people. Most of the time you only need a few functions, not the whole different evaluation model. Plus, whole applications written in the old script style can often get by with a single script-level import of what they need at the beginning; the rest of the app will just use the stuff imported earlier.
This requires all of #2114, #2115 and #2126 to be able to work. You would almost never want to import 'old without specifying exactly what you need in selective export. There's a lot of bad old stuff in there, you're really better off just importing the stuff you really need until you can migrate to the new stuff. Plus, some of the stuff going in 'old right away is native!, not command!, so we need a proper internal module, not just an extension.
Example code:
Imported from: CureCode [ Version: 1.0.0 Type: Wish Platform: All Category: n/a Reproduce: Always Fixed-in:none ] Imported from: https://github.com/rebol/rebol-issues/issues/2132
Comments: