freenode/#clasp - IRC Chatlog
Search
15:24:23
drmeister
My daughter bought a Razer Blackwidow Chroma keyboard for a pc we are building. I tried to hook it up to my mac. DO NOT BUY ANYTHING FROM RAZER FOR THE MAC.
15:25:36
drmeister
The pc we are building will run Windows and Linux - I'm hoping the OpenRazer software will let me configure this thing from Linux.
15:28:48
drmeister
This pc will contain my very first NVidia GPU so that I can tool around with NVidia GPU programming.
15:31:35
drmeister
I went back and read the stuff about static-vectors that shinmera and phoe posted.
15:33:28
drmeister
Is the idea that they don't move but live in GC managed memory - or does their data need to be able to live anywhere?
15:37:09
drmeister
This says only simple arrays - not arrays of T https://github.com/sionescu/static-vectors
17:19:48
Shinmera
drmeister: C can't do anything with lisp objects, so naturally static-vectors are only useful for element types of un/signed bytes and floats.
17:20:30
Shinmera
we've gone over static-vectors so many times now I'm honestly astounded that it appears to be so difficult a concept to graps
17:32:45
drmeister
(2) Create a new vector type that maintains a pointer to C allocated memory containing a simple vector of simple type.
17:36:05
frgo
One application for static-vectors is to pass them directly to C functions - while sill accessing them with no overhead from Lisp - AFAISTU
17:37:42
drmeister
My question was "would I ever have to declare a static vector to an array allocated by a C or C++ library".
17:38:13
drmeister
Because if the answer is yes - then I have to implement (2), which means implementing a new kind of simple vector of simple types that point to arbitrary memory in C/C++ space.
17:39:27
drmeister
For instance, if I loaded a C library that contained a static array of double's - do I want to be able to access that through a static vector?
17:40:25
drmeister
Or say I mmap a file to some location in C memory - do I want to be able to access the mmapped data using a static vector?
17:42:15
drmeister
IWell, then I think I need to declare a whole new set of C++ classes that access arrays of memory through a pointer into C memory.
17:43:26
frgo
That's why I left that piece unimplemented when going about the CFFI stuff for clasp...
17:43:47
drmeister
It's very different from just being able to allocate a vector object that doesn't move and that I can pass a pointer to a C/C++ library to fill.
17:44:45
drmeister
What I can't do with the ForeignData type is access elements of these vectors using aref or svref
17:58:51
Shinmera
because simple vectors have no indirection, yet wrapping a pointer in a simple vector would do exactly that
18:01:05
Shinmera
either way, static-vectors is an interface for a functionality that implementations most likely can already offer for free
18:01:22
drmeister
Using indirection would let me access vectors of simple data from mmap'd files as lisp vectors.
18:02:42
Shinmera
You could also implement sbcl's extensible sequences protocol and implement your wrapped pointers in that way
18:03:09
drmeister
Right - I'm just saying rather than implementing two approaches (ultimately) - if I put more work in now and implement (2) it's easy to implement what static vectors needs with that.
18:04:12
stassats
first mmap a region of memory your file + one page, then put your vector header at the end of the first page, then mmap your file to address+one-page
18:04:42
Shinmera
so (1) also has its uses, though not necessarily in the way you're thinking at the moment
18:05:25
drmeister
Yeah - 2 would be a new type of vector, one for every specialized vector type = work.
18:06:43
Shinmera
if so you don't need anything for (1) except an extra call that moves the array to another pool
18:07:39
Bike
drmeister: i mean, a static vector is the same as any other vector as far as lisp's concerned, other than maybe having to free it.
18:07:39
Shinmera
drmeister: the header does not need to be gc managed. It can't contain any pointers
18:09:09
drmeister
As far as I understand - if I use the general object tagged pointer - the tagged pointer has to point into GC managed memory. Otherwise the GC will try to fix it and kaboom.
18:09:43
drmeister
I could create a new tag (I think I have one left) for objects in C memory that don't contain pointers.
18:12:45
drmeister
Wait - you make an excellent point - I do this already with stack allocated closures.
18:15:45
drmeister
Still, it would be useful to have a simple vector class that indirectly pointed to arbitrary memory.
18:16:09
drmeister
Then I could mmap files that are vectors of doubles (for instance) and access them like regular simple vectors.
18:18:32
stassats
each additional type increases dispatching costs, but if you are using a table for dispatching i guess it wouldn't matter
18:20:39
drmeister
For arrays, right now I have the approach you taught me years ago. A simple vector where the data follows a header. Then there are multiple dimension arrays that point to a simple vector and then there is a simple multiple dimension array.
18:20:59
drmeister
https://github.com/clasp-developers/clasp/blob/dev/include/clasp/core/array_double.h#L16
18:21:07
stassats
but still, if you want each vector to have as much specializers, you'll need twice as many tags for simple vectors
18:22:07
drmeister
If I wanted to implement (2) I would create another class that would be like SimpleVectorDouble_O but called say SimpleVectorDoubleIndirect_O and instead of containing the double array within the object - it would have a pointer to arbitrary memory where the double array would be stored.
18:24:35
drmeister
But it sounds like I should be implementing (1) and not worry about (2) right now.
18:29:29
drmeister
There is the pointer tag (3 bits) and a header word (62bits) that indicates the type of the object.
18:32:49
drmeister
Each pointer has a 3 bit tag and each general object in memory (pointer tag #B001) has a 62bit tag (I call that the stamp)
18:35:09
drmeister
All the system ones are the lower values - so 0 to 600 or so. Also, general object has a C++ vtable.
18:46:27
drmeister
I see that it would best to implement (1) and (2) but (2) we don't need right now.
19:09:15
drmeister
We have a core:make-vector function - should I add an argument to make static vectors?