freenode/#sicl - IRC Chatlog
Search
6:00:37
beach
I have a favor to ask (no rush): Could someone verify that the following works: (asdf:load-system #:sicl-new-boot), then (in-package #:sicl-new-boot), then (defparameter *b* (boot)), then [after around 15 minutes] (repl ee4) [you should see a SICL: prompt], then a few interactions like (defgeneric foo (x)) (defmethod foo (x) (list 234 x)) (defmethod foo ((x cons)) (list 345 (call-next-method))) (foo 234) (foo '(a))
6:01:35
beach
I don't know what size heap you need. In the end, (room) says it uses around 1GB, but I am sure it requires more to do the work. I use 10GB myself.
6:03:29
beach
And if you are interested, you can use the utility functions (at the host prompt) FC (for find-class) FBP (for fboundp) FD (for fdefinition). They all take a name and an environment. Environments can be accessed using EE1 to EE5.
6:04:18
beach
I was trying to come up with cute names like Anemic, Basic, Comfortable, Durable, Essential, Fake, etc.
6:06:34
beach
Anyway, if this works for everyone, I will remove the existing Boot directory and all its code, and rename the New-boot to Boot. Also update the README.
6:16:52
no-defun-allowed
the heck, asdf says "Component #:SICL-PACKAGE-SUPPORT not found, required by sicl-new-boot-base" and ql says "system sicl-package-support not found"
6:19:02
no-defun-allowed
well, i'm not sure what i told git to do but github says i'm even with robert-strandh/SICL now
6:20:59
no-defun-allowed
well, i'm very sorry to have warned you, i forgot to do QL:REGISTER-LOCAL-PROJECTS
6:26:13
no-defun-allowed
that or i'm procrastinating too hard while it compiles and i have lost track of time.
6:43:13
beach
That seems to be the difference. It takes a bit longer here (I don't know why) but it is comparable to what you get.
7:00:48
no-defun-allowed
with (declaim (optimize (speed 3))) it's fumbling about doing the usual SBCL note stuff now, and is still in stage 2 afaict
7:01:21
no-defun-allowed
it's probably that, don't stress yourself about it being slow, sbcl's just trying to help
7:03:26
beach
Thanks to both of you. I will eliminate the (old) Boot and turn the New boot into just Boot.
7:05:30
fiddlerwoaroof
Incidentally, doing (sb-ext:save-lisp-and-die "/Users/elangley/sicl" :executable t :toplevel (lambda () (repl ee4))) worked and gave me an executable that starts sicl directly
9:40:53
beach
I removed all occurrences of "new-", thinking I had only used that string with new-boot, but I had used it with NEW-DIRECT-SLOTS, resulting in the wrong value of a lexical variable. *blush*.
9:41:20
beach
Anyway, if someone wants to check the new instructions in the README, I would appreciate that.
9:42:08
beach
That mysterious bug made me quite agitated this morning. I think I should do some simpler stuff the rest of the day.
9:43:48
beach
Now that I discovered the factor 10 difference in boot times depending on SBCL OPTIMIZE quality values, I should be more productive.
9:57:32
beach
Perhaps it is not optimizing generic dispatch as much with a low SPEED and high DEBUG setting. And I have a lot of that.
10:22:59
shka_
beach: no need to, it is my issue now, i also know how to profile SBCL programs so i should manage to do it on my own
10:40:27
no-defun-allowed
I'd presume a heap size of around 2gb would be where the gc time stops decreasing, as after a second look at TIME 20 entire seconds of 100 are in GC. (I started SBCL lazily in a terminal since I was working on something in Emacs that time.)
10:42:11
beach
Here is an interesting experiment for those who want to get more involved at this point:
10:42:23
beach
2. Do (funcall (fd 'sicl-clos:generic-function-name ee4) (fd 'sicl-clos:generic-function-name ee4)). It will fail because the generic function can not operate on itself.
10:42:31
beach
3. Do (funcall (fd 'sicl-clos:generic-function-name ee4) (fd 'sicl-clos:generic-function-name ee5)), it will return the name of the generic function named GENERIC-FUNCTION-NAME in E5, which it was designed to do.
10:42:36
beach
4. Now again do (funcall (fd 'sicl-clos:generic-function-name ee4) (fd 'sicl-clos:generic-function-name ee4)). This time it will work on itself. :)
11:26:01
_heisig
beach: Thank you, this figure is extremely useful. (minor remark, you labeled the dashed arrow with "operantes on")
11:34:24
beach
So to "tie the knot" I want to keep the red stuff, but class slot should point to red stuff as well.
11:36:08
_heisig
What makes the blue stuff not "viable"? I thought it is almost the same as the red stuff?
11:36:12
beach
Many red generic functions have their call caches filled. I need to fill the remaining ones. The small exercise above illustrates what needs to be done. All red classes are finalized.
11:36:38
beach
Blue generic functions have never been used for anything, so their call caches are empty.
11:37:10
beach
Plus, in E4, there are tons more generic functions like SHARED-INITIALIZE, INITIALIZE-INSTANCE, etc. There are no blue versions of those.
11:38:59
_heisig
Ok, so the blue classes and methods are essentially sentinels whose purpose is to simplify the previous stages.
11:39:33
beach
You can say that, yes. They exist in order to exercise the red stuff sufficiently that it is viable.
13:47:17
jcowan
"As he ordered a hypo of bicyclidine and a bottle of electrolyte solution and sat down in the big rocking chair with her, he took a second to glance up at the portrait."
13:58:07
beach
Either use satiation, or make sure that all the critical functions have been called on all the relevant argument types so that the call history is filled.
14:04:27
beach
Good idea. Though the entire specification is online. Not the rest of the book though.
15:12:30
scymtym
i managed to specialize my s-expression syntax library on concrete syntax trees with fake symbols. this does not intern at all: https://techfak.de/~jmoringe/s-expressino-syntax.ogv
15:18:57
scymtym
beach: it more a collection of parts for compilers, editors, etc, but i guess you could still say that
15:58:29
beach
OK, suppose I wanted to "tie the knot". I would have to look at the structure of the red objects (ersatz objects that are instances of bridge classes and fix them up so that, instead of being instances of bridge classes, I alter the CLASS slot of the header to refer to the equivalent red ersatz class. But that's not all there is to it.
15:59:10
beach
The second index of every rack contains a list of effective-slot metaobjects of the class (as it was when the instance was created).
16:01:45
beach
The METHOD-CLASS slot of a red generic function is a bridge class, so it has to be replaced.
16:05:22
beach
Of course, finding all red objects is non-trivial. Every class has a list of direct slot definitions and a list of effective slot definitions. Those are reachable only from the class.
16:06:13
beach
Similarly, every generic function has a list of methods that must be traversed so that the method metaobjects are updated.
16:11:10
_heisig
Could one just add an auxiliary method to MAKE-INSTANCE or ALLOCATE-INSTANCE to create the list of all red objects?
16:14:15
beach
It would have to be ALLOCATE-INSTANCE I think, because class prototypes are not allocated with make-instance.
16:15:47
beach
Anyway, I am very pleased that I am finally able to think in those terms. Getting those four phases to work has been a long journey.
16:36:13
beach
Wow, this is great! I can modify some core MOP generic function, re-run the boot procedure, and verify that I didn't break anything. And it only takes a few minutes.