freenode/#clasp - IRC Chatlog
Search
16:01:40
drmeister
So (funcall #'foo 1 2 3) would read the tagged FunctionDescription_O pointer FOOFD out of the Function_O object in #'foo.
16:02:46
drmeister
Then it would call FOOFD[offset-for-call-with-3-arguments TIMES word-size MINUS FOOFD-tag] ?
16:03:48
drmeister
This adds one extra indirection. Currently we read the entry_point from the Function_O object in #'foo and call that.
16:06:27
drmeister
Oh yeah - I was going to attach the FunctionDescription_O objects to the Code. So that the FunctionDescription_O keeps the code alive.
16:06:52
drmeister
I can't make the pointers from the entry_point vector into the code keep the code alive. Interior pointers only work from the stack.
16:08:02
drmeister
So we add a GCArray to the end of the FunctionDescription_O and put the code in there. Then they live and die together.
16:10:04
drmeister
Right - then I need one FunctionDescription_O = one function (multiple entry points though) = one llvm::Module.
16:10:43
drmeister
If I have multiple functions in a block of Code then I have a problem of what do I do with multiple FunctionDescription_O objects - it doesn't work.
16:11:33
drmeister
SBCL solves this problem with special pointers that are interior pointers to entry points in blocks of code. They are on the heap but they are interior pointers that keep the entire code block alive.
17:34:46
Bike
the existing bignum methods on as_uintptr_t and stuff are wrong, since they just call get_si, which doesn't report an error if the bignum is out of range
17:35:32
Bike
who knows what that is. maybe there's some c++ template thing for type conversions that don't lose information
17:36:32
drmeister
No - we lose information all over the place in those conversions. I wasn't very careful. I took the C "undefined behavior" approach.
17:36:50
drmeister
Life is a whole lot easier if you don't give a sh*t and push the problem onto the programmer.
17:40:06
Bike
but there's still, let's see, 20 translator methods in bignum i haven't implemented for new bignums
18:16:38
Bike
i suppose with sizeof i should even be able to handle the case of a c++ integral type being bigger than an mp_limb_t
18:32:49
Bike
"C++ expressly forbids virtual template functions because the virtual tables that would have to be built are way too complex. Luckily, C++ offers a way around this. It's a programming paradigm called Policy Based Design." can't we just chuck it and make a fortran based lisp instead
19:34:19
Bike
the particular problem i don't understand here is "error: member 'clasp_to_integral' declared as a template" and "error: expected ';' at end of declaration list"
19:34:29
Bike
where clasp_to_integral is supposed to be a template function that's a member of the core namespace
19:35:06
Bike
seems like i also can't use TYPE_ERROR in bignum.h because the types haven't been defined or something
19:36:59
Bike
and i have to put it there in the first place because referring to a member template function of an incomplete type is too hard for C++ to figure out
19:40:24
Bike
it's probably parsing something some way i don't expect it to and that's wrecking everything
19:45:59
Bike
the idea is that code elsewhere calls clasp_to_integral, and clasp_to_integral calls the bignum class member functions if given a bignum.
19:59:44
drmeister
Why does it say "member 'clasp_to_integral' declared as a template" when clasp_to_integral is outside of the class definition?
20:00:37
drmeister
I'd start commenting stuff out and try to put a function definition in there. Something weird is going on.
20:02:04
drmeister
See if your curly brackes are all matching the way you expect. It might be out of whack
20:04:12
Bike
i don't even understand what "error: member 'clasp_to_integral' declared as a template" means
20:32:11
Bike
drmeister, if ever in the future you think to yourself that a function that already exists should have another name - like how we have "clasp_to_int16" and "clasp_to_int16_t" and so on - please PLEASE do not.
21:05:02
dra
drmeister: I'd like to get into hacking Clasp. Can you point me to where to get started?
21:06:38
Bike
is there some way we can just make create a template function? or generic? We have like six identical definitions for it
21:09:01
drmeister
And if you want to create an integer from an int8_t or a uint32_t - what do you do then?
21:10:16
Bike
i guess there's a problem if it's passed an unsigned value that's interpreted as signed
21:12:40
Bike
yes, and i would dealy like to do the same, but we have clasp_to_long calls in weird places that i don't feel like breaking right now.
21:19:01
Bike
it even lists the mpz_class one as an argument. that can't be right. is there an implicit conversion from long to mpz_class? i guess there must be
21:59:39
drmeister
Yeah - I've seen problems with a particular specialized version of create working on macOS and breaking the compiler on linux or vice versa
22:21:05
Bike
it looks like there's only one place ltvc_write_object is called with an immediate, so i can put a trap there
0:09:34
Bike
i think what's happening is - first create_tagged_immediate_value_or_nil gets a negative fixnum, which it returns, shifted. then that "immediate" is passed to ltvc_write_object. ltvc_write_object can only write size_t so it tries casting that negative value to a size_t
0:09:49
Bike
which, with the new bignum code, it rejects as out of range, if the "immediate" is a bignum
0:11:41
drmeister
yitzi added the ability to interrupt jupyterlab kernels and restart them. This works with the fork-server.
0:12:05
drmeister
So now the 30 seconds startup time for cando is done once when you startup the docker image.