cwd, cd, and pathname changes
The old way to change the current working directory was to call thecd
word. This is now obsolete, and code that does this won't get the expected behavior anymore. A new word, normalize-pathname
, is called before every top level word using paths and adjusts the pathname based on a new dynamic variable called current-directory
.To get pathnames relative to the Factor directory you used to use the words
?resource-path
and resource-path
. The code "resource:foo.txt" file-contents
now does what "foo.txt" resource-path file-contents
used to do, so user code should avoid calling resource-path
on path literals.Also, there's a new word called
with-directory ( path quot -- )
that calls your quotation with a new current working directory and restores the old one when done. All of words that deal with reading and writing files have been updated to respect this change.Using the
cd
word is still useful sometimes, like when calling with-fork ( parent-quot child-quot -- )
when you want the child process to inherit the current-directory variable as its current directory.Pathnames in Factor are still strings, but may be either strings or pathname objects in the future.
IO Launcher Priorities
Since some Factor developers still use Windows XP on single-core laptops from 2004, tools.deploy now sets the child process to have a lower priority so that the system is still usable when deploying images.Example:
<process>
{ "cmd" "/c" "dir" "/S" "\\" } >>command
+low-priority+ >>priority
run-process
BSD Port
Factor now supports FreeBSD, NetBSD, and OpenBSD 32 and 64bit versions. Please inform us of any bugs you find. Binary releases should happen within a week.Fixing the Solaris port is next up, followed by the ARM Linux and WinCE port.
Random number generator protocol
Because we want to generate secure random numbers for the new web framework, the Mersenne twister algorithm just won't do as Factor's sole pseudo random number generator. So until we implement a Yarrow prng, the default prng for cryptography is /dev/random on Unix systems and theCryptGenRandom
call on Windows. Does anyone have a suggestion as to which provider to use? I'm using PROV_RSA_AES right now, but I just chose it randomly from the list.The random protocol is really simple.
GENERIC: seed-random ( tuple seed -- )There are two ways to get randomness -- either 32 bits at a time, or several bytes at a time. The cool thing is that you only have to put a method on one of these words, and the other one is taken care of by the default method! Of course, if you don't define either, the callstack will overflow. You can define methods on both for efficiency if it makes sense.
GENERIC: random-32* ( tuple -- r )
GENERIC: random-bytes* ( tuple n -- bytes )
M: object random-bytes* ( tuple n -- byte-array )
[ drop random-32* ] with map >c-uint-array ;
M: object random-32* ( tuple -- n )
4 random-bytes* le> ;