After two months of development, Factor 0.93 is now available for download from the Factor website. A big thanks to all the contributors, testers and users. This release would not be possible without your help. A summary of the most important changes follows:
Incompatible changes:
- Factor no longer supports NetBSD, due to limitations in that operating system. (Slava Pestov)
- sets, hash-sets, bit-sets: these vocabularies have been redesigned around a new generic protocol for sets (Daniel Ehrenberg)
- Strings can no longer be used to refer to C types in FFI calls; you must use C type words instead. Also, ABI specifiers are now symbols rather than strings. So for example, the following code will no longer work:
: my-callback ( -- callback ) "int" { "int" "int" } "cdecl" [ + ] alien-callback ;
you must now write:: my-callback ( -- callback ) int { int int } cdecl [ + ] alien-callback ;
(Joe Groff) - The behavior of string types has changed. The
char*
C type is now just a bare pointer; to get the automatic conversion to and from Factor strings, use thec-string
type. See the documentation for details. (Joe Groff) - FFI function return values which are pointers to structs are now boxed in a struct class, instead of returning a bare alien. This means that many
memory>struct
calls can be removed. If the return value is actually a pointer to an array of structs, use specialized arrays as before. (Joe Groff) - C-ENUM: now takes an additional parameter which is either the name of a new C type to define, or
f
. This type is aliased toint
. (Erik Charlebois) - The stack checker now supports row polymorphic stack effects, for improved error checking. See the documentation for details. (Joe Groff)
New features:
- Co-operative threads now use efficient context-switching primitives instead of copying stacks with continuations (Slava Pestov)
- Added final class declarations, to prohibit classes from being subclassed. This enables a few compiler optimizations (Slava Pestov)
- Added platform support metadata for vocabularies. Vocabulary directories can now contain a
platforms.txt
file listing operating system names which they can be loaded under. (Slava Pestov) - The deploy tool can now deploy native libraries and resource files, and supports custom icons. (Joe Groff)
- Joint behavior of vocabularies - the new require-when word can be used to express that a vocabulary should be loaded if two existing vocabularies have been loaded (Daniel Ehrenberg)
- Callstack overflow is now caught and reported on all platforms except for Windows and OpenBSD. (Slava Pestov)
- The prettyprinter now has some limits set by default. This prevents out of memory errors when printing large structures, such as the global namespace. Use the without-limits combinator to disable limits. (Slava Pestov)
- Added fastcall and thiscall ABIs on x86-32 (Joe Groff)
- The build farm's version release process is now more automated (Slava Pestov)
- delegate: add BROADCAST: syntax, which delegates a generic word with no outputs to an array of multiple delegates. (Joe Groff)
- game.input: X11 support. (William Schlieper)
- gpu: geometry shader support. (Joe Groff)
- opengl: OpenGL 4.0 support. (Joe Groff)
- bit.ly: Factor interface to the bit.ly URL shortening service. (Slava Pestov)
- chipmunk: binding for Chipmunk 2D physics library. (Erik Charlebois)
- cuda: binding to NVidia's CUDA API for GPU computing. (Doug Coleman, Joe Groff)
- cursors: experimental library for iterating over collections, inspired by STL iterators. (Joe Groff)
- elf: parsing ELF binaries. The elf.nm vocabulary is a demo which prints all symbols in an ELF binary. (Erik Charlebois)
- images.pbm, images.pgm, images.ppm: libraries for loading PBM, PGM and PPM images (Erik Charlebois)
- macho: parsing Mach-O binaries. (Erik Charlebois)
- opencl: binding for the OpenCL standard interface for GPU computing. (Erik Charlebois)
- path-finding: implementation of A* and BFS path finding algorithms. (Samuel Tardieu)
- windows.ddk: binding for Windows hardware abstraction layer. (Erik Charlebois)