freenode/#sicl - IRC Chatlog
Search
11:22:53
beach
So far today, I have continued my effort to make the code for phase 2 and phase 3 look similar. It is amazing how I managed to put the code in totally different places in the two phases, and how I created an abstraction in one phase and not in the other.
11:22:54
beach
There are still many differences and strange places for code to be, so it is still going to take some time to fix it up. But it is going to be worth the effort, because the result will be much more understandable and maintainable.
11:26:09
heisig
That sounds great! I am really looking forward to see all your thoughts written down.
11:32:13
heisig
beach: I have some questions about what happens after the MOP has been bootstrapped. Do you have time to discuss them?
11:33:49
beach
The current idea is to concentrate all functions and classes to one first-class global environment in which the classes form a graph with cycles as it should.
11:36:49
heisig
I think it would be nice if one would not have to duplicate parts of the ASDF system definitions. Maybe one could write a program that queries ASDF on the host to automatically generate the list of files to load.
11:37:52
heisig
The question is, how to deal with circular definitions, such as that MAKE-SEQUENCE depends on SUBTYPEP, which might depend on MAKE-SEQUENCE?
11:40:55
heisig
I mean it is not a problem if none of the functions is ever called at bootstrapping time. But I had the idea to query the environment to build some support macros such as SICL-SEQUENCE:WITH-ELEMENT-TYPE.
11:40:56
beach
Sometimes I break my ASDF systems into two or more. One would be called <mumble>-base and it would provide the dependencies for other systems.
11:42:17
beach
I am not sure I understand what you are saying. Are you saying you tried to do that and failed because of some circular dependency?
11:45:51
heisig
But I think it is possible to avoid this problem, I just wanted to ask whether you thought about it already and have a simple solution.
11:48:42
heisig
Ok, final question. You intend to build an 'ersatz'-graph that is isomorphic to the final Lisp image. But for that to work, each function needs the proper code vector for the intended target platform.
11:50:53
beach
Also, the entry point needs to be set once I know the address that a function will have in the final image.
11:55:07
heisig
My idea is the following: You can represent each ersatz-function with both a code vector, and a suitable host function.
11:55:46
heisig
The host function can be tailored to do the same thing as the code vector would do in the final image.
12:02:47
beach
Now I just have to figure out how to write that down in a way that can be understood, and in at most 8 pages. :)
12:05:12
beach
It hasn't been possible for very long for others to make substantial contributions, but it's getting there.
12:10:04
beach
I mean, using the MOP machinery for most other parts of the system is going to give a lot fewer special cases, so a lot less special-purpose code that what I suspect most existing systems have.
12:28:57
beach
There are lots of things that don't require a PhD. At some point, I'll try to make a list of tasks and I'll annotate each one with the degree that is required to work on it. :)
12:39:42
beach
heisig: So, apparently, I figured out at some point that I could make the list of shadowed symbols conditioned by a reader conditional.
12:41:00
beach
I think that's a workable solution to the problem of making the code run both in a host for testing purposes and as native code in SICL. No?
12:45:48
heisig
That is actually one of the parts I am still confused about. One purpose of a SICL module is to (more or less) portably provide some SICL-FOO package. The other one is to bootstrap SICL.
12:46:34
beach
Right then I was thinking of sicl-specific modules, like the definition of SYMBOL and PACKAGE.
12:47:51
beach
So it should be shadowed only when the system is tested (without any purpose of loading it) in a host.
12:48:33
beach
So I guess instead of #-sicl, there should be #+sicl-host-test or something like that.
12:49:32
beach
That way, it's the responsibility of the system that does the testing to provide the feature in question.
12:57:28
heisig
I think the easiest way would be to split module definitions and bootstrapping entirely, which would make the testing and maintenance of modules much easier. But yes, I should have a night of sleep before continuing that train of thought :-)
13:02:55
beach
Those systems contain code that can be compiled and loaded by the host and then imported to one of the first-class global environments during bootstrapping.
16:47:56
beach
It has been a long, but very productive day. The mission for tomorrow is to continue with the work of trying to make the code for phases 2 and 3 similar. As part of that work, I would like to try to get rid of the special version of ENSURE-CLASS in environment E2.