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

Reply via email to