libera/#commonlisp - IRC Chatlog
Search
18:16:34
nij-
Is there anyway to do "condition forwarding"? I want a client runtime (maybe in another lang) to have full control of a thread in my Lisp Image. The thread should be non-blocking, meaning when there's a condition in a thread, it gets "forwarded" to the client. The client decides what to do next; in the meanwhile, the main thread shouldn't get blocked.
18:17:38
Bike
what would doing next entail, if the main thread is already off doing some other thing?
18:18:53
Bike
conditions are just objects, and you can toss them around and invoke the debugger in whichever thread you like. but without the dynamic context of where the condition was actually signaled, the obvious ways to debug are out
18:23:10
Bike
this isn't to say that you can't arrange something. like you could set up a mailbox so that the out of line debugger can send some action to complete to the main thread. but it's not gonna be like, trivial
18:24:34
Bike
like, example: say the main thread does a cerror, a continutable error. if the debugger is in the same process, the user could choose to move on by invoking the continue restart, or they could do something else like substitute a value
18:24:53
Bike
but with what you're talking about, if i understand correctly, the main thread will just continue on to something else and present the condition to some other thread/process
18:25:17
Bike
and from that thread/process, the usual debugging options of "continue" or "substitute a value" or whatever are nonsensical, because the main thread has already moved on to greener pastures
18:28:02
nij-
I think of that other thread as a process in an OS. It must listen to the OS, but most of the time we as clients/users do not have to care too much about the OS.
18:31:23
Bike
Just, what exactly do you want that other thread to be able to do, if presented with an error condition?
18:32:34
Bike
I mean if the main thread hits a condition, and sends off that condition to the controlling thread, and the main thread continues on to something else, what should the controlling thread be able to order in response to that condition
18:33:48
nij-
Then the controlling thread asks the client what to do, immediately after it is freezed until the answer from the client is received.
18:34:16
yitzi
I'm not clear on which thread the condition was generated in. Is it generated in the main thread or in this "client" thread?
18:35:08
White_Flame
also what is the client thread doing, just monitoring the main thread or does it have its own other work to do?
18:38:58
yitzi
nij-: then in order for the restarts in the main thread to still be applicable it will need to block
18:40:23
yitzi
Also, not that most languages don't even have the concept of a "restart" hence this concept is completely missing from debugging protocols such as the Debugger Adapter Protocol.
18:41:03
Bike
nij-: what i'm trying to tell you is that some of those things do not make sense of a local repl, because the context of the condition will be gone. you cannot substitute a value and continue the computation if the computation has exited.
18:41:14
yitzi
You can hack it in with the stop and continue message in that protocol, but it would a non-standard extension.
20:14:38
jcowan
What does the term "match" mean in the case, ecase, and ccase macros? It is not defined there or in the glossary.
20:15:43
Bike
eql, under the general rule that that's what phrases like "on the basis of its identity" means
21:11:05
edgar-rft
jcowan: I think the "match" is defined a few lines above: "If the test-key is the same as any key for that clause, ..."
21:26:50
kakuhen
Bike: maybe a direct link will help? https://github.com/robert-strandh/Well-Specified-Common-Lisp/issues/9
21:29:00
kakuhen
ah, it looks like the main repository has changed, judging a comment in https://github.com/robert-strandh/Well-Specified-Common-Lisp/issues/8#issuecomment-1195473591
21:51:08
copec
https://youtu.be/tzr7hRXcwkw <- Wish a third person was there, "that's why common lisp has..."
21:59:48
edgar-rft
the CASE page also often talks about matching clauses where a clause being "the same as" is clearly not meant
23:27:25
gin
is there a shortcut for (lambda () t). I need a function that always returns true? Something like #'always-true. Is it there?
6:08:18
flip214
How can I check whether some symbol exists in a package? Do I need to check (eq (find-symbol (symbol-name foo) (find-package :bar)) foo), or is there something like (package-contains (find-package :bar) foo)?
6:11:52
flip214
I'm also not entirely sure whether a symbol always has to have the same name in another package...
6:13:25
flip214
Can I intern eg. a GENSYM into a package later on? (SETF (symbol-package foo) ...) won't work, I guess)