libera/#clasp - IRC Chatlog
Search
13:57:00
Colleen
Bike: drmeister said 10 hours, 15 minutes ago: I made some pretty drastic improvements to clasp. I got rid of the GC_ALLOCATE_xxx macros - they are nasty for source-to-source transformations.
13:57:00
Colleen
Bike: drmeister said 10 hours, 14 minutes ago: I also ripped out most of the AST matching macros and replaced them with code that includes node info from clang directly. This future proofs the AST code.
13:58:04
drmeister
PARSE_ERROR(SimpleBaseString_O::make("Could not parse integer from ~S"), Cons_O::create(str,_Nil<T_O>()))
14:04:55
drmeister
You need completely compile-time clean code to do a STST (source to source transformation) and we only do clasp then cando can break horribly. Leaving us with a mess.
14:11:13
drmeister
Over the last couple of years new tools have been developed for creating AST Matchers.
14:13:42
drmeister
This is a compiler explorer prototype that hosts an advanced, future version of clang-query that is excellent:
14:15:39
drmeister
This will help create matchers that we can use to create source-to-source transformations.
14:21:35
drmeister
I'll report back when I've build all of cando - then I'll push it and then you pull it.
14:21:59
drmeister
There is going to be a LOT of changes. I want to avoid merge conflicts - so I was trying to get this done over the weekend.
14:27:02
drmeister
What I'd like to do is take every class field in clasp and cando and apply a consistent naming scheme.
16:10:25
drmeister
It should be completely neutral. It was a test of the STST and gets us closer to standard C++.
16:12:01
drmeister
Source to source translation was something that Google put a lot of work into in the early 2010's and then not much happened after that.
16:12:14
yitzi
Understand...getting ready to start working on the Jupyter debugger for CLASP. SBCL is mostly complete with the exception of breakpoint insertion.
16:12:42
drmeister
I implemented STST for clasp and used it to solve some nasty problems early on and then let it lie fallow.
16:13:50
drmeister
Now I've brought our code back online and did some searching around the interwebs over the weekend and found that there has been some recent work towards fulfilling the promise of STST - but it's still not there.
16:15:09
drmeister
Achieving actual STST requires writing tricky code that does the translation. We can do it in clasp - but others need to write the tricky code in C++ or develop Python hooks or write a domain specific language (ugh).
16:16:11
Bike
yitzi: would breakpoints require compiler stuff? i guess stepping would, it might be nie if we could do that
16:18:00
yitzi
Bike: I am not sure yet. SBCL implements stepping via inserting step-form-conditions via the compiler. I seem to recall CMUCL had breakpoint insertion, but I don't know about SBCL yet.
16:18:31
yitzi
I suppose you could fiddle with the source before parsing and insert (break) ... that seems kind of kludgey
16:20:21
Bike
i've done some limited experimentation with having the compiler insert calls at stereotyped points, and it was actually pretty easy
16:21:55
yitzi
Cool, it may come to that. I checked and yes CMUCL had breakpoint insertion but its not in SBCL.
16:22:54
drmeister
We could put patch points in with a single NOP that can be changed to a BRK. Or we just use the line tables to put in BRK's and keep track of what was there before.
16:23:07
yitzi
To begin with I plan on supporting just what the implementation supports natively. If it doesn't have breakpoint insertion then it won't be available in the debugger.
16:23:42
drmeister
What I need first though is bullet proof source locations and more lexical variables.
16:30:34
yitzi
Awesome. I am implementing debugging in the lisp kernel for Jupyter...if you haven't picked up the context.
16:35:06
yitzi
No. The kernel has it's own process and can technically be on a remote machine. Inside the kernel there are various threads that respond to specific ports. SHELL is where user code runs. CONTROL is where debugging happens. There is also an IOPUB is a broadcaster and some other various thread.
16:37:54
beach
All that information is completely above my head. Anyway, if the Clasp program you are debugging runs in the same process as the debugger, what Allegro does, and what I suggest in the paper is relevant. If not, I guess you can use the same technique as other debuggers use.
16:38:55
beach
The main problem with same-process debugging is that you need to make sure you don't insert a breakpoint that is then tripped by the debugger, or your process will be unusable.
16:39:04
yitzi
Sorry about the terminology. It's a lot simplier than it sounds. Yes, I think your paper is very relavent.
16:41:03
yitzi
Right now the debugger hooks only get activated around user code so that is somewhat lessoned. But you are right if someone set breakpoint on the control thread that could be problem.
16:41:05
beach
Allegro's solution doesn't require different threads, whereas the technique I suggest has the debugger and the code being debugged run in different threads, and I make sure a breakpoint is only tripped if it is in the thread being debugged.
16:42:43
drmeister
I've transformed _Unbound<xxx>() to unbound<xxx> and done the other special values as well.
16:43:26
yitzi
beach: Yep, just scanning your paper. It sounds almost exactly like what I am doing. Using a locked queue to pass messages between the control (debugger) and the shell (the thing being debugged)
16:45:30
beach
I shall have to put that off. Dinner is imminent here, and I'll spend the rest of the evening with my (admittedly small) family.
16:48:04
beach
Oh, I have changed the plan a bit for what technique to use, compared to what is in the paper. I will probably instead use the technique with trampoline snippets that is in the most recent paper.
16:48:41
beach
So if there is no breakpoint, the only cost is an unconditional jump to the following instruction, with the new technique.
18:28:30
yitzi
It seems to track the source path, but I am getting line number 999902 for frames inside those files.
18:33:09
Bike
for one we could probably bind current-source-pos and then you'd get the line number of the top level form, and that wouldn't be too hard