freenode/#clasp - IRC Chatlog
Search
18:17:49
drmeister
aclasp build - bclasp is building now. I anticipate problems in CLOS because generic functions need to be instances of FuncallableInstance_O
18:20:02
Bike
so like, how does funcall work? does it have to check whether a function is a generic function or not?
18:48:14
Younder
Well there are two functions apply and funcall as you (bloody well) know and they both take a function as a argument.
18:54:17
Younder
As far as I can tell a function is a function. generic is a term that refers to methods.
18:55:38
Colleen
Clhs: glossary-section g http://www.lispworks.com/documentation/HyperSpec/Body/26_glo_g.htm#generic_function
18:57:39
Bike
younder, i have been employed in writing a lisp compiler for months now. i do not need to read PCL
19:18:21
Younder
As far as I am concerned there exists only 'generic' methods. They have extra baggage that function's don't have.
19:22:43
Bike
Look. I said "generic functions". In context, I am very obviously referring to the class generic-function, in the context of low level implementation concerns. You jumped in with some weird argument about the word "generic". It is not relevant.
19:24:53
Younder
Again there is no class generic function. There are only methods. Unless you include the ones generated by the definition of the class. I find your comments really confusing.
19:28:29
Younder
I said there is ONLY a CLASS-GENERIC function. Not a generic function outside of classes. Again, we are talking beside each others
19:30:08
Bike
i'm not working right now, or i would have ignored this earlier. philosophically speaking, i don't like shutting people out entirely, even on the internet where i'm sometimes not wholly convinced i'm not arguing with a sentinelese chatbot
19:32:24
Younder
Interesting you consider me a total moron ;) I'll tel it pass.. It is a beautiful summer day :)
19:38:38
Bike
if generic functions and non-generic functions are now different primitively, does funcall have to do something different for each, yeah
19:39:21
drmeister
I haven't figured out what yet - I was going to cross that bridge when I got to it.
19:40:55
drmeister
It's already doing different stuff. Generic functions were different enough from regular functions.
19:41:16
Younder
generic functions read their address from a table but it is several level deeper than from a function which is a simple array read.
19:41:53
drmeister
A dirty secret -> generic functions weren't using the Function_O entryPoint slot - they had their own. What I'm doing now will clean things up.
19:43:12
drmeister
Given how easy it was to change things - I would say no - it wasn't that important. I was a bit surprised how easy it was.
19:44:03
drmeister
Although - it's now that I need to fix things up. Maybe I haven't really hit the problems yet.
19:45:32
drmeister
For example - currently generic functions are instances of Instance_O and set-funcallable-instance-function is complaining because it is already checking that its argument is a FuncallableInstance_O (which isn't being created yet).
19:46:07
drmeister
The generic-function class is being created here: https://github.com/drmeister/clasp/blob/dev-func/src/lisp/kernel/clos/hierarchy.lsp#L454
19:50:31
drmeister
Would it be best to make every class that has funcallable-standard-class as its metaclass allocate a FuncallableInstance_O?
19:51:10
Bike
instances of funcallable-standard-class'es should be funcallable-standard-objects, yeah
19:51:29
drmeister
Or define the Creator for generic-function allocate a FuncallableInstance_O and any class that inherits from generic-function inherits that Creator
19:54:21
Younder
It is not possible to make a FuncallableInstance_O a funcallable_standard_object because it need a separate dispatch table (Multiple instances)
20:05:31
scymtym
Shinmera: btw, did you get the link to the video showing what we do with jenkins? (i'm not going to bother you about whether you watched it, your thoughts, etc. just wanted to make sure you saw it since i said i would get back to you regarding the topic)
20:55:21
drmeister
The #'make-cxx-object function calls the creator for the class - so it makes an instance and initializes the C++ data.
21:10:08
drmeister
I just hit a snag. Any function that previously returned or accepts a Function_sp now needs to switch to T_sp
22:14:18
drmeister
I can call Function_sp objects without any trouble - I've been doing that for a long time.
22:16:25
drmeister
But I had a intermediate function that handled things - I need to do things just a bit differently now.
22:19:16
Bike
right. i was just worried about introducing a branch. but if there already is one, well
22:19:27
drmeister
The invoke_funcallable_instance is the new intermediate function. It will have the signature T_mv invoke_funcallable_instance(T_O* funcallable_instance, ...) and it will create a VaList_S structure that will be passed to the dispatch function.
22:21:11
drmeister
Either that or I put an entry (function pointer to dispatcher) slot in the Instance_O class at the same offset as the entry slot for Function_O but that is useless for general instances.
22:22:08
drmeister
What do you think? A branch for every funcall or increase every general instance by 8 bytes?
22:28:55
drmeister
Hmm, maybe it's only an issue because I have FuncallableInstance_O inheriting from Instance_O
22:30:46
drmeister
An Instance_O stores a class, a rack and a signature (pointer to list of class slots).
22:31:23
drmeister
I could make FuncallableInstance_O have the same offset for the class and the rack and put the signature elsewhere.
22:49:55
drmeister
The ASSERT_FUNCALLABLE will test if the T_sp in tfunc is funcallable when building in debug mode - and will be gone in release mode.
22:50:59
drmeister
The FUNCALLABLE_ENTRY_POINT(tfunc,entry) will read the function pointer from 'tfunc' and put it in 'entry'. I'll get rid of the ASSERT_FUNCALLABLE and put it into FUNCALLABLE_ENTRY_POINT
22:55:56
Shinmera
There's this venn diagram with "fast" "correct" "cheap" and all three are impossible.
22:57:23
Shinmera
Right, but so far drmeister has been very strong on "cheap" because he's been one-manning it for far too long with the fear of not getting any grants ever.
23:05:39
drmeister
I'll put a sanity check in at startup that ensures that offsetof(Function_O,entry) == offsetof(FuncallableInstance_O,entry)
23:09:23
drmeister
If I started over again today, from scratch - I don't think I could get 10% of the runtime right from the start.
0:41:54
drmeister
I've got a big family dinner going on tonight - I won't get much done until tomorrow.