Oldes / Rebol-issues

Issue tracker for https://github.com/oldes/Rebol3
4 stars 0 forks source link

The 'old module #2132

Closed Siskin-Bot closed 4 years ago

Siskin-Bot commented 4 years ago

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:

; 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]

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:


Rebolbot mentioned this issue on Jan 12, 2016: Kill REPEND as it has a confusing name and is twice as slow Infinite loop in "for" caused by overflow Add VOID function to return an #[unset!], eliminate EXIT in favor of RETURN VOID


Rebolbot mentioned this issue on Jan 22, 2016: [Epic] Backwards-incompatible API changes, for the greater good


Oldes commented 4 years ago

I don't think it's needed anymore. Although it could be nice module system test.