548 lines
31 KiB
Plaintext
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)"
|
|
} ;
|