I did not know there is a VSCode J-plugin.

On Wed, Dec 9, 2020 at 6:24 PM emacstheviking <[email protected]> wrote:

> Thanks Devon... you wrote the VSCode J-plugin then? Amazing stuff, using it
> right now!
>
> I am just extending my SDL stuff to use IMG_ and TTF_ functions but will
> def. read those pages like a Hawk tomorrow!
>
> Thank you
> Sean
>
>
> On Wed, 9 Dec 2020 at 22:58, Devon McCormick <[email protected]> wrote:
>
> > I put together what I wrote about this on a J wiki page:
> > https://code.jsoftware.com/wiki/NYCJUG/2020-12-08#Data_structures_in_J.
> > I've updated it with a link to Ric's code as well as a link to a
> nontrivial
> > example of my own where I use six vectors, which can be segregated in a
> > namespace, to represent information about files and their directory
> > structure.
> >
> > Anyone who has ideas about this topic should feel free to update the
> page.
> >
> >
> >
> > On Wed, Dec 9, 2020 at 5:26 PM Ric Sherlock <[email protected]> wrote:
> >
> > > In case it is of interest to others I thought I'd mention the following
> > > addon that I use to help me move data back and forth from C structs to
> J.
> > >
> > > https://github.com/tikkanz/data_struct
> > >
> > > On Tue, Dec 8, 2020 at 10:46 PM emacstheviking <[email protected]>
> > wrote:
> > >
> > > > Thanks Devon.
> > > > Most helpful. I am a seasoned C/C++ programmer but a total newbie
> with
> > J.
> > > > I've surprised myself thus far by getting a working SDL2 and Postgres
> > > > (libpq) wrapper up and running but they are more FFI code than
> > idiomatic
> > > J.
> > > >
> > > > I am having the same sorts of thoughts as I did when I first learned
> > Lisp
> > > > decades ago; how do you "do" anything! C has 'struct' but raw Lisp
> and
> > > > car/cdr etc are more than enough in most cases provided the list
> order
> > is
> > > > well documented but I guess you can say that about anything.
> > > >
> > > > Thank you again, I guess the only way to find out is to actually cut
> > some
> > > > code.
> > > > Next change I get I shall attempt my "rolling star field" effect
> within
> > > an
> > > > SDL2 window.,
> > > >
> > > > Sean.
> > > >
> > > >
> > > > On Mon, 7 Dec 2020 at 17:01, Devon McCormick <[email protected]>
> > wrote:
> > > >
> > > > > Hi -
> > > > > As others have already indicated, J is most efficient with unboxed,
> > > > simple
> > > > > homogenous arrays.  That said, it would be helpful to have an
> example
> > > of
> > > > a
> > > > > data structure, maybe one you have in C or C++, that you would like
> > to
> > > > > implement in J.
> > > > >
> > > > > Looking around, here is one of the more complex ones I found in C++
> > > (from
> > > > > https://codescracker.com/cpp/cpp-data-structures.htm):
> > > > >
> > > > > struct stud
> > > > > {
> > > > >         int rollno;
> > > > >         char name[20];
> > > > >         char branch[3];
> > > > >         char batch[2];
> > > > >         float marks[5];
> > > > >         char grade;
> > > > > }stud_var;
> > > > >
> > > > > This has two numeric and four character fields so may make us think
> > we
> > > > > should use a boxed array, maybe like this:
> > > > >
> > > > >    students=. ,:101;'Joe Blow';'BAT';'FR';60 70 85 96.8 9;'B'
> > > > >    NB. Use ",:" to give us a one-row table
> > > > >    students=. students,202;'Cruella De Ville';'DOG';'SO';91 92 93
> 94
> > > > 89;'A'
> > > > >    students=. students,303;'Christopher Xavier
> > Columbus';'EXP';'JR';14
> > > > > 92 10 15 0;'F'
> > > > >
> > > > > We should specify the labels of each field:
> > > > >    labels=. 'rollno';'name';'branch';'batch';'marks';'grade'
> > > > >
> > > > > So we can use them like this:
> > > > >
> > > > >    students{"1~labels i. <'name'
> > > > > +--------+----------------+---------------------------+
> > > > > |Joe Blow|Cruella De Ville|Christopher Xavier Columbus|
> > > > > +--------+----------------+---------------------------+
> > > > >
> > > > > Alternatively, we could build this data structure using unboxed
> > arrays
> > > > > with distinct names in a namespace:
> > > > >
> > > > >    rollno_students_=. 101 202 303
> > > > >    name_students_=. >20{.&.>'Joe Blow';'Cruella De
> > Ville';'Christopher
> > > > > Xavier Columbus'
> > > > >    branch_students_=. 'BAT','DOG',:'EXP'
> > > > >    batch_students_=. 'FR','SO',:'JR'
> > > > >    marks_students_=. 60 70 85 96.8 9,91 92 93 94 89,:14 92 10 15 0
> > > > >    grade_students_=. 'BAF'
> > > > >
> > > > > Notice how I now enforce the length limitations that the original
> C++
> > > > > example imposed, which is one of the things I dislike about these
> > more
> > > > > primitive languages: they force you to make data structure
> decisions
> > > > > in advance of the actual data.
> > > > >
> > > > >    name_students_
> > > > > Joe Blow
> > > > > Cruella De Ville
> > > > > Christopher Xavier C
> > > > >
> > > > > This length limitation does allow us to use simpler, unboxed, data
> > > > > structures.  Of course, we don't have to fix the maximum length in
> > > > > advance in J:
> > > > >
> > > > >    ]name_students_=. 'Joe Blow','Cruella De Ville',:'Christopher
> > > > > Xavier Columbus'
> > > > > Joe Blow
> > > > > Cruella De Ville
> > > > > Christopher Xavier Columbus
> > > > >
> > > > > It depends on how closely you wish to mimic the C++ or what
> > trade-offs
> > > > > you want to make.
> > > > >
> > > > > The unboxed arrays are often more efficient to process but the
> boxed
> > > > > ones are more flexible, e.g.what if the number of "marks" varies
> > > > > substantially from student to student?
> > > > >
> > > > > Also, boxed arrays can be quite efficient.  As a rule of thumb, you
> > > > > don't want to box very small things as each box incurs the overhead
> > of
> > > > > a pointer; for large things, say full names or paragraphs, the
> > > > > overhead is amortized.
> > > > >
> > > > > I hope this helps,
> > > > >
> > > > > Devon
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > On Sun, Dec 6, 2020 at 9:40 PM Jimmy Gauvin <
> [email protected]>
> > > > > wrote:
> > > > >
> > > > > > Hi,
> > > > > >
> > > > > > for some examples of J coding you can look at : :
> > > > > >
> > > > > > https://github.com/jitwit/aoc
> > > > > >
> > > > > > I found his site while playing at Advent of Code.
> > > > > >
> > > > > >
> > > > > > Jimmy
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > On Sun, Dec 6, 2020 at 7:44 PM bill lam <[email protected]>
> > wrote:
> > > > > >
> > > > > > > you can use OOP class, object. They are implemented with
> locale.
> > > This
> > > > > is
> > > > > > > close enough to C structure. See labs.
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > On Mon, Dec 7, 2020, 5:53 AM emacstheviking <[email protected]
> >
> > > > wrote:
> > > > > > >
> > > > > > > > Rob and Raul..
> > > > > > > >
> > > > > > > > Thanks chaps for the comments...the first thing I need to do
> is
> > > > write
> > > > > > > > -something- that does something and then  go from there.
> > > > > > > > It's not really a maths problem... well, in a way everything
> is
> > > > > maths I
> > > > > > > > guess but I am wanting to learn J and to write a game with it
> > and
> > > > > > that's
> > > > > > > > pretty much it.
> > > > > > > >
> > > > > > > > I'll post some progress somewhere someday...
> > > > > > > >
> > > > > > > > Thanks again
> > > > > > > > Sean
> > > > > > > >
> > > > > > > >
> > > > > > > > On Sun, 6 Dec 2020 at 21:41, 'Rob Hodgkinson' via
> Programming <
> > > > > > > > [email protected]> wrote:
> > > > > > > >
> > > > > > > > > Sean, the data structures in J work brilliantly for
> > > mathematical
> > > > > > array
> > > > > > > > > type problems.
> > > > > > > > >
> > > > > > > > > When the data framework  you are seeking is more
> “structured”
> > > > (akin
> > > > > > to
> > > > > > > > > Tables and Columns, or Keys and Values), then a more suited
> > > > > structure
> > > > > > > > might
> > > > > > > > > require “jdb” for example (which makes use of boxing
> > “tuples”).
> > > > > > > > > This is a J compatible structured database for tables and
> > > > columns.
> > > > > > > > >
> > > > > > > > > It really depends on the problem you are solving, for
> example
> > > for
> > > > > > > Advent
> > > > > > > > > of Code or other coding challenges they are usually
> > > mathematical
> > > > in
> > > > > > > > nature
> > > > > > > > > and the J arrays are perfect, as they can be rectangular
> > arrays
> > > > > > > (matrices
> > > > > > > > > etc) or nested arrays (boxed) so there is a lot of
> > flexibility.
> > > > > > > > >
> > > > > > > > > With that in mind, I suggest learn the tools and then
> > consider
> > > > the
> > > > > > > > > structure depending on the nature of the problem, but they
> > are
> > > > > pretty
> > > > > > > > well
> > > > > > > > > all there for you to use.
> > > > > > > > >
> > > > > > > > > HTH Rob
> > > > > > > > >
> > > > > > > > > > On 7 Dec 2020, at 7:50 am, emacstheviking <
> > [email protected]
> > > >
> > > > > > wrote:
> > > > > > > > > >
> > > > > > > > > > Hauke,
> > > > > > > > > > Thanks for your comments. I have been scribbling notes on
> > > howto
> > > > > go
> > > > > > > > about
> > > > > > > > > > it, my initial thoughts are that I need:
> > > > > > > > > >
> > > > > > > > > > genstar =: 3 : 0
> > > > > > > > > >    generates an array of random numbers: initial x,
> initial
> > > y,
> > > > > dy,
> > > > > > > type
> > > > > > > > > >
> > > > > > > > > > updstar =: 3 : 0
> > > > > > > > > >    in-place updates y by adding dy*timer interval
> > > > > > > > > >    if y is off screen then randomly reset this entry with
> > y=0
> > > > > > > > > >
> > > > > > > > > > Ha! This is going to be a lot of fun...
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > On Sun, 6 Dec 2020 at 20:36, Hauke Rehr <
> > > > [email protected]>
> > > > > > > > wrote:
> > > > > > > > > >
> > > > > > > > > >> If the atoms of x, y and dy are all numbers (or tuples
> > > > > thereofª),
> > > > > > > > > >> you can use a 3(or moreª)×(whatever common shape they
> > have)
> > > > > array.
> > > > > > > > > >> Index into them along the correct axes, and you’ll get
> > > > > > > > > >> back (or modify) a triplet (or triplets) (again, or
> > moreª).
> > > > > > > > > >>
> > > > > > > > > >> And updating ought to be done in place as much as
> > possible.
> > > > > > > > > >> You don’t do updating most of the time, but when you
> need
> > > to,
> > > > > > > > > >> do it in place if at all possible.
> > > > > > > > > >> You’re guaranteed to work in place if you immediately
> > assign
> > > > > > > > > >> back to the name of the structure you amend, for
> example.
> > > > > > > > > >> Also, take a look at the special combinations.
> > > > > > > > > >> Personally, I avoid boxing as much as possible.
> > > > > > > > > >>
> > > > > > > > > >> Then again, that’s just my thoughts and I’m far from
> > > > > > > > > >> as experienced as the average person on this list, I
> > guess.
> > > > > > > > > >>
> > > > > > > > > >> Am 06.12.20 um 21:13 schrieb emacstheviking:
> > > > > > > > > >>> What's the conventional wisdom / best practice on
> > defining
> > > > data
> > > > > > > > > >> structures
> > > > > > > > > >>> for an application?
> > > > > > > > > >>>
> > > > > > > > > >>> Given there is no explicit keyword/operator support
> like
> > C
> > > > > > (typdef,
> > > > > > > > > >>> struct)  is it merely a case of convention and using
> > boxed
> > > > > > > > structures.
> > > > > > > > > I
> > > > > > > > > >>> have read several operators that can modify structures
> > both
> > > > as
> > > > > > new
> > > > > > > > > >> aliased
> > > > > > > > > >>> copies and in-place modifications but I do not have the
> > > > > > experience
> > > > > > > > > with J
> > > > > > > > > >>> to know what's efficient at run time in time / memory
> > etc.
> > > > > > > > > >>>
> > > > > > > > > >>> My specific use case is that of a vertically scrolling
> > star
> > > > > > > field...
> > > > > > > > I
> > > > > > > > > >>> intend to recreate and hopeful extend the tiny little
> > game
> > > I
> > > > > > wrote
> > > > > > > > but
> > > > > > > > > >>> never finished, screenshot here:
> > > > > > > > > >>> http://seancharles.xyz/posts/2019-10-06-all-at-c.html
> > > > > > > > > >>>
> > > > > > > > > >>> In that I had a struct that had the x, y, dy and type
> > > values
> > > > > but
> > > > > > it
> > > > > > > > > seems
> > > > > > > > > >>> to me that given that J is all about arrays, it might
> be
> > > more
> > > > > > > > efficient
> > > > > > > > > >>> using parallel arrays i.e. x array, y array, dy array
> > etc.
> > > > > > > > > >>>
> > > > > > > > > >>> Also, given that the state is being updated in a tight
> > > event
> > > > > loop
> > > > > > > > using
> > > > > > > > > >> the
> > > > > > > > > >>> time differential between frames to calculate the step
> > > motion
> > > > > > (i.e.
> > > > > > > > CPU
> > > > > > > > > >>> speed independently), what are your thoughts on
> immutable
> > > > > updates
> > > > > > > > > >> producing
> > > > > > > > > >>> new arrays or updating in place ?
> > > > > > > > > >>>
> > > > > > > > > >>> Thanks,
> > > > > > > > > >>> Sean.
> > > > > > > > > >>>
> > > > > > > >
> > > > >
> > ----------------------------------------------------------------------
> > > > > > > > > >>> For information about J forums see
> > > > > > > > http://www.jsoftware.com/forums.htm
> > > > > > > > > >>>
> > > > > > > > > >>
> > > > > > > > > >> --
> > > > > > > > > >> ----------------------
> > > > > > > > > >> mail written using NEO
> > > > > > > > > >> neo-layout.org
> > > > > > > > > >>
> > > > > > > > > >>
> > > > > > >
> > > >
> ----------------------------------------------------------------------
> > > > > > > > > >> 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
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > >
> > > > > Devon McCormick, CFA
> > > > >
> > > > > Quantitative Consultant
> > > > >
> > ----------------------------------------------------------------------
> > > > > 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
> > >
> >
> >
> > --
> >
> > Devon McCormick, CFA
> >
> > Quantitative Consultant
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> >
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>


-- 

Devon McCormick, CFA

Quantitative Consultant
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to