Excellent, thank you. On Thu, Jul 28, 2016 at 11:09 AM, Henry Rich <henryhr...@gmail.com> wrote:
> It's in m.c, j.h, ja.h. Look for fa, ra, fr, tpush, tpop, rat, rat1, > PROLOG, EPILOG. > > Henry Rich > > > On 7/28/2016 11:04 AM, Alex Shroyer wrote: > >> Is J's reference counting implementation contained within in m.h and m.c? >> I've followed some of the discussion regarding refcounting and its >> tradeoffs in the Kona language [1], and would like to grasp how it's done >> in J. >> >> Thanks, >> Alex >> >> [1]: https://github.com/kevinlawler/kona/issues/43 >> >> On Wed, Jul 27, 2016 at 1:38 PM, Roger Hui <rogerhui.can...@gmail.com> >> wrote: >> >> Reference counts are not done very well in what you call JE. That is the >>> simple and actual reason. If you know a better way and it pass rigorous >>> tests then I urge you to proceed. >>> >>> >>> On Wed, Jul 27, 2016 at 10:33 AM, Henry Rich <henryhr...@gmail.com> >>> wrote: >>> >>> The JE spends a lot of time twiddling usecounts and I am trying to >>>> understand why. >>>> >>>> One especially perplexing case is in jtbox(), which handles (<y). This >>>> short program does not do PROLOG/EPILOG. In the case of boxing with >>>> infinite rank, the code GA()s the result, Performs rat(w) on the input, >>>> stores w into the result, and returns. >>>> >>>> rat(w)??? Why? >>>> >>>> rat(w) is {ra(w); tpush(w)} >>>> >>>> But there's no EPILOG. Adding one to the usecount followed by later >>>> taking the 1 away at tpop() time isn't going to change when w is freed. >>>> Why the rat()? >>>> >>>> That's my question. >>>> >>>> My guess is that AC(w)>1 is used as a flag into the partitioning >>>> adverbs. >>>> Those adverbs seem to check to see whether AC(w) has become > 1, and if >>>> >>> so, >>> >>>> they avoid reusing the same buffer area. The rat() here means 'the >>>> >>> result >>> >>>> contains a reference to the input & the input must therefore not be >>>> >>> reused.' >>> >>>> Acting on that guess, I changed jtbox to use rat1() instead of rat(), >>>> >>> with >>> >>>> rat1() defined to twiddle the top-level usecount only. All testcases >>>> passed with this change. >>>> >>>> But you don't test programs to correctness, you analyze them to >>>> correctness. That's tough with something as large as the JE. Does >>>> anyone >>>> know of a DIFFERENT reason for the use of rat() in these and similar >>>> >>> verbs? >>> >>>> Henry >>>> ---------------------------------------------------------------------- >>>> For information about J forums see http://www.jsoftware.com/forums.htm >>>> >>> ---------------------------------------------------------------------- >>> For information about J forums see http://www.jsoftware.com/forums.htm >>> >>> ---------------------------------------------------------------------- >> For information about J forums see http://www.jsoftware.com/forums.htm >> > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm