I tested a little bit more. It seems more work is required.
,~ < $. 1 0 0 2
┌─────┬─────┐
│0 │ 1│0 │ 1│
│3 │ 2│3 │ 2│
└─────┴─────┘
(<2 3 4 5),< $. 1 0 0 2
┌───────┬─────┐
│2 3 4 5│0 │ 1│
│ │3 │ 2│
└───────┴─────┘
/: (<2 3 4 5),< $. 1 0 0 2
(segfault)
Вс, 11 июн 2017, bill lam написал(а):
> I applied your patch to the latest git repos, and it ran without
> any crash.
> < $. 1 0 0 2
> ┌─────┐
> │0 │ 1│
> │3 │ 2│
> └─────┘
>
>
> Пт, 02 июн 2017, Thomas Costigliola написал(а):
> > I have this patch that implements sparse boxing that worked in the J805
> > engine. Sometime between 805 and 806 it stopped working and now crashes the
> > interpreter during or after the result gets freed.
> >
> > < $. 1 0 0 2
> >
> > Can someone (Henry) explain what changed?
> >
> > Here is the patch:
> >
> > diff --git a/jsrc/cu.c b/jsrc/cu.c
> > index ea70060..db2166c 100644
> > --- a/jsrc/cu.c
> > +++ b/jsrc/cu.c
> > @@ -9,7 +9,7 @@
> >
> > static A jteverysp(J jt,A w,A fs,AF f1){A*wv,x,z,*zv;P*wp,*zp;
> > RZ(w);
> > - ASSERT(SBOX&AT(w),EVNONCE);
> > + //ASSERT(SBOX&AT(w),EVNONCE);
> > RZ(z=ca(w));
> > wp=PAV(w); x=SPA(wp,x); wv=AAV(x);
> > zp=PAV(z); x=SPA(zp,x); zv=AAV(x);
> > @@ -17,7 +17,7 @@ static A jteverysp(J jt,A w,A fs,AF
> > f1){A*wv,x,z,*zv;P*wp,*zp;
> > R z;
> > }
> >
> > -#define EVERYI(exp) {RZ(*zv++=x=exp); ASSERT(!(SPARSE&AT(x)),EVNONCE);}
> > +#define EVERYI(exp) {RZ(*zv++=x=exp);
> > /*ASSERT(!(SPARSE&AT(x)),EVNONCE);*/}
> > /* note: x can be non-noun */
> >
> > A jtevery(J jt,A w,A fs,AF f1){A*wv,x,z,*zv;I wd;
> > diff --git a/jsrc/vo.c b/jsrc/vo.c
> > index 29d118c..a8b20ac 100644
> > --- a/jsrc/vo.c
> > +++ b/jsrc/vo.c
> > @@ -17,8 +17,22 @@ F1(jtlevel1){RZ(w); R sc(level(w));}
> >
> > F1(jtbox0){R irs1(w,0L,0L,jtbox);}
> >
> > +F1(jtboxsp){A z, *zv;I r, n;
> > + if(jt->rank){
> > + r=jt->rank[1]; jt->rank=0;
> > + z=denseit(w);
> > + z=df1(z,qq(ds(CLT),sc(r)));
> > + z=every(z,0,jtsparse1);
> > + }else{
> > + GATV(z,BOX,1,0,0); zv=AAV(z);
> > + rat1(w); *zv=w;
> > + }
> > + R z;
> > +}
> > +
> > F1(jtbox){A y,z,*zv;C*wv,*yv;I f,k,m,n,r,wr,*ws;
> > RZ(w);
> > + if(SPARSE&AT(w)) R jtboxsp(jt,w);
> > ASSERT(!(SPARSE&AT(w)),EVNONCE);
> > ws=AS(w); wr=AR(w); r=jt->rank?jt->rank[1]:wr; f=wr-r;
> > RE(n=prod(f,ws)); if(n)m=AN(w)/n; else RE(m=prod(r,f+ws));
> >
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
>
> --
> regards,
> ====================================================
> GPG key 1024D/4434BAB3 2008-08-24
> gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
> gpg --keyserver subkeys.pgp.net --armor --export 4434BAB3
--
regards,
====================================================
GPG key 1024D/4434BAB3 2008-08-24
gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
gpg --keyserver subkeys.pgp.net --armor --export 4434BAB3
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm