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