freenode/#clasp - IRC Chatlog
Search
15:27:39
shiho
drmeister: Can I pull new clasp? I pushed my change and pulled new cando yesterday, then I can't open Jupyter lab now. I think I need to rebuild clasp and cando.
15:47:13
Bike
the root of the class hierarchy is actually GCObject, which as far as I can tell, has no fields, no methods, and is not even referred to anywhere except as the superclass of _RootDummyClass, and i don't know what THAT is foreither
19:04:45
Bike
Header_s::validate sounds like a debug function, but it'spretty high up in the profile
19:14:19
drmeister
templatedSizeof is to figure out the size of instances of C++ classes that inherit from Instance_O and another C++ class and are exposed to Common Lisp.
19:14:55
drmeister
The meeting is now over. Martin is extracting me from New York and I've got a couple of hours until he gets here.
19:18:32
drmeister
shiho: I fixed that problem - I'm trying to fix one other thing and then you can pull it and build.
20:07:44
drmeister
Bike: How about if we add the ability to write classes to fasl files and then during cclasp compilation we maintain a list of class definitions (add something to DEFCLASS) and then add some magic to the linking process so that it links in a RUN-ALL that is executed first and it recreates those classes at the start of load time.
20:08:56
drmeister
My new addition to the previous question/summary I made yesterday is that we modify the linking step to inject the RUN-ALL that creates the class objects at load-time.
20:09:49
drmeister
Right - so we modify the defclass macro so that it first checks if the class is already defined.
20:10:50
Bike
if we're doing this for every defclass, we'd just want defclasses to not be executed during startup
20:12:06
Bike
this would be a good trick for first class environments, but we can fake it if we want to
20:12:22
drmeister
I see a problem with parallel build - the parallel builds need to communicate to the parent process about the classes.
20:16:45
drmeister
We could then make one pass through the RUN-ALL's to initialize all classes in all linked modules and then a second pass to run everything.
20:18:16
drmeister
Right - but the class initialization can then be distributed across multiple compilation units that are linked together.
20:19:04
Bike
this is unrelated, but what does count-calls do? i figured it would just be asthe name says
20:19:18
drmeister
It's run first even if it came from multiple compile-file's that were linked together.
20:26:21
Bike
is there some way to look at the post-optimization llvm-ir easily? is that the assembly compile-file puts out, or is that pre optimization?
20:27:04
Bike
also i wonder if we couldn't store classes (and otherobjs) as literal objects in files instead of constructing them
20:27:37
drmeister
Is this a fasl file generated using link-time optimization? I think you can tell if there is an object file generated - then it's not LTO and if there isn't an object file then it is LTO.
20:28:59
drmeister
The file you are compile-file'ing - does it generate a .o file or just the .bc/.ll file?
20:47:31
drmeister
We would have think hard if it's (1) possible with Boehm (2) possible with MPS (3) cost with MPS Boehm - I'm not so worried about - it could be slower and we switch to MPS as our production GC.
20:53:13
drmeister
Basically you want to compile data into a fasl file - and not generate code that generates the data at startup. We would have to do that will all literals wouldn't we?
20:59:01
drmeister
I think everything needs to be compiled that way - or nothing. Class definitions need symbols and they need packages and strings ...
21:02:24
Bike
Like right now, for strings, we have the data in the fasl,and then run-all just makes a base-string.
22:42:00
drmeister
Bike: I had a short conversation with David at Ravenbrook about loading compiled objects into the MPS - that is starting to look like the biggest problem that we have.
22:43:04
drmeister
Would you agree? If we had a way to compile data into fasls and then access it like regular MPS objects when the code is loaded - then we wouldn't have all these optimization problems.
22:46:32
drmeister
I need some clarity here - is there any to be had? Imagine you take all the ltvc_xxx functions and run them before any other code is evaluated and generate all of the data structures at once. Now get rid of all that and just restore the data structures. Can we then have inlined asts for all functios that we want inlined?
23:51:36
drmeister
(1) How do other lisps handle data like this? (2) beach had a scheme to use the linker to resolve pointers - how did that approach deal with tagging?
23:57:04
drmeister
Martin is picking me up soon - I'll talk with him about it. I want an excellent way out of this problem.
2:14:11
Bike
you can't use it for multiple-value-setq directly since it doesn't handle specials or symbol macros
2:16:43
Bike
but you can just expand (m-v-b (x y) form ...) into (let-uninitialized (w z) (primop:m-v-setq (w z) form) (let ((x w) (z y)) ...))
2:17:23
Bike
actually, if you just do that, and then have m-v-setq expand into setf values, that'll probably handle it, since setf values expands into multiple value binds unless clisp is extremely weird
2:23:05
Bike
https://github.com/robert-strandh/SICL/blob/master/Code/Cleavir/Intermediate-representation/HIR/multiple-value-related-instructions.lisp#L48-L67
2:24:54
Bike
the primop is definitely converted into the ast/instruction https://github.com/robert-strandh/SICL/blob/master/Code/Cleavir/Generate-AST/convert-primop.lisp#L319-L338
2:37:01
karlosz
thats just for defining the function in the first place, kind of like call-with-variable-bound
2:38:09
karlosz
the point is that the host compiler knows how to compile m-v-l so you can compile code with m-v-c in the new compiler