2005-07-24 23:12:34 -04:00
<!-- :noWordSep=+ - *\=><;.?/'()%,_|: -->
2005-07-21 21:43:37 -04:00
< html >
< head > < title > Factor change log< / title > < / head >
< body >
2005-07-24 23:12:34 -04:00
< h1 > Factor 0.77:< / h1 >
< ul >
2005-08-03 19:09:44 -04:00
< li > Compiler:
< ul >
< li > Optimizing out conditionals where the test value is a constant.< / li >
< li > Optimizing out type checks that are always/never satisfied.< / li >
< li > Inlining method bodies when generic words are called on values with known compile-time types.< / li >
2005-08-15 23:09:44 -04:00
< li > Side-effect-free words that output immutable values are evaluated at compile time if all their inputs are literal. You can declare a word as having this condition by suffixing the definition with < code > foldable< / code > , eg:
< pre > : cube dup dup * * ; foldable< / pre > < / li >
< li > Various arithmetic identities such as < code > 1 *< / code > are optimized out.
2005-08-03 19:09:44 -04:00
< / ul >
< / li >
2005-07-24 23:12:34 -04:00
< li > Sequences:
< ul >
< li > < code > 2each ( seq seq quot -- quot: elt -- elt )< / code > combinator< / li >
< li > < code > join ( seq glue -- seq )< / code > combinator. Takes a sequence of sequences, and constructs a new sequence with the glue in between each sequence. For example:
< pre > [ "usr" "bin" "grep" ] "/" join
< b > "usr/bin/grep"< / b > < / pre > < / li >
2005-07-27 20:13:11 -04:00
< li > Integers now support the sequence protocol. An integer is an increasing sequence of its predecessors. This means the < code > count ( n -- [ 0 ... n-1 ] )< / code > word is gone; just use < code > > vector< / code > instead. Also, < code > project< / code > has been made redundant by < code > map< / code > .< / li >
2005-08-03 19:09:44 -04:00
< li > The < code > seq-transpose ( seq -- seq )< / code > word is now named < code > flip< / code > .
2005-08-03 23:56:28 -04:00
< / li >
2005-07-24 23:12:34 -04:00
< / ul >
< / li >
2005-08-21 20:50:14 -04:00
< li > Prettyprinter:
< ul >
< li > The prettyprinter has been merged with the unparser. The < code > unparse ( object -- string )< / code > word has been moved to the < code > prettyprint< / code > vocabulary, and can now produce a parsable string for any class supported by the prettyprinter.< / li >
< li > New < code > unparse-short ( object -- string )< / code > returns a string no longer than a single line.< / li >
< li > The prettyprinter now supports many more configuration variables. See the handbook for details.< / li >
< / ul >
< / li >
2005-08-03 23:56:28 -04:00
< li > Everything else:
< ul >
2005-08-22 14:29:43 -04:00
< li > New < code > make-hash ( quot -- namespace )< / code > combinator executes quotation in a new namespace, which is then pushed on the stack.< / li >
2005-08-11 19:08:22 -04:00
< li > Erlang/Termite-style concurrency library in < code > contrib/concurrency< / code > (Chris Double).< / li >
2005-07-24 23:12:34 -04:00
< li > Object slots are now clickable in the inspector< / li >
2005-07-30 22:14:34 -04:00
< li > The matrices library has been greatly simplified. Matrices are now represented as vectors of vectors, and matrix words have been moved to the < code > math< / code > vocabulary.< / li >
2005-07-31 23:38:33 -04:00
< li > More descriptive "out of bounds" errors.< / li >
2005-08-11 19:08:22 -04:00
< li > New < code > with-datastack ( stack word -- stack )< / code > combinator.< / li >
< li > New < code > cond ( conditions -- )< / code > combinator. It behaves like a set of nested < code > ifte< / code > s; see its documentation comment for details. Note that it does not compile.< / li >
2005-07-24 23:12:34 -04:00
< / ul >
2005-08-03 23:56:28 -04:00
< / li >
< / ul >
2005-07-21 21:43:37 -04:00
< h1 > Factor 0.76:< / h1 >
< ul >
< li >
2005-07-22 22:18:47 -04:00
UI framework:
2005-07-21 21:43:37 -04:00
< ul >
< li > Now uses 3-dimensional co-ordinates throughout< / li >
< li > Gradient paint, bevel border paint< / li >
2005-07-22 22:18:47 -04:00
< li > Split pane gadget< / li >
< li > Horizontal scroll bars and wheel mouse scrolling in scroller gadgets< / li >
< li > Incremental layout improves listener responsiveness< / li >
< li > The listener supports styled text output and presentations< / li >
2005-07-21 21:43:37 -04:00
< li > Slide-show tutorial with live code examples< / li >
< li > Performance improvements, code cleanups, bug fixes< / li >
< / ul >
< / li >
< li >
Sequences:
< ul >
< li > The following formely list-specific words are now generic:
< pre > all? ( seq quot -- ? | quot: elt -- ? )
all-with? ( obj seq quot -- ? | quot: elt -- ? )
subset ( seq quot -- seq | quot: elt -- ? )
subset-with ( obj seq quot -- seq | quot: obj elt -- ? )
fiber? ( seq quot -- ? | quot: elt elt -- ? )
prune ( seq -- seq )< / pre >
< li > The < code > contains?< / code > word for testing membership in a sequence has been
renamed to < code > member? ( elt seq -- ? )< / code > .
< li > The list-specific < code > some?< / code > and < code > some-with?< / code > combinators are gone. Their replacements are generic:
< pre > contains? ( seq quot -- ? | quot: elt -- ? )
contains-with? ( obj seq quot -- ? | quot: obj elt -- ? )
find ( seq quot -- i elt | quot: elt -- ? )
find* ( i seq quot -- i elt | quot: elt -- ? )
find-with ( obj seq quot -- i elt | quot: elt -- ? )
find-with* ( obj i seq quot -- i elt | quot: elt -- ? )< / pre >
See the developer's handbook for details.
< li > The < code > nreverse ( seq -- )< / code > word has been removed.
< li > < code > reverse-slice ( seq -- seq )< / code > outputs a new sequence that shares
structure with the given sequence, but presents elements in reverse
order.
< li > The < code > string-compare< / code > primitive has been replaced with the lexi word
which now operates on any pair of sequences of numbers. The
2005-07-22 22:18:47 -04:00
string> word has been replaced with < code > lexi>< / code > .
2005-07-21 21:43:37 -04:00
< li > The < code > ,< / code > word no longer accepts a string as input inside a < code > make-string< / code > . In 0.75, the following
two lines were equivalent:
< pre > [ "Hello" , " world" , ] make-string
[ "Hello" % " world" % ] make-string< / pre >
< li > Now, the former raises a type error. Use < code > ,< / code > with characters, and < code > %< / code > with
strings inside make-string.
< / ul >
< li > Streams:
< ul >
< li > The following words have been renamed:
< pre > stream-auto-flush ==> stream-finish ( stream -- )
stream-write-attr ==> stream-format ( string style stream -- )
write-attr ==> format ( string style -- )< / pre >
< li > The following words no longer accept character arguments:
< pre > stream-format ( string style stream -- )
format ( string style -- )
stream-write ( string stream -- )
write ( string -- )
stream-print ( string -- )
print ( string -- )< / pre >
< li > Use the new words to write characters:
< pre > stream-write1 ( char stream -- )
write1 ( char -- )< / pre >
Note that < code > stream-write1< / code > is generic and your stream must implement it.
< li > < code > with-string< / code > word renamed to < code > string-out ( quot -- string )< / code >
< li > New < code > string-in ( string quot -- )< / code > word, calls < code > quot< / code > with < code > stdio< / code > bound to
a stream that reads from the given string.
< / ul >
2005-07-22 22:18:47 -04:00
< li > Everything else:
< ul >
2005-07-21 21:43:37 -04:00
< li > Many improvements to the matrices library.
< li > Improved inspector. Call it with < code > inspect ( obj -- )< / code > .
< li > The number of generations used for garbage collection can now be set
with the +G command line switch. You must specify at least 2
generations.
< li > Only 2 generations are used by default now, since there seems to be no
performance benefit to having 3 after running some brief benchmarks.
< li > Fixed bug where images saved from the jEdit plugin would fail to
start.
< li > md5 hashing algorithm in < code > contrib/crypto/< / code > (Doug Coleman).
< / ul >
2005-07-22 22:18:47 -04:00
< / ul >
2005-07-24 19:08:32 -04:00
< / body >
< / html >