freenode/#clasp - IRC Chatlog
Search
21:00:52
Shinmera
drmeister: or just do what I suggested: a function that moves a lisp object to an immobile pool (on boehm a no-op)
22:22:18
drmeister
It's ok - I added a boolean when allocating containers that directs the allocation to a non-moving pool or the standard pool defined for the class.
22:26:53
drmeister
The boolean is an argument to the allocator that influences what pool the object is allocated within.
22:28:09
drmeister
Yes - that is a bit of overhead that I've added to allocation of every container.
22:33:44
drmeister
I could go back and write two allocate_container functions, one that allocates into the programmer defined pool and another that allocates into the static pool...
22:35:22
stassats
just declare allocate_container inline, have two functions calling it with different values
22:40:33
drmeister
I wonder if clang would be able to figure out if I pass a constant to a function as in foo(false) and then deeper in if (first_arg) { ...} can be rewritten as if (false) { .... }
22:43:38
drmeister
Well - then this costs me nothing if I duplicate core:make-vector and define a core:make-static-vector (which I'm doing right now)
22:44:13
stassats
just make sure the calle is marked inline, it might not decide to inline it on its own of it's too large
22:45:12
drmeister
To really inline this properly we will have to move core:make-vector into Common Lisp so that type inference can get hold of it and elide out the unneeded cases at compile time - right?
22:57:15
drmeister
Hmm, it only makes sense to have a separate core:make-static-vector - because they cannot be adjustable, they cannot have a fill-pointer and they cannot be displaced.