I'm very pleased to announce the release of Factor 0.97!
OS/CPU Windows Mac OS X Linux x86 x86-64 Source code: 0.97
This release is brought to you with over 1,400 commits by the following individuals:
Alex Vondrak, Andrew Pennebaker, Benjamin Pollack, Björn Lindqvist, CW Alston, Doug Coleman, Erik Charlebois, Fred Alger, Iskander Sitdikov, John Benediktsson, Jon Harper, Loryn Jenkins, Paul Woolcock, Roc King, Samuel Tardieu, Steven Stewart-Gallus, and @Profpatsch
Besides some bug fixes and library improvements, I want to highlight the following changes:
- Support for more color spaces including LAB, LCH, LUV, RYB, xyY, XYZ, and YUV
- Support for SSL on windows
- Some new checksum implementations and performance improvements
- Cross-platform C library finder
- Client for IMAP protocol
- Support for MessagePack encoding and decoding
- Support for uuencoding and uudecoding
- Support for terminfo database files
- Support for tzinfo files
- Support for in-place sorting (using Quicksort)
- Bindings for ZeroMQ and Python
- Runner for Applescript (including definition support)
- Performance improvement to
printf
and support forvprintf
- Support saving images in GTK, Cocoa, and Windows backends
- Generative Modeling Language
- Lots of documentation added to the compiler
- Many, many improvements to the FUEL emacs mode
Some possible backwards compatibility issues:
- Fixed
mask?
in math.bitwise to be more correct - Fixed bias in Mersenne Twister random number generator
- Better support for shebang (no longer need a space after
#!
) io-error
now lives in the libc vocabulary- sender stubs in cocoa.messages now named by method signature
filter
now allocates length ofseq
, notexemplar
.- Removed
make-assoc
in favor of explicitget
's.
Some of the improvements to FUEL, Factor's emacs mode:
- Modernize for emacs 24.3
- Prepare FUEL to be uploaded to MELPA
- Change font locking and syntax highlighting
- Make fuel-help work for vocabularies also
- New minor mode: fuel-autohelp-mode
- Fix word help to use correct vocabulary using list
- Variable controlling whether fuel-mode is loaded automatically
- Fixes to table rendering
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:
- alien.libraries.finder: cross-platform C library finder
- checksums.fletcher: Fletcher in 16/32/64-bit
- checksums.murmur: MurmurHash3 in 32-bit
- checksums.superfast: SuperFastHash
- checksums.xxhash: xxHash in 32-bit
- cocoa.apple-script: runner for AppleScript
- colors.distances: CIE76, CIE94, CIEDE2000, and CMC l:c color differences
- colors.lab: support for CIE 1976 LAB colors
- colors.lch: support for CIELCH colors
- colors.luv: support for CIE 1976 LUV colors
- colors.ryb: support for RYB colors
- colors.xyy: support for CIE 1931 xyY colors
- colors.xyz: support for CIE 1931 XYZ colors
- colors.yuv: support for YUV colors
- compression.snappy: bindings to snappy compression library
- crypto.aes: lookup-table AES implementation
- cuesheet: parser for CUE files
- curl: bindings for libcurl
- editors.atom: support for Atom text editor
- fftw: bindings to FFTW library
- gml: support for Generative Modeling Language
- grouping.extras: helpful words
- html.entities: escape and unescape HTML5 entities
- imap: client for IMAP servers
- io.encodings.utf7: support for UTF7 encodings
- io.streams.ansi: support for ANSI color streams
- magic: bindings to libmagic
- marvel: support for Marvel.com API
- math.combinators: some convenience words
- matrices.laplace: adding Laplace expansion
- math.unicode: implement unicode math symbols
- pcre: bindings for PCRE
- python: bindings for Python
- random.rdrand: random number generator using
RDRAND
instruction - rosetta-code.josephus-problem: solved
- rosetta-code.metronome: solved
- sorting.heap: implement Heapsort
- sorting.quick: implement Quicksort
- spotlight: adding Spotlight search wrapper for Mac OS X
- terminfo: parser for terminfo database files
- tzinfo: parser for timezone files
- tools.dns.public: adding well-known public DNS servers
- uu: support for uuencoding and uudecoding
- yaml: reading and writing the YAML format
- youtube: downloader for youtube.com
- wikipedia: support historical events and article printing
- windows.ntdll: process listing on Windows
- windows.winmm: to play MP3 files
- zeromq: bindings for ZeroMQ
Improved libraries:
- arrays.shaped: iteration with indices, mapping operations
- bson.reader: support reading sequence of BSON objects from a file
- calendar.format: fix timestamp parsing without a timezone (fixes #861)
- calendar.threads: support
M\ timestamp sleep-until
- circular: adding
circular-loop
- color-picker: show hex value of color
- combinators.extras: more words
- concurrency.combinators: adding parallel versions of cartesian-{map,each}
- destructors: faster
dispose-each
- dlists: adding
push-before
andpush-sorted
- dns: support custom DNS server lookups
- environment: adding
with-os-env
for using temporary environment variables - formatting: performance improvements, added
vprintf
for runtime formatting - google.translate: adding
translate-tts
- graphviz: miscellaneous improvements by @ajvondrak
- grouping.extras: more words
- hash-sets: minor cleanup
- hashtables: minor cleanup
- help.html: use tools.completions for searching
- html.parser.analyzer: make
find-between*
work on nested tags - html.parser.printer: better
html-text.
- http.client: versions of
http-get
and friends that don't check response code - infix: adding
INFIX::
word definitions - interpolate: adding generalized numbered string interpolation
- io.binary: faster
le>
andsigned-be>
andsigned>
- io.binary.fast: generic
be>
andle>
that try to be fast - io.directories: adding
with-resource-directory
- io.encodings.string: faster
decode
andencode
forascii
andutf8
- io.sockets.secure.openssl: fix subject name checks
- io.streams.byte-array: performance improvements
- io.streams.random: performance improvements
- io.streams.string: performance improvements
- ip-parser: adding
ntoa
andaton
- math.bitwise: adding
bit-length
- math.combinatorics: performance improvements,
k-permutations
- math.extras: more words
- math.factorials: adding
factorials
- math.functions: implement
ldexp
- math.matrices: performance improvements
- math.ranges: implement
sum
onrange
objects - math.statistics: fix out-of-bounds in
quantiles
, more words - math.text.english: support ratio, float, complex
- mirrors: strings can be
inspected-sequence
(fixes #857) - openal.examples: adding
play-waveform
andplay-sine
- pack: support numbered format strings (e.g.,
"4ci"
) - random: performance improvements
- random.mersenne-twister: bug fixes
- redis: adding hash commands, upgraded to modern protocol
- semantic-versioning: support for Semantic Versioning 2.0.0
- sequences: implement
sum
oniota-tuple
objects - sequences.extras: more words
- sequences.product: performance improvements
- sequences.windowed: performance improvements
- sets.extras: more words
- sorting.insertion: performance improvements
- spelling: minor fixes and performance improvements
- spider: ignore non-html files
- system-info: implement
system-report.
on Linux. - tools.deploy.config: specific
deploy-directory
- tools.dns: adding
dns-host
to lookup from a specific host - tools.test: allow testing from command-line
- twitter: updates
- units.imperial: more units
- unix.users: add utility word to find a user's home directory
- unix.utmpx: support on Linux and fixes on Mac OS X
- webbrowser: support
open-file
onpathname
objects
I'm trying to use slides on Windows 7. The font background is black, which makes the characters impossible to read.
ReplyDeleteI've tried both Zed Shaws slides and Slavas google-tech-talk.
I find it very hard to spot the error and would appreciate some hints.
It's bad that factor hasn't got many examples. I remembered reading source code of one word to understand second word. I think it was about generic words like GENERIC:.
ReplyDeleteI've tried 0.97 and "generative modeling language" - it's sounds nice. I guess I can build some 3d things (like in blender3d but using a code). Well, I don't know how to start. I have tried `gml-listener` and pasted some code... and I guess it worked because I don't have an error but "empty" line. And is it suppose to load (USE: gml) so much time (on win 8.1 x64, 4gb ram, celeron n2840 @2.16Ghz)?
Well, I wish there were many more examples.
ps. on my old pc (xp, 32b) 0.97 doesn't work
Hi @Dariusz,
ReplyDeleteThanks for the comment. The "gml" vocabulary is a neat experiment in 3d modeling, but still an experiment.
This blog has over 225 posts, many of them simple and some more complex examples.
And Factor 0.97 has over 250,000 lines of code (not counting tests and documentation). Not counting a number of projects people have built with Factor that are available on GitHub and other locations.
We would benefit from improving the documentation, and making more code examples, but I wouldn't say that Factor hasn't got many examples...
Thanks!