freenode/#clasp - IRC Chatlog
Search
1:50:52
drmeister
Bike: I'm trying to get more info on what is going on. Could you speculate on what might be different between your configuration and mine?
2:08:28
drmeister
Hmm, I don't think it's the problem. I think I defined this so that I would have a C++ type that would indicate that something returns a tagged Fixnum_sp and not a Fixnum (which is untagged)
2:08:38
drmeister
https://github.com/clasp-developers/clasp/blob/dev/include/clasp/gctools/smart_pointers.h#L689
2:10:06
drmeister
To be really clear: A C+ Fixnum_sp that represents the value 1 (one) has the bit pattern #B100 in the word that it contains.
2:14:20
drmeister
https://github.com/clasp-developers/clasp/blob/dev/src/core/sourceFileInfo.cc#L117
2:15:42
drmeister
In core__source_pos_info_lineno info is T_sp and then I call clasp_sourcePosInfo_lineno, which expects a SourcePosInfo_sp type. It's bad to mismatch types when calling.
2:54:56
dvssa
drmeister: I'm running into issues when loading :design with the clasp/cando build from the latest master, I get this when I try: https://gist.github.com/DurhamSmith/081ab7f049fde1359a25300468b6a89d
3:07:59
drmeister
I'm implementing a CI system to make this sort of breakage unlikely. We will have it in place next week.
3:10:07
drmeister
I don't have the CI system fully in place yet. I just have it building the testing branch of clasp and clasp+cando when I push to those branches.
3:10:58
drmeister
Bike: It appears that source-pos-info-lineno is being passed a fixnum rather than a core:source-pos-info object.
3:12:45
drmeister
Bike: I don't know - but something uses fixnums as origin doesn't it? Default Cleavir? Default Eclector?
3:18:01
drmeister
dvssa: I'm actively working in design.lisp - so it's possible that I push broken code.
3:27:30
dvssa
Ok no prob, when you want to chat about it drop me a message on slack. You might also be interested in this: https://arxiv.org/pdf/1807.04259.pdf
3:28:17
dvssa
And this seems to be a good training data source https://www.nature.com/articles/sdata201422.pdf
3:29:23
dvssa
I'm slowly learning more about QML as well, I want to see how we could incorporate it into clasp
3:59:04
drmeister
Bike: An origin that looks like (cons 1138 1157) is working it's way into the code somewhere.
4:02:03
drmeister
beach: Do you use instruction origins anywhere that look like (cons fixnum fixnum) ?
4:03:41
drmeister
So it's a failure of whatever method I was supposed to implement to supply my own source info objects.
4:05:32
drmeister
I do - it's not working for some reason. There is some difference between Bike's development system and mine.
4:07:42
drmeister
I think I see a problem. I have a mechanism to add to *features* by setting the CLASP_FEATURES environment variable - but the :CST feature is not in *features* for some reason.
4:09:35
drmeister
No - that's not it. If I start iclasp-boehm with that environment variable set I see :CST in *features*
4:09:59
drmeister
When I use ./waf build_rboehm . (runs aclasp) - the feature is also set - so waf isn't switching it off for some reason.
4:12:41
drmeister
dvssa: Oh dang - that doesn't test design.lisp - that comes later - so it may still have problems.
4:17:35
drmeister
beach: It will build branches of clasp and cando and if they build successfully build things from those and so on.
4:24:01
dvssa
drmeister: its good they are solving the keyboard issues. That detracted me from getting one. I ordered a thinkpad x1 a few days before they announced the new macbook pros
4:24:48
dvssa
It's a pretty nice machine so far. Some issues getting the battery life on linux to be acceptable tho.
4:38:48
beach
Bike: I see a potential paper submission for ELS, entitled "MAKE-METHOD-LAMBDA revisited" or something like that.
4:40:03
beach
It is not hard to store the name of the GENERIC-FUNCTION-CLASS and the METHOD-CLASS from the DEFGENERIC form in the compile-time environment, and to have DEFMETHOD look that up.
4:41:11
beach
DEFMETHOD would simply get the CLASS-PROTOTYPE of those two and pass them to MAKE-METHOD-LAMBDA. Problem solved.
4:42:19
dvssa
drmeister: testing branch doesnt load :cando-user it gives https://gist.github.com/DurhamSmith/8a34bb52c297e9c4c084f89257caa559 I think I'll be able to get it working myself im just going to grab something to eat first.
4:42:32
beach
Bike: And I will likely write a joint paper with Didier, showing that we can solve his issues with method combinations in a way that is consistent with both the MOP and the Common Lisp HyperSpec.
4:43:57
beach
And it does not use the ugly solution where the generic function is the data base for method combinations. It stores them in a SICL first-class global environment.
4:44:01
drmeister
dvssa: Ok - sorry about that. This is what the CI system should help us resolve. We have a chain of dev -> testing -> preview -> master branches. The CI system will only promote builds up the chain if they work.
4:45:44
drmeister
I'm looking forward to getting this CI system up and running - it's going to take a huge load off my mind.
5:03:22
beach
In SBCL, I did the following: after start-up I typed (gc :full t) then (room). Then I loaded sicl-boot, typed (gc :full t) and (room) again.
5:04:05
beach
That is so small that I am now considering including the compiler in the initial image.
5:04:40
beach
I mean, it needs more, say twice as much that Cleavir uses, but that's still very modest.
5:08:35
beach
Yes, I see. It will probably take up more room in Clasp I would guess. Especially if it compiled itself.
5:10:22
beach
Speaking of which, now that I do the right thing in SICL and have compute-effective method return a form instead of a function, it will be much easier to optimize cases where an effective method contains a single accessor method.
5:11:38
Bike
because you can just look at the effective method to determine whether the optimization is appropriate?
5:12:25
beach
I can do that. But in the simple case, I can just create a form that uses standard-instance-access directly and compile it instead of what the method combination produces.
5:14:26
Bike
which is, have a generic function that controls the macroexpansion of call-method forms
5:14:49
Bike
that is, the generic function is passed the arguments of call-method. since the first argument of call-method is usually a literal method, it can be dispatched on
5:15:40
Bike
then you can, e.g, have fastgf bind an *actual-specializers* variable or something, and then you can have a method on standard-reader-method that expands the call-method into a standard-instance-access.
5:17:18
Bike
the reason i was wondering about it is that costanza mentions the problem of how to define that a method (function) takes arguments other than the default arguments+next-methods, which i think is genuinely underspecified by mop
5:18:16
beach
Yes, and that is a requirement for accessors. Imagine a generic function with a single method on it....
5:18:36
beach
... building a list of arguments and then calling an effective method that calls a method function is way too slow.
5:19:35
beach
Sure, the slot can be in different locations depending on the (sub-)class of the argument, but that should already be in the discriminating function.
5:22:12
beach
This case will be extremely common in SICL, given that functions like SYMBOL-NAME and PACKAGE-NICKNAMES will be generic.
5:22:22
Bike
it's more like (cond ((= stamp 10) (standard-instance-access instance 5)) ((= stamp 30) (standard-instance-access instance 6)))
5:24:57
Bike
even in the worst case, it still might be nice. like, if you have an :after method on a slot reader, (progn (standard-instance-access ...) (funcall method-function ...)) might still be noticeably better than two funcalls
5:26:52
beach
OK, if I run the entire NEW BOOT procedure as it is now, creating 4 first-class global environments with several different versions of the same code, and the entire thing seems to take 100MB or so in SBCL. That gives me a factor 100 margin to play with. :)
5:31:03
beach
If I can include the compiler in the initial image, I can remove tons of code that tries to avoid using the compiler.
5:55:43
beach
Within the body forms, the generic-function-symbol is bound to the generic-function-object.
5:57:36
Bike
anyway, the real problem isn't the generic function argument. it's the method argument.
5:58:43
Bike
you can have the same method (method function) called with different sets of next-methods. the method-function accepts as arguments a list of arguments and a list of next methods.
6:01:44
Bike
i mean, so the method function doesn't know the particulars of how it's called at compile time. it works off the list of next methods it receives, which is a regular argument.
6:02:46
beach
Indeed. It is only when the method is produced with make-method that it is. Oh well. More thinking to do.
6:03:27
Bike
of course the generic function is still not really a problem since it's obvious what generic function it is when defmethod is expanded etc.
6:05:02
beach
Also, when the defmethod is expanded, you don't necessarily have the generic-function metaobject.
6:06:43
Bike
that's for the method though. the problem being that defmethod expands into something involving (make-instance ... :method-function (lambda ...)) but the lambda needs to know about the method being make-instance'd.
6:09:36
Bike
yeah. like (let (method) (setf method (make-instance ... :method-function (lambda ... method ...))))
6:10:43
Bike
that means make-method-lambda has to return something that only works in certain environments, though
6:13:39
Bike
no-next-method is rare enough that it might not be completely ridiculous to have call-next-method find-method itself
6:13:41
beach
So if each method-function has access to the method metaobject, the problem is solved.
6:31:35
beach
minion: memo for Bike: MAKE-METHOD-LAMBDA takes an environment object. We could augment the compile time environment with a binding holding the name of a variable that call-next-method can refer to to for the method object. The expansion of DEFMETHOD can then bind that variable.
10:14:34
frgo
Hello all. Interesting MOP stuff you guys were discussing here during last two days ...
10:28:49
beach
"MAKE-METHOD-LAMBDA revisited", "SICL method combinations", and maybe "Bootstrapping Common Lisp".
10:31:51
beach
Actually, it is quite impressive how much stuff there is in the literature and in existing implementations that has not been thought upon for decades.
10:33:05
beach
All those things influence how software is written, so it often suffices to take a close look to see how things can be improved.
10:36:42
beach
And there is some bad science out there. I hear that the vast majority of CS books don't get a thing as simple as binary search right. And most of those that get it right have solutions with way too many more operations than necessary.
10:52:07
makomo
beach: agreed with frgo. i like the formal style of your documentation very much and i think we need more of such stuff.
10:52:49
makomo
basically the "mathy" style of it -- the various explicit definitions and introduction of terminology, etc.
10:54:00
makomo
beach: if i had to choose, i would probably pick the last paper since bootstrapping is always a cool subject. then again, i don't yet understand the problems of the first two, so i can't really judge it that well :-)
12:07:32
beach
makomo: One of the thing I have learned over the years, is that it is much easier to understand what the objects do if you give them a nam. Hence the many definitions in what I write.
12:09:35
makomo
beach: i've come to the same conclusion myself and 100% agree with it. i always like to use math as an example where that practice is extremely important
12:10:00
makomo
and of course, lisp, where we can, along with functional abstractions, also give source code patterns a proper name through macros