Question

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?

Was it helpful?

Solution

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-path is 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-root will add /path/to/wherever to your list of vocab-roots, and allow you to do "/path/to/wherever" "project" scaffold-vocab so you can build scaffolding in the desired location.

As erg said:

i usually make another word, like
: scaffold-games ( vocab -- ) [ "/home/erg/games" ] dip scaffold-vocab ; "minesweeper" scaffold-games

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top