freenode/#clasp - IRC Chatlog
Search
12:24:53
drmeister
I haven't done coordination between threads before - I need to do a bit of research.
12:35:46
Shinmera
drmeister: To synchronise two threads you use a barrier, or failing such a construct a monitor/condition variable, or failing such a construct, a spinlock with an exponential backoff.
12:38:25
stassats
anyway, spinlock is an optimization which may result in poor performance and energy usage if done incorrectly
13:25:28
drmeister
I don't have formal training in parallel programming. I'm picking this up as I go along.
13:29:18
stassats
it works, until it doesn't, when your checker becomes unscheduled and the child thread progresses to Exit, it'll spin forever
13:31:17
drmeister
Right - so my while (this->_Phase != Active) {}; was not completely wrong headed. I'm reacting and not thinking - its too early.
13:32:11
drmeister
I'm going to take a shower and then take another look at it and look at condition variables. I implemented them but haven't used them yet.
13:33:52
drmeister
pthreads have them - I have been careful not to mix C++ threading constructs and pthreads. I can't be sure what the underlying implementation of the C++ threading constructs are.
13:34:02
drmeister
I have this: https://github.com/drmeister/clasp/blob/dev/include/clasp/core/mpPackage.fwd.h#L270
13:34:14
drmeister
And exposed it to Common Lisp here: https://github.com/drmeister/clasp/blob/dev/include/clasp/core/mpPackage.h#L285
14:29:59
drmeister
The pthreads manual talks about checking a global variable - I'm not sure what they are going on about.
14:30:56
drmeister
I also couldn't see the reason the check the Process_O::_Phase variable - although I set it to the appropriate values through the process.
14:32:00
drmeister
From what I understand - all I need is a Process_O::_ExitBarrier mutex and the Process_O::_Active condition variable.
15:38:49
drmeister
Although if you have threads running - it ends badly. We don't yet have the main thread shutting down children.
16:19:11
Bike
i think we could establish a parallel method-combination thing, but i wouldn't want to keep it around
16:19:46
Bike
for one, if we just had dispatchers use regular code instead of the special compiler, we could just write out the code, compile-file it, set it as the discriminating function during startup, and we'd be done
16:46:57
Bike
but then there might be issues if we add methods to compiler functions. which is something that would be good to be able to do, even if we didn't need it for booting.
16:49:25
beach
The safest thing would be to have two compilers, defined in two different environments. They would both be Cleavir compilers, but could behave differently thanks to different customization.
17:07:56
beach
After a long hiatus (due to work on the incremental parser, then the CST library, then CST-to-AST), I decided that I would again start working on the SICL boot procedure.
17:07:58
beach
I decided to do it softly, by trying to understand what I did before. I was surprised that I could read and understand the comments, but I also immediately saw opportunities for improvements that I had missed when I was in the middle of working on it.
17:15:59
frgo
drmeister: I wrote a set of functions that help track down what happens when a signal is received by a process. Output: https://gist.github.com/dg1sbg/a360ace6e37c877af2e7f469a958fa82 - would that help for clasp?
17:25:56
Bike
also, had a thought. if the system compiler is defined in a different environment (that is, cleavir is, and then cl:compile is defined in the normal user-accessible environment but calls the other environment's functions), signal handling would be weird
17:26:18
Bike
because when the compiler signals conditions, as it does, it would use its environment's signal, which necessarily doesn't know about the other environment's condition types
17:34:50
beach
I will definitely document the bootstrapping process. I think there is partial documentation somewhere, but I'll look for it and see if it needs updating.
17:36:40
Bike
you could do something like (deftype foo () 'some-compiler-condition) and it would only affect the user environment, so a handler-bind around the compiler with foo wouldn't work.
17:37:50
beach
People who work in such a system would have to understand the effects of what they are doing.
17:47:04
beach
The SICL specification has an entire chapter about bootstrapping. But I'll make sure it is up to date before recommending that you use it to learn about the procedure.
17:47:26
beach
There are a lot of definitions that start that chapter. I am afraid they are necessary.
17:47:54
beach
Anyway, dinner is imminent, and I am tired after a long day. See you tomorrow (UTC+1).
18:52:56
Kevslinger
drmeister: died on [625/634]: ../../src/gctools/interrupt.cc:324 Hit a fatal error in llvm: Program used external function '_FUNCALL' which could not be resolved!
19:45:34
drmeister
I didn't know there was such a thing as an anonymous package - do we have a problem?
19:47:09
Bike
there is no such thing as an anonymous package. i'm talking about the standard, not clasp
19:47:24
Bike
i thought they're how you'd do some global environment things, but perhaps i was mistaken
20:31:58
Bike
not entirely separate. if we didn't have to build generic functions by side effects it would be easier.
20:35:11
Bike
isn't it? we have a file with a bunch of defmethods, we compile it, then load the file, adding methods one at a time
20:38:28
Bike
i suppose having the generic function and its methods added "all at once", so e.g. none of the dispatcher stuff gets triggered between methods being added