Alex has good advice.
In addition, if you have a circularity inside a single vocab, the DEFER:
mechanism allows something like this to be resolved properly:
DEFER: bar
: foo ( -- x ) bar ;
: bar ( -- x ) 12 ;
Usually circularities between vocabs can be resolved by using a central
vocabulary or a hierarchy to place the word in a commonly used location.
If you are having difficulties still, you can use a HOOK: to define a word
that dispatches based on the value of a namespace variable. For more
details, see:
http://docs.factorcode.org/content/word-HOOK__colon__,syntax.html
Best,
John.
On Tue, Nov 27, 2012 at 8:09 PM, Alexander J. Vondrak <
[email protected]> wrote:
> Finding circularities: maybe something like
> https://gist.github.com/4158963?
> Though it's not the smartest thing around (just because there's a vocab
> circularity doesn't mean there will necessarily be an issue with a word
> definition).
>
> Avoiding circularities is really an engineering thing...
>
> Fixing circularities is trickier, and it'll generally vary case-by-case.
> Check
> out http://docs.factorcode.org/content/article-deferred.html, perhaps?
>
> Good luck,
> --Alex Vondrak
>
> ________________________________________
> From: Leon Konings [[email protected]]
> Sent: Saturday, November 24, 2012 8:29 AM
> To: [email protected]
> Subject: Re: [Factor-talk] Managing many vocabularies
>
> Hi Alexander,
>
> Thank you for your very long answer.
>
> You where guessing right about the circular dependencies. Because
> there are so many vocabularies, problems like that happen rather often.
>
> I am really looking for better and faster ways to find these, and a
> way of working that make it less likely that they happen.
>
> Best regards,
> Leon
>
>
> Quoting "Alexander J. Vondrak" <[email protected]>:
>
> > I'm not really sure if there was a question in there...
> >
> >> Loading all the vocabularies, which all load many other vocabularies,
> >> is not easy to do.
> >
> > If you're just sitting down at your editor, typing vocab names into the
> > `USING:` line, then yeah, it's going to be difficult to know exactly
> which
> > vocabs you're supposed to specify. That's why you use the listener.
> >
> > Say I'm working on a file, factor/work/blah/blah.factor. While I'm
> jotting
> > down some code, I either don't know what I need in the `USING:` or
> forget to
> > put something in there.
> >
> > USING: ; ! ???
> >
> > "Blah" print
> >
> >> From the listener, I type `USE: blah`, and I get a helpful error
> message.
> >
> > IN: scratchpad USE: blah
> > Loading resource:work/blah/blah.factor
> > 1: USE: blah
> > ^
> > resource:work/blah/blah.factor
> >
> > 1: "Blah" print
> > ^
> > No word named “print” found in current vocabulary search path
> >
> > The following restarts are available:
> >
> > :1 Use the io vocabulary
> > :2 Defer word in current vocabulary
> > :3 Load resource:work/blah/blah.factor again
> >
> > Type :help for debugging help.
> >
> > It gives me several options to recover from this error, including a
> > suggestion
> > for which vocab to load to find the word `print` (note that this
> > doesn't always
> > work, if Factor can't find a particular word name in the current
> > search path).
> > In this case, I can type `:1` to use the `io` vocab.
> >
> > IN: scratchpad :1
> > resource:work/blah/blah.factor:1: Note:
> > Added "io" vocabulary to search path
> >
> > Restarts were invoked adding vocabularies to the search path.
> > To avoid doing this in the future, add the following forms
> > at the top of the source file:
> >
> > USING: io ;
> >
> > Also, take a look at
> > http://docs.factorcode.org/content/article-images.html and
> > http://docs.factorcode.org/content/word-auto-use__que__%2Cparser.html
> >
> >> I often have to solve problems with interdependencies. It is not
> >> easy to find
> >> the cause of these problems.
> >
> > What sort of problems? And what sort of interdependencies? Like vocabs
> > depending on vocabs? I struggle to think of a problem with that,
> because the
> > chain of dependencies shouldn't be an issue, unless there's a cycle.
> E.g.,
> >
> > ! In a.factor
> > USING: b ;
> > IN: a
> > : a-word ( -- ) b-word ;
> >
> > ! In b.factor
> > USING: io ;
> > IN: b
> > : b-word ( -- ) "Called b-word" print ;
> >
> > ! At the listener
> > IN: scratchpad USE: a
> > Loading resource:work/a/a.factor
> > Loading resource:work/b/b.factor
> > IN: scratchpad a-word
> > Called b-word
> >
> > Notice that a.factor doesn't need to have `USING: io`, even though
> b.factor
> > does. So you don't need to think about anything beyond a file's
> immediate
> > dependencies. I guess there would be an issue if you had a cyclic
> > dependency,
> > which needs to be resolved manually (or, more practically speaking,
> removed):
> >
> > ! In a.factor
> > USING: b io ;
> > IN: a
> >
> > : a-word1 ( -- ) b-word ;
> >
> > : a-word2 ( -- ) "Called a-word2" print ;
> >
> > ! In b.factor
> > USING: a ;
> >
> > : b-word ( -- ) a-word2 ;
> >
> > ! At the listener
> > IN: scratchpad USE: a
> > Loading resource:work/a/a.factor
> > Loading resource:work/b/b.factor
> > 1: USE: a
> > ^
> > resource:work/a/a.factor
> >
> > 1: USING: b io ;
> > ^
> > resource:work/b/b.factor
> >
> > 4: : b-word ( -- ) a-word2 ;
> > ^
> > No word named “a-word2” found in current vocabulary search path
> >
> > The following restarts are available:
> >
> > :1 Defer word in current vocabulary
> > :2 Load resource:work/b/b.factor again
> > :3 Load resource:work/a/a.factor again
> >
> > Type :help for debugging help.
> > IN: scratchpad :3
> > Loading resource:work/a/a.factor
> > Loading resource:work/b/b.factor
> > Loading resource:work/a/a.factor
> > IN: scratchpad a-word1
> > Called a-word2
> >
> > Maybe by "interdependencies" you mean that vocabs can step on each
> others'
> > toes? If two vocabs define different words with the same name, there
> will be
> > an ambiguity. To resolve, see
> > http://docs.factorcode.org/content/word-FROM__colon__,syntax.html
> >
> >> In the developer tools I saw some interesting words for working with
> >> vocabularies. There might be a solution to my problem, if I use these
> >> tools, but I do not know where to start.
> >
> > Which interesting words? Sorry, I'm running out of psychic abilities.
> :)
> >
> > If you aren't sure what certain words do, it's helpful to browse
> > through their
> > documentation. Even if a word isn't quite what you want, there are
> usually
> > related things you can click on, looking for related words until you
> stumble
> > onto something useful.
> >
> > Hope any of that helps,
> > --Alex Vondrak
> >
> ------------------------------------------------------------------------------
> > Monitor your physical, virtual and cloud infrastructure from a single
> > web console. Get in-depth insight into apps, servers, databases, vmware,
> > SAP, cloud infrastructure, etc. Download 30-day Free Trial.
> > Pricing starts from $795 for 25 servers or applications!
> > http://p.sf.net/sfu/zoho_dev2dev_nov
> > _______________________________________________
> > Factor-talk mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/factor-talk
> >
>
>
>
>
>
> ------------------------------------------------------------------------------
> Monitor your physical, virtual and cloud infrastructure from a single
> web console. Get in-depth insight into apps, servers, databases, vmware,
> SAP, cloud infrastructure, etc. Download 30-day Free Trial.
> Pricing starts from $795 for 25 servers or applications!
> http://p.sf.net/sfu/zoho_dev2dev_nov
> _______________________________________________
> Factor-talk mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/factor-talk
>
>
> ------------------------------------------------------------------------------
> Keep yourself connected to Go Parallel:
> INSIGHTS What's next for parallel hardware, programming and related areas?
> Interviews and blogs by thought leaders keep you ahead of the curve.
> http://goparallel.sourceforge.net
> _______________________________________________
> Factor-talk mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/factor-talk
>
------------------------------------------------------------------------------
Keep yourself connected to Go Parallel:
INSIGHTS What's next for parallel hardware, programming and related areas?
Interviews and blogs by thought leaders keep you ahead of the curve.
http://goparallel.sourceforge.net
_______________________________________________
Factor-talk mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/factor-talk