REBOL 3 Change Log: 2009 Part 2
July-December 2009
View.exe 2.100.96 10-Dec-2009
Brings executable download packages in sync with A96 changes below.
View.exe 2.100.96 Host-Kit 2-Dec-2009
First Host Kit version released. This is a prototype for a few developers to test.
View.exe 2.100.95 24-Nov-2009
- Compiled with code optimization enabled, experimental.
- Stats/timer returns as a time value with resolution in microseconds. Timer set to zero at beginning of boot; thus, accurately computes full boot duration.
- More fields of SYSTEM object are protected.
- 0001232 : Syntax TRANSCODE accepts newline in char! literal
- 0001344 : Datatype map! cannot have more than 500000 entries.
- 0001323 : Unspecified PROTECT /deep failure case
- 0001324 : Unspecified PROTECT with object PATH! values
- 0001316 : Unspecified Stats/timer inaccuracy
View.exe 2.100.94 29-Oct-2009
Fixes and enhancements:
- 0184 Protect DRAW dialect
- 0643 TCP server ports don't work on Mac OS X
- 0693 ECHO does not error on bad path
- 1157 System Error #1301: invalid datatype 80
- 1172 MAKE of huge BLOCK! crash
- 1221 Ping/Pong TCP Port Example cause a serious system error #1301
- 1274 R3 console limits length of input
- 1276 calling chat after #1275 crashes Rebol
- 1291 Ordinals work on "special types"?
- 1292 numerical accessors beyond date value allowed but crash interpreter
- 1294 date! ... accessors for date/hour: date/minute: date/second:
- 1295 to-object date! = crash
- 1298 Parsing with ANY yields FALSE or crashes if charset includes char 0000
- 1299 request-file/multi crashes if too much files selected
- 1300 Better error message for parse reserved keywords
- 1301 R3 crash after calling 'chat next to specific parse example
- 1304 ECHO causes alpha 93 to run very very slowly
- 1306 %rebol.r is not loaded when running r3 from outside its directory (just with scripts for now)
- 1307 Add a function that returns all environment variables
- 1308 Change date! accessors to be timezone based
- 1310 SHIFT is missing a /LOGICAL refinement
- 1313 Cannot open TCP server port
View.exe 2.100.93 27-Oct-2009
Major revision of standard I/O interfaces. See StdIO update blog for details. Various oddities may still be present. This release now allows scripts to redirect stdio, enabling features like CGI POST. An example will be provided on the R3 Blog.
What's still missing? #You cannot WRITE to system/ports/output yet (you must still use PRINT.) That makes it a problem outputting binary data. #We need a command line flag to indicate if we want line breaks or not when redirecting input to the console for evaluation.
View.exe 2.100.92 22-Oct-2009
- Added: Unicode READ/string support for UTF-16. Detects BOM for 16 big and little endian and also UTF-8 BOM. (More info to be posted.)
- 1247 Alpha 85 Demo
- 1271 find complement charset
- 1272 If ELSE was deprecated in R2, remove it in R3?
- 1275 cannot open TCP server port
- 1276 calling chat after #1275 crashes Rebol
- 1280 Definite repetition
- 1282 PARSE: TO/THRU datatype in block parsing doesn't work
- 1283 find on bitsets can crash R3
- 1285 The Parser Enhancement broke the Ping-Pong TCP Example.
View.exe 2.100.91 19-Oct-2009
- Complemented bitsets, first test release (see new docs: Bitset Docs)
- PARSE changes:
- Adds ACCEPT keyword
breaks loop, success result - Adds DO keyword. This is a fairly restricted version because it cannot be used with other keywords that copy or deal with the input stream.
View.exe 2.100.90 14-Oct-2009
Changes to PARSE:
- Reverts ANY and SOME to exit if the input position does not change.
- Adds WHILE, which is the same as ANY but does not care about the input position for termination.
- Defines BREAK to immediately break the current loop block, always returning success.
- Defines REJECT to immediately break the current loop block, always returning false.
View.exe 2.100.89 13-Oct-2009
Changes PARSE iteration to allow infinite loops. For example, if any rule in an ANY or SOME block remains TRUE (such as an END when at the end of the input) the iteration will continue, regardless of the state or change in the input series.
This change was requested by expert users because it allows more sophisticated parsing practices. However, it requires all users to be more careful about how they build an iteration block. Methods that once auto-terminated due to the end of input will no longer do so.
Also, the BREAK word has been formally defined to exit a rule block (with the current state of success or failure for the iteration.)
In addition, bug#1263 has been fixed (allowing change of series even between datatypes.)
View.exe 2.100.88 11-Oct-09
- 0001268 : Parse
ANY quirk - 0001267 : Parse
THEN quirk - 0001266 : Parse
PARSE: CHANGE needs INTO [] match rule to be enclosed in a block - 0001265 : Parse
PARSE: Change INSERT and CHANGE lit-word! value treatment - 0001263 : Parse
Allow PARSE to change series during parse - 0001235 : Datatype
TRIM/WITH does not take BINARY! - 0001226 : Datatype
Length of bitset value made by range in block still off by 1 - 0001258 : Mezzanine
read url! now fails for urls with no path - 0001092 : Mezzanine
CHARSET /length len option - 0000423 : Mezzanine
Should allow ALTER a-bitset a-char - 0000422 : Mezzanine
ALTER and BITSET! - 0001260 : Unspecified
'evoke help does not reflect new stack-size keyword ... - 0000759 : Unspecified
path expression does not work with bitset!, pick and poke does
View.exe 2.100.87 6-Oct-2009
Bug fixes (as listed in CureCode):
- 1022 When making tuple from binary, 11th value is ignored; from block, it is an error
- 1110 TO-TUPLE on a hex issue, or set-path assignment of a tuple, allows overlong tuples
- 1162 Overlapping CHANGE goes awry
- 1218 TO-HEX on tuple of length 11 gives error (now marked as not a bug)
- 1219 TO-TUPLE refuses string and block source values with 11 elements (now marked as not a bug)
- 1224 ECHO native function no longer accepts targets of type none! or logic!
- 1233 0D+0A combination not converted when inside TAG! literal
- 1237 PARSE integer! repeat operation doesn't work
- 1241 File name containing parentheses
- 1244 PARSE REMOVE COPY var rule doesn't copy
- 1245 PARSE CHANGE doesn't replace correctly.
- 1246 the NOT NOT combination does not work as expected
- 1250 Date! still accepts negative zero year
- 1251 PARSE REMOVE breaks INSERT
- 1252 R3 stack limits too low
- 1253 PARSE: SET borrows the next value after an unfulfilled OPT rule.
- 1254 type "? native!" got "Script error"
- 1255 SECURE error message is unclear with incorrectly formatted input block
- 1257 ? allows functions with nonsensical refinements, which can be misleading (still allowed, no longer misleading)
View.exe 2.100.86 5-Oct-2009
Changes to PARSE:
- Fixes a few complex bugs. Fairly major rework; test it well.
- Adds RETURN, as specified in the Parse Projects document (takes an argument.)
- Fixes AND and removes STAY.
- Allows INTO of a string within a block parse.
- Changes the precedence of keywords: SET, COPY, RETURN, REMOVE, CHANGE.
Parse Summary Document updated
View.exe 2.100.85 1-Oct-2009
Adds CHANGE to PARSE as a test case. Format is: CHANGE rule value, with optional ONLY in front of the value for blocks. The span of the change is the same as the new REMOVE span, which is that of the rule.
This enhancement required major internal modifications in order to share implementation with various datatypes (series), so you will also want to test the CHANGE, APPEND, and INSERT actions for all series datatypes (because they may have been affected.)
View.exe 2.100.84 29-Sep-2009
More PARSE changes:
- TO and THRU with multi-match for strings, binary, and blocks (first draft.) See blog for details.
- REMOVE modified to be a [Parse_Project#REMOVE_1pre-rule]] not a [Parse_Project#REMOVE_2post-rule]]. It is now followed by a rule, not the size or index of the removal. (Note that you can use SKIP if you want to do that.) See blog for details.
- AND renamed to [Parse_Project#STAYSTAY]]
it's not a [Parse_Project#ANDpure parse "and"]] (which is still needed), it is a reset of the input index. - After some deliberation, ? renamed to THEN. Pattern is: true-sequence THEN rule rule. This action has been difficult to name. Naming fits well with: if (cond) then rule rule.
- Added ?? for parse debugging: displays the current input series. Does not affect parsing. Example: parse "abc" ["a" ?? "bc"]
- A few minor PARSE bugs fixed.
View.exe 2.100.83 25-Sep-2009
- PARSE fixes and enhancements:
- Major rewrite of PARSE.
- Keywords must not be used for variables.
- Paths can now be used for variables.
- Implements several new keyword commands. See list at Parse Summary
- COPY preserves the datatype of the input. (pending
may create problems for older code that expects the base-type, not the actual data-type.) - Various other REQUEST-FILE refinements added. Note that the basic results of this function are simplified from R2. The default result is a full file path, not a block. For multiple-selection, the result is a block of full file paths, not a path followed be relative files. See request-file manual page (which has been updated.)
- Preliminary changes to support SET-MODES and GET-MODES (which will be FUNCTIONs not NATIVEs in R2) via the QUERY and MODIFY actions on PORTS. More work is needed to support all of the related modes across all existing port types.
View.exe 2.100.82 4-Sep-2009
Update for other OSes (but not yet for extensions -- we did not want to wait for that to make this release because it includes several important changes.) Also a few minor bug fixes.
View.exe 2.100.81 2-Sep-2009
The main purpose of this release is to integrate the module rework done by BrianH.
- 0919 SYSTEM/MODULES is a block of word/value pairs, why not a map or object? (Now a block of word/value/checksum triples.)
- 0923 importing a module twice crashes rebol.
- 1173 IMPORT module! ignores /version, /check, /isolate
should throw error - 1174 IMPORT/check word! doesn't check already-imported modules (/check now works if the module was initially imported with /check)
- 1175 IMPORT file! or url! of already-imported named module fails
- 1176 IMPORT of a named module that is not supposed to override, half-overrides
- 1177 IMPORT of a module by name can import a module that has a different name
- 1178 Import of an unnamed module doesn't reload properly
- 1181 User scripts don't get access to words imported by the Needs header
- 1184 The --import file command line option doesn't import anything
- 1187 Should system/modules contain multiple versions? (Yes, but the old ones are ignored.)
- 1203 Modules imported from files don't have system/script set
- 1210 Should --import be relative to the REBOL path, the script path, or the calling directory? (REBOL path chosen.)
Due to the substantial changes in the module-related functions, we need your help testing IMPORT, LOAD, needs, and other module functions and features.
If modules are new to you, they are quite easy to write, and the Modules document is up-to-date (with the exception that A81 changes are not yet included within it.)
Other small changes include:
- 0706 %rebol.r is loaded from the current directory
- 1207 system/options/home and system/options/path seem to be reversed
- 1208 system/options/home and system/options/path changed when script specified
- 1209 Default security prohibits running scripts from command line outside of REBOL directory
- 1213 MAKE VECTOR! -1 crash
- 1214 wrong error message with tuple! arithmetic
- 1215 Let to-tag refinement! produce end-tags
- 1217 LS/l output is incorrect after recent changes
View.exe 2.100.80 31-Aug-2009
This release defines more precisely how COPY/deep and MAKE object work.
It may break some existing R3 code, but our tests pass, and also CHAT and even the GUI demo run (kind of a surprise, actually.)
Only these changes were made to this release -- unrelated changes were not made -- so we can easily isolate any new problems that may appear from this release. This was a large change, and we expect a few new bugs.
In general:
- The default action of all COPY/deep usage (including those used internally for MAKE object!, MAKE function! and other uses) is to deep copy all series, but not images, bitsets, vectors, maps, gobs, nor objects (nor object-like types, such as modules, errors, and tasks.)
- Therefore, MAKE object! now works just like on R2. Mainly, that sub-objects are not cloned.
- The COPY/types refinement has been added. You can now copy specific datatypes within a block (or object.) For example, if you want to copy just blocks or just strings. You can use either a datatype or a typeset for the argument. So, COPY/types block any-block! will copy all block types, etc. You can also use this feature with /deep, but don't forget to include blocks in the types, because you'll need those to hold the other copies. If /types specifies non-copyable datatypes, they will be ignored (not throw an error.)
- TAKE/deep has been disabled; however, for now its function spec still defines it. This change was made because we think TAKE/deep is rare, and you can always use: COPY/deep TAKE -- which will also give you the /types refinement, if you need it. (It would not be added to TAKE.)
For more details see [Copy Semantics]].
View.exe 2.100.79 21-Aug-2009
Numerous bug fixes and various enhancements (wishes):
- 0341 ALIAS allows word! for its name argument
- 0616 SELECT /last option
- 0874 Rename MAP to MAP-EACH, have new MAP function create a map! value
- 0888 multiple loop + collect crash
- 0892 BIND word to a lambda function context crashes REBOL
- 0976 MAKE GOB! gives curious error message when user omits : on set-word
- 1064 INVALID-UTF-8? function (renamed to INVALID-UTF?)
- 1127 TO-REBOL-FILE wrong for UNC paths
- 1129 WHAT-DIR wrong for UNC paths
- 1130 Remove the hexadecimal treatment of issue! for all but integer! and tuple! conversions
- 1132 set system can crash
- 1137 TRIM object! copies hidden fields if they are assigned non-none values
- 1139 BIND or IN of block! with self/field path bypasses PROTECT and PROTECT/hide
- 1140 Object words that override hidden object words aren't accessible, directly
- 1143 SECURE 'protect setting
- 1145 RANDOM/secure NOW
likely to throw an error - 1147 DO CONTINUE
crash - 1151 Series comparison actions crash when comparing non-series
- 1153 MAP! is case-insensitive for binary! key elements
- 1156 Result of time division
- 1158 APPEND refinements ignored with MAP!
- 1168 Allow NONE for REPEAT
- 1170 PROTECT overprotects objects
- 1188 Are relative files relative to system/script/path or to the OS CD?
- 1192 MOLD/all fails for all block types at tail position
- 1193 Protection of object variables also effective inside object, except if referenced by self/
- 1196 time division: misleading error message
- 1197 SELF seems insufficiently protected
- 1198 APPEND inconsistency with binary!
- 1202 Have SYSTEM/STANDARD/SCRIPT be the prototype for SYSTEM/SCRIPT
- 1205 Money allows math on incompatible scalars
View.exe 2.100.78 18-Aug-2009
Adds text conversions for string files.
- READ/string
to read a file and convert it to a string (assumes UFT-8) - WRITE string
will convert the string to UTF-8 automatically - READ/lines
will read the file as a block of lines - WRITE/lines
will write a file from a block of lines
NOTE: partial reads/writes (via OPEN) are not yet supported due to the special buffering requirements needed to deal with UTF-8 fragments.
http://www.rebol.com/r3/docs/guide/files-readwrite.html has been updated
View.exe 2.100.77 12-Aug-2009
- Extensions are enabled in this version. This is a first draft release. See the REBOL Extensions.
- TO-LOCAL-FILE now has a /full refinement for generating a full path when a relative path has been provided. This feature is required internally for file I/O because SECURE always needs a full file path for proper sandbox comparisons. The /full refinement exports this internal action. Note that /full also processes the . and .. directory actions.
- SECURE has been enhanced to be more complete. Note that all debugging functions require that SECURE DEBUG be enabled. That is supported to protect against a script from using debug features to obtain protected or hidden information. Also, the SECURE and PROTECT policies have been added.
- System object is now "protected"... not entirely, but more than before. More work is needed, because some subsystems modify system subobjects by setting them to cloned instances.
- Blocks allow a SET-PATH with a word lookup. This makes for simple and clean block modifying code, but at a cost. (See R3 blog.) This change currently selects the first matching word of any type, not just a set-word.
- Logical operations are now allowed for typesets. This makes it easier to create custom typesets without listing all elements. You can use AND, OR, and XOR with a datatype or another TYPESET.
For example:
>> t: number! or money! make typeset! [integer! decimal! percent! money!] >> t: number! xor percent! make typeset! [integer! decimal!] >> t: number! or any-object! make typeset! [integer! decimal! percent! object! module! error! task! port!]
- Console printing of results has been minimized (to reduce noise.) SYSTEM/OPTIONS/RESULT-TYPE has been added. It is a typeset that defines which datatypes will be == printed at the console. Use ?? to see how it's set.
- The IMMEDIATE! (types that are inline, not referenced) and INTERNAL! typesets have been defined. Note that IMMEDIATE! does not include INTERNAL! typesets.
- Division by time! is now allowed. This is handy for computing percentage differences.
View.exe 2.100.76 22-July-2009
- 0677 Cannot open file on shared network
- 1099 You can't break from infinite PARSE loops without TRACE ON
- 1115 R2-style UNC path translation in R3 (lets you access Windows servers)
- 1116 Round/even/to fails for money
- 1117 Doc strings of trigonometric functions (SINE)
- 1118 Block COPY/PART irregularity
- 1122 bad integer conversion on digit overflow
- 1123 xor fails on logic!
- 1125 SHIFT left or right by N bits
The SHIFT function works as follows:
>> shift 1 50 ; left shift == 1125899906842624 >> to-hex shift 1 50 == #0004000000000000 >> shift 1024 -5 ; right shift == 32
Currently, shifting is only allowed on integer values and always shifts 64 bits.
View.exe 2.100.75 20-July-2009
- TRACE/back and TRACE/function added. See trace function reference for details.
- Evaluation limiting. Example: SECURE [eval: 1000000] will restrict code to 1 million evaluations. Useful for CGI and other open access scripts.
View.exe 2.100.74 16-July-2009
Dates are now always UTC internally, making computations less error-prone. Local timezone conversions are done on input and output of dates and on selection of specific fields. Keep an eye open for new bugs.
Timezone has been added to file QUERY, so dates are now correctly displayed. Note that for files, the zone is captured at the OS QUERY time (but the UTC is always accurate.)
>> d: modified? %view.exe == 15-Jul-2009/21:53:12.592-7:00 >> d/utc == 16-Jul-2009/4:53:12.592
Note that the NOW function also supports a /utc refinement for convenience:
>> now == 15-Jul-2009/21:59:43-7:00 >> now/utc == 16-Jul-2009/4:59:45 >> now/utc/date == 16-Jul-2009 >> now/utc/time == 4:59:51
And the DATE! datatype also supports /UTC, but not with refinement combinations. (Perhaps in 3.0.n -- there are more important things to do.)
View.exe 2.100.73 16-July-2009
This release fixes several important problems in RESOLVE to make the user context work better (the default context for your programs.)
Specifically, when you LOAD code, only new words will be set to their "standard library" values (from system/context/exports). For example, if you type:
print now
The PRINT and NOW functions will be "interned" into your user context before the code is evaluated. If you type that line again, it will be evaluated, but no further "interning" is needed. (Of course, casual users don't need to know that any of that happened.)
For experts, a new function called INTERN has been provided that combines BIND/new and RESOLVE. This is just a shortcut for a common method of bringing new words into the system and importing their values (if they are defined in the "standard library".)
View.exe 2.100.72 15-July-2009
- 1082 A /utc refinement for 'now function
- 1083 bug in random/only
- 1084 Random_Dec() needs adjustment for /secure
- 1086 NOW ignores daylight savings time, generates the wrong time zone
- 1089 md5 missing from checksum
- 1090 SET object! can bypass protect
- 1091 Length of generated bitset! off by one, rounded up to 8 bits
- 1095 resolve can bypass protect
- 1097 More discrimination in equality of tuples desired
- 1098 Help text for !== is wrong
- 1103 zero TIME! equal and equivalent to INTEGER! zero, but only in one direction
- 1105 TO-HEX and TO-TUPLE not symmetric
- 1106 TO-BINARY and TO-HEX work differently on characters
View.exe 2.100.71 14-July-2009
Splits the system and user contexts.
Note that system/context field for user has been renamed to 'user.
See R3 Blog for details.
View.exe 2.100.70 10-July-2009
- 0569 strict-equal? incorrectly equates money! value with integer! value
- 0777 poke can be applied, without effect, to values on which it should not work
- 0921 Overflow not detected in integer conversion on Linux.
- 0952 == operator considers money and integer/decimal to be equal
- 1053 Random range favours small numbers
- 1060 MAKE/TO MONEY! requires 12 byte binary, but accepts 2-24 digit hex issue
- 1062 MAKE DATE! refuses year 0, while LOAD accepts it
- 1063 Weekday base appears to be 1 out.
- 1065 save/header does no longer work
- 1067 cannot run demo from command line in r3-a69
- 1069 Inconsistency with MOLD/FORM and LENGTH?/LAST of tuple! (still has a problem with LAST)
- 1070 poke with tuples: change in behavior
- 1071 MIN, MAX, NEGATIVE?, POSITIVE?, ZERO? of PAIR!
- 1072 Stray char in doc string of modulo
- 1074 poke date does not work
- 1076 Remove POKE from immediate value datatypes
- 1077 Relax TUPLE! set index restrictions.
View.exe 2.100.69 8-July-2009
This is a major update that revises all comparison functions and operators. See Update on Comparison for details and issues that still need attention.
Note that the comparison operators are now natives, not datatype actions; however, that change should not affect your code.
You might also notice that this release is a couple KB smaller. A good direction.
View.exe 2.100.68 7-July-2009
Misc. fixes prior to major equality operator revisions:
- 0753 ANY in PARSE rule is broken with bitsets
- 0870 SKIP inside PARSE is not working properly with non ascii chars
- 0967 PARSE operations SOME and ANY won't run at end of data
- 1054 MOLD time! fails with time near nanosecond limit
- 1055 MAKE/TO time! and LOAD time! round fractions of nanoseconds differently
- 1057 POKE (and path) on BINARY! allows out-of-range values
View.exe 2.100.67 6-July-2009
Major rewrite of TIME! datatype to use a better internal format, with related changes to DATE! datatype, including /zone improvements. See About TIME changes for details.
- 0570 Valid timezones rejected, invalid time zones accepted
- 0947 Random shuffle of vector vs. block
- 0958 some limits testing on TIME! values
- 0972 scan of TIME! chokes on more than 10 digits in fraction
- 0973 time-zone in DATE! values is restricted to multiples of 30 minutes
- 1013 Should AND truncate binary! ?
- 1027 RANDOM decimal! uniform distribution
- 1031 MAKE CHAR! could accept a binary value
- 1032 MAKE TIME! with negative hours and fractional seconds calculates incorrectly
- 1033 MAKE TIME! with negative hours and fractional seconds molds incorrectly
- 1043 MAKE CHAR! #{} should give error
- 1045 MAKE CHAR! from binary value cannot handle single byte
- 1047 set-word in spec of function is not detected until call
- 1048 image converted from too short binary has unexpected size
- 1051 Calling an action made by oneself crashes R3
- 1052 Calling an OP one has made oneself gives strange error
View.exe 2.100.66 1-July-2009
In this release, we have added some restrictions on the use of NONE for datatype creation.
For example, this is no longer allowed:
g: make gob! none
Use either of these for a minimal MAKE of a GOB:
g: make gob! 10x10 g: make gob! []
In general, only NONE! and LOGIC! (and UNSET!) will allow MAKE with a NONE arg.
- 0378 WAIT not accepting escape (CTRL+C)
- 0600 escape does not work in loops; a33
- 0859 Do circular paren crashes (stack overflow not detected)
- 0876 Deep nested block mold
- 0877 Copy/deep of a circular block
- 1008 FOREACH x image! sets x to char!, should be tuple!
- 1012 UNPROTECT is not the inverse of PROTECT for object fields
- 1017 money! value could be made from hexadecimal issue! value also
- 1018 Have TO number! or money! from none! or logic! generate the zero or one of the type
- 1023 TO-HEX money! doesn't work
- 1026 TO vector! of bad arguments returns wrong error
- 1027 RANDOM decimal! uniform distribution
- 1028 ROUND/to a percent! scale fails
- 1030 MAKE CHAR! "" yields the NUL character, but it could be an error
- 1035 MOLD/ALL of IMAGE! value does not emit series index, so information gets lost
- 1036 MOLD/ALL of VECTOR! value stores series pointer but not head of series, so information gets lost
- 1037 LOAD and MAKE of image! ignore series index
- 1038 LOAD of vector! ignores series index
- 1039 Inconsistent MOLD/all serial formats: IMAGE! vs VECTOR!
- 1040 ROUND percent! could round to 1% instead of 100%
- 1041 Remove NONE as vaild constructor for MAKE