Hi John and Alexander, Thanks for the very useful advice.
I prefer not to use DEFER: (pun intended), but if it turns out to be the best solution I will. Best regards, Leon Konings Quoting John Benediktsson <mrj...@gmail.com>: > 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 < > ajvond...@csupomona.edu> 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 [fac...@koningssoftware.com] >> Sent: Saturday, November 24, 2012 8:29 AM >> To: factor-talk@lists.sourceforge.net >> 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" <ajvond...@csupomona.edu>: >> >> > 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 >> > Factor-talk@lists.sourceforge.net >> > 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 >> Factor-talk@lists.sourceforge.net >> 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 >> Factor-talk@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/factor-talk >> > ------------------------------------------------------------------------------ Keep yourself connected to Go Parallel: TUNE You got it built. Now make it sing. Tune shows you how. http://goparallel.sourceforge.net _______________________________________________ Factor-talk mailing list Factor-talk@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/factor-talk