freenode/#sicl - IRC Chatlog
Search
2:57:34
Bike
since reinitialize-instance ignores initforms, the specialized method pretty much amounts to (setf (standard-instance-access instance 0) arg0 (standard-instance-access instance 3) arg1) or whatnot
3:21:28
beach
karlosz: Does this PR of yours to Concrete Syntax Tree affect the external interface in any way?
3:22:02
beach
karlosz: I don't particularly want to break the SICL bootstrapping procedure at this point.
3:31:22
beach
All this optimization work makes me wish that the SICL bootstrapping work were finished so that I could participate. And, although I can see the light at the end of the tunnel, there is still tons of work. Mostly incremental stuff, but still.
3:31:30
beach
At this point, I am convinced that I have a working cyclic graph in environment E5. But that environment is otherwise lacking lots of stuff. All the macros are in E0 since compilation during bootstrapping took place there.
3:31:34
beach
So those macros need to be loaded into E5, this time with code generation (though I disabled code generation during my work on the bootstrapping procedure itself).
3:31:36
beach
The plan now is to load enough macros into E5 that I can start using E5 for compilation. It will then be independent of other environments, and I can start loading the rest of the code into it.
3:47:56
Bike
there's an accompanying change to clasp, so yeah, i think the PR changes the interface.
3:53:03
Bike
er, or more directly https://github.com/clasp-developers/clasp/pull/1010/commits/42be87cc1cb911b748415ff7ba531ec8f3f3fb83
3:54:24
Bike
anyway, sleepin. i'll look forward to having a non-clasp environment to test cleaviry things in
3:55:57
beach
That change to Clasp concerns Clasp-specific lambda lists. SICL doesn't have any specific lambda lists, so it looks like SICL would not need to be changed as a result of this improvement.
4:00:00
karlosz
beach: i believe that's right. it only applies to clients that actually extend the interface
4:19:45
heisig
We teach it in our lecture on code generation, because Lisp macros help people think about code as data.
4:34:42
beach
I used to be fairly mute about using Lisp in teaching, but these days my opinion is clear: Every undergraduate teaching program in computer science, software engineering, etc. should have a course based on Lisp.
4:34:44
beach
It is essential for the students to understand the kind of programs that can be developed, but also just to teach them about the history of computing.
4:35:44
beach
Unfortunately, most of the teachers in those domains are insufficiently trained themselves, so they are not able to understand the importance of Lisp.
5:33:50
beach
I am not thinking clearly today, so I could use some help. If you look at Code/Data-and-control-flow/defun-support.lisp, you can see that there is some code that is executed by the macro expander, and then there is some code that is executed by the compiler after macro expansion.
5:33:51
beach
I am particularly interested in the call to sicl-genv:global-environment. What difference does it make in the native compiler whether that call is made by the macro expander or by the compiler after macro expansion?
5:39:02
beach
In the (EVAL-WHEN (:COMPILE-TOPLEVEL) ...) case, the code has to be compiled before it is executed.
5:39:55
beach
But, if so, why should I have some code in the (EVAL-WHEN (:COMPILE-TOPLEVEL) ...) body?
5:43:59
beach
And I think you are right that there should not be an environment parameter to the macro expander.
5:45:26
beach
Macro expanders take an environment parameter only when they need to do stuff like call GET-SETF-EXPANSION, right?
5:50:36
heisig
Thanks, I will. I also had a (potentially) great idea for SICL last night, but I will have to write it down first.
11:32:11
heisig
Here is the idea I mentioned this morning: https://gist.github.com/marcoheisig/ada00d4fd0920ec7b2c8223ca6022dc0
11:41:06
MichaelRaskin
heisig: what about currently-running functions with soon-to-be-violated assumptions?
11:43:05
beach
I have been saying for a long time that we are lucky in that we always have all the information of every aspect of the system available, as opposed to languages withe separate compilation. But I have not figured out a way of taking advantage of that fact. This idea seems to be a great step in that direction.
11:43:31
heisig
MichaelRaskin: They don't exist. The thread that invalidates an assumption has to block until all other threads have slowed everything that depends on the assumption.
11:45:45
MichaelRaskin
So if I have a fast function that processes a web server accept loop, anything touching its assumptions has to fail via a timeout?