New interactive console
The biggest change in this release is a completely revamped REPL, written entirely in Rebol itself — meaning it can be inspected and modified at runtime. The new console brings TAB completion (including path and file completion with multiple refinements) and history saved on exit. As the new console is still fresh and may have rough edges, the legacy REPL remains available via --legacy-repl as a fallback.
Language additions
Several useful natives join the standard library: read-key for single-keystroke input, tty? to detect whether stdin is a terminal, lerp for linear interpolation, and integer-divide for integer division. The arithmetic operators have been reorganised — // is now integer division, % is remainder, and %% is modulo. char! values now work with ++ and --.
Sorting has been upgraded to stable merge sort by default, with sort/unstable available for the previous Adaptive Symmetry Partition sort. Block sort with a comparator function now works correctly with the /all refinement, enabling multi-column sorting like sort/skip/compare/all.
The select and find functions now accept error! values, and bind works with errors too.
Type construction and accessors
url! and email! can now be constructed from a block!, restoring compatibility with Rebol 2. Email values gain /user and /host getters and setters. Strings pick up /size, /length, and /width accessors; individual characters get /size (UTF-8 byte count) and /width (terminal column width). Images gain /width, /height, /red, /green, /blue accessors and setters, plus grayscale/luminosity support using the BT.709 formula (BT.601 available via luminosity/luma).
Vectors can now be constructed from binary data or from an empty block, including shorthand like #(uint8!). Image pixels can be set using 1-byte-width vectors.
Maps and compose
compose now works with map! values, allowing parens inside a map to be evaluated in place:
compose #[num: (1 + 2)] ;== #[num: 3]A related fix ensures map values that evaluate to blocks expand correctly, and that deep-copying an object now correctly clones its map fields.
HTTP and networking
HTTP redirect handling can now be controlled per connection via port/spec/redirect?, or globally capped via system/options/http-redirects. Automatic decoding in the HTTP protocol is now limited to GET, POST, and PATCH responses. Network protection has been fine-tuned and security confirmation is now implemented — for example, secure [net ask] will prompt the user before allowing network access.
Formatting and output
format now supports rounding rules and implicitly reduces input blocks (as does printf). ANSI colours for ??, log messages, format, and printf are now drawn from system/options/ansi rather than dialected money values. The help output has been improved and partially colourised.
Renamed and removed
A handful of functions have been renamed:
wait-for-key→wait-keyask/char→ask/onlyformat-date-time→format-datetimeprint-horizontal-line→print-hlineprotect-system-object→protect-system
The deprecated try/except has been removed (use try/with).
Documentation
The functions dictionary has been updated, datatype documentation is now available, and a new examples section has been added to the site.
Full changelog
Features:
e1e45dAllowurl!construction fromblock!c0fc06Allowemail!construction fromblock!1459f6Implementuserandhostgetters/setters for email78dc62Add a build option to strip all docstrings from embedded Rebol code65b232Implement security confirmation5420c6Save history on exit; setsystem/console/currentwith actual console instance082b30Use new interactive console with TAB completion; legacy REPL available via--legacy-repl043211Allowselectandfindwitherror!values111543Implement rounding rules in theformatdialect17704cAllow overwriting the default ANSI palette during the buildf8816cAllowbindwitherror!values7f47a9Fine-tune network protection61ff9dAdd link to latest Rebol/Bzip2 extension2cba18Allow odd input lengths fordebasewith base 24252daAllow odd input lengths fordebasewith base 16e8ffb4Addidividenative for integer division9c251fSupportchar!arguments for--and++aa20a5Add string/size,/length, and/widthaccessors71f28fAdd character/sizeaccessor for UTF-8 byte size1468e7Add character/widthaccessor for terminal column widthc4b8efAddread-keynative for single-key input344252Addtty?native to detect terminal stdin46c59aImplementsort/skip/compare/allon blocks with comparator function8d3539Add/red,/greenand/blueimage accessors/setters87bedfSupport vector construction from binary data389c33Allow empty vector construction without empty data like#(uint8!)66c260Support setting image pixels with vectors (1-byte width)123ed0Add/widthand/heightimage accessors903e28Addlerpnative for linear interpolationf74e1dAdd grayscale/luminosity image and tuple support9b886cUse stable merge sort by default;sort/unstablefor Adaptive Symmetry Partition sort20b665Allowtrim/auto/tailwith string input7632b8Make map datatype composable in closures631ad3Make map datatype composable in functionsc626c7Optimize map datatype creation368dc5Add support for MAP! values in COMPOSE2b6aefBlock SORT comparator75d0f0Nativerequest-colorfunction on Windows
Changes:
f0a2f9formdoes not perform implicit dehexing like Rebol 222e083Decode percent-encoded output when forming a URL to stringa86cfbAllow construction of a vector from an empty block:make vector! []298649Renamewait-for-keytowait-key;aks/chartoask/onlya3ad37Use the BT.709 luminance formula by default; BT.601 when usedluminosity/luma5cccb8Remove access to the internallimit-usagefunction47b547Remove outer brackets fromprofilecode block outputd0c418Renameprotect-system-objecttoprotect-system(and remove it when used)51c558Rename (and improve)print-horizontal-linetoprint-hline2d52f8Renameform-datetimetoformat-datetimeaebd72Improvehelpoutput0e8ad5Allow datatype comparison79a1d9Fine-tunehelpdocstring output5cf343Renameformat-date-timetoform-datetime17a867Partially colorize docstrings inhelpoutputa8cec7Allow entering protected directories withchange-dir31ae19Fine-tune default startup security5c058bGive higher priority to words from thelibcontext300836Resetsystem/state/quit?afterdoevaluation0ce12fUse theforegroundANSI color in??outputb99ce7Usesystem/options/ansivalues to colorize log messages4113c0Allow zero precision scale inround/to285dfdImprove HELP outputfccfcdReturn full Windows version in build info9be0d7Implicitly reduce input blocks forprintfandformat3fbd2aUsesystem/options/ansicolors informatandprintfinstead of dialected money values221ff6Extend defaultsystem/options/ansitableb963cfAllow disabling redirects per connection viaport/spec/redirect?ae6dd7Move HTTP redirects to PORT/SPEC (#174)0ab808Control the maximum number of HTTP redirects viasystem/options/http-redirectsb97431Switch to//integer-divide,%remainder,%%modulo17b5abRemove deprecatedtry/except61cb80Allow percent-words like%%(for future module op)0d83b9Normalizebackspaceandescapekey output across systemsfa093aHandle CTRL+C properly inread-keycycle038216Keepcontrol?,shift?, andalt?flags insystem/state642a1bUseGetConsoleWindowto avoidSleepin console HWND lookup4fdad4HSV related code optimization5c41feEnable debugging with default MSVC_DEBUGdefine519e07Add error notification whenread-thruskips storing contentf5c5e6Force construction syntax for files/emails molded starting with%3ade0cAllow unescaped@chars in filenamesd995b9Userecycle/poolsin benchmarking functions to minimize chance of memory pool release during measurement1ba32cUse Adaptive Symmetry Partition Sort instead of Bentley & McIlroy's Qsort4907edQoi - Make encoding 1.4% faster by replacing modulo with mask
Fixes:
87bd59queryon URLs does not handle redirects53d06cBind new words from the console command line to the console context6fa4cbmoldandmold/partwith Unicode input23ca61Make the CHANGE parse rule compatible with Red9790a4Make the CHANGE parse rule compatible with Redbe42e1Regression in HTTP protocol479c49Show correcthelpoutput for unset values from paths92afc4Incorrect order in stable merge sort for blocks over 32 valuesd48602Crash when using the startup option without a valuefb900eCorrectread-keyUnicode input on POSIX5f7703Unicode string case-insensitive comparison75b6efNew console path completion20a642Manually set the VERASE character in POSIX terminals2bc42dNew console file completion within current directory8f6776New console path completion of function with multiple refinementsbe7663Multiple new console fixes50d133Last minute new console fixesd56d22Improve help output84f57fPrevent leaking special datatype ID location info in action specification2ca9d1Ignore output when no real console is attached535f7cConvert Unicode char to string42ac10Restore line drawings in recursive directory listings (list-dir/r)5754ffUse UTF-8 encoded file values in file-related security checksb88415Automatically decode results only for GET and POST in the HTTP protocol575d27Usetry/withinstead of deprecatedtry/exceptefd394Silence 'size_t' to 'REBLEN' conversion warningf4f772Silence unreferenced local variable warnings87d4f0Update control state flags afterread-keyon POSIX where possibleed004cProperly parse bracketed escape sequences in POSIX console inputb48c02Prevent GC crash withop!from functions4b5c3fCorrect terminal state updates between readline and key modes790d3eASCII Control characters widthcdc0f0Skip comments in multiline input872197Correct operator in UTF-32 to UTF-8 conversion loop9c823bCorrectswapbehavior with binary series and Unicode strings7f8f34Correctswapbehavior with binary series and Unicode strings9584d0Missing series protectione5dd43Improve sort index comparator validation061bebBlock stored in struct! rebval! field not updated correctly via path90226eCorrect UTF-8 input randomization05c356Correct binary input randomization9fd7bbUse unsigned integer to fix compilation warningec62d8Invalid results when used FORM with an Unicode characters6479beRecognize->as valid wordec40a2Deep copy MAP values when cloning an OBJECT7f3234Compose on Maps values that evaluate to a block expands the map.19fcb8Properly handle series modification with /part and non-series valuesdd3632Memory corruption when usedappend/partto binary withchar!argument03db99Clear UTF-8 flag from reused internal buffers before useb14b52Memory corruption when usedappend/partto binary withchar!argument"527844Memory corruption when usedappend/partto binary withchar!argument877069Memory corruption inappend/partwithchar!argument909fc9Infinite loop with some datab2754cRemove full-window SRCERASE to eliminate black screen flashes38f825Correctly handle window title on Windows4d094cAvoid adding duplicate compression name to system/catalog/compressions