"The reports of my death are greatly exaggerated" - Mark Twain
I'm very pleased to announce the release of Factor 0.95!
OS/CPU Windows Mac OS X Linux x86 x86-64 Source code: 0.95
Note: it looks like the Mac OS X binaries unintentionally require 10.8 or greater, due to an upgrade of our build farm. If you want to use it on 10.6 or 10.7 before we make a fix, you can build from source:
git clone https://github.com/slavapestov/factor.git && cd factor && ./build-support/factor.sh update
This release is brought to you with over 2,500 commits by the following individuals:
Alex Vondrak, Alfredo Beaumont, Andrew Pennebaker, Anton Gorenko, Brennan Cheung, Chris Double, Daniel Ehrenberg, Doug Coleman, Eric Charlebois, Eungju Park, Hugo Schmitt, Joe Groff, John Benediktsson, Jon Harper, Keita Haga, Maximilian Lupke, Philip Searle, Philipp Brüschweiler, Rupert Swarbrick, Sascha Matzke, Slava Pestov, @8byte-jose, @yac, @otoburb, @rien
In addition to lots (and lots!) of bug fixes and improvements, I want to highlight the following features:
- GTK-based UI backend
- Native image loaders using Cocoa, GTK, and GDI+
- Sampling profiler replacing counting profiler
- Code coverage tool to improve unit tests
- VM and application-level signal handlers
- ICMP support and an IPv4 "ping" implementation
- DNS client and "host" implementation
- Support frexp and log of really big numbers
- Cross-platform open URL in webbrowser
- Cross-platform send file to trash (Mac OS X, Linux, Windows)
- Speedup bignum GCD and ratio operations
- Speedup in thread yield performance on Mac OS X
- CSV library is 3x faster
- XML library is 2x faster
- JSON library is 2-3x faster
- Many stability and performance enhancements
Some possible backwards compatibility issues:
- Change alien references from "
<int>
" to "int <ref>
" and "*int
" to "int deref
" - Removed Windows CE, BSD, and Solaris platform support
- Natively support binary (0b), octal (0o), and hexadecimal (0x) number syntax
- Unify "
( -- )
" and "(( -- ))
" stack effect syntax - Change prepend to return type of first sequence to match append behavior
- Change ".factor-rc" to be ".factor-rc" on all platforms
- Cleanup specialized array syntax to be more generic and consistent
- Change to quadratic probing instead of linear probing in hashtables
- Allow dispatching on anonymous intersections/unions
What is Factor
Factor is a concatenative, stack-based programming language with high-level features including dynamic types, extensible syntax, macros, and garbage collection. On a practical side, Factor has a full-featured library, supports many different platforms, and has been extensively documented.
The implementation is fully compiled for performance, while still supporting interactive development. Factor applications are portable between all common platforms. Factor can deploy stand-alone applications on all platforms. Full source code for the Factor project is available under a BSD license.
New Libraries
- 99-bottles: texting "99 bottles of beer" (Doug Coleman)
- anagrams: words for working with anagrams (John Benediktsson)
- atk: bindings to GNOME Accessibility Toolkit (Anton Gorenko)
- audio-gadget: play button (Joe Groff)
- bitcoin.client (Chris Double)
- classes.maybe: union of classes and
f
(Doug Coleman) - clutter: bindings to Clutter (Anton Gorenko)
- code-arrays (Doug Coleman)
- colors.hex (John Benediktsson)
- combinators.random: random versions of combinators (Jon Harper)
- core-foundation.launch-services bindings to OS X Launch Services API (Doug Coleman)
- dice: rolling random dice (John Benediktsson)
- dns: implements DNS protocol (Doug Coleman)
- echo-server: simple TCP echo server (John Benediktsson)
- fastcgi: support for FastCGI standard (Brennan Cheung)
- furnace.auth.providers.couchdb: CouchDB authentication (Alex Drummond)
- gdk: bindings to GDK (Anton Gorenko)
- gio: bindings to GIO (Anton Gorenko)
- gmodule: bindings to GModule (Anton Gorenko)
- gobject: bindings to GObject (Anton Gorenko)
- gobject-introspection: bindings to GObject Introspection (Anton Gorenko)
- google.charts: render Google charts in the listener (John Benediktsson)
- google.search: search Google from the listener (John Benediktsson)
- google.translate: translate languages from the listener (Doug Coleman)
- graphviz: bindings to Graphviz library (Alex Vondrak)
- gtk: bindings to GTK (Anton Gorenko)
- hamurabi: port of HAMURABI.BAS game (John Benediktsson)
- hashtables.sequences (John Benediktsson)
- help.search: allow searching within help article text (John Benediktsson)
- ini-file: parsing INI-style configuration files (John Benediktsson)
- interval-sets: efficient sets of integer intervals (Daniel Ehrenberg)
- io.binary.fast: fast endian conversion (Doug Coleman)
- io.files.temp: better cross-platform temp files (Joe Groff)
- io.files.trash: cross platform send-to-trash (John Benediktsson)
- io.sockets.icmp: ICMP support (John Benediktsson)
- io.streams.256color: xterm-256color formatted stream (John Benediktsson)
- io.streams.peek: peekable I/O streams (Doug Coleman)
- io.streams.throwing: I/O streams that throw on EOF (Doug Coleman, Joe Groff)
- lint: Factor "lint" tool (Doug Coleman)
- llvm.clang: Clang FFI bindings (Erik Charlebois)
- math.approx: approximating rationals (John Benediktsson)
- math.distances: distance functions (John Benediktsson)
- math.extras: assorted math functions (John Benediktsson)
- math.similarity: similary functions (John Benediktsson)
- math.transforms.fft: fast Fourier transform (John Benediktsson)
- memcached: query memcached databases (John Benediktsson)
- ntp: client for NTP protocol (John Benediktsson)
- ping: implements IPv4 ping client (John Benediktsson)
- progress-bars: displaying textual progress bars (Doug Coleman)
- random.data: generate randomized strings (Doug Coleman)
- readline-listener: with tab completion! (Eric Charlebois)
- readline: libreadline bindings (Eric Charlebois)
- resolv-conf: parser for
resolv.conf
files (Doug Coleman) - rosetta-code: examples from Rosetta Code website (many anonymous authors)
- semantic-versioning: implements Semantic Versioning specification (Maximilian Lupke)
- sequences.extras: assorted math functions (Doug Coleman, John Benediktsson)
- sequences.windowed: virtual rolling sequence (Doug Coleman)
- slots.macros: macro-based accessors (Joe Groff)
- sorting.extras: assorted words (John Benediktsson)
- tnetstrings: reader/writer for "tagged netstrings" (John Benediktsson)
- tools.coverage: measure code coverage (Doug Coleman)
- tools.deploy.embed: self-executing images (Joe Groff)
- tools.dns (Doug Coleman)
- tools.profiler.sampling: sampling profiler (Joe Groff)
- tools.ps: process listing tool (Doug Coleman)
- tools.test.fuzz: quickcheck-style probabilistic testing (Joe Groff, Andrew Pennebaker)
- txon: reader/writer for TXON format (John Benediktsson)
- units.reduction: reduce units to convenient forms (Doug Coleman)
- unix.signals: signal handlers (Joe Groff)
- wake-on-lan: support for Wake-on-LAN protocol (John Benediktsson)
- webbrowser: open URL's in your webbrowser (John Benediktsson)
- windows.gdiplus: bindings to GDI+ (Joe Groff)
- windows.iphlpapi: bindings to IP Helper (Doug Coleman)
- windows.privileges: bindings to Privileges API (Doug Coleman)
- windows.registry: bindings to Registry API (Doug Coleman)
- windows.streams: IStream interface (Joe Groff)
- wolfram-alpha: query Wolfram|Alpha from the listener (John Benediktsson)
- xkcd: viewer for XKCD comics (John Benediktsson)
- xmode.highlight: syntax highlighting using formatted streams (John Benediktsson)
Improved Libraries:
- alien.endian: speedup byte-reverse (Doug Coleman)
- alien.fortran: various improvements (Joe Groff)
- assocs: performance improvements (John Benediktsson)
- classes.struct: support for packed structures (John Benediktsson)
- combinators.smart: various improvements (Doug Coleman)
- compiler: various improvements (Slava Pestov)
- command-line: pass arguments to "-run" vocabs (John Benediktsson)
- core-foundation.run-loop: greatly speed up yield (John Benediktsson)
- csv: performance improvements (John Benediktsson)
- curses: various improvements (Philipp Brüschweiler)
- fuel: various improvements (Doug Coleman, Eungju Park, John Benediktsson)
- generalizations: adding
smart-with
(John Benediktsson) - graphviz: unit tests and improvements (Alex Vondrak)
- help.apropos: fixes and improvements (otoburb, John Benediktsson)
- http.client: added OPTIONS, TRACE and HEAD HTTP methods (otoburb)
- images.png: various fixes (Philip Searle)
- infix: support slice notation (John Benediktsson)
- io: non-copying read operations (Joe Groff)
- io.backend: various improvements (Slava Pestov, Joe Groff, Erik Charlebois)
- io.binary: performance improvements (John Benediktsson)
- io.encodings.string: performance improvements (Joe Groff)
- io.encodings.utf8: various improvements (John Benediktsson)
- io.files.windows: fix handling of UNC paths (8byte-jose)
- io.pathnames: support "~" pathname expansion (otoburb)
- io.serial: fixes (Doug Coleman)
- io.sockets: implement a <raw> port (Doug Coleman)
- json: performance improvements (John Benediktsson)
- lexer/parser: various improvements (Doug Coleman)
- make: support building assocs (John Benediktsson)
- math.combinatorics: various improvements (John Benediktsson)
- math.complex: syntax checking (Doug Coleman)
- math.floating-point: added
double>ratio
(John Benediktsson) - math.functions: various improvements (Doug Coleman, John Benediktsson)
- math.matrices: various improvements (Doug Coleman, John Benediktsson)
- math.polynomials: speedup polyval (Doug Coleman)
- math.primes: various improvements (Samuel Tardieu)
- math.primes.erato: bug fixes (Rupert Swarbrick)
- math.statistics: many new words (Doug Coleman, John Benediktsson)
- math.vectors: adding
v^
,v^n
,n^v
(John Benediktsson) - memoize: speedup no-argument memoized words (John Benediktsson)
- mongodb: various improvements (Sascha Matzke)
- namespaces: speedup global access (Joe Groff)
- path-finding: Dijkstra's algorithm and fixes (Samuel Tardieu, Alfredo Beaumont)
- random: many improvements (Doug Coleman, John Benediktsson)
- sequences: performance improvements (John Benediktsson)
- sequences.repeating: various improvements (John Benediktsson)
- sets: performance improvements (John Benediktsson)
- slots: improved slot type checking and coercion (Doug Coleman)
- sorting.human: case-insensitive comparisons (Doug Coleman)
- specialized-arrays: various cleanups (John Benediktsson)
- splitting: speedup
string-lines
, addsplit*
(John Benediktsson) - system-info.macosx: various improvements (John Benediktsson)
- tools.completion: performance improvements (John Benediktsson)
- tools.crossref: performance improvements (John Benediktsson)
- ui.gadgets.table: improve hook behavior (Hugo Schmitt)
- ui.tools: Ctrl-Shift-F for "toggle fullscreen" (John Benediktsson)
- ui.tools.browser: support font resizing (John Benediktsson)
- ui.tools.listener: better exception handling (John Benediktsson)
- ui.tools.listener.completion: improved word completion (John Benediktsson)
- ui.tools.operations: better watch/reset behavior (John Benediktsson)
- unicode.breaks: speedup
>words
(John Benediktsson) - xml: performance improvements (John Benediktsson)
Any speed comparisons?
ReplyDelete@Unknown: I don't have any comparisons that are meaningful against other languages yet, but if you're curious I can share some benchmarks (lower is better):
ReplyDeleteAnt: 0.207 versus "took too long to finish"
Backtrack: 0.254 versus 0.954
Completion: 0.875 versus 1.221
CSV: 0.165 versus 0.456
Hashtables: 0.792 versus 2.512
JSON: 0.431 versus 1.038
Random: 0.208 versus 2.135
Regexp: 0.332 versus 0.432
Sum-file: 0.390 versus 0.516
UI panes: 0.996 versus 1.979 (second run 0.077 versus 0.317)
XML: 0.701 versus 1.416
I should mention the above benchmarks are 0.95 versus 0.94 on Mac OS X 10.8.
ReplyDeleteThese are more useful
ReplyDeleteIs there a road map for Factor to 1.0? The road map on concatenative seems to be a bit out of date.
ReplyDeleteHaven't updated the road map lately. We're presently very excited to merge some compiler improvements that are being contributed by Alex Vondrak.
ReplyDeleteIn addition to various ongoing library and performance improvements, I think we hope to add a package management tool that allows more contributions from the community. Also, it would be great to allow the use of more high-level concepts in the internal bootstrap process.
Some major UI improvements are scheduled and as always we'd love any contributions or direction to what itches need to be scratched first.
Best,