01:47
ilbot3 joined
02:23
vendethiel joined
04:54
pyrimidine joined
06:36
FROGGS joined
06:41
zakharyas joined
07:04
Ven joined
07:18
brrt joined
07:54
rurban_ joined
08:26
Ven joined
08:40
vendethiel joined
09:09
brrt joined
09:10
donaldh joined
|
|||
brrt | many algorithms, such complexity | 09:10 | |
FROGGS | :o) | 09:11 | |
09:18
vendethiel joined
|
|||
jnthn | So long as the complexity is polynomial... | 09:25 | |
FROGGS | hi jnthn | 09:28 | |
timotimo | we can still have a exponential algorithm that finds the absolutely perfect answer, but runs in a background thread once something is *really* hot | ||
jnthn | o/ FROGGS | 09:29 | |
How's things? | |||
FROGGS | jnthn: good... I even plan do be active again here :o) | 09:30 | |
dunno why I wasnt the last days/week(s)... I guess too much dayjob and a pet project is enough to fill my spare time | 09:31 | ||
jnthn | Well, a break now and then can be good :) | 09:32 | |
Will be glad to see commits from you again :) | |||
FROGGS | :o) | ||
will bug you about frame handlers anytime soon | 09:33 | ||
jnthn | :) | 09:34 | |
teaching today/tomorrow, then will be doing lots and lots of Perl 6 from Thu :) | 09:35 | ||
brrt | jnthn: some polynomial is just a bit much, though | 09:37 | |
jnthn | .oO( Did Parrot's optimizer run in pollynomial time? ) |
09:38 | |
nwc10 | I think that it was O(0) at runtime, which is hard to beat. | 09:39 | |
(assuming you had compiled PIR or PASM to PBC, ahead of time) | |||
brrt | o.O :-) | 09:41 | |
jnthn | Sure, just like drinking water is hard to beat, 'cus you don't have to spend energy opening a beer bottle :P | ||
brrt | hmmm | 09:49 | |
i'm doing it wrong | |||
09:50
Ven joined
|
|||
timotimo | polly no meal | 09:51 | |
10:20
zakharyas1 joined
|
|||
brrt | hah! | 10:47 | |
topological sort, again, saves the day | |||
dalek dead? | 11:03 | ||
nwc10 | 10:39 -!- dalek [~dalekbot@2001:780:101:ff00::2:9] has quit [Ping timeout: 244 seconds] | 11:04 | |
not flooding, either | |||
brrt | i think moritz++ said something about infrastructure changes on #perl6 | ||
so, maybe just that | 11:05 | ||
anyway, topological sort saveth the day, as i said | |||
what was the problem, you ask? well, naively generating all combinations-of-rules starting with a given head generated an explosively large table, which had to be pruned afterwards | 11:06 | ||
most combinations of rules are *never generated* | |||
hence, if one writes an O(n^3) algorithm, one is keenly interested in keeping n pretty small | 11:07 | ||
n can be kept small by figuring out which combinations the grammar *can* generate | |||
how did i solve this? by letting the grammar... generate them | |||
how to solve the chicken-and-egg problem that obviously arises from this? topological sort | 11:08 | ||
moritz | brrt: no, I said something about being absent in August, and that infrastructure permissions should be settled before that | 11:16 | |
brrt | ah, ok | ||
on holiday? | |||
brrt doesn't use infrastructure | 11:17 | ||
moritz | brrt: yes, Norway | ||
brrt | ah, very nice i imagine | ||
i... should probably go on holiday, too, some day | |||
11:18
Ven joined
11:39
Ven joined
11:45
zakharyas joined
11:50
colomon joined
12:05
colomon_ joined
13:22
dalek joined
13:26
Util joined
13:33
Ven joined,
ggoebel joined
13:42
[Coke] joined
|
|||
dalek | arVM/even-moar-jit: 4c14a58 | brrt++ | tools/tiler-table-generator.pl: Read expr tree IR ops order |
13:50 | |
arVM/even-moar-jit: 9519dfe | brrt++ | / (6 files): Generate a tiler table Next up: rule table; then; search algorithm. |
|||
brrt | hey, dalek lives again | ||
14:14
Ven joined
14:23
brrt joined
|
|||
brrt | and, it's dead | 14:45 | |
dalek | arVM/even-moar-jit: f2b49e1 | brrt++ | / (2 files): Add tiler rule output table |
14:48 | |
brrt | not sure if i've just solved one of the harder, or one of the easier problems | 14:49 | |
dalek | arVM/even-moar-jit: 5f6c196 | brrt++ | / (2 files): Add binary search function to find tile table items |
15:10 | |
16:09
TEttinger joined
|
|||
timotimo | oooh | 16:32 | |
things are moving forward | |||
16:46
hoelzro_ii joined
16:47
Ven_ joined
16:55
dalek joined
17:38
Ven_ joined
18:05
brrt joined
|
|||
brrt | \o | 18:09 | |
nwc10 | o/ | 18:10 | |
brrt | i'm currently writing a blog post | 18:12 | |
18:23
hoelzro_ii joined
19:04
brrt joined,
colomon joined
19:10
zakharyas joined
19:14
colomon_ joined
19:17
colomon joined
19:23
rurban_ joined
|
|||
timotimo | cool | 19:26 | |
19:30
colomon_ joined
19:35
colomon_ joined
19:57
FROGGS joined
|
|||
[Coke] | "GOOD THINGS ARE HAPPENING" | 20:01 | |
jnthn | omg GOOD THINGS?!?! | 20:15 | |
[Coke] | oh, not to me, I was referring to timotimo's send earlier. :) | 20:17 | |
FROGGS | jnthn: do you remember me working on leave()? the point I stopped working at it I figured out that common blocks don't have frame handlers associated... | 20:19 | |
jnthn: you said something along the lines of a possible solution, but I did not get it... | 20:20 | ||
jnthn | Well, I finished writing a course between then and now, so I've forgotten it now too :P | ||
FROGGS | how are we going to handle leave control exceptions for frames, which don't have frame handlers? | ||
I guess I could special case that exception type... | 20:21 | ||
and then, can I do what return_* does still? | |||
jnthn | I don't get the "which don't have frame handlers" bit | 20:22 | |
I mean, that's not a MoarVM level thing, that's just that the QAST node has no nqp::handle anywhere in it | |||
FROGGS | aye | ||
and these frame get skipped in exception.c | |||
jnthn | But if we're using the exception system for leave, then we should probably just emit every Perl 6 frame with a LEAVE handler... | 20:23 | |
FROGGS | so we do not even try to check if this frame might be a target for an exception | ||
ahh | |||
jnthn | Well, if it's got no handlers it can't possibly be a target for an exception? | ||
FROGGS | well... :o) | ||
I though about adding LEAVE handlers, but isnt that overkill? | 20:24 | ||
but anyway, I think I can try things now again | |||
jnthn | Handlers don't cost anything much (other than a little memory to store them) | 20:29 | |
Well, that's a lie. :) | 20:30 | ||
They have some JIT costs I guess | |||
In today's "JIT and optimization is really hard": nickcraver.com/blog/2015/07/27/why-...dotnet-46/ | 21:07 | ||
21:12
brrt joined
|
|||
lizmat | jnthn: S17:940 states "C<Lock> is reentrant." | 21:35 | |
maybe we should elaborate on the reentrancy semantics ? | |||
brrt | what... could we elaborate on | 21:38 | |
brrt is wondering whether it is worth it to add an 'addressification' optimization step, that allows the tiler to match (load mem) consistently, thereby reducing grammar size because (load reg) disappears | 21:39 | ||
lizmat | well. more specifically on the semantics of $lock.protect({ $lock.protect({ ... }); ... }); | 21:40 | |
brrt | would seem that a reentrant lock allows the second lock to proceed as if nothing happens; a non-reentrant lock would deadlock | 21:41 | |
lizmat | and perhaps $lock.protect({ start { $lock.protect({ ... }) }; ... }); | ||
brrt | ah, that one probably should deadlock | ||
lizmat | should it? | ||
brrt | yes, start starts work on another thread, doesn't it? | ||
brrt checks out the concurrency docs | 21:42 | ||
lizmat | perhaps, having it in a protected piece of code maybe shouldn't ? | ||
I mean, there are plenty of ways this could / should work :-) | |||
brrt | the scheduler must then know about lock scope | 21:44 | |
timotimo | hm, right, if you start { ... } inside a llock.protect, the inside of the start block isn't protected any more | ||
brrt | it... is, in some sense | 21:45 | |
well | |||
wait | |||
hmm | |||
ok, let me correct that | |||
lizmat | .oO( an idiot can ask more questions than all the wise people can answer :-) |
||
brrt | that piece of code would deadlock if the start is awaited within the lock protect block, not otherwise | 21:46 | |
and i refuse to see it otherwise :-) | |||
but i'm going to sleep :-) | |||
see you! | |||
timotimo | hm, right, if the "outer" piece of code awaits the start block and the inside of the start block hopes for the lock to free up, then we'll reach a deadlock situation | 21:47 | |
we're not at the point yet where the await would cause the work to be run on the same thread if it's awaited | |||
in which case - by sheer luck! - the lock would be re-entered rather than deadlocked with | |||
lizmat | we possibly could easily make this work by changing $*SCHEDULER to CurrentThreadScheduler for the $lock.protect scope | 21:49 | |
and add a :scheduler param to Lock.protect to override if you really know what you're doing | 21:50 | ||
timotimo | well, the problem only occurs if you actually lock on that same lock inside the start'd block | ||
21:50
harrow joined
|
|||
lizmat | anyways, this way surely lies madness | 21:51 | |
timotimo | i'm not sure we really want to set CTS for every lock-protected piece of code | ||
lizmat | it's just that maybe in the future, .cueing code would be as simple as doing >>.foo | ||
timotimo | i don't think we can decide that for the user, but i don't really know about all use cases :) |