Thursday, August 16, 2012

Factor 0.95 now available

"The reports of my death are greatly exaggerated" - Mark Twain

I'm very pleased to announce the release of Factor 0.95!

OS/CPUWindowsMac OS XLinux

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 && cd factor && ./build-support/ 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

Improved Libraries:


Unknown said...

Any speed comparisons?

mrjbq7 said...

@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):

Ant: 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

mrjbq7 said...

I should mention the above benchmarks are 0.95 versus 0.94 on Mac OS X 10.8.

Unknown said...

These are more useful

Unknown said...

Is there a road map for Factor to 1.0? The road map on concatenative seems to be a bit out of date.

mrjbq7 said...

Haven't updated the road map lately. We're presently very excited to merge some compiler improvements that are being contributed by Alex Vondrak.

In 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.