Factor features

The Factor language:

  • Stack-based
  • Dynamic typing
  • Extensible syntax
  • Powerful collections library
  • Higher-order functions
  • Lisp-style macros
  • Object system with inheritance, generic functions, predicate dispatch and mixins
  • Homoiconic syntax
  • Error handling with restarts
  • Continuations

The Factor implementation:

  • Automatic memory management with generational garbage collector
  • Optimizing compiler for word definitions
  • Non-optimizing compiler for top-level forms and interactive evaluation
  • Stand-alone application deployment on all platforms
  • Unicode 5.0 support - 21-bit strings, case conversion, character classes, etc
  • Unicode I/O with a variety of common encodings
  • Advanced I/O features: process launching, memory mapped files, file system change monitors
  • Easy-to-use C library interface
  • Bindings for OpenGL, X11, Cocoa, Win32, Windows COM

The Factor environment:

  • Graphical read-eval-print loop with object editing inspector
  • Single-stepping debugger which can travel backwards in time
  • Extensive documentation
  • Definition cross-referencing
  • Profiler
  • Integration with popular editors: jEdit, VIM, Emacs, TextMate, ...

The Factor library:

  • Factor UI
  • Calendar support
  • Relational database access library with database-independent O/R mapping; supports PostgreSQL and SQLite
  • HTTP client, server
  • SMTP client
  • Binary object serialization
  • Powerful concurrency abstractions: distributed message passing, channels, promises, futures, locks, semaphores, exchangers
  • Pattern matching
  • Lazy lists
  • Parser combinators
  • Cryptography and advanced math routines
  • Unit conversion
  • XML parser, XML-RPC client and server
  • Factory X11 window manager
  • Graphics demos: Wolfram automata, boids, L-systems, context-free design grammars, ...
  • Tetris and Space Invaders games
  • Bindings for Cairo, PostgreSQL, SQLite, OpenSSL, Cryptlib, OpenLDAP, ...
  • Various smaller examples, such as a raytracer, mandelbrot fractal viewer, and IRC bot.

Development goals

Factor development continues at a steady pace; the goal is to release Factor 1.0 some time in 2008.

Main features which will be implemented for the 1.0 release:

  • Multiple dispatch
  • Incremental garbage collection
  • Drastically reduce compile time
  • Continue improving existing libraries, such as databases, multimedia, networking, web, etc
  • Full Unicode support, Unicode text display in UI (in progress)
  • Better UI development tools
  • Get the UI running on Windows CE
  • Add support for Windows 64-bit and Mac OS X Intel 64-bit
  • Use kqueue (BSD, Mac OS X), epoll (Linux) for high-performance I/O

Work on Factor 2.0 will begin when 1.0 is released:

  • Fix or remove language features which are flawed in hindsight
  • Native threading with high-level abstractions, such as actors or STM
  • Port to UltraSPARC and test on Sun's multithreaded hardware
  • Cross compilation and deployment of native libraries and executables
  • Improve Factor's embeddability in other programs
  • Structure editor
  • WYSIWYG help markup editor
  • Best interactive development environment of any programming language