Zoffix | \o | 00:00 | |
ugexe | github.com/MoarVM/MoarVM/blob/a9f4...text.c#L13 is this comment backwards, or does the logic just look that way? | 00:30 | |
having pasted that i now understand | 00:31 | ||
i think i was confused trying to perceive if it was used in a thread safe way in the context of event loop per thread | 00:33 | ||
samcv | i've been thinking of making concatenation work with more than 2 strings. though technically i guess i could do it for 3 strings since with my renormalized_section code it actually *does* concatenate 3 parts | 01:38 | |
but seems like a pain to do it versus the amount of time to commit to it | |||
and luckily i already got join to be much faster for long strings so that's quite nice | |||
if i *do* do it. i'd probably need to break it down into new functions to make it easier to compose a strand based string | 01:39 | ||
though i kinda would like that… | 01:41 | ||
even if i don't make concatenate able to do more things. it would be nice to have an easy function to add strands onto a string. maybe adding a new struct to hold the relevant data needed during its composition | |||
Geth | MoarVM/inline_ignore_instrumentation_bytesize: cc721c8515 | (Timo Paulssen)++ | 6 files subtract size of profiling ops from bytecode size so that turning profiling on can't push some functions over the inline size limit, which causes differences between profiled and non-profiled runs. Not inlining some candidate only during profiling can have ripple effects if an inlined piece of code causes a bigger frame to bail in the JIT. |
01:59 | |
MoarVM: timo++ created pull request #744: subtract size of profiling ops from bytecode size |
02:04 | ||
02:07
colomon joined
|
|||
timotimo | hm. logging this seems kind of nondeterministic; in one run i get no changes, in the next i get two inlines in the compilation phase, in another i only get one from the "run time" portion | 02:10 | |
"sunk" getting inlined into "wanted" and "visit_op" now that didn't use to be the case | 02:11 | ||
actually, i put the log before the code that actually inspects the inlinee's graph in depth | |||
wow, the difference is especially drastic with MARKER (being inlined into _ws) which is 566 with instrumentation but 176 without | 02:13 | ||
02:56
ilbot3 joined
03:04
KDr2 joined
|
|||
timotimo | can't sleep and what is this? "cannot find appropriate pred to update" mvm oopses? holy crap | 03:46 | |
my changes shouldn't have any effect if profiling isn't active | 03:47 | ||
remember, kids: always null your fields | 03:52 | ||
Geth | MoarVM/inline_ignore_instrumentation_bytesize: ecc6bf0692 | (Timo Paulssen)++ | src/spesh/codegen.c ignore PHI and initialize ignored_bytes field |
||
timotimo | all of the frames that end up below the inlining threshold because the instrumentation overhead is subtracted bail out because of either lastexpayload or (rarely) takeclosure | 04:08 | |
aha, it's also ignoring extops. that's certainly wrong | 04:10 | ||
i'm not sure if lastexpayload should be noinline. | 04:15 | ||
Geth | MoarVM/inline_ignore_instrumentation_bytesize: d799fdb132 | (Timo Paulssen)++ | src/spesh/codegen.c don't ignore extops for size calculation |
04:17 | |
timotimo | in any case, i'm spectesting a moar that allows lastexpayload to be inlined | ||
hm. t/02-rakudo/repl.t fails with "Cannot receive a message on a closed channel" | 04:21 | ||
04:22
mtj_ joined
|
|||
timotimo | t/spec/S05-metasyntax/regex.t has a test for "no unhandled failures left around"; it outputs a few hundred screenfuls of warnings instead of "" :\ | 04:27 | |
t/spec/S10-packages/basic.rakudo.moar fails under the harness (crashes the last test) but not on its own | 04:29 | ||
t/spec/S32-str/CollationTest_NON_IGNORABLE-3.t plans 1246 tests, but runs only 1056; its output ends in "Failed: none" | 04:36 | ||
samcv | timotimo, i'm going to add MVMROOT2 MVMROOT3 and MVMROOT4 that should make using multiple MVMROOT's cleaner codewise and not have us have to do a ton of MVMROOT's one after another. in string_concatenate we have 4 after another | 04:45 | |
06:42
brrt joined
|
|||
brrt | good * #moarvm | 06:45 | |
samcv | good * brrt | 06:48 | |
brrt | what's up? | 06:54 | |
samcv | not much. converting MVMROOT into MVMROOT2 MVMROOT3 MVMROOT4 MVMROOT5's | 06:55 | |
which should make code a lot cleaner when we need multiple MVMROOT's | |||
the max number of MVMROOT's on sequential lines i've found has been 5! | 06:56 | ||
brrt | oh wow | 06:58 | |
unfortunately we can't do recursive macros | 06:59 | ||
samcv | makes things look sooooo much nicer doing this | ||
well yeah. i just added multiple MVMROOT's | |||
so it pushes X number of times and then it runs MVM_root_pop_n(X) | |||
so slightly more efficient with the popping. but mostly just much less distraction and such having to look at so many MVMROOT's | 07:00 | ||
wonder how many lines i'll save | 07:01 | ||
brrt | pretty cool | 07:02 | |
samcv | i had thought of doing this a while ago, but never got around to it | 07:03 | |
brrt | yeah, i know what that's like | ||
07:16
domidumont joined
|
|||
samcv | will be a ton easier to add test adding or removing something from an MVMROOT as well | 07:17 | |
just the variable + ', ' instead of having to mess with adding extra braces and parens and stuff | |||
07:35
domidumont joined
07:37
domidumont joined
07:40
travis-ci joined
|
|||
travis-ci | MoarVM build failed. Samantha McVey 'Add MVMROOT2..MVMROOT5 to make rooting multiple variables easier | 07:40 | |
travis-ci.org/samcv/MoarVM/builds/296135710 github.com/samcv/MoarVM/compare/3e...191078c38b | |||
07:40
travis-ci left
08:00
brrt joined
|
|||
brrt | uhuh | 08:00 | |
samcv | ah that makes sense. since i don't have tags | 08:06 | |
Geth | MoarVM: 87191078c3 | (Samantha McVey)++ | 34 files Add MVMROOT2..MVMROOT5 to make rooting multiple variables easier This makes it much easier and visually cleaner to root multiple variables at once. Should not have much impact on speed since the only extra efficiency is one call to pop instead of multiple. |
08:07 | |
08:30
zakharyas joined
08:36
zakharyas joined
09:25
robertle joined
10:02
zakharyas joined
11:06
zakharyas joined
11:29
bisectable6 joined
|
|||
lizmat | assets.bitbashing.io/papers/lockless.pdf # is this something good ? | 12:19 | |
apparently a better title would have been: What every C++ systems programmer should know about std::atomic | 12:21 | ||
so probably not of use here, so sorry for the noise :-) | 12:22 | ||
dogbert2 | I'll add to the noise :) cr.openjdk.java.net/~rpressler/loom...posal.html # Fibers and Continuations for the Java Virtual Machine | 12:25 | |
brrt | re: that java thing | 12:40 | |
i read that, and i don't think continuations are the proper abstraction for java | |||
in fact, i think continuations are not a very good abstraction, in general | 12:42 | ||
but java, is stack machine all the way | 12:46 | ||
dogbert2 | and those are not continuation friendly? | 12:50 | |
i.e. difficult to implement | |||
brrt | it depends on what you want your continuations to do | 12:54 | |
'true' continuations are hard because they effectively must copy the *entire* thread state | |||
for a green thread i mplementation, a one-shot delimited continuation is much simpler | 12:55 | ||
in which case, most people just shut up and call *that* a thread | |||
or fiber, or whatever | 12:56 | ||
jnthn | I'd say one-shot continuations are OK plumbing, which is what we do rather than directly exposing them | 13:19 | |
lizmat | jnthn: there is no way to reset attrinited state, right ? | 13:39 | |
setting default fails in this case because the attribute is already marked because of the additional attribute set up: | 13:41 | ||
m: class A { has %.a is SetHash = 1,2,3 }; dd A.new | |||
camelia | A.new(a => SetHash.new()) | ||
lizmat | m: class A { has @.a[3] = 1,2,3 }; dd A.new # fails for the same reason | ||
camelia | A.new(a => Array.new(:shape(3,), [Any, Any, Any])) | ||
jnthn | lizmat: There isn't actually any attrinited stage | 13:42 | |
*state | |||
It's just the absence of the field having been vivified | |||
lizmat | ok, so then we need another way to mark: this needs initialization for the above cases (involving BUILDPLAN code 9) | 13:43 | |
13:44
zakharyas joined
|
|||
lizmat | jnthn: perhaps it would be an idea to push an additional TWEAK into the buildplan in that case? | 13:55 | |
jnthn | Additional TWEAK? | 13:58 | |
lizmat | well, a code block to be executed at the end | 14:00 | |
jnthn | But how would we decide whether to run it? | ||
lizmat | basically like this: | ||
class A { has @.a[4]; method TWEAK(:@a) { say "tweaking"; @!a = 1,2,3,4 unless @a } }; dd A.new | |||
jnthn | And what then about | ||
lizmat | m: class A { has @.a[4]; method TWEAK(:@a) { say "tweaking"; @!a = 1,2,3,4 unless @a } }; dd A.new | ||
camelia | tweaking A.new(a => Array.new(:shape(4,), [1, 2, 3, 4])) |
||
lizmat | m: class A { has @.a[4]; method TWEAK(:@a) { say "tweaking"; @!a = 1,2,3,4 unless @a } }; dd A.new(a => (4,5,6,7)) | 14:01 | |
camelia | tweaking A.new(a => Array.new(:shape(4,), [4, 5, 6, 7])) |
||
jnthn | Oh, you're seeing if @a was passed | ||
lizmat | yup | ||
jnthn | Thing is | ||
There's no promise that we didn't assign more indirectly | 14:02 | ||
lizmat | yeah :-( | ||
jnthn | I don't know how to solve this. I've never much liked the attrinnited thing | ||
lizmat neither... | 14:03 | ||
jnthn | I don't think it's possible to make that appraoch robust, and it isn't a very performant thing to provide | ||
lizmat | but if we can't fix this (at leas not now) | ||
jnthn | Or more to the point, providing it costs us | ||
By making it hard to get rid of the lazy attribute initialization thing | |||
lizmat | perhaps we shouldn't allow defaults on BUILDPLAN code 9 things | ||
so basically make it a NYI | 14:04 | ||
jnthn | And, as these cases bring up, we can't actually get every case to work on lazy attr init either | ||
At some point we need to work out what we really mean by "the attribute was set" | |||
lizmat | yeah, ok, so I'm going to make it a NYI | 14:05 | |
class A { has @.a[4] = 1,2,3 } and class A { has %h is SetHash = 1,2,3 } | |||
is that a plan for now ? | 14:06 | ||
14:07
MasterDuke joined
|
|||
jnthn | Yeah, at least it'll prevent people some frustration | 14:07 | |
lizmat | ok | 14:08 | |
MasterDuke | hello all (from a train, so likely to drop off intermittently) | 14:10 | |
anybody have thoughts/comments about github.com/MoarVM/MoarVM/pull/737 (and the subsequent nqp+rakudo PRs)? | 14:11 | ||
Zoffix | MasterDuke: yeah, we need that op, but I don't got enough skill to successfully review that PR :) | 14:12 | |
dogbert2 closed two MoarVM tickets, #721 and #724, because jnhtn++ fixed them some time ago | 14:18 | ||
jnthn | MasterDuke: Reviewed it | ||
MasterDuke | jnthn: thanks, i just noticed that missing MVMROOT | 14:19 | |
there is at least one other missing one though, because i copied that line from MVM_bigint_from_num | |||
jnthn | If that's a num64, then that's not a GC-able value | 14:20 | |
14:21
stmuk_ joined
|
|||
MasterDuke | `MVMObject * const result = MVM_repr_alloc_init(tc, result_type);` but this line doesn't depend on what the other arg is, right? | 14:22 | |
jnthn | result_type is only used there so it need not be rooted | 14:23 | |
MasterDuke | but it's also only used there in my new function? | 14:24 | |
jnthn | Yes, it's `a` that needs rooting | 14:25 | |
MasterDuke | ah | ||
lizmat | jnthn timotimo is there a way to get at the World object while in create_BUILDPLAN ? | 14:26 | |
jnthn | $*W | ||
lizmat | ack | 14:27 | |
jnthn | You know the compiler is in scope, so should be safe | ||
MasterDuke | PR updated | 14:33 | |
14:37
zakharyas joined
15:21
japhb joined
|
|||
lizmat | m: m: use Telemetry; say T.max-rss # object method interface | 16:04 | |
camelia | 87168 | ||
lizmat | m: m: use Telemetry :COLUMNS; say max-rss # subroutine interface | ||
camelia | 117148 | ||
lizmat | 30MB difference ?? wow | ||
timotimo | lizmat: it could come down to what gets deserialized and what doesn't | 16:05 | |
i can give you a moarvm patch that gives you a tiny bit of info about that | |||
16:05
brrt joined
|
|||
lizmat | timotimo: a moarvm patch is too dangerous in my hands | 16:06 | |
timotimo | haha | ||
patch responsibly | |||
lizmat | seriously though, I will need some serious guidance before I feel comfortable hacking on Moar | 16:07 | |
timotimo | all that patch would do is spit out what gets deserialized | ||
lizmat | a bit like "use trace" as it were? | 16:08 | |
m: use trace: say "foo"; no trace; say "bar" | |||
camelia | ===SORRY!=== Error while compiling <tmp> Confused at <tmp>:1 ------> use trace⏏: say "foo"; no trace; say "bar" |
||
lizmat | m: use trace; say "foo"; no trace; say "bar" | ||
camelia | 2 (<tmp> line 1) say "foo" foo bar |
||
brrt | lizmat: we can give that guidance | 16:11 | |
we have the technology | |||
lizmat | :-) | 16:13 | |
timotimo | samcv: src/strings/unicode.c:71935:20: warning: return makes integer from pointer without a cast [-Wint-conversion] | 16:16 | |
return ""; | |||
what this? | |||
brrt | that funcrtion doesn't have the proper type specified? | 16:17 | |
timotimo | perhaps | ||
ah because int is the default return type? | |||
jnthn | iirc, if you don't puta a return type, it defaults to int | 16:19 | |
*put a :P | |||
16:23
unicodable6 joined
|
|||
timotimo | that much is true | 16:24 | |
Geth | MoarVM: e4b39aa1dc | (Timo Paulssen)++ | src/6model/reprs/P6opaque.c show the actual type when "no such attribute" error occurs until now it only showed the type that was specified as the one having the attribute; no indication of whether the type has anything to do with the object being operated upon. |
16:26 | |
timotimo | jnthn: do you think it makes sense to optimize $!todo.DEFINITE to first look if attrinited gives true? | 16:28 | |
jnthn | No, I think attrinited is going away | 16:30 | |
Along with all lazy attribute vivification | |||
timotimo | thread safety issues? | 16:32 | |
jnthn | That plus it makes the JIT for reading attributes giant/branchy | 16:33 | |
timotimo | mhm | ||
jnthn | But yeah, that you can very easily trip over it when writing lock-free data structures is also bad | 16:34 | |
Geth | MoarVM/deserialization_debugspam: 0acc10814c | (Timo Paulssen)++ | src/6model/serialization.c debugspam what objects get deserialized |
16:44 | |
brrt | wait, attribute autovivis going away? | 16:59 | |
yay! | |||
next thing you'll tell me is we're going to get rid of containers :-P | 17:00 | ||
17:46
zakharyas joined
18:06
zakharyas joined
18:09
Ven joined
18:27
domidumont joined
18:59
MasterDuke joined
|
|||
Geth | MoarVM: 25bbba8c57 | (Samantha McVey)++ | 2 files unicode: make sure to return 0 not "" from get_property_int Accidently put the same return value as for get_property_str. The return value should be 0 which is what we had been doing prior. |
19:32 | |
samcv | timotimo, fixed that error | ||
19:33
Ven joined
|
|||
samcv | actually that can probably be simplified and just return 0 if it can't find the bitfield row like before. sorta.. was mainly the str one that needed to be fixed so it would return the default enum value | 19:33 | |
but i still am not sure how to fix getting <:C> to match Cn things | 19:34 | ||
oh looks like MVM_UNICODE_PROPERTY_C | 19:35 | ||
nice! i think i solved that bug | 19:38 | ||
if we can't find the codepoint in the bitfield rows, what we do for the int prop lookup is return 0. but that neglects the fact that the C property is boolean, and since unknowns are Cn general category that needs to be true | 19:39 | ||
though annoyingly how can we tell the difference between hard 0 and soft 0 (nothing found). uncertain | 19:40 | ||
though for the collation stuff i just had everything off by 1 so 0 would be nothing found and 1 would be "0" from the UCD database for collation | 19:41 | ||
19:47
AlexDaniel joined
19:56
wander joined
|
|||
samcv | i feel accomplished now :) | 20:00 | |
20:16
zakharyas joined
|
|||
MasterDuke | jnthn: think github.com/MoarVM/MoarVM/pull/737, github.com/MoarVM/MoarVM/pull/734, and github.com/MoarVM/MoarVM/pull/689 are good now? | 20:22 | |
Geth | MoarVM: e767888195 | (Samantha McVey)++ | 2 files unicode: Make sure 'Cn' codepoints match with C enum Unassigned codepoints have General Category Cn. Since this returns 0 for unknowns, unless we return 1 for property C then these unknows won't match with <:C>. |
||
20:23
wander left
|
|||
jnthn | MasterDuke: Close, but no cigar | 20:40 | |
MasterDuke | of course. after the root, or inside? | 20:42 | |
jnthn | after | 21:01 | |
Well, either will work | 21:02 | ||
But after is probably more natural | |||
MasterDuke | k, will do | ||
jnthnupdated again | 21:23 | ||
jnthn++ updated again (ugh, this one-handed typing) | |||
Zoffix stifles a laugh | 21:33 | ||
22:21
cognominal joined
|
|||
lizmat | Sanity check: with this code: | 23:06 | |
await (^16).map({start { qqx{echo -n foo $_} } }) | |||
I can see there are 16 general worker threads. I sorta woulda have expected to also see 16 affinity worker threads | 23:07 | ||
am seeing only one | |||
is that to be expected ? | 23:08 | ||
this is about GH #1202, btw | |||
sleep& | 23:16 | ||
23:27
evalable6 joined
|
|||
Geth | MoarVM/master: 4 commits pushed by MasterDuke17++, (Jonathan Worthington)++ | 23:37 | |
MoarVM: 9aa99f3e9f | (Nick Logan)++ | 2 files Add more missing MVMROOTs See: 9ad1f5f |
23:38 | ||
MoarVM: b7b1f3e40f | (Jonathan Worthington)++ (committed using GitHub Web editor) | 2 files Merge pull request #742 from ugexe/more_mvmroot_redo Add more missing MVMROOTs |
|||
MasterDuke | thanks, jnthn++ | 23:39 | |
Zoffix bumps | 23:40 | ||
Geth | MoarVM/master: 4 commits pushed by (Nick Logan)++, (Jonathan Worthington)++ | 23:41 | |
jnthn | .tell lizmat Yes, we only create a new affinity workers reluctantly, e.g. if the existing ones have stuff in their queues. | 23:44 | |
yoleaux | jnthn: I'll pass your message to lizmat. | ||
jnthn | .tell lizmat That tends to work out pretty well: web servers scale their threads for message handling appropriately by load, for example. | 23:48 | |
yoleaux | jnthn: I'll pass your message to lizmat. |