Raul,
Are you using gdb?  If so, how do I break at execution of "1/:1"?  I
tried "break main" but that didn't help at all...got all entangled in
the initialization of the interpreter.
Thanks,
Vijay.

On Sun, Apr 12, 2015 at 10:56 AM, Raul Miller <rauldmil...@gmail.com> wrote:
> (This is a stream of thought semi-narrative about looking into this 1/:1 bug.)
>
> A trick, though, for using a debugger, is figuring out how to get
> debugging information into the build.
>
> In my case, I needed to add the -g command line option. (It turns out
> that clang uses a lot of the same command line options as gcc, along
> with a lot of the same underlying file formats - DWARF in this case.
> Which, as near as I can tell, is a pun on the earlier ELF file format
> as much as anything else.)
>
> Anyways, once I managed to get the stuff compiled with -g (I think
> adding it to the CFLAGS definition in makefile was the important
> step), I had a debugging build where I couldn't inspect any of the
> variables. Because optimizations confuse the debugger.
>
> So the next thing to do was to change the definition of COMP (on line
> 43 of bin/jconfig) to use -O0 instead of -O3. And, since COMP is
> really just CFLAGS (or was before I changed the makefile), I probably
> should have put the -g on this line also.
>
> So that was fun...
>
> Anyways, with that out of the way, I could build and run a working
> jconsole and run it under the debugger and have the debugger be
> somewhat intelligible.
>
> And after a bit of poking around, I found that jtgr2 in vgsort.c is
> the top level implementation for dyadic /: and that in the 1/:1 case
> it's calling jtsortb (defined further down in the file).
>
> So apparently we're talking about a bug in jtsortb().
>
> But looking at how the system behaves, jtsortb() only seems to be
> called when sorting rank 0 boolean scalars. But jtsortb seems to be
> way more complicated than it would need to be, for that purpose.
>
> Still, if jtsortb() is special case code, I should be able to just disable
> it and have the j interpreter use the more general jtsortc()
> implementation for this case.  (Yeah, I need to better understand what
> I'm doing before I propose any changes, but for now, I'm just trying
> to get myself oriented).
>
> Anyways, avoiding the call to jsortb() turns out to be an easy change.
> But it also turns out that the interpreter behaves exactly the same
> way (same bug even) when 1/:1 gets handled by jtsortc.
>
> So I guess I really ought to study the code enough to understand
> the underlying assumptions of the code so I can fix this without
> breaking something else.
>
> (Oh well, at least this is a distraction from trying to figure out how to
> do a meaningful opengl lab that somehow is relevant across a variety
> of somewhat semi-incompatible opengl versions. ...)
>
> Anyways... at the moment, in jtsortc, it's looking like the problem is
> that n is 0 at this line:
>
> https://github.com/openj/core/blob/master/vgsort.c#L63
>
>   DO(n, ++yv[*wv++];);
>
> Here, wv is a pointer to the list of values being sorted, and yv is
> the tallies of how many we have seen of each of them, and n is the
> number of values we need to scan through. So n *should* be 1. But it's
> not - it's zero.
>
> Meanwhile, n is defined as a part of the SF macro which is used to
> provide the common elements of jtsortc and jtsortb. So that's probably
> why we're seeing the same bug in both cases.
>
> Fortunately, the definition of SF is simple (and it's only relevant in
> this file):
>
> https://github.com/openj/core/blob/master/vgsort.c#L10
>
> #define SF(f)         A f(J jt,I m,I c,I n,A w)
>
> The value of n is just being passed in literally from jtgr2() where it
> is defined as n=s[f];
>
> https://github.com/openj/core/blob/master/vgsort.c#L166
>
> Here, s is the shape of the right argument and f is the frame of the
> right argument (0 in this case). So the problem is that the shape is
> empty for this case, and we're using a binsort. We should expect to
> see the same problem if we try to sort a single character:
>
>    a.i./:~'a'
> 0
>
> Perhaps in older versions of J, we always had a 1 in the shape for
> rank 0 nouns?
>
> So... anyways... to fix this, the definition of n needs to change. And
> figuring out the right change for that would mean thinking through
> what sort needs to do with various integrated rank support cases.
>
> Or, jtsortb/jtsortc need to ignore n and get the number of elements to
> sort using some other approach. If we went this way, we could probably
> assume that the rank we are dealing with is no greater than 1 and that
> we are only dealing with "booleans" (I dislike that name because I am
> of the opinion that non-negative integers are the proper "boolean"
> type - this two valued type should perhaps be called "truthiness" or
> "logicality" ... but that's not a change I am going to make.) This
> would be a minor inefficiency but it would not be the first.
>
> But... anyways... that's the problem.
>
> Thanks,
>
> --
> Raul
>
>
>
>
>
>
>
> Thanks,
>
> --
> Raul
>
> On Sat, Apr 11, 2015 at 10:12 PM, Vijay Lulla <vijaylu...@gmail.com> wrote:
>> The readme.txt in the jgplsrc folder (which is what the tar zipped
>> archive unzips to) contains instructions for how to build and test the
>> source code.  It is slightly different than most of the open source
>> projects but it shouldn't be much difficult if you're familiar with
>> configure/make/install routine used in linux land.  Also, each c file
>> has one line (4th line in most cases) describing what is in that c
>> file.  I've extracted those and put them in a file named 00FILEMAPPING
>> (strangely named to always keep it at the top!) and I just consult it
>> to see which file I should be looking at for implementation of
>> vocabulary items.
>>
>> I'm not entirely sure but I think this strange issue of
>> grading/sorting literals might be connected to list/atom dichotomy for
>> a single item list.  This dichotomy is fine for numbers but unsuitable
>> for literals.  I just cannot think of a situation where a single item
>> literal can be anything but a list.  Am I missing something obvious?
>>
>> On Sat, Apr 11, 2015 at 2:59 PM, Henry Rich <henryhr...@nc.rr.com> wrote:
>>> Interesting.  There seems to be a retrogression in J8.03, which included a
>>> new interpreter build.
>>>
>>> It gets even weirder:
>>>
>>> In J8.03 32-bit,
>>>
>>>    /:~'p'
>>>
>>>    p =. 'p'
>>>
>>>    /:~'p'
>>>
>>>    /:~p
>>> p
>>>    /:~'p'
>>> p
>>>
>>> Initialization error?
>>>
>>> If Jsoftware would organize a way to modify, build, & test the official J
>>> version, many of us would work on fixing problems like this.
>>>
>>> Henry Rich
>>>
>>>
>>> On 4/11/2015 2:12 PM, EelVex wrote:
>>>>
>>>> What is more alarming, imo, is that:
>>>>
>>>> (in both j701 and j801)
>>>>     /:~2
>>>> 2
>>>>     /:~'p'
>>>> p
>>>>     /:~'pa'
>>>> ap
>>>>     /:~'p'
>>>>       NB. empty result!
>>>>
>>>>
>>>>
>>>> On Sat, Apr 11, 2015 at 9:00 PM, Henry Rich <henryhr...@nc.rr.com> wrote:
>>>>
>>>>> Don't expect this to be fixed in J804.  There are many small interpreter
>>>>> bugs and no organized effort to repair them AFAIK.
>>>>>
>>>>> This bug is similar to the previously-noted bug #86 which was that the
>>>>> result was atomic rather than a list for equal Boolean values.
>>>>>
>>>>> On my system, which is J32, /:~1 is 0.
>>>>>
>>>>> Henry Rich
>>>>>
>>>>>
>>>>> On 4/11/2015 1:54 PM, robert therriault wrote:
>>>>>
>>>>>> So the fix may already be in process.
>>>>>>
>>>>>> The versions that I have found with the issue are:
>>>>>>
>>>>>> j602/2008-03-03/16:45 which is not surprising since it is not a current
>>>>>> version and
>>>>>>
>>>>>> j803/2014-10-19-11:11:11 in the jhs environment on my mac, which is
>>>>>> certainly more current, although the whisperings suggest j804 may not be
>>>>>> far off.
>>>>>>
>>>>>> Cheers, bob
>>>>>>
>>>>>> On Apr 11, 2015, at 10:29 AM, 'Pascal Jasmin' via Programming <
>>>>>> programm...@jsoftware.com> wrote:
>>>>>>
>>>>>>   actually, in Jqt 8.03
>>>>>>>
>>>>>>>
>>>>>>>    1 /: 1
>>>>>>> 1
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> ----- Original Message -----
>>>>>>> From: robert therriault <bobtherria...@mac.com>
>>>>>>> To: Programming forum <programm...@jsoftware.com>
>>>>>>> Cc:
>>>>>>> Sent: Saturday, April 11, 2015 1:16 PM
>>>>>>> Subject: [Jprogramming] Results of 1/:1
>>>>>>>
>>>>>>> Just spotted a question on stack overflow from Zhe Hu about the
>>>>>>> behaviour of 1/:1
>>>>>>> http://stackoverflow.com/questions/29580291/j-sort-
>>>>>>> function-1-1-returns-0
>>>>>>>
>>>>>>>      2/:2 NB. expected result
>>>>>>> 2
>>>>>>>      1/:1 NB. expected 1 as the result
>>>>>>> 0
>>>>>>>
>>>>>>> Also,
>>>>>>>
>>>>>>>      #$ 2 /: 2 NB. result is list as expected
>>>>>>> 1
>>>>>>>     #$ 1 /: 1 NB. result is atom, not a list as expected
>>>>>>> 0
>>>>>>>
>>>>>>> I don't see the reasons that 1/:1 would return the atom 0 as a result,
>>>>>>> but that does not mean there one does not exist. :)
>>>>>>>
>>>>>>> Cheers, bob
>>>>>>>
>>>>>>> ----------------------------------------------------------------------
>>>>>>> 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
>>>>
>>> ----------------------------------------------------------------------
>>> 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