freenode/#clasp - IRC Chatlog
Search
13:52:29
Colleen
Bike: drmeister said 8 hours, 39 minutes ago: I found the problem. You need to %load the first input (header value) - otherwise you are working with an aligned pointer (address of the header) and the ptrtoint will cheerfully convert that to an i64 and fail silently.
13:52:29
Colleen
Bike: drmeister said 7 hours, 37 minutes ago: I'm trying to fix the generic-function test at the same time - that will take another hour probably.
13:52:29
Colleen
Bike: drmeister said 7 hours, 37 minutes ago: I'll finish it in the morning. Too tired...
14:32:49
drmeister
Bike: I need to detect at compile time if a typeq is for function so that I can generate the additional code to check if the object is an Instance_O and then if obj._isgf != 0
14:37:16
drmeister
I don't quite understand the "nothing to detect". In compile-header-check I need to know if the check should be against 'function', 'compiled-function' or 'generic-function' (are there any more)?
14:38:50
drmeister
So we can have a compile-header-check-function? Maybe with an argument to handle the subtypes?
14:40:58
drmeister
How about (compile-header-check-function function-type object-raw then-br else-br)? where function-type is 'function, 'compiled-function or 'generic-function ?
14:41:40
Bike
also for generic-function i'd just expect it to work like checking any instance's class, is that not viable?
14:42:08
drmeister
'function checks the entire range of header-values and then checks if the header-value matches that of Instance_O and if so checks the obj._isgf!=0
14:42:46
drmeister
'compiled-function checks if its one of the compiled function header-values (there may be only one, maybe two)
14:43:08
drmeister
'generic-function checks if the header-value is that of Instance_O and that obj._isgf != 0
14:43:31
Bike
by the way, i mentioned this before, compiled-function not including generic functions is wrong
14:44:07
drmeister
'compiled-function checks if its one of the compiled function header-values (there may be only one, maybe two) or if the header-value is that of Instance_O and that obj._isgf != 0
14:45:19
Bike
the main thing i want to check is function. leaving off subtypes for later is probably fine.
14:51:49
drmeister
That would put the header value for FuncallableInstance_O right after that of Instance_O
14:52:53
drmeister
You wouldn't be able to CHANGE-CLASS between a regular instance and a funcallable-instance - is that an issue?
14:53:54
drmeister
CLOS initializes a new instance and then copies the rack into whatever you give it.
14:57:09
Bike
if you want to be able to access instances and funcallable instances uniformly the rack would still have to be at the same offset, so maybe you can't save bytes.
14:58:23
drmeister
Neither of them would inherit from Function_O anymore. So there still needs to be separate checks for (typeq x function), (typeq x generic-function)
15:03:15
beach
This one can make things simpler sometimes: http://metamodular.com/CLOS-MOP/graph.png
15:05:31
drmeister
I'll define a FuncallableInstance_O class, which inherits from Instance_O and make Instance_O inherit from General_O.
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.