I’m trying to get started playing with factor.
So far, I’ve:
- downloaded the OSX disk image
- copied the factor directory into
$INSTALL/factor - started up the debugger by running
$INSTALL/factor/factor
Which seems to be running great.
Following the instructions for writing your first factor program, I noticed that scaffold-vocab generated files in my $INSTALL/factor/work directory. Which I can use for now, but in general, I like to keep a separate $INSTALL directory-tree and $CODE directory-tree.
So I’m trying to follow the instructions from the “Working with code outside of the Factor directory tree” documentation to add other directories to the path used to load code into the factor executable, but I’m not having much luck.
First, I tried to set a FACTOR_ROOTS environment variable:
% export FACTOR_ROOTS=.:$CODE/Factor:$INSTALL/factor
% $INSTALL/factor/factor
( scratchpad ) "work" resource-path .
"/usr/local/src/factor/work"
( scratchpad ) ^D
Then, I tried to create a ~/.factor-roots file
% echo . > ~/.factor-roots
% echo $CODE/Factor >> ~/.factor-roots
% echo $INSTALL/factor >> ~/.factor-roots
% $INSTALL/factor/factor
( scratchpad ) "work" resource-path .
"/usr/local/src/factor/work"
( scratchpad ) ^D
Then I checked to see if it should be ./.factor-roots instead:
% mv ~/.factor-roots .
% $INSTALL/factor/factor
( scratchpad ) "work" resource-path .
"/usr/local/src/factor/work"
( scratchpad ) ^D
Lastly, I tried adding it manually:
% $INSTALL/factor/factor
( scratchpad ) "." add-vocab-root
( scratchpad ) "$CODE/Factor" add-vocab-root ! no, I didn't actually use an environment variable here :)
( scratchpad ) "work" resource-path .
"/usr/local/src/factor/work"
( scratchpad ) ^D
It seems I’m missing something fundamental here.
How do I write code outside of the $INSTALL/factor directory-tree and use it in factor? How can I tell scaffold-vocab to build scaffolding in my $CODE/Factor directory?
Ok, I was able to work out what I was doing wrong thanks to the earnest help of slava and erg on #concatenative.
Simply put,
resource-pathis not a way to test your factor roots. Like the docs say it “resolve[s] a path relative to the Factor source code location.”A more effective test is simply
vocab-roots get, which will fetch the current list of vocab roots."/path/to/wherever" add-vocab-rootwill add/path/to/whereverto your list of vocab-roots, and allow you to do"/path/to/wherever" "project" scaffold-vocabso you can build scaffolding in the desired location.As erg said: