avocadoist has quit [Quit: Konversation terminated!]
avocadoist has joined #commonlisp
avocadoist has quit [Read error: Connection reset by peer]
avocadoist has joined #commonlisp
epony has quit [Ping timeout: 268 seconds]
dlowe has quit [Ping timeout: 260 seconds]
avocadoist has quit [Quit: Konversation terminated!]
avocadoist has joined #commonlisp
avocadoist has quit [Client Quit]
avocadoist has joined #commonlisp
tyson2 has quit [Remote host closed the connection]
Oladon has joined #commonlisp
dlowe has joined #commonlisp
qhong_ has joined #commonlisp
qhong has quit [Ping timeout: 252 seconds]
dlowe has quit [Ping timeout: 255 seconds]
dlowe has joined #commonlisp
Catie has joined #commonlisp
n0den1te has joined #commonlisp
dlowe has quit [Ping timeout: 255 seconds]
dlowe has joined #commonlisp
dtman34 has quit [Quit: ZNC 1.8.2+deb2+b1 - https://znc.in]
dtman34 has joined #commonlisp
prokhor has quit [Ping timeout: 256 seconds]
prokhor has joined #commonlisp
istewart has quit [Quit: Konversation terminated!]
Oladon has quit [Quit: Leaving.]
pve has joined #commonlisp
Fare has quit [Ping timeout: 252 seconds]
azimut_ has joined #commonlisp
azimut has quit [Ping timeout: 255 seconds]
Oddity has joined #commonlisp
aartaka has joined #commonlisp
_cymew_ has joined #commonlisp
lottaquestions has joined #commonlisp
lottaquestions has quit [Client Quit]
lottaquestions has joined #commonlisp
lottaquestions_ has quit [Ping timeout: 268 seconds]
_cymew_ has quit [Ping timeout: 260 seconds]
aartaka has quit [Ping timeout: 260 seconds]
aartaka has joined #commonlisp
dlowe has quit [Ping timeout: 260 seconds]
uics has joined #commonlisp
dlowe has joined #commonlisp
rgherdt has joined #commonlisp
rogersm has joined #commonlisp
<hayley>
Shinmera: What would you want to min/maximise with a "better" GC in Kandria? Minimising dropped frames seems like an interesting target to me, but I'd better check.
<Shinmera>
reducing pause times
<Shinmera>
on most systems the GC is not a problem as-is, but there's been a couple reports from people that had stutters as a result of GC.
<Shinmera>
Ideally I could set a deadline for how long a pause will take and distribute it over time, but I know that's a lot to ask for :)
<hayley>
Yeah, avoiding dropped frames on this system might be too easy; pause times would give more information.
<Shinmera>
fwiw you can unlock the framerate in the settings if you disable vsync
<Shinmera>
and in the debug settings you can activate an fps counter (will have to use the cheat `i am a developer` to get the debug menu)
<Shinmera>
you can also use the F10 diagnostics overlay, but that produces garbage of its own, so
<hayley>
Right. We looked at the GC pause meter there some time ago in #shirakumo. I'm trying to work out a sorta higher level target that I can measure, rather than raw pause times, based on advice that I should look at "user-observed latency". But if my desktop is too good at GCing, there's not much to observe.
<hayley>
The effect on frame time could be a compromise; it still exists even if I don't drop frames.
<Shinmera>
right
<Shinmera>
you can also compute a frame budget and see if the gc ever exceeds it.
<pve>
Hi! If I call (change-class my-object ...) inside a method body, is it specified what happens if I call (call-next-method) if the class of my-object is relevant to the list of applicable methods for that call to the generic function in question?
<phoe>
UB
<Shinmera>
like, it should never drop below 60 FPS.
<Shinmera>
pve: the type of the arguments may not change, whether you pass them explicitly to c-n-m or not.
<pve>
ah, i see
<phoe>
pve: notes for CLHS CHANGE-CLASS "a programmer must not use change-class inside a method if any methods for that generic function access any slots, or the results are undefined."
<phoe>
so it's not actually fully UB
<Shinmera>
hayley: I suppose one thing to look for would be maximum time spent (without GC) between frames. that'll give you a bound for GC time.
<pve>
yeah, I read that, and since I don't touch slots explicitly, I was like "hmm"
<Shinmera>
if you lock it to 60 FPS
<pve>
but the restriction related to call-next-method at least makes sense to me
uics has quit [Remote host closed the connection]
semz has quit [Quit: ZNC 1.8.2+deb2build5 - https://znc.in]
semz has joined #commonlisp
rgherdt has quit [Ping timeout: 248 seconds]
<phoe>
pve: in particular, the effective method may already be computed by the time you change the class, and you may be calling methods that were never intended for the object
<pve>
right
<phoe>
kind of a farfetched example but imagine (defclass foo () ()) (defclass bar (foo) ()) (defclass baz (foo) ())
<phoe>
and then a generic function with methods defined for all three classes and also :MOST-SPECIFIC-LAST method combination
<phoe>
you call the GF with an instance of FOO, so the order of methods is (FOO) → (BAR)
<phoe>
if the method for FOO does CHANGE-CLASS on its argument from BAR to BAZ, then the method for BAR might get called with an instance of BAZ
<phoe>
which normally never happens because method dispatch takes care of that
<pve>
but if I have a normal generic function, with an around method at the least specific level, could the very last thing I do in that method be change-class?
<phoe>
the very last, yes
<phoe>
as long as there's no more place for method confusion afterwards
<phoe>
like, you should be able to C-N-M normally if you CHANGE-CLASS between sibling classes - like, if you had a GF without :MOST-SPECIFIC-LAST, you should be able to call C-N-M freely
<phoe>
because after the method for (BAR) is the method for (FOO)
<phoe>
and changing class from BAR to BAZ does not change the fact that the object is still a FOO because both BAR and BAZ subclass FOO
aartaka has quit [Ping timeout: 246 seconds]
<pve>
yeah
aartaka has joined #commonlisp
ec has quit [Remote host closed the connection]
<pve>
ok I need to see if there's a better way to do what I want, this change-class business might be too scary :)=
<phoe>
well what are you trying to do
ec has joined #commonlisp
dlowe has quit [Ping timeout: 248 seconds]
uics has joined #commonlisp
<pve>
phoe: it's dumb, but I'm exploring attaching instances to packages so that I could have a sub-package "MY-APP.FOO" (used in a single file) inherit features from "MY-APP" by querying the parent instance. So when I say (create-package "MY-APP.FOO") it should default to whatever features the parent instance suggests. At the same time, I don't want to "hard-code" how exactly the parent instance and package is
<pve>
found, and that's what's causing trouble.
<phoe>
at which point in your method chain do you want to call C-N-M?
<phoe>
maybe the trick is to "short-circuit" your function at C-N-M, as in, do not call any next methods - but, instead, you can call the full GF instead, which will redo the dispatch
<pve>
the child instance for MY-APP.FOO is initially a "dummy" instance, and at some point we call the gf (initialize-package-with-parent child parent)
<pve>
and that's when the final class should be decided, or so I thought
dlowe has joined #commonlisp
<pve>
like, the design could be all wrong, really
<pve>
well hmm, the short-circuiting could work.. i need to thinkg about that
<phoe>
or you can split up your functionality in some way - call two functions in a row, the first of which ensures the class is changed, and another that is a GF that will dispatch based on the new class of the object
<pve>
I could also just have the initialize function *return* the instance that should be used
<phoe>
returning it makes little practical difference because the instance before changing its class is EQ to the instance after changing its class
<phoe>
like it is literally the same object
<pve>
i meant returning a fresh instance instead of changing class
<phoe>
that would no longer be INITIALIZE-FOO but MAKE-FOO if we want consistency with CL naming conventions
<pve>
which wasn't my original assumption
<phoe>
where MAKE-FOO first calls ALLOCATE-FOO and then INITIALIZE-FOO
<pve>
yep, exactly
<pve>
maybe I should have the make/initialize split..
<pve>
i mean allocate
Oddity has quit [Ping timeout: 248 seconds]
<pve>
but thanks, phoe, I'm gonna try some things out
tevo has quit [Quit: Leaving.]
Posterdati has quit [Ping timeout: 268 seconds]
azimut_ has quit [Ping timeout: 255 seconds]
azimut has joined #commonlisp
igemnace has joined #commonlisp
<pve>
btw, my current method of attaching instances to packages in a non-intrusive way is to intern a "special" symbol and stuff the instance in that symbol's plist :)
aartaka has quit [Ping timeout: 252 seconds]
<pve>
storing the association in a hash table would be better, but then if the package is deleted, the hash table would have to scanned for deleted packages
<pve>
and my impression is that weak hash tables aren't widely supported..
<phoe>
if you control the creation and deletion of your packages then you can write your own code for your DELETE-PACKAGE
tevo has joined #commonlisp
aartaka has joined #commonlisp
<pve>
true, I could consider that
<pve>
i just need enough to see if it can go from "dumb" to "not dumb"
attila_lendvai_ has joined #commonlisp
<pve>
a lot of this could be accomplished by a project specific create-package macro, so I'm not sure if all this CLOSsing around is worth it
Gleefre has quit [Remote host closed the connection]
Gleefre has joined #commonlisp
Posterdati has quit [Ping timeout: 252 seconds]
_cymew_ has joined #commonlisp
Posterdati has joined #commonlisp
aartaka has quit [Ping timeout: 252 seconds]
aartaka has joined #commonlisp
dlowe has quit [Ping timeout: 260 seconds]
_cymew_ has quit [Ping timeout: 260 seconds]
Gleefre has quit [Remote host closed the connection]
Gleefre has joined #commonlisp
Posterdati has quit [Ping timeout: 260 seconds]
dlowe has joined #commonlisp
Inline has quit [Quit: Leaving]
Posterdati has joined #commonlisp
Posterdati has quit [Ping timeout: 252 seconds]
tok has quit [Remote host closed the connection]
Posterdati has joined #commonlisp
Posterdati has quit [Ping timeout: 255 seconds]
Posterdati has joined #commonlisp
jmdaemon has quit [Ping timeout: 252 seconds]
Gleefre has quit [Remote host closed the connection]
dlowe has quit [Ping timeout: 252 seconds]
Posterdati has quit [Ping timeout: 255 seconds]
Gleefre has joined #commonlisp
Posterdati has joined #commonlisp
uics has quit [Remote host closed the connection]
cognemo has joined #commonlisp
occ has quit [Ping timeout: 252 seconds]
avocadoist has quit [Read error: Connection reset by peer]
avocadoist has joined #commonlisp
avocadoist has quit [Client Quit]
avocadoist has joined #commonlisp
avocadoist has quit [Client Quit]
avocadoist has joined #commonlisp
Posterdati has quit [Ping timeout: 260 seconds]
dlowe has joined #commonlisp
aartaka has quit [Ping timeout: 260 seconds]
avocadoist has quit [Client Quit]
avocadoist has joined #commonlisp
avocadoist has quit [Client Quit]
avocadoist has joined #commonlisp
avocadoist has quit [Read error: Connection reset by peer]
aartaka has joined #commonlisp
avocadoist has joined #commonlisp
avocadoist has quit [Client Quit]
avocadoist has joined #commonlisp
ritchie101 has joined #commonlisp
avocadoist has quit [Client Quit]
avocadoist has joined #commonlisp
avocadoist has quit [Client Quit]
avocadoist has joined #commonlisp
Posterdati has joined #commonlisp
ritchie101 has quit [Client Quit]
avocadoist has quit [Client Quit]
ritchie101 has joined #commonlisp
avocadoist has joined #commonlisp
cage has joined #commonlisp
avocadoist has quit [Client Quit]
avocadoist has joined #commonlisp
avocadoist has quit [Client Quit]
marsia` has joined #commonlisp
avocadoist has joined #commonlisp
marsia has quit [Ping timeout: 252 seconds]
zxcvz has joined #commonlisp
ritchie101 has quit [Ping timeout: 252 seconds]
Posterdati has quit [Ping timeout: 252 seconds]
avocadoist has quit [Client Quit]
avocadoist has joined #commonlisp
occ has joined #commonlisp
avocadoist has quit [Read error: Connection reset by peer]
avocadoist has joined #commonlisp
tok has joined #commonlisp
tyson2 has joined #commonlisp
<Ap0gee>
Is there an idiomatic way to test parallel processes?
<Ap0gee>
I want to write unit tests for processes using pexec from chanl
<Ap0gee>
Obviously I can just sleep x but that feels fragile
<pjb>
Ap0gee: the point of parallel process is to be independent.
<pjb>
Ap0gee: so you could 1- test them sequentially in any order (a first sanity check). and
<pjb>
Ap0gee: 2- test them in parallel, still independently, in separate threads. To run the tests, you'll need a thread-safe test framework, and not forget to thread-join the threads at the end, before reporting the results.
Posterdati has joined #commonlisp
Posterdati has quit [Excess Flood]
<pjb>
Ap0gee: now, of course, the parallel processes may sometimes need to have synchronisation between them. (eg. a consummer and a producer). In that case, you may try to test different situations by adding delays, or other modifications to the code, but it would be more testing the synchronization primitives than anything else. Better modelize the processes and prove they should work, using eg. CSP.