AlexDaniel | .seen azawawi | 01:35 | |
yoleaux | I saw azawawi 27 May 2017 12:50Z in #perl6: <azawawi> jnthn: in Graphics::PLplot im aiming on providing Raw (native) and cooked with sugar API :) | ||
AlexDaniel | test fails under prove but not when you run the file by itself | ||
my best guess is that it is a buffering issue also, but I have troubles making sense out of it | 01:36 | ||
Geth | roast: skids++ created pull request #314: adjust tests for closure of RT#131187 |
01:40 | |
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=131187 | ||
Geth | roast: 563f957d06 | skids++ | S02-names/is_default.t unskip prexisting test that covers RT#131387 Fix the obvious error in the test, so maybe do 6.c.errata, too |
01:41 | |
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=131387 | ||
Geth | roast: ce1a5a2e6b | skids++ | S02-names/is_default.t Thoroughly test attributes now that they work |
||
roast: 6271d239cd | skids++ (committed using GitHub Web editor) | S02-names/is_default.t Merge pull request #314 from skids/rt131387 Sorry, that's RT#131387 |
|||
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=131387 | ||
AlexDaniel | .seen pierre_ | 02:40 | |
yoleaux | I saw pierre_ 7 Jul 2017 14:38Z in #perl6: <pierre_> which one should i use? (knowing that i can't install HTTP::UserAgent with zef, some tests are failing | ||
AlexDaniel | .seen pierre | ||
yoleaux | I haven't seen pierre around. | ||
AlexDaniel | three modules to go | 02:49 | |
Geth | roast: skids++ created pull request #315: Add tests for RT#131962 |
03:12 | |
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=131962 | ||
Geth | roast: 38faa6da57 | skids++ | S32-hash/keys_values.t Add tests for RT#131962 |
||
roast: 8fdce37baa | skids++ (committed using GitHub Web editor) | S32-hash/keys_values.t Merge pull request #315 from skids/rt131962 Add tests for RT#131962 |
|||
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=131962 | ||
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=131962 | ||
travis-ci | Rakudo build passed. Elizabeth Mattijsen 'Make BUILDALLPLAN and BUILD_LEAST_DERIVED use same internal logic | 04:34 | |
travis-ci.org/rakudo/rakudo/builds/275184428 github.com/rakudo/rakudo/compare/5...06b843121b | |||
samcv | good * | 05:28 | |
AlexDaniel | o/ | 05:41 | |
Skarsnik | Hello | 05:51 | |
AlexDaniel | \o | 06:03 | |
Skarsnik_ | AlexDaniel, did you manage to read the toast data? ^^ | 06:04 | |
AlexDaniel | Skarsnik_: sure. There are now three tickets like this: github.com/azawawi/perl6-ncurses/issues/16 | 06:07 | |
Skarsnik_: and RT #132085 which is now closed and RT #132083 | |||
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=132085 | ||
Link: rt.perl.org/rt3/Public/Bug/Display...?id=132083 | |||
AlexDaniel | and that's it. | 06:08 | |
Skarsnik_ | good ^^ | ||
AlexDaniel | Skarsnik: thanks :) | 06:09 | |
Skarsnik | 3 modules is not that much in the end ^^ | 06:10 | |
AlexDaniel | the picture is much better than it was last month :) | 06:12 | |
but we had less changes this time also | 06:13 | ||
Skarsnik: RT #132083 is quite interesting actually | |||
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=132083 | ||
AlexDaniel | but I have to get some sleep :) | 06:14 | |
Skarsnik | I have to go x) | ||
good nigh then x) | |||
[Tux] | This is Rakudo version 2017.08-123-gc4043b068 built on MoarVM version 2017.08.1-156-g49b90b99 | 06:22 | |
csv-ip5xs 1.348 - 1.391 | |||
test 9.915 - 10.123 | |||
test-t 3.542 - 3.669 | |||
csv-parser 11.447 - 11.494 | |||
lizmat | Files=1223, Tests=67782, 289 wallclock secs (11.02 usr 4.75 sys + 1950.09 cusr 205.81 csys = 2171.67 CPU) | 07:45 | |
m: dd (1,2,3).Set.any # one could argue that should be (1,2,3).any | 08:11 | ||
camelia | any(1 => Bool::True, 3 => Bool::True, 2 => Bool::True) | ||
lizmat | opinions? if so, what about Bag.any and Mix.any ? | ||
nine | I've never really liked that our sets are really just hashes and that we make that so obvious. | 08:28 | |
jnthn | I think .any working by consistently .list-ifying the thing is probably right | 09:08 | |
Geth | rakudo/better-sched: 340d8ed3bb | (Jonathan Worthington)++ | src/core/ThreadPoolScheduler.pm Respect max_threads To a degree, anyway. We will always start one timer, general, and affinity thread if they're needed even if it takes us over the maximum number of threads. |
09:52 | |
rakudo/better-sched: c50d35a90e | (Jonathan Worthington)++ | src/core/ThreadPoolScheduler.pm Add extra timer workers as needed |
|||
jnthn | Now my benchmark doesn't start 250 threads and uses 2.3 GB of RAM :P | 09:58 | |
*and use | |||
Now it hits the default limit of 64 | |||
Benchmark is await start { (eager (^10000).grep(*.is-prime)).elems } xx 500; | 09:59 | ||
Essentially, CPU-bound work | |||
Where we don't really benefit from more threads than CPU cores | |||
So next is to try and look at rusage and be smarter on that | |||
What's interesting, though, is that the time difference between the two is only 2s (2:17 vs 2:19) | 10:00 | ||
That is, these days it seems MoarVM copes pretty well with juggling a lot more threads than should sensibly be started, if it's gotta | 10:01 | ||
Probably thanks for my re-write of GC orchestration over the summer | |||
*thanks to | |||
Geth | nqp: a3b1e9cfb9 | (Jonathan Worthington)++ | tools/build/MOAR_REVISION Bump for new MoarVM getrusage op |
10:48 | |
nqp: version bump brought these changes: github.com/MoarVM/MoarVM/compare/2...9b90b99... No newline at end of file 2d9ec57ab7 | (Jonathan Worthington)++ | src/vm/moar/QAST/QASTOperationsMAST.nqp |
|||
Ā¦ nqp: version bump brought these changes: github.com/MoarVM/MoarVM/compare/2...9b90b99... No newline at end of file | |||
jnthn | Well, there's getrusage, for whatever purposes people wish to put it to :) | 10:49 | |
lunch & | 11:17 | ||
stmuk | I'm seeing t/spec/S03-operators/buf.t fail on Rakudo version 2017.08-123-gc4043b0 built on MoarVM version 2017.08.1-158-g3c3a52f on linux | 12:04 | |
MasterDuke | consistently? even when run by itself? it's fine for me at same rakudo and nearly the same moar | 12:09 | |
stmuk | no and I'm running on its own in a loop and it seems ok :/ | 12:13 | |
jnthn back | 12:14 | ||
MasterDuke | jnthn: did you happen to see gist.github.com/MasterDuke17/7926d...0621e59b03 ? top 30 by exclusive_time for a profile-compile of --target=parse at 2017-2-3 and 2017-9-10 | 12:17 | |
very different results, but roughly the same total time to compile | |||
all the profiles i did up to and including 2017-2-3 had pretty similar results, then i didn't do any for a while, and now it's quite different | 12:21 | ||
maybe i should go back and do one at each release inbetween | |||
stmuk | hmm I only saw the buf.t failure once | 12:23 | |
with TEST_JOBS=6 | |||
MasterDuke | there are a couple that flop during a full spectest, but never fail when run by themselves | 12:25 | |
lizmat | m: class A { has $.a is required = 42 }; dd A.new # wonder this should be a compile-time error | 12:34 | |
camelia | The attribute '$!a' is required, but you did not provide a value for it. in block <unit> at <tmp> line 1 |
||
lizmat | m: class A { has $!a is required }; dd A.new # how can we ever set the private attribute during object creation? | 12:35 | |
camelia | The attribute '$!a' is required, but you did not provide a value for it. in block <unit> at <tmp> line 1 |
||
jnthn | m: class A { has $!a is required; submethod BUILD() { $!a = 42 } }; dd A.new | 12:37 | |
camelia | A.new | ||
lizmat | aaahhh :-) | ||
jnthn | I can imagine having some less trivial BUILD logic that conditionally sets stuff and finding `is required` a useful sanity check | ||
(Like, something should be set on all paths, then we make a thinko) | 12:38 | ||
lizmat | and the "class A { has $.a is required = 42 }" case ? | ||
jnthn | That's a useless use of is required, I think :) | 12:39 | |
lizmat | should it be a compile time error ? | ||
at BUILDPLAN creation time ? | |||
or a warning: "useless use of "is required" when a default is provided" ? | 12:40 | ||
jnthn | More like at attribute composition time. | ||
It could feasibly be | |||
Error feels a tad harsh | |||
lizmat | ah, yes, add a worry at that time? | ||
jnthn | Not worth breaking existing code that does this over | ||
Yeah, something like that | |||
[SCHEDULER] Per-core utilization: 148.333333 | 12:41 | ||
wat :) | |||
stmuk | hmm the sha1 hashes in the perl6 -v are longer in newer versions of git | 12:44 | |
perlpilot | stmuk: maybe they adopted a different algorithm by default than SHA1 | 12:46 | |
samcv | stmuk, does `git describe` work? in nqp or rakudo repo | 12:48 | |
what about `git describe --tags` though they probably give the same | 12:49 | ||
i have 2.14.1 what version do you have stmuk | 12:50 | ||
also i'm going to bed, will read backlog in the morning | |||
stmuk | I'm using git version 2.7.4 which reports 2017.08-123-gc4043b0 and git version 2.13.2 which reports 2017.08-123-gc4043b068 | 12:52 | |
perlpilot | According to the docs, "core.abbrev - Set the length object names are abbreviated to. If unspecified or set to "auto", an appropriate value is computed based on the approximate number of packed objects in your repository" So, perhaps they changed the algorithm to figure out the minimum number of characters | 12:56 | |
(assuming you haven't actually set core.abbrev anywhere or didn't specify ala `git rev-parse --short=9 ...` | 12:57 | ||
) | |||
stmuk | github.com/git/git/commit/e6c587c7...b08bc86892 | 13:04 | |
jnthn | Cool, got it starting up to the number of CPU cores we have threads for that benchmark I posted earlier | 13:24 | |
Which again greatly reduces memory use | |||
Results in a time reduction too thanks to not over-subscribing the CPU. | |||
Drops from 3.28 system to 0.36 system | 13:25 | ||
Probably from not having the overheads of dealing with too many threads | |||
Geth | rakudo/better-sched: 683037be69 | (Jonathan Worthington)++ | src/core/ThreadPoolScheduler.pm Start factoring CPU cores and usage into scheduler So that it can pick a better number of threads for the workoad. Now it only boosts threads beyond the number of CPU cores if detects very low resource usage in combination with a queue of work, which is suggestive of a deadlock that may be resolved by an extra thread. |
13:29 | |
rakudo/better-sched: 89b9ac7830 | (Jonathan Worthington)++ | src/core/ThreadPoolScheduler.pm Correct typos; MasterDuke17++ |
13:31 | ||
lizmat | jnthn: with my BUILDPLAN work I'm now getting: Serialization Error: missing static code ref for closure '' (gen/moar/Metamodel.nqp:1455) | 13:50 | |
this seems to be related to me just wanting to put a block into the buildplan | 13:51 | ||
@plan[@plan - 1][4] := -> $obj, $attr { ... } | |||
jnthn | Yeah, you can't do that | ||
lizmat | that's a "can't",. period ? :-( | ||
or is there a way around that ? | |||
jnthn | I think that sub ($obj, $attr) { ... } may work out | 13:52 | |
lizmat tries | |||
jnthn | point blocks in NQP aren't really code objects | ||
One of the many places it cheats :) | |||
lizmat | hehe... ok | 13:53 | |
jnthn | Hurrah for trying real-world things against the scheduler | ||
(found 2 bugs so far that stresstest didn't tickle) | 13:57 | ||
lizmat | that also happened with the old scheduler? or brand new bugs ? | 13:59 | |
jnthn | New bugs in the new scheduler | ||
lizmat | squash them hard! :-) | ||
jnthn | Yeah, that's the aim :) | 14:00 | |
lizmat | Cannot find method 'throw' on object of type NQPMu | 14:13 | |
sigh :-( | |||
Geth | rakudo/better-sched: 7c18112c59 | (Jonathan Worthington)++ | src/core/ThreadPoolScheduler.pm Never hand back queue in Scalar |
14:16 | |
rakudo/better-sched: c285b489c6 | (Jonathan Worthington)++ | src/core/ThreadPoolScheduler.pm Consistently use binding on $!affinity-workers |
|||
rakudo/better-sched: 7fcab1067d | (Jonathan Worthington)++ | src/core/ThreadPoolScheduler.pm More typo fixes; MasterDuke17++ |
|||
jnthn | Hm, getting a few uninit warnings now when I stress Cro (which is how I found the above issues) | 14:17 | |
Wonder if they're from the new scheduler too | 14:18 | ||
Yes. | 14:22 | ||
lizmat | jnthn: my idea is to replace the "is required" handling by making it a default value that throws | 14:23 | |
jnthn | hm, interesting :) | ||
lizmat | basically: has $.a = X::Attribute::Required.new(...).throw | ||
jnthn | Can't think of an obvious downside ot that | ||
lizmat | well, the downside is that I can't get it to work | 14:24 | |
:-( | |||
jnthn | ;) | ||
diff? | |||
lizmat | well, the complete diff is rather large | 14:25 | |
this is the bit where I try to set the block: | |||
@plan[@plan - 1][4] := sub ($obj, $attr) { | |||
X::Attribute::Required.new( | |||
name => $attr.name, | |||
why => $attr.required | |||
).throw | |||
}; | |||
as the default value block is called as a method on the object, with the Attribute object as the parameter | 14:26 | ||
Geth | rakudo/better-sched: b5605c2dd6 | (Jonathan Worthington)++ | src/core/ThreadPoolScheduler.pm Fix affinity worker threshold logic Gets rid of a warning it very rightly produced, which showed up the problem |
14:27 | |
jnthn | Isn't that NQP code? | ||
lizmat | yes | ||
jnthn | X::Attribute::Required doesn't exist yet | ||
The build plan is put together in the MOP | 14:28 | ||
The MOP is built before CORE.setting | |||
That and the namespces of the two langs don't overlap, doubly so given Perl 6 resolves things lexically too | |||
lizmat | ok, I just had a bit of a epiphany | ||
jnthn | Did you take a look at whether you can do it in Attribute.compose? | ||
lizmat | you mean, the warning for has $.a is required = 42? | 14:29 | |
jnthn | No, adding the default that throws | ||
Though I guess that makes introspection of defaults show it up, which is arguably naughty | |||
lizmat | yeah... :-( | ||
but, i could call it something else :-) | 14:30 | ||
ok, that's a thought :) | |||
jnthn | m: class A { has $.x is required; has $.y = 42; submethod TWEAK() { say $!y } } | ||
camelia | ( no output ) | ||
jnthn | m: class A { has $.x is required; has $.y = 42; submethod TWEAK() { say $!y } }; A.new | ||
camelia | The attribute '$!x' is required, but you did not provide a value for it. in block <unit> at <tmp> line 1 |
||
jnthn | m: class A { has $.x is required; has $.y = 42; submethod TWEAK() { $!x = 100; say $!y } }; A.new | ||
camelia | The attribute '$!x' is required, but you did not provide a value for it. in block <unit> at <tmp> line 1 |
||
lizmat | would you consider that a bug? | ||
jnthn | (Just checking TWEAK is too late) | ||
lizmat | that last one ? | ||
jnthn | Well, your optimization idea is predicated on it not being :-) | 14:31 | |
I'd never really considered it, tbh | |||
Cool, now a Cro service that gets just one request at a time starts just a couple of pool threads, and one hammered with 100 concurrent requests maxes out at 7 threads on my 12-core box, presumably 'cus it feels adding more won't help much (will do some tuning though to see if it's really chosing well) | 14:42 | ||
*choosing | |||
Bad news is I seem to have got a new SEGV | 14:43 | ||
Hm, which seems to be nothing to do with my changes, looking at the stack trace | 14:45 | ||
And may also be the async socket server crash that gfldex reported | |||
d'oh | 14:47 | ||
MoarVM HEAD sorts it out | 14:51 | ||
gfldex: ^^ | |||
Geth | rakudo/better-sched: de311f46a9 | (Jonathan Worthington)++ | src/core/ThreadPoolScheduler.pm Add RAKUDO_SCHEDULER_DEBUG_STATUS env var Which turns on output of regular status info, at the moment just the calculated per-core utilization. This makes RAKUDO_SCHEDULER_DEBUG just contain information about what kinds of new threads have been created, which got hard to find among all the regular output made with each supervision. |
14:57 | |
Skarsnik | . | 15:04 | |
Geth | rakudo/better-sched: 3b98fb9e39 | (Jonathan Worthington)++ | src/core/ThreadPoolScheduler.pm Supervising 100 times a second is likely enough |
15:06 | |
jnthn | Alright, I think that gets the scheduler into better shape :) | 15:12 | |
Of course one can measure and tweak these things almost endlessly | |||
But it seems to result in a lot less threads (and thus memory) for things that just do the odd light bit of async (like run does behind the scenes, or a web app barely under load), converges on the number of available cores for CPU bound things, and can add up to 64 threads by default now (though will be reluctant to go far beyond the CPU core count unless it looks like there's a deadlock due to insufficient threads) | 15:16 | ||
nine | Sounds like a huge improvement :) | 15:17 | |
jnthn | Nicer for those of you with AMD 32-core chips too ;) | 15:18 | |
Skarsnik | ^^ | ||
nine | \o/ | 15:19 | |
Skarsnik | The news Ryzen 7 cpu are tempting x) | ||
not sure they do 32 cores yet for regular people x) | |||
nine | Well 16 cores and 32 threads: www.amd.com/en/products/cpu/amd-ry...pper-1950x | 15:20 | |
Skarsnik | Only 1200ā¬ | 15:21 | |
cheap | |||
jnthn | Yeah, when I said core I meant "virtual cores", or what your OS things it has to scheduler threads on :) | 15:22 | |
*thinks | |||
Anyways, will merge this after the weekend release; it's just too close now for such a key component to be replaced | |||
Oh, also I need to probably make it work on JVM too :S | |||
And knowing JVM, there won't be a getrusage :P | 15:23 | ||
Skarsnik | the jvm has nothing for this kind of work? | 15:24 | |
jnthn | I'd assume it does | ||
Though I don't know what | |||
And my initial search for getrusage equivalent in java doesn't show much up | 15:25 | ||
Skarsnik | I mean to schedule thread so you don't have write a thread scheduler for it? | ||
jnthn | Except that somebody called it through nja | ||
*jna | |||
Yeah, but the scheduler is a Perl 6 level thing | |||
ilmari | docs.oracle.com/javase/8/docs/jre/...sCpuTime-- ? | 15:28 | |
jnthn | Think that's what stackoverflow.com/questions/366474...pplication is talking about also | 15:29 | |
Yeah, that'd be good enough I think | |||
Thanks | |||
[Coke] | jnthn++! | 15:51 | |
Geth | nqp: 38aa9ce23f | (Jonathan Worthington)++ | 2 files A very cheating getrusage for JVM In that it only fills out UTIME_SEC and UTIME_MSEC, which mercifully are both one of the few things that seems easy to emulate on the JVM and also the only ones we really need for Rakudo. |
15:56 | |
ugexe | is there a better way to hide output from a Proc::Async than .stdout.tap: {} ? | 16:05 | |
jnthn | No | 16:06 | |
Well, actually yes | |||
.stdout(:bin).tap: {} will save decoding data only to throw it away | 16:07 | ||
ugexe | ah right | ||
jnthn | But in terms of shorter, no | ||
ugexe | yeah didnt mean shorter... just avoiding overhead | ||
jnthn | Ah, then yeah, that'll save a good amount of it | ||
May also be possible, though not so portable, to .bind-stdout(INIT open("/dev/null", :w)) | 16:08 | ||
Which I suspect would be cheapest | 16:09 | ||
[Coke] | wonder if we'd like a .stdout(:null) | ||
jnthn | An .ignore-stdout would be more consistent with the current API | 16:10 | |
ugexe | i was ideally trying to open less file handles, since there is still an issue with exhausting file handles with something like `while 1 { with Proc::Async.new(:w, ...) { .tap.stdout: {}; .kill } }` | 16:11 | |
ilmari | $*SPEC.devnull is the portable spelling of "/dev/null" | 16:12 | |
Geth | rakudo/better-sched: 596611c8fd | (Jonathan Worthington)++ | src/core/ThreadPoolScheduler.pm Fix non-MoarVM build with new scheduler Dropping the atomics gives slightly less accurate data, but should not cause any bad behaviors. |
16:14 | |
ugexe | my @procs; my @promises; for ^1000 { .say; if @procs { @procs[*-1].kill; }; my $proc = Proc::Async.new("sleep", "20"); $proc.stdout.tap(-> $ {}); @promises.push: $proc.start; @procs.push: $proc; }; await @promises; # the code example from rt that exhaust descriptors | ||
jnthn | Hm, doesn't @procs keeps all of the procs, so GC can never collect them? | 16:17 | |
ilmari | .oO( java.util.concurrent.atomic.AtomicInteger? ) |
||
jnthn | ilmari: The problem isn't that we can't do them on JVM, just that I don't have time for that yak shave right now :) | ||
ilmari | jnthn: fair enough | 16:18 | |
Geth | nqp: 43a18f5aa6 | (Jonathan Worthington)++ | src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/ConcBlockingQueueInstance.java Support elems on ConcBlockingQueue Which is needed by the new Rakudo scheduler |
16:21 | |
jnthn | Alright, that gets the JVM happier with my better-sched branch | 16:22 | |
ugexe | jnthn: a similar issue (also by hoelzro) shows a different example, titled "Garbage collected running Proc::Async objects dont seem to clean up their handles" | 16:23 | |
if @procs.pop -> $p { $p.kill } didn't change anything for me though | |||
jnthn | Hm, then looks like there perhaps is a leak somewher | 16:24 | |
*somewhere | |||
ugexe | i was hunting for it yesterday. no luck yet though | ||
jnthn wonders where | |||
The handle is closed here: github.com/MoarVM/MoarVM/blob/mast...ops.c#L589 | 16:26 | ||
I'm curious if the stdout supply gets the done signal | |||
ugexe | i know it get the quit signal | ||
jnthn | Oh, on kill? | 16:27 | |
Or on running out of handles? | |||
github.com/MoarVM/MoarVM/blob/mast...ops.c#L607 shows a close on the quit path too | |||
I'd maybe throw printf or so in around those if you want to debug, to check if either of those closes are reached | 16:28 | ||
ugexe | if i do quit => -> $ { } it will run through all 1000 iterations and then give the message for running out of handles | ||
jnthn | Ah, ok | ||
I don't knowt hat'd be on the path we're looking at | |||
I'd see if done gets send though | |||
ugexe | it fired ~22 times out of the 130 (where it gives the handle exhaustion error) | 16:29 | |
done fired^ | |||
this is with a ulimit of 150 as in the RT btw | 16:31 | ||
jnthn | huh, that's stranger still | 16:33 | |
Why would be only sometimes get the EOF... | |||
ugexe | i thought it just started queuing more processes up towards the end before they were getting started | 16:34 | |
jnthn | Oh | 16:35 | |
That's possible | |||
In that case, there's not a lot we can do | |||
That'd imply we're not leaking handles, just having enough processes active at once that we really do run out | |||
ugexe | so its a race against nqp::procasynckill (or whatever its called)? | 16:37 | |
jnthn | I guess it's also possible there's an isuse there | 16:38 | |
Can we ever fail to kill because the process wasn't started yet, etc. | |||
ugexe | i was just wondering how i didn't get an exception for that | ||
jnthn | It happens async and it seems there's no way to block on knowing the signal was sent: github.com/MoarVM/MoarVM/blob/mast...ops.c#L882 | 16:39 | |
Just checked that there's no way to race between kill and the setting of ->handle on startup | 16:41 | ||
(There isn't) | |||
So we always have a process handle at that point | |||
Time to head home; bbl | 16:42 | ||
Zoffix | m: role Foo { multi method x { "role" } }; class :: does Foo { multi method x { "class" } }.new.x.say | 17:50 | |
camelia | class | ||
Zoffix | m: role Foo { multi method x(:$x) { "role" } }; class :: does Foo { multi method x { "class" } }.new.x.say | ||
camelia | role | ||
Zoffix | Kinda thought the result would be the same for both, due to implicit *%_ | ||
timo | might be caused by the tighter invocant constraint? | 17:56 | |
role Foo { multi method x(:$x) { "role" } }; class :: does Foo { multi method x { "class" } }.new.^find_method('x')[0].candidates.perl.say | 17:57 | ||
m: role Foo { multi method x(:$x) { "role" } }; class :: does Foo { multi method x { "class" } }.new.^find_method('x')[0].candidates.perl.say | |||
camelia | (method x (<anon|80616960> $: *%_) { #`(Method|81835040) ... }, method x (<anon|80616960> $: :$x, *%_) { #`(Method|81839448) ... }) | ||
timo | oh, hm. | ||
sorry, i missed the signature in the role | |||
but named args only contribute to multi candidate finding as last-resolt tiebreakers? | 17:58 | ||
Zoffix | Yeah | 18:00 | |
Also found this glitch; dunno if it's in any way related | |||
m: role Foo { multi method x(:$x) { "role" } }; class :: does Foo { multi method x(:$) { "class" } }.new.x.say | |||
camelia | 5===SORRY!5=== Error while compiling <tmp> Found named parameter '(unnamed)' twice in signature :(<anon|71941360> $: $, *%_): *%_ vs $ at <tmp>:1 |
||
Zoffix | Pretty much any other combination of args (or not mixing a role) avoids that error | ||
Filed it as rt.perl.org/Ticket/Display.html?id=132089 | 18:02 | ||
Oh | 18:03 | ||
s/Ok//; | |||
.ask jnthn Is this is a bug? I expected it to say "class" because methods have implicit *%_ and also named args are used only for tie breaking and there's no tie here as far as I undertstand: m: role Foo { multi method x(:$x) { "role" } }; class :: does Foo { multi method x { "class" } }.new.x.say | 18:05 | ||
yoleaux | Zoffix: I'll pass your message to jnthn. | ||
Skarsnik | m: say num.^nativesize | 18:06 | |
camelia | No such method 'gist' for invocant of type 'NQPMu'. Did you mean 'isa'? in block <unit> at <tmp> line 1 |
||
Skarsnik | Should MQPMu never be returned to the user? | ||
lizmat | Skarsnik: no, that's internals leaking out | 18:10 | |
Skarsnik | rakudobugable, I am lazy repport this bug xD | 18:13 | |
buggable, | |||
buggable, mail | 18:14 | ||
geekosaur | huggable, rakudobug | 18:23 | |
huggable | geekosaur, Report bugs by emailing to [email@hidden.address] See also: github.com/rakudo/rakudo/wiki/rt-introduction | ||
gfldex | jnthn: did the moar changed hit Rakudo HEAD yet? | ||
Geth | rakudo/nom: b7ab48ee15 | (Elizabeth Mattijsen)++ | src/core/Attribute.pm Attribute.required can be anything, not just int |
18:25 | |
rakudo/nom: edac1d6870 | (Cuong Manh Le)++ | src/core/Exception.pm Supress line number if throw X::Package::Stubbed |
18:39 | ||
rakudo/nom: 29691b2f83 | (Cuong Manh Le)++ | 2 files Merge branch 'nom' of github.com/rakudo/rakudo into nom |
|||
rakudo/nom: fe719405b1 | (Zoffix Znet)++ (committed using GitHub Web editor) | src/core/Exception.pm Merge pull request #1154 from Gnouc/nom Supress line number if throw X::Package::Stubbed |
|||
rakudo/nom: dea0a08545 | (Elizabeth Mattijsen)++ | 2 files Streamline BUILDPLAN a little more - settable attributes with default are now handled in a single task - this saves one list with 3 entries per attribute - also has a small runtime benefit (in the order 2%) - also handles the task *without* default - is required check task now emitted after each settable task without default ... (6 more lines) |
18:42 | ||
gfldex | jnthn: my stresstest doesnt work at all anymore. Did buffering in Async::Proc change? | 18:45 | |
ugexe | i think so | 18:46 | |
at least the amount it reads at a time was optimized (in addition to the regular stdout buffering stuff from a week+(?) ago) | 18:47 | ||
Geth | nqp/profiler_extra_options: c6188dc862 | (Timo Paulssen)++ | src/vm/moar/HLL/Backend.nqp allow passing options to profiler like --profile=heap:filter=majoronly |
||
nqp/profiler_extra_options: 57516cc76c | (Timo Paulssen)++ | src/vm/moar/HLL/Backend.nqp allow passing options to profiler like --profile=heap:filter=majoronly |
18:48 | ||
timo | (rebased it on top of latest master) | 18:49 | |
gfldex | writing very short string via Async.put seam to block now | 18:52 | |
lizmat | that feels like a release blocker to me | ||
Geth | rakudo/nom: 7ba9b7cd6f | (Zoffix Znet)++ | src/core/Exception.pm Shorten signature of a method The actual params aren't used and aren't needed, but we still need a bit of params to make the method more specific than the one from the role. See also: github.com/rakudo/rakudo/pull/1154 irclog.perlgeek.de/perl6-dev/2017-...i_15164490 |
18:54 | |
Zoffix does bumps | |||
gfldex | bidirectional Async::Proc seams to be broken (still golfing) | 18:55 | |
unidirectional is a lot faster now and there seams to be a new memory leak | 18:58 | ||
timo | did you already see how using Proc::Async causes the ThreadPoolScheduler to fill up its maximum threads rather quickly? | 19:00 | |
i think i was discussing this with Skarsnik but i'm not sure if you saw | 19:01 | ||
Zoffix | hm | 19:02 | |
lizmat: does this pass for you? t/fudgeandrun t/spec/S02-types/int-uint.t | |||
timo | hmm, stage parse 120s, what did i break to cause this ... | ||
Zoffix | Fails for me and I wonder if it's the nqp/MoarVM bump or the couple of commits I pulled before doing the bumping | 19:03 | |
lizmat | Zoffix: yes | ||
Zoffix | OK. Tis the bump then | ||
nine | timo: debug build? | ||
Zoffix | ZOFFLOP: t/spec/S11-modules/nested.t | ||
ZOFFLOP: t/spec/S17-supply/interval.t | |||
timo | i do have -O3 in my moarvm | ||
in the makefile | |||
Zoffix | ZOFVM: Files=1273, Tests=144748, 138 wallclock secs (15.55 usr 2.49 sys + 2799.30 cusr 215.27 csys = 3032.61 CPU) | 19:04 | |
timo | haha | ||
i changed the nursery size to be a lot smaller | |||
Zoffix | Output of failures in t/spec/S02-types/int-uint.t gist.github.com/zoffixznet/22f483f...834772fc0d | ||
That's on master MoarVM and master nqp | 19:05 | ||
Geth | nqp/profiler_extra_options: 84e2f1caf8 | (Timo Paulssen)++ | src/vm/moar/HLL/Backend.nqp remove debug output |
||
Zoffix | And well, the commits from them. 'cause I just ran stresstest before pushing dea0a08545 and it was green | ||
m: use Test; class Overlap is repr("CUnion") { has uint32 $.u32; has uint16 $.u16; has uint8 $.u8; }; my $overlap = Overlap.new(u32 => 1234567); is $overlap.u32, 1234567, "uint32 in union is unsigned"; | 19:07 | ||
camelia | not ok 1 - uint32 in union is unsigned # Failed test 'uint32 in union is unsigned' # at <tmp> line 1 # expected: '1234567' # got: '1179648' |
||
Zoffix | c: 2017.08 use Test; class Overlap is repr("CUnion") { has uint32 $.u32; has uint16 $.u16; has uint8 $.u8; }; my $overlap = Overlap.new(u32 => 1234567); is $overlap.u32, 1234567, "uint32 in union is unsigned"; | 19:08 | |
committable6 | Zoffix, Ā¦2017.08: Ā«ok 1 - uint32 in union is unsignedĀ» | ||
Zoffix | bisect: use Test; class Overlap is repr("CUnion") { has uint32 $.u32; has uint16 $.u16; has uint8 $.u8; }; my $overlap = Overlap.new(u32 => 1234567); is $overlap.u32, 1234567, "uint32 in union is unsigned"; | ||
bisectable6 | Zoffix, Bisecting by exit code (old=2015.12 new=7ba9b7c). Old exit code: 0 | ||
Zoffix, bisect log: gist.github.com/5592b70c7afa73e0f1...3f88889139 | |||
Zoffix, (2017-09-14) github.com/rakudo/rakudo/commit/de...9734798a35 | |||
Zoffix | complicated stuff :) | ||
Well, I guess it's not from the bump, so I'll push it | 19:09 | ||
Geth | nqp: 9a2ba37548 | (Zoffix Znet)++ | tools/build/MOAR_REVISION Bump MoarVM |
||
Ā¦ nqp: version bump brought these changes: github.com/MoarVM/MoarVM/compare/2...2-g4a7248e | |||
rakudo/nom: 06e20f80c9 | (Zoffix Znet)++ | tools/build/NQP_REVISION Bump NQP |
|||
rakudo/nom: version bump brought these changes: github.com/perl6/nqp/compare/2017....5cdbdd3... No newline at end of file a8e0352b03 | (Elizabeth Mattijsen)++ | src/core/Mu.pm - move the check out of the parameter to bindattr_x - this causes one Scalar allocation less for each initialization |
|||
Zoffix | m: use Test; class O is repr("CUnion") { has uint32 $.u32; has uint16 $.u16; }; my $o = O.new: u32 => 1234567; is $o.u32, 1234567; | 19:12 | |
camelia | not ok 1 - # Failed test at <tmp> line 1 # expected: '1234567' # got: '1179648' |
||
Zoffix | Slightly golfed. | 19:13 | |
gfldex | jnthn: run-this.sh shows the blocking Proc::Async, run-unidirectional.sh shows the memory leak github.com/gfldex/perl6-stress-moar | ||
Zoffix | Oh, lizmat++ already mentioned this failing test in the commit message | 19:14 | |
lizmat: ^ does my last eval fail for you? Seems to fail on Linux | |||
lizmat | ok 1 - | 19:15 | |
AlexDaniel | by the way | 19:16 | |
RT #132083 may be related | |||
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=132083 | ||
lizmat | AlexDaniel: the fails started to appear after *my* last BUILDPLAN related commit | 19:17 | |
AlexDaniel | ah, right, that's another one I guess | ||
Zoffix | FWIW the other two tests for that test that test $.u16 and $.u8 are fudged. It's possible the passing test was passing by accident | ||
Zoffix & | 19:18 | ||
timo | neat. | 19:27 | |
lizmat | nine: is Inline::Perl5 still using the BUILDALL(@a,%h) interface ? | 20:01 | |
jnthn | gfldex: Looks like the bump was done since you asked, so yeah, the socket fix should be in | 20:04 | |
yoleaux | 18:05Z <Zoffix> jnthn: Is this is a bug? I expected it to say "class" because methods have implicit *%_ and also named args are used only for tie breaking and there's no tie here as far as I undertstand: m: role Foo { multi method x(:$x) { "role" } }; class :: does Foo { multi method x { "class" } }.new.x.say | ||
jnthn | Nothing has changed with regard to Proc::Async and buffering | ||
What changed is buffering of $*OUT and $*ERR when they're attached to a non-TTY. Proc::Async attaches pipes, and thus the buffering is enabled. | 20:06 | ||
This only brings Perl 6 in line with other languages. | 20:08 | ||
For example, try perl6 -e 'react { my $p = Proc::Async.new("perl", "-E", q/while (1) { say "x" x 1000; sleep 1; }/); whenever $p.stdout { .perl.say }; $p.start }' | 20:09 | ||
lizmat | m: class A { has $! = 42 }; use nqp; dd nqp::getattr(A.new,A,q/$!/) # this should probably be a compile time error | 20:32 | |
camelia | P6opaque: no such attribute '$!' in type A when trying to get a value in block <unit> at <tmp> line 1 |
||
lizmat | m: class A { has $! = 42 }; use nqp; dd nqp::getattr(A.new,A,q/$!!/) | 20:33 | |
camelia | Int $!! = 42 | ||
lizmat | whee! | ||
jnthn | lol! | ||
That's beautiful | |||
lizmat | well, I think it needs to die :-) | 20:34 | |
jnthn | m: class A { has $/ = 42 }; use nqp; dd nqp::getattr(A.new,A,q|$!/|) | ||
camelia | Int $!/ = 42 | ||
jnthn | hahahaha | ||
lizmat | cause it interferes with some more nefarious opts I'm planning | ||
jnthn | For anyone wondering: $/ and $! are allowed variable names. has $foo is an allowed attribute name, the compiler names the attribute $!foo and installs a lexical alias | 20:35 | |
lizmat | m: class A { has $. = 42 } # planning on this type of error | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Unsupported use of $. variable; in Perl 6 please use the .kv method on e.g. .lines at <tmp>:1 ------> 3class A { has $.7ā5 = 42 } # planning on this type of erro |
||
jnthn | has $! doesn't parse as a twigil 'cus that has to have a name after it | 20:36 | |
It just parses as $! like in my $! | |||
The compiler faithfully installs the attribute as $!! and a lexical alias from $! to it | |||
Which of course is shadowed in all the methods by the real $! :) | |||
Declared per method | 20:37 | ||
jnthn wrote most of the code that does all of this, and totally didn't see this interaction coming | |||
I'm kinda proud it's robust enough that it all just works out, but kinda horrified it is allowed too ;) | 20:38 | ||
lizmat | m: sub a(:$) { dd MY::.keys }; a |("" => 42) # another weirdo | 21:08 | |
camelia | ("\$_", "\$/", "\$*DISPATCHER", "\$!", "\$Ā¢").Seq | ||
jnthn | That one's even covered by tests, I think :P | 21:11 | |
The has $! and has $/ sure ain't though, and those truely do seem about useless | 21:12 | ||
lizmat | but what is the use? You can pass a values as a non-named parameter, but you can't really do anything with it inside the sub ? | 21:15 | |
jnthn | True, but if you slurp... :) | 21:20 | |
jnthn bbl | 21:26 | ||
lizmat is too tired and goes to bed | 21:31 | ||
Zoffix | \o | ||
[Coke] | lizmat: when I wrote is required, it was just a bitflag; what else can it be? | 21:35 | |
(I think that was me) | |||
[Coke] waves good night. | 21:38 | ||
Geth | rakudo: book++ created pull request #1156: Implement pred() and succ() for the Enumeration role |
22:53 | |
roast: skids++ created pull request #316: Add tests for RT#126426 and RT#129856 |
22:56 | ||
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=126426 | ||
Link: rt.perl.org/rt3/Public/Bug/Display...?id=129856 | |||
Geth | roast: 69a5e0db0f | skids++ | 2 files Add tests for RT#126426 and RT#129856 |
22:57 | |
roast: 6e5180e96c | skids++ (committed using GitHub Web editor) | 2 files Merge pull request #316 from skids/rt126426 Add tests for RT#126426 and RT#129856 |
|||
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=126426 | ||
Link: rt.perl.org/rt3/Public/Bug/Display...?id=129856 | |||
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=126426 | ||
Link: rt.perl.org/rt3/Public/Bug/Display...?id=129856 | |||
Zoffix | comment on the earlier uint failure: "That test doesn't make sense to me. 1234567 is much less than 2**31 so how would it be testing for unsigned? And yet it gets the wrong answer, so what's the real bug?" | 23:16 | |
So it's more evidence that it was passing accidentally | |||
and should be just fudged | |||
"more" <-- because the other piece of evidence is that u16 and u8 in that test currently don't work and are already fudged | 23:18 | ||
Geth | rakudo/nom: 2645a1e97c | (Philippe Bruhat (BooK))++ | src/core/Enumeration.pm Implement pred() and succ() for the Enumeration role These method will walk the enumeration in the declaration order. Using Order as an example: - Order::Same.succ is Order::More, - Order::Same.pred is Order::Less. Calling pred or succ on the boundaries will fail with X::OutOfBound. Using the same example, Order::Less.pred fails with this X::OutOfRange: "Decrement out of range. Is: Less, should be in Order::Less^..Order::More". |
23:41 | |
rakudo/nom: 8df53f34dd | (Philippe Bruhat (BooK))++ | src/core/Enumeration.pm Remove Failure from Enumeration's pred and succ Following this comment from Zoffix on #perl6: If we make .pred go to previous element (and just return the first element if it's already at the first element) and .succ go to next element (and just return the first element if it's already at the ... (5 more lines) |
|||
rakudo/nom: 627de78337 | (Zoffix Znet)++ (committed using GitHub Web editor) | src/core/Enumeration.pm Merge pull request #1156 from book/book/enum-pred-succ Implement pred() and succ() for the Enumeration role |
|||
BenGoldberg | So I've got an idea for how to speed up perl6 startup, but I want to first make certain I fully understand how it works at present... | 23:57 | |
If I understand correctly, during compilation, we generate the setting programmatically, compile the setting, load the compiled setting, and finally serialize the loaded setting. | 23:58 |