freenode/#clasp - IRC Chatlog
Search
2:02:13
Bike
i mean, as an example, defmacro expands into a LET, so that we can set the lambda-list and documentation
2:03:34
Bike
documentation i'm not sure. i tried to fix it up to use the function description and stuff but i got weird errors
2:06:11
drmeister
That's what I meant - how do we get around using LET. I see - function-discription s
2:09:55
Bike
we'd expand defmacro into (eval-when ... (%defmacro ',name (lambda ...macro function here...)))
2:12:02
Bike
ideally the function-description of the lambda would store everything, but we don't have that working
2:12:30
Bike
if we didn't have to do setf-lambda-list or (setf documentation), the entirety of defmacro would just be (setf (macro-function ',name) (lambda ...))
2:12:49
drmeister
We can get it working - everything we need is in the (lambda ...macro function here...)
2:18:23
Bike
https://github.com/clasp-developers/clasp/blob/master/src/lisp/kernel/clos/inspect.lsp#L360-L365 you can see it calls get-documentation instead
2:21:31
drmeister
Yes it is fine to edit a function-description. It's a bit weird though because it's a C++struct that points into a literal table for things like functionName, lambdaList, docstring and declares.
2:21:55
drmeister
When you write into those slots it redirects it to write into a literal table somewhere.
2:21:58
Bike
http://irclog.tymoon.eu/freenode/%23clasp?around=1531940242#1531940242 not even in our code, eek
2:24:52
drmeister
Ah - you were doing this right after I finished my llvm talk. I usually grey out when I give talks.
2:25:36
drmeister
Nah - this should be easy - and if it isn't I did something stupid that we can fix. It's really not a problem. Let's do this.
2:26:32
drmeister
Keep a list of things that you try and let's get them all done. I hate abandoning good ideas.
2:26:52
drmeister
And we have been really tightening things up so we don't need to do half measures.
2:28:25
Bike
specifically what happened is you'd start clasp, and it would display an error but not actually go into the debugger
2:30:36
drmeister
Well, maybe it's something dumb like I didn't go all the way and allocate function-descriptions for interpreted functions.
2:31:51
drmeister
Or wrapped C++ functions - whatever - we just need to figure it out. I can add a sanity check to make sure we don't try to write into a function-description that isn't there and then add support for those function-descriptions as they come up.
2:56:58
drmeister
Hmm, interpreted and C++ wrapped functions have function-descriptions. We need to reproduce the errors to figure out what is going on.
3:59:35
beach
drmeister: In that code where you have no looping constructs, you have DEFUN, but not WHEN nor INCF?
4:01:11
drmeister
Hi beach - I don't recall what I have - I'm comfortable with tagbody/go for small loops - so I just go with what I know the C++ interpreter provides.
4:04:37
drmeister
I haven't tested it extensively but I was able to compile quicklisp and quickload babel.
4:05:04
drmeister
We are working now to reduce the amount of work the compiler has to do by beefing up cclasp-eval-with-env
4:08:36
drmeister
It's a bit squirrely because this is Xcode "Instruments" and it has a hard limit of 512 frames in a stack trace. Clasp has deeper stacks than that.
12:47:56
drmeister
I added a SIGINFO handler so that on macOS if you hit Control-T you get a backtrace.
12:59:17
drmeister
So you are running in the terminal and you see a pause and ask "What the heck is that thing doing now?"
13:16:10
drmeister
Here's the frame structure: https://github.com/clasp-developers/clasp/blob/dev/src/lisp/kernel/lsp/backtrace.lsp#L12
13:16:21
Shinmera
Here's the survey for things I'll need to know then: http://plaster.tymoon.eu/view/856
13:19:16
drmeister
I understand - note: (core:call-with-backtrace ...) has only existed for less than two weeks.
13:21:18
Shinmera
Anyway, I'm not too bothered if I need to make adaptations to the dissect backend if Clasp should change
13:21:40
Shinmera
But I just want to get it done so that other people can depend on a stable interface
13:28:52
drmeister
Also - the backtrace only has meaning within the call-with-backtrace - can you deal with that?
13:29:23
Shinmera
Yes, Dissect captures the trace and translates it into its own objects that are then exposed to the user
13:29:53
drmeister
Also - we can’t get much source info yet. We need to interpret dwarf line tables
13:30:24
Shinmera
It's ok if you can't answer every point on the survey, that's only for full feature compliance
13:30:38
drmeister
But if you capture the trace and it escapes from call-with-backtrace parts of it will be meaningless
13:31:32
Shinmera
Stack caps cut off anything above a particular point to throw away useless frames that are implementation details
13:37:59
Shinmera
No, it has a singular entry function called STACK that returns al ist of FRAME instances.
13:40:42
drmeister
I've always had a core C++ namespace. When I started using ECL's CL code it uses "SYS" and "SI". I realized quickly that what I have in the 'core' C++ namespace corresponds to what ECL has in the "SYS" package.
13:41:24
Shinmera
In any case, it would be great if the documented interface was through EXT, as that is not internal.
13:41:29
drmeister
To go back and change it would require me to write a source-to-source translator - which I can but there have been more pressing things to do.
13:44:20
drmeister
Question: How much can I do in a signal handler? (This will require more explanation).
13:44:50
drmeister
I currently have a backtrace generator with arguments that does a bit of malloc'ing but no GC allocations.
13:45:34
drmeister
I'm not sure if a signal handler stack frame is connected properly to the rest of the stack.
13:46:02
Shinmera
Wasn't the typical advice that you should do practically nothing and get out as quick as you can?
13:46:57
drmeister
Yeah - that's what I do now. But that means that this Control-T/SIGINFO/SIGUSR2(linux) thing only works once it encounters a safe-point in Clasp.