REBOL 3 Change Log: 2010
Related Links | ||
R3 Changes: 2009 Part 1 Jan-Jun R3 Changes: 2009 Part 2 Jul-Dec |
Core and Host-Kit 2.100.111 20-Feb-2011
Various changes made to QUIT mechanism:
- The exit code should be returned properly in all cases now, and we've tested it.
- The catch/quit at the top level has been removed and the C code layer at the top level has been fixed to handle the possible exception and exit code.
- A new function will send the QUIT command to all devices for normal or quit exiting. Implementations that need to cleanup resources can now do so.
Host-kit changes:
- The host-kit archive has been trimmed down. Only a single makefile example is included (as suggested by users) to avoid distributing obsolete/untested makes.
- The most current graphics library changes have been included. Many thanks to Cyphre and the RMA project.
- Various fixes and improvements to files based in user feedback.
Cure Code fixes:
- 1163: ALIAS 'a "b" assigns the previous value of b to a in a's bound context
- 1164: ALIAS breaks access to object values
- 1165: MAKE object broken with aliased proto fields
- 1633: Fix mold/all of decimals on Linux
- 1753: TANGENT returns a decimal MOLD can't handle
- 1772: LOWERCASE/part and UPPERCASE/part weird results with negative /part length
- 1810: REVERSE/PART does not work for tuple!
- 1811: FIND-ALL binds its body argument, doesn't need to
- 1812: To be able to load PNG24 image format
- 1815: Let the DATA argument of the POKE function be ANY-TYPE! value (i.e. allow #[unset!] for the argument)
- 1816: RL_GET_STRING computes wrong address from incompatible item size
- 1817: Set-path evaluation problem
- 1819: Add BOUND? and/or BINDING-OF as additional names for BIND?
- 1820: Word USER can't be selected with path syntax
- 1822: difference on date!s problem
- 1823: RL_MAKE_BINARY macro in a host-kit
- 1827: Forward and reverse lookups using the DNS scheme don't work
- 1829: Be quiet by default when running with a script and/or redirected I/O
- 1835: Remove the ALIAS function
OS X Host-Kit Library 2.100.110 9-Nov-2010
The first test release of the Host-Kit's libr3.so for OS X has been posted on the github site listed below. (Actually, it is an OS X dynamic-lib, not officially a shared object in the "so" way.)
For right now, in the lib directory, the libr3.so.2.5 file is what you need. Rename it to libr3.so in the search path for libs, as noted in the r3/docs/concepts/host-kit.html doc.
It has been tested to verify that the host-kit builds and runs fine on OS X using this library, so please tell us if you run into any problems.
BTW: You can thank Andreas Bolka for developing the required dynamic lib building technique. It's not a simple -dynamiclib method, but requires two ld passes over the library objects.
Host-Kit 2.100.110 2-Nov-2010
The Host-Kit source code is now stored on GitHub.com
Do not distribute the URLs below because they are temporary.
This is a testing area on github... until reviewed, and various changes are made.
Read: r3/docs/git.html
- Web viewing: github.com/carls/R3A110
- Download tgz: github.com/carls/R3A110/tarball/master
- Download zip: github.com/carls/R3A110/zipball/master
Core 2.100.110 2-Nov-2010
- 1680: IMPORT into user context by default, unless /no-user
- 1695: Restore use of unnamed modules to the new module system
- 1705: RENAME on a file! causes an error even though the rename was successful
- 1706: COMPLEMENT image! is broken
- 1707: DO of module source triggers undefined 'spec word error
- 1708: False positive for FIND of a specific module in a block
- 1710: TO-HEX/SIZE of a tuple! value does not work for sizes > 16
- 1711: LOAD/NEXT causes "impossible to debug" errors
- 1713: USAGE information about boot levels is wrong
- 1714: reset a gob and crash when evaluated.
- 1718: Add FIND-ALL
- 1721: IMPORT string! or binary! source
- 1722: You can spoof the name of a module imported by word! name
- 1723: Embedded extensions don't support delayed, private or unnamed import
- 1725: host-lib.h only accurate for Windows
- 1726: BOOL type conflicts
- 1727: Suboptimal packing of GCC-based host-kit structures
- 1729: Delayed modules stay delayed on import
- 1730: Unbound words are leaking from the startup code to the lib
- 1731: Definition of RXIEXT in reb-lib.h is broken
- 1732: Raise stack size for Win32 binaries built from the hostkit
- 1734: Exit code of QUIT/return is not returned for scripts
- 1735: When running a script with the --cgi flag, the interpreter does not quit automatically
- 1737: Codec functions not exported
Core 2.100.109 21-Oct-2010
Fixes various bugs and A108 problems. Also adds improvements to the module system.
- 1466: Support for compressed scripts/modules in LOAD and SAVE
- 1647: Startup output in A100 even with --quiet and --cgi flags
- 1655: BIND of blocks returns their head
- 1662: TO-HEX of a tuple! value of length 10 crashes
- 1681: IMPORT block! enhancements
- 1685: Script checksum verification
- 1688: LENGTH? NONE returns TRUE
- 1689: SAVE none returns none, SAVE file or url returns wrong value
- 1694: Needs: file!, url! or word!
- 1697: PROTECT/hide/words makes words read-only
- 1699: Rename IMPORT /isolate and /only to /no-share and /no-lib
- 1700: 'cmd-index and 'command words should be hidden in extensions
- 1701: MAP function needs SET-WORD
- 1702: Startup command line options fail
- 1703: Use TRANSCODE/next not LOAD/next
- 1704: Shortened banner for some startup options
Core 2.100.108 19-Oct-2010
This is a highly experimental release, meaning it contains substantial changes that need further validation and testing.
Note: Many thanks go to Brian Hawley as a major contributor to the A108 module-related function changes. The module system resides within various functions of the new sys context, and you can view those functions with help sys at the command line. It's a powerful module mechanism with many features. We will be updating the related docs.
- Major changes to active contexts, including sys, lib, and user contexts.
- Minor changes to script headers, some fields removed, options field added.
- Major changes to load and save functions.
- Major changes to all module-related functions and definitions.
- Minor incompatibilities with extensions (due to header changes)
- Modules no longer have default bindings to any global context
- Boot levels added (as command line startup option). You can boot R3 with basic functionality or with all resident features enabled (default).
- load and save all have new refinements
- funct now supports /extern to specify external variables
- checksum adds /part and /method crc32 refinements
- compress adds /part and /gzip refinements
- decompress adds /part and /gzip refinements
- resolve adds /extend refinement
Curecode tickets:
- 1183: The shared system and exports contexts need to be split
- 1460: HELP shows incorrect info for object functions
- 1471: Round/half-ceiling money
- 1472: Wrong error message with $1/$2
- 1475: Large percentages not serializable
- 1495: FIND -- /last refinement overrides /case
- 1500: MAX/MIN do not state in help that the datatype for an integer input is changed
- 1502: help does not print the correct help for some functions in the system object
- 1504: PERCENT! values with exponent notation not allowed on input, but can be made by MAKE/TO
- 1505: Remove EVAL function from R3
- 1508: DISARM is deprecated and should be removed
- 1527: SECURE [EVAL [???THROW] in r3/changes.txt] does not work
- 1532: Missing natives from system/catalog/natives: PRIN
- 1533: Rename Directories throws an error
- 1540: EXTRACT fails to handle UNSET! and FALSE values
- 1541: Complemented bitsets behave incorrectly upon extension
- 1562: date! value not correctly passed to extension
- 1592: UNIQUE/DIFFERENCE/INTERSECT/UNION do not accept blocks containing values of type NONE!, UNSET!, PAREN!
- 1593: Error made with code has correct type/id, the converse is not the case
- 1594: In header, incorrect error message for unterminated string
- 1602: The value1 argument of =, !=, ==, !== and =? should have [any-type!] typespec
- 1607: MAKEing a new native!, action! or op! value with a new body provokes crash on usage
- 1608: DATE! value with integer for timezone gives odd results
- 1609: ALSO functionality of R3 DOCS needs more subtlety
- 1611: Allow INDEX? to take none as an argument, return none
- 1612: Union of two charsets randomly returns the not of the expected bitset
- 1615: DEMO does not work
- 1619: writing a block to the clipboard crashes Rebol
- 1623: STACK/WORD yields handle! instead of word!
- 1624: Optimize AS-PAIR function
- 1626: Allow LENGTH? to take none as an argument, return none
- 1629: MOVE/to/skip has the wrong math for the destination index
- 1630: INTERN of an any-word!
- 1636: add 'LAST? as a mezzanine
- 1645: Crash with DATE! values as command arguments
- 1647: Startup output in A100 even with --quiet and --cgi flags
- 1650: Empty issue not parsed correctly: Single # is parsed with CRLF
- 1651: FILE-TYPE? should return NONE for unknown types
- 1652: REB-LIB.H defines RL_GET/SET_VALUE with wrong index argument description
- 1655: BIND of blocks returns their head
- 1658: Linux hostkit binaries must be (dynamically) linked against libdl
- 1659: Call of inline function crashes
- 1660: Limitation on image size not checked.
- 1662: TO-HEX of a tuple! value of length 10 crashes
- 1666: The simplest issue
- 1667: Zlib option for COMPRESS/DECOMPRESS
- 1669: Allow EMPTY? on object!
- 1671: CHANGE and POKE doesn't set PARENT on gob!
- 1674: The MAKE-DIR function generates the error using the R2 convention
- 1678: Can we add CRC-32 as a checksum method?
- 1679: Native GZIP compress/decompress suport
Core 2.100.107 10-Sep-2010
Downloads:
Host Kit 2.100.107 10-Sep-2010
- Finalizes primary configuration defines (symbols). The main defines for Host-Kit and Extension module builders are now:
- REB_EXT is used to flag the build of an extension module vs. a host exe. Mainly this define forces the use of the RL_LIB struct and macros for accessing the RL API.
- REB_CORE builds /core only, no graphics, windows, etc. This controls host-main.c.
- To build a host, it is no longer necessary to define REB_LIB. A host build is now the default build (no special defines needed.)
- Adds GUI-Metrics and init of view/metrics object.
- Graphics .r definition files updated.
- Modified makefile for GCC to work relative to its make-gcc directory
- Tested VC9, VC6, GCC builds, no problems.
- Tested on Linux (Ubuntu), no problems.
- Downloads:
Host Kit 2.100.106 8-Sep-2010
- Major changes to the issue datatype:
- An issue is now a word not a string.
- The rationale behind this change was described a while back in a blog article. Essentially, it boils down to the fact that issues are most often used as symbols (tokens), such as for #include and other source markup, as well as usage in dialects.
- In addition, we have found that dialects could benefit from the availability of another word datatype. As a good example, look at how Reb-GUI (for R2) uses the #w and #h as symbols.
- Using words rather than strings for symbols is more efficient in memory usage and search speed.
- The any-word? function and any-word! typeset include issue now. It is no longer true for series? or any-string? and related functions.
- You cannot modify issues with insert, append, remove, etc.
- The representation of numeric values (invalid word forms) is still supported, so usage for HTML colors or hex numbers, and conversion to and from tuples and integers, still works.
- Because issues (as words) are stored in the symbol table, it is a bad practice to generate large numbers of issues for this purpose. If you need such values, try to use string or binary instead.
- Optimized find and select of words in blocks. About nine times faster now. Also, note that /case will match the specific target word and its word type (not just it's canonical symbol.)
- Added /wait to the call function. Returns the integer exit status code passed back from the program.
- Fixed the integer value from quit when used with the /return option. (The above call can be used to verify this change.)
- Fixes ticket #0001646, invalid RL_Lib in RX_Init().
- Updates the text-test3.r script.
Host Kit 2.100.105 1-Sep-2010
- Major changes to the Host-Kit. It is advised that you do a clean build from these files, not a merge.
- Includes Cyphre's changes to make graphics run in the host as several embedded extension modules. Now allows updates and improvements to be made to that subsystem. Run the basic graphics tests found in the tests directory to view some interesting results. Note that the graphics engine is based on command functions. There will be a dialect-to-command "reprocessor" in a future release.
- Adds several different project makefiles, including VC6 and VC9 projects. Updates the GCC makefile.
- The host-ext files are now pre-built and included. To make compiling easier for new users, those files are no longer rebuilt by the default make.
- Updates and improves various functions in the reb-lib API.
- Changes how host-ext files are included. There are no longer separate .c files because those always seem to become problematic. An ifdef is added now to the .h files to include the actual data in specific files.
- Changes how reb-lib is declared and referenced.
- Adds a context reference field for do-commands evaluation sequences. This is how rich-text is able to work.
- Adds struct alignment validation to prevent incompatible library interfacing.
Host Kit 2.100.104 26-Aug-2010
- Merges the REBOL and extension libraries. See www.rebol.net/r3blogs/0331.html and www.rebol.net/r3blogs/0331.html for details.
- Fixes a few minor bugs. See Curecode for details.
Host Kit 2.100.103 20-Aug-2010
- Adds extension-based callbacks into REBOL code, both synchronous and asynchronous methods.
- Adds decode codec for markup conversion (HTML, XML, etc.) to blocks, as this was not part of load in R3.
- Fix for pair set path decimal (bad conversion).
- Internal changes to image series storage method. Makes storage more efficient. Should not affect extensions code that uses proper API functions.
- Minor fix for C++ includes.
Host Kit 2.100.102(B) 29-July-2010
Note: libr3-a102.so for Linux is also available. See R3 chat.
AS-PAIR has gone native
The AS-PAIR function is used quite often in graphics code, so has been optimized to a native in this release.
Image Datatype/Argument added
Images can now be passed to commands and returned as a result. They can also be accessed in blocks.
RXT_IMAGE now maps images to this struct in the arg union:
struct { void *image; int width:16; int height:16; };
Use these macros:
RXA_IMAGE | for image series |
RXA_IMAGE_BITS | for image bitmap |
RXA_IMAGE_WIDTH | for width in pixels |
RXA_IMAGE_HEIGHT | for height in lines |
Word mapping has changed
Word arrays now store their length in the first element. Thus, word indexes are one based, allowing the zero case to indicate that the word was not found. Adjust your word enums accordingly (and we'll update make-host-ext.r script too.)
Effects: RXI_MAP_WORDS and RXI_FIND_WORDS functions.
Make Image Added
RXI_MAKE_IMAGE(w, h) has been added. The result is an image series. Note that it can get GC'd if you're not careful.
REBSER *img = RXI_MAKE_IMAGE(100, 500); REBYTE *bits = (REBYTE *)RXI_SERIES_INFO(img, RXI_SER_DATA);
Or, you can use unsigned 32 bit integers for pixel data.
GC Memory Protection
If you create a series such as a string, block, or image, and you do not store a reference to it within an existing variable, object, or block, it will eventually be deallocated by the garbage collector (GC).
In some cases, where you may be constructing a block or creating multiple strings or images, you need to protect them from GC. You can now use:
RXI_GC_PROTECT(series, protect)
Set the protect arg TRUE to prevent GC, and FALSE to allow GC.
Command Name Changes
The make-host-ext.r script will now insert the module name into the CMD_ name defines. This allows inclusion of multiple module header files that could contain identical command names.
Host Kit 2.100.101 20-July-2010
Major change to the definition of the pair datatype from integer to floating point. Includes changes to all pair actions, the image datatype, the gob datatype, and also events and window management. This is quite experimental, and we're not 100% sure it will work as we need.
Also adds several new functions to the extensions API, including object field access, string-to-word and word-to-string mapping, and more.
Please read Blog about testing before trying it.
Host Kit 2.100.100 11-July-2010
New Host-Kit (limited distribution) that includes a rough draft of the graphics engine powered as an embedded extension. Proves the basic concepts work, although there's a lot more to do (however, it's not bottlenecked anymore with /Core advancements and fixes.) The entire source code for the DRAW graphics engine is available now for developer enhancements.
Core.exe 2.100.99 7-May-2010
- Console default modes
In R3 under Windows, the console is simply the Windows shell (a temporary solution during development.) We've provided some hints to make it usable. Now, the quick edit options (like cut and paste and scrollwheel) are enabled automatically. Submitted by Cyphre. - Browser in Linux
There appears to be no standard method of launching the browser in Linux, so in A99 we attempt to launch it two ways, and we'll add more as needed or until a better solution comes along. Abolka's patch.
Curecode fixes:
0000606 : Ports | Have QUERY %file/ return info if %file is not a directory. |
0001603 : Native | Console output is incomplete for long values |
0001584 : Native | SELFLESS? function |
0001601 : Native | FOR with series! start and number! end |
0001600 : Native | FOR with a series! bump argument makes no sense |
0000602 : Mezzanine | DIR? incorrect with existing files (not dirs) |
0001604 : Mezzanine | HELP triggers an error when it searches |
0001591 : Unspecified | Shared library loading is not working on Linux |
0000710 : Unspecified | Access error in Linux when using BROWSE |
0000632 : Unspecified | Access Error when using Why? |
Core.exe 2.100.98 6-May-2010
- Watch out for a few changes that could break your code.
For example, dir? now checks the local file system first for a file or directory, rather than the name string. Also, parse allows break to exit, so if you're using an external loop, you'll need to recode that approach. (This is an easy change to back out, if we decide otherwise, but it was listed in CureCode, so it got done.) - We've re-enabled insertion on the binary! datatype.
It was disabled during the Unicode transition to make it clear that strings and binaries are not the same. If you insert a string (or char) into a binary, it implies an automatic UTF-8 conversion, if the character is beyond the ASCII range (0-127). - This release adds the embedded module mechanism (preliminary).
It will be released as a separate package that includes the host source code and R3 DLL. We've also temporarily removed graphics related functions, which will be moved to the host code in future releases. - This release also defines the meaning of the self word.
That is self as a reference to the current context. To summarize, self is an implicit part of object-based contexts, but not of function or loop-based contexts. This change supports the most common form of self reference, which is to objects and modules from within their enclosed (bound) functions or loops (following the rule of least surprise.)
Curecode fixes: (updated 7-May)
0001563 : Extensions | COMMAND function takes integer! argument, but chokes on it. |
0001528 : Syntax | 'self seems to be reserved in closures and funcs |
0001569 : Security | UNSET 'SELF works, should throw error, provokes system crash |
0001001 : Error Handling | TO-ERROR on object does not work anymore? |
0001535 : Error Handling | WORDS-OF TRY [BREAK] crashes |
0001579 : Graphics | GOB! value FLAGS field does not accept HIDDEN |
0001456 : Ports | open does not reset the internal file pointer of a previously closed file port |
0000321 : Parse | BREAK from PARSE |
0001476 : Datatype | PICK pair! 'x returns the y value |
0001534 : Datatype | REFLECT datatype! ignores FIELD argument |
0001538 : Datatype | MAKE vector! with decimal size is not allowed, unlike most other series! |
0001567 : Datatype | Making very large image! values gives curious result |
0001564 : Datatype | TO-UTYPE crashes on integer! |
0001452 : Datatype | INSERT and APPEND into binary! not working with block! value |
0001050 : Datatype | APPEND object! [self: 1] overrides self |
0001377 : Native | PICK with a word as selector could work on PAIR! values |
0001389 : Native | To Binary! [integer] does not work |
0001577 : Native | BODY-OF treats op! values derived from natives differently from those derived from actions |
0001501 : Native | Weird native bug in SOURCE mezzanine |
0001480 : Native | simple parsing does not work for large datasets |
0001486 : Native | MOLD does not cope with "^(1E)" |
0001474 : Native | Can't LOOP 100% |
0001529 : Native | 'self is being bound by For, Repeat, Foreach, Map-each and Remove-each |
0001549 : Native | Behavior of BIND and IN should be consistent with the binding behavior of the function that created the context |
0001499 : Mezzanine | REPLACE behaving differently with strings and binary values |
0001572 : Mezzanine | REPEND's and REMOLD's value arguments shouldn't be any-type! |
0001497 : Documentation | Reword the docstrings of EQUAL? and STRICT-EQUAL? |
0001580 : Documentation | DATA field of gob! value has undocumented restrictions |
0001493 : Documentation | Web pages for datatypes are not returned by HELP/doc |
View.exe 2.100.97 7-Feb-2010
- Directory listing fix
There is a fix for Linux and BSD systems related to directory listings. Not all directories showed a / for dir files. A change has been made that should allow this to work on Linux and BSD systems, but it's not a Posix generic change. The benefit of the approach is that it gains the directory indication without an additional file system query, thus speeding the directory listing request.
0001167 : Syntax | to-word "a," needs to be an error |
0001415 : Syntax | Inconsistency in handling of ^ in file literals |
0001414 : Syntax | Character literal #"^^" is ambiguous |
0001412 : Syntax | Time-zone can be specified as full time value, but after hours and minutes rest is ignored. |
0001461 : Syntax | Cannot lit quote arrow-based words, such as '< or '<> etc. |
0001445 : Syntax | Whitespace requirements inconsistent with money! and operators |
0001429 : Syntax | Lexical scan allows serialized value to be directly preceded by any string starting with digit |
0001431 : Syntax | Binary base indicator may be preceded by zeroes and/or plus sign. |
0001432 : Syntax | Lexical scan ignores < sign (and others) directly after date |
0001443 : Syntax | In file literal, % MUST be followed by 2 hex chars, in email and url literal, it MAY occur alone |
0001318 : Syntax | Different treatment of < > in refinements vs. words |
0001319 : Syntax | Different treatment of < when following path ending in digit or alpha |
0001421 : Syntax | More subtleties with < and > |
0001446 : Syntax | Module EXPORT keyword |
0001441 : Syntax | A single dollar sign is accepted and interpreted as $0. |
0001442 : Syntax | A non-quoted file literal can escape a space with ^, shouldn't |
0001444 : Security | Module header 'type field not screened |
0001379 : Error Handling | PICK and POKE on GOB! values cannot use word as selector. For PICK there is no error message, just a NONE result. |
0001385 : Error Handling | Error messages when setting various date components are confusing |
0001363 : Error Handling | ASSERT/TYPE gives strange error message when testing literals |
0001364 : Error Handling | ASSERT/TYPE gives strange error message when type(set) is not literal |
0000589 : Ports | calling system/schemes/xxx/actor crashes r3 |
0001453 : Ports | OPEN? doesn't work for file ports |
0001418 : Parse | PARSE CHANGE ignores undefined words |
0001459 : Datatype | EQUAL? and other comparison actions of binary! are case-insensitive |
0001450 : Datatype | Using AND, OR or XOR with bitsets could cause a crash |
0001359 : Datatype | NOW/date result has time field |
0001413 : Datatype | Time overflow/underflow on date literals is not always correctly computed |
0001398 : Datatype | Cannot set bitset components with index 65536 and over |
0001352 : Datatype | Specification of bitset with empty binary! value treated inconsistently |
0001365 : Datatype | Truncating tuple! values using NONE |
0001354 : Native | POKE on bitsets should allow NONE value (treated the same as FALSE) |
0001423 : Native | map-event returns incorrect gob! with many keystrokes |
0001355 : Native | PICK and POKE behave inconsistently on bitsets specified with NOT |
0001357 : Native | All equality operators except SAME? ignore that a bitset is complemented |
0001439 : Native | Incorrect newline break after MOLD/only of block |
0001427 : Native | URL and FILE path get-word concat does not remove extra slash |
0001396 : Native | checksum/hash doesn't work as expected (probably not yet implemented) |
0001406 : Mezzanine | LOAD directory with single file |
0001448 : Mezzanine | Startup output in A96 even with --quiet and --cgi |
0001366 : Mezzanine | SPLIT-PATH on string |
0001454 : Mezzanine | Descriptive platform/variation for current executable (changed) |
0001374 : Documentation | END! crops up in HELP SYSTEM/PORTS/SYSTEM |