factor/core/handbook/changes.facts

548 lines
31 KiB
Plaintext

USING: errors gadgets gadgets-tracks gadgets-labels
gadgets-sliders generic hashtables help io kernel math memory
sequences words compiler parser modules definitions tools alien
inference math-internals quotations assocs ;
ARTICLE: "changes" "Changes in the latest release"
{ $heading "Factor 0.89" }
{ $subheading "Core" }
{ $list
"New Factor icon (Elie Chaftari)"
"Preliminary Windows CE support; native I/O and the UI are still missing"
{ "UDP/IP is now supported on Unix; see " { $link "network-udp" } ". Windows support will be added in the next release" }
{ "There is now a generic protocol for associative collections, see " { $link "assocs" } " (Daniel Ehrenberg)" }
{ "Preliminary API for embedding Factor in C applications. See " { $snippet "vm/factor.h" } }
"UTF8/UTF16 encoding and decoding words added; not integrated with streams yet (Daniel Ehrenberg)"
{ "New " { $link POSTPONE: HOOK: } " word for defining generic words that dispatch on a variable value" }
"Redefining a tuple class now reshapes all existing instances"
{ "The " { $link case } " combinator now supports having a default case" }
{ "Tabular output is now handled differently; see " { $link stream-write-table } }
"Factor now runs on OpenBSD/AMD64"
"Overhauled parser is more flexible and reports errors better"
}
{ $subheading "Tools" }
{ $list
{ "The parser now prints notes when a " { $link POSTPONE: USE: } " or " { $link POSTPONE: USING: } " results in word names being shadowed" }
"Usages information for top-level forms is now recorded"
"Inspector can now edit objects; in the UI this can be done graphically"
{ "The " { $link see } " word now prints " { $link POSTPONE: USING: } " lists" }
"Improved unit test tool retains tracebacks for failed tests"
"The prettyprinter's layout logic is now more intelligent"
"Tuple getter and setter words now have automatically-generated help"
}
{ $subheading "UI" }
{ $list
"Unicode copy and paste, window titles now supported on all platforms"
"Partial support for input methods on X11 and Cocoa"
"The UI inspector can now edit objects"
{ "The walker now has an " { $strong "Abandon" } " button which stops single-stepping" }
}
{ $subheading "Compiler" }
{ $list
"Improved ARM backend"
"The compiler now employs interval inference to convert generic arithmetic to machine arithmetic in some situations"
"Allocation of constant size tuples and arrays is now inlined"
{ "The C library interface now fully supports the " { $snippet "longlong" } " type" }
}
{ $subheading "New non-core modules" }
{ $list
{ { $module-link "apps/article-manager" } " (Chris Double)" }
{ { $module-link "apps/isequences" } " (Robbert van Dalen)" }
{ { $module-link "apps/lisp" } " (Eduardo Cavazos)" }
{ { $module-link "apps/ogg-player" } " (Chris Double)" }
{ { $module-link "libs/graphics" } " (Doug Coleman)" }
{ { $module-link "libs/id3" } " (Adam Wendt)" }
{ { $module-link "libs/io" } " (Doug Coleman)" }
{ { $module-link "libs/locals" } " (Slava Pestov)" }
{ { $module-link "libs/mad" } " (Adam Wendt)" }
{ { $module-link "libs/ogg" } " (Chris Double)" }
{ { $module-link "libs/oracle" } " (Elie Chaftari)" }
{ { $module-link "libs/state-machine" } " (Daniel Ehrenberg)" }
{ { $module-link "libs/theora" } " (Chris Double)" }
{ { $module-link "libs/visitor" } " (Daniel Ehrenberg)" }
{ { $module-link "libs/vorbis" } " (Chris Double)" }
{ "Various modules using " { $module-link "libs/vocabs" } " are new" }
}
{ $subheading "Updated non-core modules" }
{ $list
{ { $module-link "libs/calendar" } " (Doug Coleman)" }
{ { $module-link "libs/mysql" } " (Berlin Brown)" }
{ { $module-link "libs/shuffle" } " (Doug Coleman)" }
{ { $module-link "libs/textmate" } " (Benjamin Pollack)" }
{ { $module-link "libs/vocabs" } " (Eduardo Cavazos)" }
{ "Various modules using " { $module-link "libs/vocabs" } " were updated" }
}
{ $heading "Factor 0.88" }
{ $subheading "Core" }
{ $list
"Byte arrays are sequences now"
"On Windows, Factor now calls Unicode forms of Windows APIs where they exist"
"OpenBSD/x86 port"
"The Pentium 4 and x86 boot images have been merged. SSE2 is detected at bootstrap time"
{ { $link f } " and integers implement the sequence protocol in a more pedantic manner; requesting out of bounds indices from these virtual sequences is an error now" }
"The data heap can now grow at runtime automatically"
{ "New " { $link vm } " word returns path name of the Factor VM executable" }
{ "Moved sbuf words to " { $vocab-link "sbufs" } " vocabulary" }
{ "Bit arrays in " { $vocab-link "bit-arrays" } " vocabulary" }
{ "The " { $link reload-modules } " word has been split up into " { $link reload-core } " and " { $link reload-libs } "; CRC32 hashing is now used instead of file modification times to detect changes" }
}
{ $subheading "Compiler" }
{ $list
"Linux/PPC fixes"
"Solaris/AMD64 fixes (Samuel Tardieu)"
"ARM backend"
"stdcall callbacks"
"Alien interface now supports calling C functions which return structs by value"
"Improved type inference in the optimizer is now able to remove overflow checks"
"Stack frames are not set up for leaf words"
}
{ $subheading "New non-core modules" }
{ $list
{ { $module-link "apps/automata" } " (Eduardo Cavazos)" }
{ { $module-link "apps/balloon-bomber" } " (Chris Double)" }
{ { $module-link "apps/cabal" } " (Eduardo Cavazos)" }
{ { $module-link "apps/cabal-client" } " (Matthew Willis, Eduardo Cavazos)" }
{ { $module-link "apps/icfp-2006" } " (Gavin Harrison)" }
{ { $module-link "apps/lunar-rescue" } " (Chris Double)" }
{ $module-link "demos/bunny" }
{ $module-link "demos/contributors" }
{ { $module-link "demos/fft" } " (Hans Schmid)" }
{ { $module-link "demos/golden-section" } " (Eduardo Cavazos)" }
{ $module-link "demos/maze" }
{ $module-link "demos/msxml-to-csv" }
{ $module-link "demos/sudoku" }
{ { $module-link "libs/alarms" } " (Doug Coleman)" }
{ { $module-link "libs/circular" } " (Daniel Ehrenberg)" }
{ { $module-link "libs/cpu-8080" } " (Chris Double)" }
{ { $module-link "libs/csv" } " (Daniel Ehrenberg)" }
{ { $module-link "libs/editpadpro" } " (Ryan Murphy)" }
{ { $module-link "libs/fjsc" } " (Chris Double)" }
{ { $module-link "libs/handler" } " (Eduardo Cavazos)" }
{ { $module-link "libs/heap" } " (Ryan Murphy)" }
{ { $module-link "libs/irc" } " (Doug Coleman)" }
{ { $module-link "libs/loopback-server" } " (Eduardo Cavazos)" }
{ { $module-link "libs/mysql" } " (Berlin Brown)" }
{ { $module-link "libs/null-stream" } " emulates the old behavior of f as a stream which yields no input and discards output" }
{ { $module-link "libs/odbc" } " (Chris Double)" }
{ { $module-link "libs/openal" } " (Chris Double)" }
{ { $module-link "libs/regexp" } " (Doug Coleman)" }
{ { $module-link "libs/rewrite-closure" } " (Eduardo Cavazos)" }
{ { $module-link "libs/server" } " contains some words which were formely in the core" }
{ { $module-link "libs/stack-display" } " (Eduardo Cavazos)" }
{ { $module-link "libs/state-parser" } " (Daniel Ehrenberg)" }
{ { $module-link "libs/store" } " (Doug Coleman)" }
{ { $module-link "libs/trees" } " (Alex Chapman)" }
{ { $module-link "libs/unicode" } " (Daniel Ehrenberg)" }
{ { $module-link "libs/vocabs" } " (Eduardo Cavazos)" }
}
{ $subheading "Updated non-core modules" }
{ $list
{ { $module-link "apps/automata" } " (Eduardo Cavazos)" }
{ { $module-link "apps/benchmarks" } }
{ { $module-link "apps/factory" } " (Eduardo Cavazos)" }
{ { $module-link "apps/furnace-onigiri" } " (Matthew Willis)" }
{ { $module-link "apps/furnacebot" } " (Doug Coleman)" }
{ { $module-link "apps/lsys" } " replaces apps/lindenmayer (Eduardo Cavazos)" }
{ { $module-link "apps/random-tester" } " (Doug Coleman)" }
{ { $module-link "apps/space-invaders" } " (Chris Double)" }
{ { $module-link "libs/calendar" } " (Doug Coleman)" }
{ { $module-link "libs/crypto" } " (Doug Coleman)" }
{ { $module-link "libs/dlists" } " (Doug Coleman)" }
{ { $module-link "libs/emacs" } " (Eduardo Cavazos)" }
{ { $module-link "libs/embedded" } }
{ { $module-link "libs/furnace" } " (Matthew Willis)" }
{ { $module-link "libs/hardware-info" } " (Doug Coleman)" }
{ { $module-link "libs/json" } " (Chris Double)" }
{ { $module-link "libs/match" } " (Chris Double)" }
{ { $module-link "libs/matrices" } }
{ { $module-link "libs/memoize" } " (Daniel Ehrenberg, Slava Pestov)" }
{ { $module-link "libs/shuffle" } " (Chris Double)" }
{ { $module-link "libs/slate" } " (Eduardo Cavazos)" }
{ { $module-link "libs/splay-trees" } " (Doug Coleman)" }
{ { $module-link "libs/sqlite" } " (Chris Double)" }
{ { $module-link "libs/vim" } " (Alex Chapman)" }
{ { $module-link "libs/wm" } " (Eduardo Cavazos)" }
{ { $module-link "libs/x" } " (Eduardo Cavazos)" }
{ { $module-link "libs/xml" } " (Daniel Ehrenberg)" }
{ { $module-link "libs/yahoo" } " (Daniel Ehrenberg)" }
}
{ $heading "Factor 0.87" }
{ $subheading "Core" }
{ $list
{ "Added " { $snippet "-e" } " command line option to evaluate a snippet of code on startup, like so:"
{ $code "./f factor.image -e='2 2 + .'" }
}
{ "Added " { $snippet "-shell=none" } " command line option, which can be combined with " { $snippet "-e" } " to exit Factor after evaluating the snippet:"
{ $code "./f factor.image -e='2 2 + .' -shell=none" }
}
{ "Added " { $snippet "-quiet" } " command line option, which supresses messages which are usually printed when loading source files and modules, and when compiling words" }
{ "The source tree has been re-organized:"
{ $list
{ { $snippet "library/" } " renamed to " { $snippet "core/" } }
{ { $snippet "examples/" } " renamed to " { $snippet "demos/" } }
{ { $snippet "contrib/" } " split up into " { $snippet "libs/" } " and " { $snippet "apps/" } }
}
}
{ "The " { $link :c } " word now displays a call stack trace for errors thrown from compiled words" }
{ "New " { $link string-lines } " word to split a string along line separators (" { $snippet "\\n" } ", " { $snippet "\\r\\n" } ", or " { $snippet "\\r" } ")" }
{ "The " { $link float>fixnum } " and " { $link fixnum>float } " words are now compiled as inlined assembly" }
"Full-text help search has been removed"
}
{ $subheading "UI" }
{ $list
"UI development documentation"
"Better top-level window positioning"
{ "Improved listener:"
{ $list
"Stack effect for the word at the caret is now shown in the status bar"
"Errors are now shown in a popup supporting keyboard invocation of restarts"
{ "Better support for multi-line expressions -- pressing " { $snippet "RET" } " now inserts a newline of the expression is incomplete" }
"If a parse error occurs, the cursor is positioned to the location of the error and the input text is not cleared"
"Circular structure and deep nesting sentinels output by the prettyprinter are now clickable presentations"
}
}
"Improved completion popups in the workspace window"
"Added a row of buttons to the workspace window to display various completion and browsing popups"
{ "New " { $link handle-gesture* } " generic word allows a gadget to handle arbitrary gestures" }
{ { $link label } " gadgets can now display multi-line strings" }
{ { $link slider } " gadgets are now controls" }
}
{ $subheading "Contributed libraries" }
{ $list
{ "New " { $module-link "apps/furnace-onigiri" } " - web log built on top of the Furnace framework (Matthew Willis)" }
{ "New " { $module-link "apps/lisppaste" } " - simple XML-RPC client for " { $url "paste.lisp.org" } " (Daniel Ehrenberg)" }
{ "New " { $module-link "apps/wee-url" } " - web app to make short URLs from long ones (Doug Coleman)" }
{ "New " { $module-link "demos/color-picker" } " - simple demonstration of the UI's models/controls (Slava Pestov)" }
{ "New " { $module-link "demos/mslug-talk" } " - slides for Slava's Factor presentation at the Montreal Scheme/Lisp User's Group (Slava Pestov)" }
{ "New " { $module-link "demos/nehe" } " - porting some NeHe OpenGL tutorials to Factor (Chris Double)" }
{ "New " { $module-link "demos/rot13" } " (Daniel Ehrenberg)" }
{ "New " { $module-link "libs/basic-authentication" } " - basic authentication implementation for HTTP server (Chris Double)" }
{ "New " { $module-link "libs/farkup" } " - simple Wiki-like markup language (Matthew Willis)" }
{ "New " { $module-link "libs/fjsc" } " - Factor to JavaScript compiler (Chris Double)" }
{ "New " { $module-link "libs/porter-stemmer" } " - Porter stemmer algorithm, originally used to be in the core (Slava Pestov)" }
{ "New " { $module-link "libs/shuffle" } " - some additional stack shuffle words (Doug Coleman)" }
{ "New " { $module-link "libs/sqlite" } " - bug fixes and optimizations (Benjamin Pollack)" }
{ "New " { $module-link "libs/xml-rpc" } " - XML-RPC client and server (Daniel Ehrenberg)" }
{ "New " { $module-link "libs/yahoo" } " - web searches using Yahoo's REST API (Daniel Ehrenberg)" }
{ "Updated " { $module-link "apps/random-tester" } " - more random test generators (Doug Coleman)" }
{ "Updated " { $module-link "apps/rss" } " - use " { $module-link "libs/xml" } " instead of ad-hoc parser, support for Atom feeds (Daniel Ehrenberg, Chris Double)" }
{ "Updated " { $module-link "apps/space-invaders" } " - fix ROM load path issues (Chris Double)" }
{ "Updated " { $module-link "libs/alien" } " - added some words for working with " { $snippet "void**" } " types (Doug Coleman)" }
{ "Updated " { $module-link "libs/calendar" } " - support for RFC3339 timestamps (Matthew Willis)" }
{ "Updated " { $module-link "libs/httpd" } " - add a new " { $snippet "raw-request" } " variable, fix bug in Factor HTML templating (Chris Double, Slava Pestov)" }
{ "Updated " { $module-link "libs/json" } " - bug fixes (Chris Double)" }
{ "Updated " { $module-link "libs/lazy-lists" } " - added " { $snippet "llength" } " word (Chris Double)" }
{ "Updated " { $module-link "libs/match" } " - support pattern replacement (Chris Double)" }
{ "Updated " { $module-link "libs/math" } " - some additional matrix words (Doug Coleman)" }
{ "Updated " { $module-link "libs/parser-combinators" } " - some new combinators, performance improvements (Chris Double)" }
{ "Updated " { $module-link "libs/vim" } " - open all files in a single VIM instance (Doug Coleman)" }
{ "Updated " { $module-link "libs/xml" } " - many improvements (Daniel Ehrenberg)" }
}
{ $heading "Factor 0.86" }
{ $subheading "Core" }
{ $list
"Improved memory management code leads to reduced memory consumption, less frequent garbage collections and fixes a few corner cases where Factor could run out of heap even if a GC would have freed enough memory to proceed"
"Improved prettyprinter now lays out code in a more pleasing manner"
"Windows native I/O has been sped up (Doug Coleman)"
}
{ $subheading "UI" }
{ $list
{ "Double and triple clicks are now recognized, and can be used to select text in the editor gadget" }
{ "Windows now update while being resized on Windows" }
}
{ $subheading "Stack effect inference" }
{ $list
{ "The new " { $link infer. } " word should be called instead of " { $link infer } ", since it presents information in a more pleasing way" }
"Stack effect inference now infers variables read and written by a quotation to facilitate code comprehension and debugging"
}
{ $subheading "Module system" }
{ $list
{ "The syntax for " { $link POSTPONE: PROVIDE: } " has changed, consult the documentation" }
{ "Modules can now provide a main entry point, see " { $link run-module } " and " { $link POSTPONE: MAIN: } }
{ "Modules can now provide documentation, see " { $link "documenting-modules" } }
}
{ $subheading "Contributed libraries" }
{ $list
{ "New " { $snippet "contrib/cpuinfo" } " (Doug Coleman)" }
{ "Updated " { $snippet "contrib/match" } " (Chris Double)" }
{ "Updated " { $snippet "contrib/parser-combinators" } " (Chris Double)" }
{ "Updated " { $snippet "contrib/postgresql" } " (Doug Coleman)" }
{ "Updated " { $snippet "contrib/process" } " (Doug Coleman)" }
{ "Updated " { $snippet "contrib/sqlite" } " (Doug Coleman)" }
{ "Updated " { $snippet "contrib/textmate" } " (Benjamin Pollack)" }
{ "Updated " { $snippet "contrib/tuple-db" } " (Doug Coleman)" }
{ "Updated " { $snippet "contrib/vim" } " (Doug Coleman)" }
{ "Updated " { $snippet "contrib/xml" } " (Daniel Ehrenberg)" }
}
{ $heading "Factor 0.85" }
{ $subheading "Core" }
{ $list
{ "Implemented garbage collection for the compiled code heap using a mark and sweep algorithm. The code GC kicks in automatically when the code heap is full, and can also be invoked manually with " { $link code-gc } "." }
{ "The " { $link usage. } " word now lists individual method usages" }
{ "New " { $link alien-indirect } " word allows invoking function pointers" }
{ "Pressing " { $snippet "F8" } " or invoking " { $snippet reload-modules } " reloads changed source files from loaded modules. Use " { $link reset-checksums } " to reset modification times" }
{ "The module system is used to organize the core library now, and modules from " { $snippet "contrib/" } " must now have their names prefixed with " { $snippet "contrib/" } " when being passed to " { $link require } ", " { $link POSTPONE: REQUIRES: } " and " { $link POSTPONE: PROVIDE: } }
}
{ $subheading "UI" }
{ $list
"Right-clicking on a presentation now shows a popup menu of operations"
{ "Pressing " { $snippet "C+e" } " in the UI listener displays a file name completion popup; selecting a file and pressing " { $snippet "RET" } " opens it in the default editor using " { $link edit } }
{ "Pressing " { $snippet "TAB" } " or " { $snippet "C+u" } " in the UI listener displays a word or vocabulary name completion popup, respectively. Selecting a word inserts its name in the input area, selecting a vocabulary adds it to the search path." }
{ "New dataflow visualizer tool. Enter a piece of code in the listener, and press " { $snippet "C+A+d" } }
"The single stepper tool now properly handles code which uses continuations and exceptions"
{ "Various fixes for the Windows UI backend (Doug Coleman)" }
}
{ $subheading "Contributed libraries" }
{ $list
{ "Updated " { $snippet "contrib/sqlite" } " (Doug Coleman)" }
{ "Updated " { $snippet "contrib/lazy-lists" } " (Chris Double)" }
{ "Updated " { $snippet "contrib/parser-combinators" } " (Chris Double)" }
{ "Updated " { $snippet "contrib/process" } " (Doug Coleman)" }
{ "Updated " { $snippet "contrib/calendar" } " (Doug Coleman)" }
{ "Updated " { $snippet "contrib/slate" } " (Eduardo Cavazos)" }
{ "New module " { $snippet "contrib/lindenmayer" } " - Lindenmayer L-system visualization (Eduardo Cavazos)" }
{ "New module " { $snippet "contrib/jni" } " - Java interface (Chris Double)" }
{ "New module " { $snippet "contrib/usb" } " - USB interface (Chris Double)" }
{ "New module " { $snippet "contrib/match" } " - Pattern matching (Chris Double)" }
{ "New module " { $snippet "contrib/textmate" } " - TextMate editor integration (Benjamin Pollack)" }
{ "New module " { $snippet "contrib/tetris" } " - TextMate editor integration (Alex Chapman)" }
}
{ $heading "Factor 0.84" }
{ $subheading "Core" }
{ $list
{ "Incompatible change: the argument order for the following words has changed:"
{ $list
{ $link head }
{ $link head* }
{ $link head-slice }
{ $link head-slice* }
{ $link tail }
{ $link tail* }
{ $link tail-slice }
{ $link tail-slice* }
{ $link group }
}
}
"Native I/O on Windows is now supported again. This means non-blocking I/O, network sockets, HTTPD and so on work again (Doug Coleman)."
{ "Stack effect declarations are now read by the parser. This means that " { $snippet "( foo bar )" } " is not a comment anymore, but syntax. See " { $link "effect-declaration" } "." }
{ "Redefining words no longer decompiles words that call them; now you must call " { $link recompile } " manually. This word is automatically called after loading a file with " { $link run-file } " or a module with " { $link require } ". See " { $link "recompile" } " for details." }
{ "Words such as " { $link see } ", " { $link reload } ", and " { $link edit } " can now take method and help article specifiers in addition to words. See " { $link "definitions" } " for details." }
}
{ $subheading "UI" }
{ $list
"New code walker runs in UI, supports backward time travel and replaces terminal-based walker."
"New single-window interface -- the listener, browser, documentation and walker have been merged into a single window. Use F2, F3, F4, F5 to switch between tools. Multiple windows can still be opened with S+F2, S+F3, S+F4."
"The input gadget in the listener now supports a variety of shortcuts for getting information about the word at the caret. Explore the keyboard help for details."
"Pressing F1 now lists keyboard shortcuts for the currently focused gadget."
"The UI now sends modifier keys along with mouse button up/down gestures."
"For users with a one-button mouse, control-clicking is now sent as a right click, and alt-clicking is sent as a middle-click."
"On Mac OS X, the UI can now act as a system services client. That is, you can select some text in the listener's input gadget, invoke a service, and see the result appear."
}
{ $subheading "Tools" }
{ $list
{ "The " { $snippet "jedit" } " word has been replaced with a general " { $link edit } " word. You must now load one of the following modules for external editor support:"
{ $list
{ $snippet "emacs" }
{ $snippet "jedit" }
{ $snippet "vim" }
}
}
{ "New " { $link :edit } " word opens your editor at the location of the most recent syntax error." }
{ "New " { $link :help } " word displays documentation explaining the most recent error." }
{ "The " { $link apropos } " word now performs fuzzy matching and ranks results according to edit distance." }
}
{ $subheading "Contributed libraries" }
{ $list
{ { $snippet "automata" } ": updated (Eduardo Cavazos)." }
{ { $snippet "boids" } ": updated (Eduardo Cavazos)." }
{ { $snippet "calendar" } ": updated (Doug Coleman)." }
{ { $snippet "concurrency" } ": supports distributed message passing over sockets between nodes (Chris Double)." }
{ { $snippet "emacs" } ": new module, adds a hook for the " { $link edit } " word that invokes Emacs (Eduardo Cavazos)." }
{ { $snippet "httpd" } ": supports client cache control headers (Chris Double)." }
{ { $snippet "json" } ": new module reads and writes JSON objects (Chris Double)." }
{ { $snippet "lambda" } ": new module, lambda calculus interpreter (Matthew Willis)." }
{ { $snippet "lazy-lists" } ": updated (Matthew Willis)." }
{ { $snippet "parser-combinators" } ": updated (Chris Double)." }
{ { $snippet "rss" } ": new module reads RSS2 feeds (Chris Double)." }
{ { $snippet "serialize" } ": revived and updated (Chris Double)." }
{ { $snippet "sqlite" } ": updated (Chris Double)." }
{ { $snippet "tuple-db" } ": updated (Chris Double)." }
{ { $snippet "vim" } ": new module, adds a hook for the " { $link edit } " word that invokes VIM (Doug Coleman)." }
}
{ $heading "Factor 0.83" }
{ $subheading "First class quotations" }
{ $list
"Support for cons cells and linked lists has been removed from the core language."
"Quotations are now a first-class array-like type with the same literal syntax that linked lists used to have."
{ "A few quotation construction words such as " { $link curry } ", " { $snippet "unit" } " and " { $link alist>quot } " have been moved to the " { $snippet "kernel" } " vocabulary." }
}
{ $subheading "UI" }
{ $list
"Multi-line text editor gadget replaces single-line editor gadget and adds support for selection, copy and paste, and more advanced text editing."
"New apropos tool."
"New word browser tool."
{ "New " { $link track } " gadget replaces the old " { $snippet "splitter" } "; it behaves similarly but supports more than two children." }
"Key down and key up gestures have been made separate."
"Window positions and contents are now saved in the image."
"You can now paste from the clipboard using Control-V (Mac OS) or by middle-clicking (X11)."
"The UI now uses 2-dimensional rather than 3-dimensional co-ordinates, since the third dimension was never used."
"Beginnings of an MVC framework taking some cues from functional reactive programming."
}
{ $subheading "Documentation" }
{ $list
"Better looking markup output."
"Expanded and improved documentation."
"Full-text search."
}
{ $subheading "Mac OS X-specific" }
{ $list
"Factor now runs on Intel-based Macs."
{ "Redesigned Cocoa binding. Messages are now sent via the " { $snippet "->" } " parsing word, for example:"
{ $code "NSObject -> alloc -> init" }
}
"Files can be run by dropping them on the Factor icon in the dock"
{ "Services support; if you drop " { $snippet "Factor.app" } " in your " { $snippet "Applications" } " directory, you will be able to evaluate Factor code from other applications." }
"File->Run command."
}
{ $subheading "Core language changes" }
{ $list
{ "The " { $snippet "reverse-slice" } " word has been removed; call " { $link <reversed> } " instead." }
{ "The " { $link sum } " and " { $link product } " words have been moved into the core." }
{ "New " { $link delete-at* } " word removes the former value." }
{ "C library interface now features full support for " { $snippet "ushort*" } " UCS-2 strings." }
{ "Restartable errors are now supported; throw them using " { $link condition } ", and invoke restarts in the listener using " { $link :res } "." }
{ { $snippet "with-stream-table" } " word for tabular formatting." }
{ "Style stack and associated words such as " { $snippet "format*" } " have been removed in favor of a better abstraction, " { $link with-style } " and " { $link with-stream-style } "." }
}
{ $subheading "Contributed libraries" }
{ $list
{ "There is a new mechanism for loading contributed libraries that correctly handles dependencies; see " { $link "modules" } "." }
{ "Time and date library added in " { $snippet "contrib/calendar/" } ". (Doug Coleman)" }
"Factory window manager updates (Eduardo Cavazos)"
{ "New " { $snippet "slate" } " gadget for easier graphical output for simulations and demos. (Eduardo Cavazos)" }
"Automata and boids demos. (Eduardo Cavazos)"
{ "More concise syntax for variables in " { $snippet "contrib/vars.factor" } ". (Eduardo Cavazos)" }
}
{ $subheading "HTTP server" }
{ $list
"Improved AJAX outliners in the help responder can now be collapsed."
{ "Files with the " { $snippet ".fhtml" } " extension are run through the " { $snippet "embedded.factor" } " module; snippets of Factor code between " { $snippet "<%" } " and " { $snippet "%>" } " are evaluated and their output intermingled with the HTML text." }
}
{ $heading "Factor 0.82" }
{ $list
"New code generator framework in compiler"
"Floating point operations are now open-coded, resulting in a performance gain"
{ "Remove " { $snippet "unswons" } " word" }
"Implement value type struct inputs to callbacks on AMD64"
"Fix some Unix I/O bugs"
"Standard OS X-style menu bar in the Cocoa UI (Kevin Reid)"
"Objective C methods defined in Factor can now return C structures by value"
}
{ $heading "Factor 0.81" }
{ $subheading "UI" }
{ $list
"Replaced SDL backend code with Mac OS X (Cocoa), X11 and Windows implementations"
{ "The UI now starts by default under X11 if " { $snippet "$DISPLAY" } " is set" }
"Multiple windows are now supported"
"New browser gadget supports history and multiple views of an object"
"Preferred size cache to speed up gadget layout"
"Better-looking outliners"
}
{ $subheading "Help system" }
{ $list
{ "Help cross-referencing implemented - the " { $snippet "links-in." } " and " { $snippet "links-out." } " words are analogous to " { $link usage. } " and " { $snippet "uses." } }
{ "New documentation covers development tools and C library interface" }
}
{ $subheading "Core language" }
{ $list
"Stack underflow and overflow errors are now reported as such, and not generic \"signal 11\" errors (Adam Langley)"
{ "The " { $link standard-combination } " word now takes a stack position, not a picker quotation, and delegation is now supported for words which dispatch on a stack location other than the top" }
{ "New " { $link exchange } " word" }
{ "More useful " { $link heap-stats. } " output now shows count/allocation statistics per-class, instead of per-type" }
{ "Factor now looks for a " { $snippet "factor.image" } " in the same directory as the runtime executable on Mac OS X and Windows, if you don't specify an image name parameter on the command line" }
}
{ $subheading "Portability" }
{ $list
"Solaris x86 port (Patrick Mauritz)"
}
{ $subheading "Compiler" }
{ $list
"Compiler no longer splits all branches, reducing compile time and generated code size"
}
{ $subheading "C library interface" }
{ $list
"Structs can now be passed by value to C functions"
{ "Callbacks from C code to Factor are now supported - see " { $link "alien-callback" } }
{ "Improved support for passing UCS-2 strings to and from C functions (" { $snippet "ushort*" } " type)" }
{ "The " { $snippet "BEGIN-ENUM:" } " and " { $snippet "BEGIN-UNION:" } " parsing words have been annexed in favor of new, more consise syntax - see " { $link POSTPONE: C-ENUM: } " and " { $link POSTPONE: C-UNION: } }
}
{ $subheading "Objective C library interface" }
{ $list
"Objective C classes can now be subclassed"
"Objective C exceptions are now caught and reported as Factor exceptions"
"Objective C messages returning structs by value are now supported"
}
{ $subheading "contrib/processes.factor" }
{ $list "This is a new library" }
{ $subheading "contrib/partial-continuations.factor" }
{ $list "This is a new library (Chris Double)" }
{ $subheading "contrib/httpd/" }
{ $list
"File responder fixes"
"Inspector responder fixes"
"Continuation responder fixes (Chris Double)"
{ "Add templating engine in " { $snippet "embedded.factor" } " (Alex Chapman)" }
}
{ $subheading "contrib/xml.factor" }
{ $list
"Various updates for recent Factor changes"
"Improved XML output capabilities"
}
{ $subheading "contrib/factory/" }
{ $list "Many updates" }
{ $subheading "contrib/crypto/" }
{ $list
"Added Base64 encoding (Doug Coleman)"
"Added Blum Blum Shub random number generator (Doug Coleman)"
"Added CRC32 checksum (Doug Coleman)"
}
{ $subheading "contrib/space-invaders/" }
{ $list
"Updated to use Factor UI instead of SDL (Chris Double)"
} ;