Re: [Factor-talk] Managing many vocabularies
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
[Factor-talk] embedding factor
Hey guys, I am playing around with factor again, and getting some useful work done. I am trying to use factor embedded... Unfortunately, the function init_factor_from_args that is mentioned in the documentation is no longer in the source... There is a new function: start_standalone_factor in master.hpp. Has anyone used it successfully to embed factor ? Thanks, Naveen -- 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
Re: [Factor-talk] embedding factor
Also interested in this. Sent from my iPhone On Nov 30, 2012, at 3:25 PM, Naveen Garg naveen.g...@gmail.com wrote: Hey guys, I am playing around with factor again, and getting some useful work done. I am trying to use factor embedded... Unfortunately, the function init_factor_from_args that is mentioned in the documentation is no longer in the source... There is a new function: start_standalone_factor in master.hpp. Has anyone used it successfully to embed factor ? Thanks, Naveen -- 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 -- 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 -- 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
[Factor-talk] regexp words on string slices
Any reason slices are not allowed to be passed to regexp words like first-match ? I tried modifiying the word: : check-string ( string -- string ) ! Make this configurable ! dup string? [ String required throw ] unless ; dup dup string? swap regexp? or [ String required throw ] unless ; but doing a refresh-all doesn't change anything, running 0 4 foo slice R/ foo/ first-match still throws error string required For the curious, I am working on an optimized / space efficient version of the re-pair semi-static dictionary compression algorithm ( http://www.cbrc.jp/~rwan/en/restore.html) . I have it working in autohotkey, trying to port it to factor to see if I get any performance gains, and just for fun / learn factor. -- 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
Re: [Factor-talk] regexp words on string slices
Oops, I had a typo, i was checking for regexp? instead of slice? : check-string ( string -- string ) ! Make this configurable !dup string? [ String required throw ] unless ; dup dup string? swap slice? or [ String required throw ] unless ; 0 4 foo bar slice R/ foo/ first-match but now I get a memory access error: ... Naveen -- 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
Re: [Factor-talk] regexp words on string slices
Probably the restrictions to strings were a performance optimization...? It should be pretty easy to get the behavior you want: IN: scratchpad 0 4 foo slice R/ foo/ first-match . T{ slice { from 0 } { to 3 } { seq foo } } Using this diff makes it work, but causes the regexp benchmark to be 20-30% slower...: ```diff diff --git a/basis/regexp/compiler/compiler.factor b/basis/regexp/compiler/compi index a8b3c91..fb5fa4f 100644 --- a/basis/regexp/compiler/compiler.factor +++ b/basis/regexp/compiler/compiler.factor @@ -101,7 +101,7 @@ C: box box : transitionsquot ( transitions final-state? -- quot ) dup shortest? get and [ 2drop [ drop nip ] ] [ [ split-literals swap casequot ] dip backwards? get -'[ { fixnum string } declare _ _ _ step ] +'[ { fixnum sequence } declare _ _ _ step ] ] if ; : wordquot ( word dfa -- quot ) diff --git a/basis/regexp/regexp.factor b/basis/regexp/regexp.factor index 6070921..3e66785 100644 --- a/basis/regexp/regexp.factor +++ b/basis/regexp/regexp.factor @@ -29,7 +29,7 @@ M: lookbehind questionquot ! Returns ( index string -- ? ) : check-string ( string -- string ) ! Make this configurable -dup string? [ String required throw ] unless ; +dup sequence? [ String required throw ] unless ; : match-index-from ( i string regexp -- index/f ) ! This word is unsafe. It assumes that i is a fixnum @@ -166,7 +166,7 @@ DEFER: compile-next-match dup '[ dup \ next-initial-word = [ drop _ [ compile-regexp dfa def ] [ reverse-regexp? ] bi -'[ { array-capacity string regexp } declare _ _ next-match ] +'[ { array-capacity sequence regexp } declare _ _ next-match ] ( i string regexp -- start end string ) define-temp ] when ] change-next-match ; ``` On Fri, Nov 30, 2012 at 5:43 PM, Naveen Garg naveen.g...@gmail.com wrote: Any reason slices are not allowed to be passed to regexp words like first-match ? I tried modifiying the word: : check-string ( string -- string ) ! Make this configurable ! dup string? [ String required throw ] unless ; dup dup string? swap regexp? or [ String required throw ] unless ; but doing a refresh-all doesn't change anything, running 0 4 foo slice R/ foo/ first-match still throws error string required For the curious, I am working on an optimized / space efficient version of the re-pair semi-static dictionary compression algorithm ( http://www.cbrc.jp/~rwan/en/restore.html) . I have it working in autohotkey, trying to port it to factor to see if I get any performance gains, and just for fun / learn factor. -- 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: 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
Re: [Factor-talk] regexp words on string slices
Awesome. Thanks John. For my specific project, the current weaker link is memory usage compared to speed. On Fri, Nov 30, 2012 at 8:03 PM, John Benediktsson mrj...@gmail.com wrote: Probably the restrictions to strings were a performance optimization...? It should be pretty easy to get the behavior you want: IN: scratchpad 0 4 foo slice R/ foo/ first-match . T{ slice { from 0 } { to 3 } { seq foo } } Using this diff makes it work, but causes the regexp benchmark to be 20-30% slower...: -- 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