freenode/#clasp - IRC Chatlog
Search
2:51:21
beach
Bike: I need to re-read what you wrote and ask questions about it. But I am still working on my morning coffee.
3:08:18
beach
Bike: To answer one of your questions, it might be OK for now to check only type information that the inferencer uses, but ultimately, there must be a way to make THE mean a real type check for implementations that want that.
3:11:47
beach
Bike: Ideally, simple cases of THE should turn into something the inferencer can use, and complicated cases into run-time type checks. Some cases may turn into a combination of those.
3:12:49
beach
Bike: You write: "the implementation would basically need to provide a form for each type".
3:13:55
beach
Also, since there are an infinite number of types, how would an implementation be able to supply ANYTHING for EACH TYPE?
3:14:50
Bike
okay, so i thought how this was going to go was that typeq would only do primitive checks, and for general lisp types you do (typep foo 'some-type), right? and typep maybe expands into a bunch of typeqs?
3:17:43
beach
I think in general, TYPEP on a constant type may expand to a combination of TYPEQ and more TYPEPs that can not be further simplified.
3:19:42
Bike
i implemented a typep compiler macro to expand into calls of those things. but that's not important.
3:19:50
beach
It is always VERY HARD for me to understand what is said on IRC, so you need to be more explicit when you explain things to me.
3:21:24
beach
It seems reasonable to me that THE would always go through TYPEP, but then, as far as I can tell, every type check could go through TYPEP since it would generate a TYPEQ for simple cases.
3:23:36
Bike
Well the "special" part is that it would have to be in generate-ast or cst->ast. like, the THE converter would built an obvious typep form, and that would have to be converted (to get the expansion in terms of typeq)
3:25:32
beach
Sure. That looks like a very reasonable thing to do for basically any type declaration or type check.
3:26:44
beach
OK, so what is it that has to be in generate-ast or cst-to-ast as opposed to at the source level, and why?
3:27:39
Bike
the way THE is defined, it declares types for some values of a form, and then returns all values of the form. this can't really be done in CL without making all the values concrete somehow, like by multiple-value-list.
3:30:22
Bike
if you have a THE ast, and it's in a values context, it makes a the-values-instruction. if it's in a single value context, it's a the-instruction.
3:31:13
Bike
then thes->typeqs turns the-instructions into typeq-instructions pretty straightforwardly, and the-values-instruction is just deleted. which isn't great, but it does mean that all the most common type declarations are asserted.
3:35:58
Bike
so if i did the same thing but using typep, during generate-ast the typep/error form would have to be compiled and stored in the the-ast, and the equivalent to thes->typeqs would pull it out and use it instead of just typeq instructions like now.
3:40:13
beach
About checking the type of standard instances, it is very tricky because a different thread can do a change-class at any time.
3:41:37
beach
I should definitely put THE on the back burner in my head so that I can give it some thought from time to time when I am otherwise idling.
3:42:55
beach
Bike: It would be very helpful if you could write down all the considerations discussed her, like in the Cleavir documentation, so that we can work on it and turn it into something that I can re-read and that others can understand.
3:43:49
Bike
i wrote a lot for kildall too, by the way. need to format it and stuff before it goes in.
3:44:32
beach
That would also be very helpful. I can understand explicit text like that much better than IRC snippets. And it can be worked on and improved until I understand every detail.