REBOL 3 Change Log: 2010
| Related Links | ||
|
R3 Changes: 2009 Part 1 Jan-Jun R3 Changes: 2009 Part 2 Jul-Dec | ||
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 |
