Zoffix I'm agreeing with your thoughts ¯\_(ツ)_/¯ 00:13
timotimo ah 00:20
maybe timtoady will bless me with a bit of his wisdom once he's finished and recovered from the flight :) 00:21
super annoyed that i only now see the discussion about your blog post in /r/programming 00:29
Zoffix Why annoyed? 00:32
timotimo because i'm late to the party
Zoffix Heh
timotimo anyway, i want to get a bedtime 00:33
Zoffix There weren't really a discussion. Primarily just one person spewing bullshit, trying to convince the world they're better than everyone else :)
timotimo fair enough
"don't you dare say gobble to MY compiler!" 00:34
a programmer would NEVER write something like
if (foo bar)
goto fail;
MasterDuke .tell lizmat it's not pretty, but it does work. should i submit a PR, or do you want something with Mu.possible-phasers for this RT? gist.github.com/MasterDuke17/eb8e4...312ad0692b 02:20
yoleaux2 MasterDuke: I'll pass your message to lizmat.
jdv79 you have to admit its an odd if not unfortunate phrasing 02:31
[Tux] Drat, new failur on CSV and no time to dig 08:18
# Failed test 'Undefined in Numeric context type' 08:19
# at t/30_field.t line 12
# expected: 'Num'
# got: 'Num|17758144'
This is Rakudo version 2016.07.1-190-g6cd6efe built on MoarVM version 2016.07-18-g2f269d8 08:23
csv-ip5xs 10.147
test 15.718
test-t 7.694
csv-parser 17.025
[Tux] => $work
arnsholt m: say Numeric.gist; say Numeric.Str 08:29
camelia rakudo-moar 6cd6ef: OUTPUT«(Numeric)␤Use of uninitialized value of type Numeric in string context.␤Methods .^name, .perl, .gist, or .say can be used to stringify it to something meaningful. in block <unit> at <tmp> line 1␤␤»
arnsholt Huh
[Tux]: Anyways, looks like the stringification logic of something changed in Rakudo. Might be github.com/rakudo/rakudo/commit/4d...e86acb632c 08:31
Zoffix Holy shit. My Awesome Errors article exploded on Reddit. 10:33
DrForr +$N! 10:34
nine Zoffix: URI?
Zoffix nine, www.reddit.com/r/programming/comme...of_perl_6/
nine I only see 5 comments in the reddit linked on P6W 10:35
Zoffix And the "Other discussions" of it posted on /r/perl6 and /r/programming
I'm not reading all those comments lol.
timotimo yeah, more like shit errors!
it's only 33 comments, dood
Zoffix got 28 points... in /r/programming of all things 10:36
jnthn Given this is reddit, it's probably an explosion of whining :P
Zoffix jnthn, it is :)
The biggest thread is people trying to convince me to compile a multi-line piece of code by randomly sticking a quote into it, and tell the user where the quote should go the first time it compiles correctly. 10:37
tadzik report first instance that produces valid syntax. (...) Probably less costly than the Levenshtein check 10:38
found the guy that never wrote a parser :P
Zoffix m: my $str = "␤BEGIN { trade-your-soul-for-a-sammich } ␤ 10:39
camelia rakudo-moar 6cd6ef: OUTPUT«===SORRY!=== Error while compiling <tmp>␤Unable to parse expression in double quotes; couldn't find final '"' ␤at <tmp>:3␤------> <BOL>⏏<EOL>␤»
Zoffix yeah, let's insert a quote into the first line and see if stuff compiles :)
|Tux| m: use Test;my Num $n;say $n.WHICH;like($n.WHICH,/^ "Num" \b/,"test") 10:40
camelia rakudo-moar 6cd6ef: OUTPUT«Num|19522336␤Cannot resolve caller like(ObjAt, Regex, Str); none of these signatures match:␤ (Str $got, Regex $expected, $desc = "")␤ in block <unit> at <tmp> line 1␤␤»
|Tux| m: use Test;my Num $n;say $n.WHICH;like($n.WHICH.Str,/^ "Num" \b/,"test") 10:41
camelia rakudo-moar 6cd6ef: OUTPUT«Num|22270752␤not ok 1 - test␤␤# Failed test 'test'␤# at <tmp> line 1␤# expected: '/^ "Num" \b/'␤# got: 'Num|22270752'␤»
DrForr Programming via git bisect. I guess it ahd to happen eventually :) 10:42
*had
jnthn A test that calls .Str on what .WHICH returns is not going to end up well... ObjAt should be treated as an opaque thing.
timotimo Zoffix: better not tell people on /r/programming that compiling code can have side-effects 10:43
|Tux| .Str was my first idea of how I could make this test pass
Zoffix timotimo, why?
I was about to
timotimo they'll totally throw a tantrum
Zoffix Awesome
Zoffix tells
jnthn |Tux|: My question is more at the level of "why does this test exist"? :)
timotimo "you're telling me i can't even *compile* untrusted code i found on the internet without looking at it first?"
|Tux| to test if the return of an object in + context is a Num 10:44
jnthn |Tux|: Ah, then $obj ~~ Num
|Tux|: Or if you don't want to allow it to be a subclass of Num, $obj.WHAT === Num
|Tux| github.com/Tux/CSV/blob/master/t/30_field.t#L12 10:45
jnthn Yeah, that test seems to be misunderstanding what .WHICH is for
It's an opaque object to be used in things like object hashes and sets 10:46
The most direct replacement is to just go with the type name, $n.^name
But I'd advise one of the two that I suggested earlier
In general, talking about types as string names in Perl 6 is pretty much always the wrong way to do it 10:47
|Tux| pushed. refresh to see the change 10:48
|Tux| still learns every day (and I understand thi one completely) 10:49
short-sighted conversion of the early days
jnthn :-) 10:50
Looks good to me now
lunch & 10:51
masak timotimo: I wonder if that isn't true of Python and Ruby too, though. 10:58
timotimo well, when you import something, i believe the __init__.py of a module gets called 10:59
|Tux| Clean run from git checkout 11:00
This is Rakudo version 2016.07.1-190-g6cd6efe built on MoarVM version 2016.07-18-g2f269d8
csv-ip5xs 9.841
test 15.124
test-t 7.370
csv-parser 16.447
arnsholt timotimo: Strictly speaking, Python doesn't have much of a separate compilation stage 11:03
timotimo mhm
arnsholt Modules have to be executed for loading, because def and class are actually covert assignment operators
timotimo right
nine Python and Perl 5 are remarkably similar under the hood
timotimo why can't pypy run perl5 code then 11:04
arnsholt Parts of them are. Python's naming/binding model is atrocious, IMO
Based more or less on "Implicit is better than explicit", hilariously enough =) 11:05
tadzik giggles 11:06
timotimo i'm not sure how i feel about python having "bound method" objects and perl6 doesn't 11:07
nine arnsholt: Python violates all of it's Zen thingies
tadzik I lost so many hours expecting lambdas to work like proper closures
arnsholt I may be exaggerating (possibly. a bit), but that's really how it feels
tadzik and they theoretically do, if you're stupid about what an environment is %)
nine arnsholt: my favourite however is still that in Python the stack holds an implicit reference to the objects while in Perl 5's XS you have to handle it explicitly. 11:08
arnsholt tadzik: Well, the problem is that Python doesn't have the machinery necessary to let the programmer explicitly declare the scope of a variable. Thus the hilarity of using arrays instead 11:09
Mostly alleviated by nonlocal in Python 3, I think; but still
nine: Oh, but that's the source of one of my favourite Python weird trivia!
tadzik arnsholt: oh, I think we're on about different things then, let me come up with an example
arnsholt So in Python, all variables are scoped to the entire function they're declared in, right? 11:10
Except!
The try/except syntax can also introduce a variable, with the syntax "try: ...; except Exception as e" 11:11
tadzik arnsholt: gist.github.com/tadzik/d6332f22dbf...67767852c4 is my biggest complaint
arnsholt e has a reference to the invocation record of the function you're in, which has references to all the variables in that function
Therefore, if e were scoped to the function, you'd get a circular reference, which would make the refcounting sad 11:12
timotimo tadzik: yeah, you have to lambda x, a=a: x + a there
tadzik yeah
arnsholt Which is why e is scoped to the except block
tadzik :D
arnsholt tadzik: Oh, that! YEah, that sucks 11:13
Again, the problem is that you can't declare the scope of a, right?
So a is scoped to the top-level, which is what you're closing over
tadzik I think the problem is that a means "the name a" not "the value of variable a"
so whatever the name was set to last will be used
timotimo tadzik: except if you return that lambda from your function when the function that held a and the lambda no longer exists on it sown
arnsholt Basically, it's "my $a; for @args -> $a { @lambdas: push sub { $^x + $a } }" 11:14
timotimo like, you don't get to access another function's a that way
tadzik it may have caused some customers ending up with data of other customers in some product in some company once
(before release though)
timotimo: right 11:15
arnsholt Python does have variable declarations, except implicitly through the assignment operator, but they're all pushed to the very top of the containing function (or the top-level if not in a function) 11:16
So yeah, you get stupid shit like that
nine same as Javascript
arnsholt Also, default values for function arguments aren't thunks
tadzik this one's great too
arnsholt They're evaluated *once* when the def is executed...
Which is hilariously broken, in every possible way 11:17
timotimo at least that's a gotcha that everybody knows about
tadzik I'd label it as a design bug
arnsholt I once a priori diagnosed a colleague's Python bug simply due to knowing that bug
AlexDaniel meanwhile, I learned while reading reddit comments that people don't want to know what the compiler was expecting… kinda weird, not sure if I will ever be able to understand this way of thinking.
tadzik but python seems happy with it
arnsholt I suspect it's kind of an implementation bug from the very early days 11:18
But since people tend to use ints and the like as defaults, it wasn't detected for a long time, by which point it was a de facto feature
Even if it strictly should be considered a feature
nine AlexDaniel: frankly, I couldn't be less interested in what weirdly named syntactical category e.g. the PHP compiler was expecting (those T_WHATEVER thingies that never help). I guess the same is true for those commenters. 11:19
AlexDaniel: they just don't know that those terms are rather meaningful to the Perl 6 programmer, as we can use the same grammar engine as the compiler in our own code.
arnsholt T_PAYAYIIM_NEKUDOYATIM
Or whatever that fucking thing is called
timotimo silly php, that's not how you spell "neko"
tadzik I'd say it'd be nice to at least use the same names in the documentation as in those errors, so that searching for 'infix stopper' gives you something to work with 11:23
timotimo "infix stopper" isn't really something the user would sensibly learn about 11:24
tadzik then is it really meaningful in a user-facing error message?
I can understand why reddit people say "these errors use confusing language" 11:25
heck, I'm not sure what 'infix stopper' is, and I did some messing with the perl6 grammar
I can see the value in having something to ack for in the rakudo code itself if I'm that commited to debugging my code, but I can understand that not everybody considers that helpful 11:26
arnsholt Yeah, some of them are opaque (like infix stopper) 11:29
But infix, postfix and statement terminator are pretty clear
timotimo those are, yes
tadzik yep 11:34
jnthn We could probably filter out some of 'em like "infix stopper" 11:36
timotimo i don't know how to properly give the error a different cursor, i.e. to make it show the beginning of a gobbled block instead of the end 11:38
arnsholt I'm still not sure what an infix stopper is, but the grammar tells me it's <?before> a !! if we're looking for a !!, or before a { or a lambda when it's marked for ws and we're looking for a { or the end of an argument list 11:41
=)
AlexDaniel m: #`{{ blah blah blah␤ blah blah␤ blah␤
camelia rakudo-moar 6cd6ef: OUTPUT«===SORRY!=== Error while compiling <tmp>␤Couldn't find terminator }} (corresponding {{ was at line 1)␤at <tmp>:4␤------> <BOL>⏏<EOL>␤ expecting any of:␤ }}␤»
AlexDaniel I think we should report errors that don't report where the whole thing started 11:42
(the snipped above is #125247)
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=125247
masak arnsholt: what was the Python bug? 12:03
arnsholt: oh, "default values aren't thunks"? 12:04
tadzik: since you're naturally curious, let me share with you what an infix stopper is 12:09
m: my $x; say [1, 2, 3] -> $x; for [1, 2, 3] -> $y { say $y }
camelia rakudo-moar 6cd6ef: OUTPUT«===SORRY!=== Error while compiling <tmp>␤Unexpected block in infix position (missing statement control word before the expression?)␤at <tmp>:1␤------> my $x; say [1, 2, 3]⏏ -> $x; for [1, 2, 3] -> $y { say $y }␤ expecting any of:…»
masak (`->` not defined, so cannot use it as an operator) 12:10
tadzik :)
masak m: sub infix:<< -> >>($l, $r) { "whoa!" }; my $x; say [1, 2, 3] -> $x
camelia rakudo-moar 6cd6ef: OUTPUT«[1 2 3]␤»
masak (now we can use it as an operator, but it's *ignored* and not evaluated)
m: sub infix:<< -> >>($l, $r) { "whoa!" }; for [1, 2, 3] -> $y { say $y }
camelia rakudo-moar 6cd6ef: OUTPUT«1␤2␤3␤»
masak (here's the reason infix stoppers exist: so that the lambda `->` can override the infix operator `->` when needed) 12:11
the `infixish` rule has a `<!infixstopper>` assertion early on, to make sure it's disjunct with infix stoppers 12:12
currently we have three infix stoppers in the Perl 6 grammar: `!!` (of `?? !!` fame), `->`, and `{` 12:13
all of these can be thought of as "eh eh, oh hai, I know you expected an infix here, but I'm here instead so deal with it"
tadzik nodnod 12:16
arnsholt masak: Yeah. Basically he came to me and said "something's weird with this thing I'm working on" and it was pretty obvious without looking at the code that the problem was non-thunking 12:34
masak: Oh, of course! That makes perfect sense 12:36
EXPR just reads terms and infixes until there're none left, so it needs to know when to stop
lizmat m: sub a( --> Str() ) { 42 }; dd a # should this work ? 13:10
yoleaux2 02:20Z <MasterDuke> lizmat: it's not pretty, but it does work. should i submit a PR, or do you want something with Mu.possible-phasers for this RT? gist.github.com/MasterDuke17/eb8e4...312ad0692b
camelia rakudo-moar 6cd6ef: OUTPUT«Type check failed for return value; expected Str(Any) but got Int (42)␤ in block <unit> at <tmp> line 1␤␤»
gfldex lizmat: this should not work 13:14
m: sub a( --> Str(Int) ) { 42 }; dd a
camelia rakudo-moar 6cd6ef: OUTPUT«Type check failed for return value; expected Str(Int) but got Int (42)␤ in block <unit> at <tmp> line 1␤␤»
gfldex but this should (and do the right thing) 13:15
m: sub a( --> Str(Int) ) { 42.Str }; dd a
camelia rakudo-moar 6cd6ef: OUTPUT«Type check failed for return value; expected Str(Int) but got Str ("42")␤ in block <unit> at <tmp> line 1␤␤»
lizmat gfldex: but Str() is just short for Str(Any), so why shouldn't Str() work?
gfldex oh yes, it should work but doesn't yet. There may be a RT already. 13:16
lizmat ok, so we are in agreement :-)
gfldex ENEEDMORETEA
lizmat: i just checked RT for "return" and could not find a matching RT for this 13:21
lizmat gfldex: ok, shall I RT it or will you ? 13:22
gfldex please RT
dalek kudo/nom: 50c24a8 | lizmat++ | src/core/Set (3 files):
Streamline various Set/SetHash methods

e.g. Set.kv is now 6x faster, others are more in the 5-10% range
13:28
lizmat RT #128964 # gfldex
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=128964
dalek p/no-eval: 36f81ba | (Pawel Murias)++ | src/vm/js/ (8 files):
[js] When loading a compunit save the actual context instead of creating a hackish substitute.

Implement iterating over contexts and support nqp::existskey on them.
13:38
p/no-eval: 907a0ca | (Pawel Murias)++ | t/nqp/101-lexpad-stuff.t:
Test that existkey on ctxs and iterating over them works.
p/no-eval: 3388449 | (Pawel Murias)++ | src/vm/js/Compiler.nqp:
[js] Update comment.
[Coke] TimToady++ # rt updates! 13:53
dalek kudo/nom: c159f0a | lizmat++ | src/core/SetHash.pm:
Make SetHash.Set about 80x faster

for a 1000 element SetHash
14:54
unmatched} :o 15:01
lizmat++
lizmat so what *is* the difference between Hash.push and Hash.append ? 15:07
m: my %h; %h.push(<a>,<e f g h>,<a>,<k l>); dd %h 15:12
camelia rakudo-moar c159f0: OUTPUT«Hash %h = {:a($[("e", "f", "g", "h"), ("k", "l")])}␤»
lizmat m: my %h; %h.append(<a>,<e f g h>,<a>,<k l>); dd %h
camelia rakudo-moar c159f0: OUTPUT«Hash %h = {:a($["e", "f", "g", "h", "k", "l"])}␤»
nine lizmat: looks like the same as between Array.push and Array.append? 15:19
lizmat yeah... you need to push/append to the same key twice to see the difference, which was what got me confused
unmatched} Rele6sr: reminder 15:30
Rele6sr 🎺🎺🎺 Friends! I bear good news! Rakudo's release will happen in just 4 days! Please update the ChangeLog with anything you worked on that should be known to our users. 🎺🎺🎺
🎺🎺🎺 Here are still-open new RT tickets since last release: bug.perl6.party/1471361447.html And here is the git log output for commits since last release: bug.perl6.party/1471361450.html 🎺🎺🎺
unmatched} 100 tickets. 15:31
unmatched} goes over to find any blockers
pmurias mst: any public info on the "the sysadmin tool mst is building" alluded in the shadow cat blog post?
mst pmurias: which post? 15:32
pmurias mst: "MST travels to YAPC::EU 2016" 15:35
mst aha 15:36
that's the prolog-like thing that's going to underlie a cpan client and later a deployment tool 15:37
hence why I was looking at lens-like things
so I can do structural unification on config files
arnsholt Mmmmmm, tasty tasty logic programming! 15:39
timotimo the good thing about perl6 and unification is that we already have very good unicode support 15:40
unmatched} :( "severe thunderstorm and possible tornado" weather warning :/ Hope I won't lose internet connection. 15:50
timotimo i wish you the best of luck
|Tux| looking forward seeing many of you in Cluj 15:55
dalek kudo/nom: 05cdc14 | lizmat++ | src/core/ (2 files):
Make MixHash.Mix|BagHash.Bag about 300x faster

Mostly because .new is a lot more involved on Mixes and Bags, and we're bypassing that altogether now.
15:56
|Tux| This is Rakudo version 2016.07.1-192-gc159f0a built on MoarVM version 2016.07-18-g2f269d8 16:02
csv-ip5xs 9.801
test 15.086
test-t 7.254
csv-parser 16.192
note that ip5xs is under 10 now 16:03
nine++
|Tux| => HOME
[Coke] RT: 1347; @LARRY: 11; CONC: 26; GLR: 4; JVM: 66; LHF: 1; LTA: 114; NEW: 869; NYI: 82; OSX: 5; PERF: 23; POD: 17; PRECOMP: 10; RFC: 32; SEGV: 33; STAR: 5; TESTNEEDED: 16; TODO: 10; UNI: 28; UNTAGGED: 491; WEIRD: 3 16:20
nine But, but, but I didn't do anything :) 16:21
lizmat afk& 16:25
dalek kudo/nom: 1628e48 | jnthn++ | src/Perl6/Optimizer.nqp:
Fix over-assuming optimization of R.

It dropped values on the floor when there were more than two args, as happens with list assoc things like `R,`.
17:34
kudo/nom: 65bb9fe | jnthn++ | docs/ChangeLog:
Accuratize ChangeLog notes on concurrency fixes.
ast: be9417e | jnthn++ | S03-metaops/reverse.t:
Test for RT #128703.
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=128703
dalek kudo/nom: f1516f4 | (Zoffix Znet)++ | docs/ChangeLog:
Remove duplicate entry

The other copy was added into Fixes section, which is a more correct section for this.
17:40
jnthn d'oh :) 17:42
Though arguably it's an addition :)
I mean, we added the symbols to start blocks :P
unmatched} But wasn't it to fix some sort of issues? :) 17:43
jnthn I didn't quite notice it was nicely in sections though
Well, it's a better default to make sure certain issues can't happen 17:44
jnthn will be doing Perl 6 stuff tomorrow
Hopefully I sleep much better tonight than last night
brrt it would be nice if our main perl6 people could stay in one piece these days 17:45
jnthn Mostly I'm just happy my iffy stomach on Sunday cleared up really quickly :) 17:46
brrt well, that's something 17:48
[Coke] jnthn++
jnthn Anyways, off to relax, eat, etc. :) 17:51
unmatched} The rough plan for the Rele6sr :) Hoping to have it in place for 2016.09 release github.com/zoffixznet/Rele6sr/blob...ROADMAP.md 18:22
Making the release would essentially become doing this:
Rele6sr: release
:D 18:23
geekosaur : skynet 18:24
stmuk use Mojolicious::Lite:from<Perl5>; 18:25
hahaha
unmatched} It works quite well actually :) 18:26
Well, slow as hell, but works :)
dalek kudo/nom: 1728139 | lizmat++ | src/Perl6/World.nqp:
Fix for RT #126264, inspired by MasterDuke17++

Basically taken from
   gist.github.com/MasterDuke17/eb8e4...312ad0692b
except for the (unimplemented) COMPOSE, DOC.
18:46
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=126264
masak unmatched}++ # Rele6sr 18:48
unmatched} lizmat: looks like your fix for RT#128595 fixed RT#127933, 'cause it's a passing todo for me. In the RT#128595 you say that todos pass for it now, but I actually messed up that test and there's no way for it to pass 18:57
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=128595
Link: rt.perl.org/rt3//Public/Bug/Displa...?id=127933
Link: rt.perl.org/rt3//Public/Bug/Displa...?id=128595
unmatched} The two tests in question are next to each other in the file.
lizmat is that the one testing for hanging ? 18:58
unmatched} Yeah, the doesn't-hang() one. It still hangs, cause it's missing the "exit" bit 18:59
But the one after it, about native types in repl now works for me.
lizmat brb, making tea 19:00
dalek ast: 74b1c12 | (Zoffix Znet)++ | S19-command-line/repl.t:
Remove poor fudged test for RT#128595

The test tests for hanginess of the REPL, whereas the proper solution to the ticket is to not start the REPL in the first place, making this test bogus.
19:01
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=128595
unmatched} Oh, not your fix for that ticket, but the fix for the ^C in repl stuff 19:04
lizmat ah, now we still need to fix the module not found loading error
dalek ast: 0e31be9 | (Zoffix Znet)++ | S19-command-line/repl.t:
Unfudge now-passing tests for RT#127933

Unclear what fixed the issue. Possibly the fix for RT#128900
  github.com/rakudo/rakudo/commit/be7ce04
19:06
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=127933
Link: rt.perl.org/rt3//Public/Bug/Displa...?id=128900
lizmat unmatched}: I'm considering removing the fallback to the nqp REPL if module loading failed 19:14
the idea being that *if* someone too the trouble of adding the module to the command line
they really need it, so there's no point REPLing without it
unmatched} agreed. 19:15
lizmat ok, spectesting that now
dalek kudo/nom: ba20d34 | lizmat++ | src/Perl6/Compiler.nqp:
Fix for RT #128595

By basically removing the CATCH block and falling back to NQP REPL. The idea being that *if* there's something wrong with either loading a module, or with the REPL itself, the resulting fallback would not be what the user would want anyway, so it's better to croak right away.
19:26
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=128595
unmatched} jnthn++ looks your async fixes fixed my bug with Mojolicious + Websockets + Proc::Async running a shell app :D 19:27
s/bug/segv/;
Which means I can now write the "Perl 6 ♥ Mojolicious" article \o/ 19:28
lizmat ++unmatched} 19:30
masak Go 1.7 does SSA and 37 optimization passes: pauladamsmith.com/blog/2016/08/go-1.7-ssa.html 19:33
jdv79 there were new async fixes?
unmatched} jdv79: github.com/rakudo/rakudo/blob/nom/...og#L18-L21 19:34
Though I don't know if any of that is related to the Proc::Async issue.
jdv79 nice 19:36
travis-ci Rakudo build errored. Elizabeth Mattijsen 'Streamline various Set/SetHash methods 19:41
travis-ci.org/rakudo/rakudo/builds/152677364 github.com/rakudo/rakudo/compare/6...c24a8a61d0
buggable ☢ [travis build above] Build log missing from at least one job. Check results manually.
unmatched} Yup. One is missing. 19:42
I guess I should train buggable to not abort in such cases and just report how many are missing
AlexDaniel
.oO( one day we will substitute everyone here with a bot )
20:05
dalek p/no-eval: 4aecc8e | (Pawel Murias)++ | src/vm/js/nqp-runtime/core.js:
[js] Fix error in error message found by vendethiel++.
vendethiel right on time \o/
jnthn unmatched}: Wonder which fix it was; may have been the one involving condvars + GC, since that could affect relatively long-lived promises 20:07
lizmat jnthn: in related news, TEST_HARNESS=6 make spectest still fails after X test files with "no subtests run" 20:09
jnthn Hmm, well, we now know a bunch of bugs that it wasn't at least :P 20:10
lizmat jnthn: true 20:12
and I must say, the behaviour seems more stable now
just not stable enough :-(
jnthn Is it always after the same X test files? 20:13
hm, huh 20:14
TEST_HARNESS=6 make spectest
...
/usr/bin/perl t/harness5 --fudge --moar --keep-exit-code --tests-from-file=t/spectest.data
It seems to run the 5 harness. Did I do something wrong? :)
dalek kudo/nom: dd9b760 | lizmat++ | src/core/Pair.pm:
Prevent mutable keys in Pairs, RT #128965
20:15
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=128965
lizmat jnthn: oops, it's HARNESS_TYPE=6 make spectest
jnthn yeah, just figured it from le Makefile :) 20:16
Final error: Type check failed in assignment to $!buffer; expected Str but got Failure (Failure.new(exception...)
Is that what you see also? 20:17
geekosaur I was actually talking about something more general; the fact that Scalar gets exposed by .VAR means it can be slipped into anything that is supposed to be immutable, making it suddenly mutable
lizmat yes, with TEST_JOBS= it just starts emitting "no subtests run"
jnthn Hm, I have that in my environment 20:18
lizmat with what value ?
jnthn So it's running parallel anyway
Oh... :)
lizmat no, "TEST_JOBS+"
*=
jnthn I thought you mean "with TEST_JOBS=x" :P
lizmat nope, the opposite :-)
jnthn hehe 20:19
Trying that too, but it failed with that type check fail both times so far
Smells like an over-sharing bug 20:20
(Both times being parallel runs)
Yup, I get the no subtests run thing too
So, not OSX this time. ;)
lizmat *phew* :-)
jnthn Yes, phew indeed, I still don't yet have that locally :) 20:21
Here it seems like t/spec/S02-literals/string-interpolation.t is the first one that emits no subtests run 20:22
Reliably 20:23
Or at least, 3 times in a row :)
Guess I'll dig into it during my Perl 6 time tomorrow. It'd be rather nice if that worked.
And I suspect it ain't going to get golfed for me. :)
lizmat yup, nice case of dogfooding 20:24
jnthn Also it'd maybe mean act.yapc.eu/ye2016/talk/6715 can have a working-er live demo :) 20:26
lizmat yup :-) 20:28
geekosaur hm. do we have a specification of what operation are permitted on .VAR? I'm thinking of putting a proxy around the Scalar it returns, to try to limit the damage 20:29
*operations are
lizmat jnthn: not sure if you're following the discussion on RT #128965 20:59
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=128965
lizmat but I was thinking: wouldn't it be the simplest to have nqp::decont() go to the bottom and handle Scalar objects as well?
or is the Scalar a HLL entity and does nqp:: not know about that ?
jnthn Not following at present :) 21:03
geekosaur the upshot is that allowing Scalar to be visible at the Perl 6 level breaks the type system. you can do things like make immutable types mutable. 21:04
jnthn I've already said that's an issue I'd rather not worry about for the moment.
geekosaur (and Zefrem *is* doing so)
timotimo nqp:::decont already handles scalars?
geekosaur only to one level
timotimo oh
every decont is supposed to strip as many layers as it takes? 21:05
what if a container contains itself?
jnthn No, decont is only ever one layer
geekosaur so lizmat++ patched Pair to remove a Scalar if it's passed, and Zefrem promptly wrapped it in another Scalar so it still leaked in and made a mutable Pair
timotimo hah
zefram is good at breaking things
BBIAB
lizmat I'm just about to commit code to completely disallow Pair.new(Scalar:D)
this also fixes typed hashes, bags and mixes 21:06
albeit with a slightly LTA error message, on which I'm working now
geekosaur then you'll have to do the same for any other immutable value type, or you just end up with the same problem all over again
jnthn OK, but the more arbitrary patches we do now, the harder a good/consistent solution will be in a year or so's time when it gets to the top of the agenda.
geekosaur which is why I think the correct solution is to make Scalar not leak through to the Perl 6 level
lizmat the only other we have in core, is Set
jnthn geekosaur: That too only hides the problem, no? What about Proxy, which will have the same sorts of issues? 21:07
lizmat jnthn: I've added a typed exception for it, so it should be easy to trace in the future
geekosaur hrm. I was actually wondering if just wrapping the Scalar from .VAR in a Proxy would be enough --- but now that you mention it... 21:08
still, having to special case everything that uses it seems like a non-scalable and potentially buggy answer
jnthn geekosaur: Indeed. 21:09
lizmat jnthn geekosaur afaik, this is only an issue for Pair, Bag|BagHash, Mix|MixHash, typed Hashes and Set|SetHash
jnthn But people don't seem to be able to take "we'll deal with this later" for an answer. :/
lizmat fixing Pair covers all but Set|SetHash 21:10
so there would be only 2 places where we would need to do this check
jnthn Anyway, it's Not My Problem until I've got a good number less problems that are affecting users who are trying to get things done in Perl 6, rather than break stuff.
geekosaur (actually I think Proxy does the opposite of what I wanted, lets all the mutability of the Scalar through without enabling the kinds of things .VAR is presumably intended for
lizmat jnthn: ok, will revert the check in Pair, and drop the exception and checking and leave for a future date 21:12
dalek kudo/nom: b00d92d | lizmat++ | src/core/Pair.pm:
Revert "Prevent mutable keys in Pairs, RT #128965"

This reverts commit dd9b760fcedcad3a9329fa76c651ca5adf0a579c.
This will be fixed more generally at a later date when there are
  "a good number less problems that are affecting users who are
trying to get things done in Perl 6, rather than break stuff"
21:13
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=128965
jnthn also 21:14
m: my $a = [1,2,3] => 4; $a.key[1]++; say $a 21:15
camelia rakudo-moar dd9b76: OUTPUT«[1 3 3] => 4␤»
jnthn That's another case of a pair with a mutable key. In fact, you can create class MyPretendScalar { has $.value is rw }, and use that as a key too 21:16
lizmat m: my $a = [1,2,3] => 4; $a.key[1]++; say $a.WHICH 21:17
camelia rakudo-moar dd9b76: OUTPUT«Pair|Array|52648624|Int|4␤»
jnthn Right, there is a distinction in that sense 21:19
I suspect the answer is that whatever .VAR returns, it'd better not be just another level of containerness
But identifying what it *should* be is...trickier.
geekosaur yeh 21:20
which is why I was thinking in the direction of a proxy that exposes the parts that should be exposed (hence asking what those parts should be earlier), but avoids the mutability leak 21:21
jnthn Given we're in introspection teritory, some kind of variable meta-object
(maybe :)) 21:22
I don't think Proxy is an especially good direction though, in so far as you can .VAR a Proxy also
geekosaur I didn;t mean Proxy, but a different kind of proxy. If you could .VAR it, it would not be doing what it is supposed to. 21:23
jnthn Well, .VAR is defined as identity on anything that doesn't explicitly handle it. 21:24
dalek ast: e8632c5 | (Zoffix Znet)++ | S19-command-line/repl.t:
Remove test for RT#127695

The test checks REPL is exitable when a module cannot be loaded, however, as part of fixing of RT#128595 it was decided REPL must not start at all in such cases, making this test bogus.
The test is not present in 6.c-errata
21:25
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=127695
Link: rt.perl.org/rt3//Public/Bug/Displa...?id=128595
jnthn Anyway, I really need to rest.
geekosaur basically a specific proxy that enforces what amounts to access control for the Scalar. if .VAR on that were to return the Scalar, then the proxy would not be enforcing access control; .VAR should indeed return the proxy itself
lizmat good night, jnthn and #perl6-dev!
jnthn Oh, .VAR on that object wouldn't return the Scalar it was wrapping, surely :)
my $a = 42; my $b = $a.VAR; my $c = $b.VAR; # $c is the meta-object for the Scalar $b, whose value just happens to be the meta-object of the variable $a 21:27
Well, and "$c is" really really means "$c is a Scalar pointing to" :) 21:28
Anyway, really resting...I was already frazzled before this. :-) 'night
dalek ast: 8fa9045 | (Zoffix Znet)++ | S19-command-line/repl.t:
REPL with -M must not start if module cannot be loaded

RT#128595
21:31
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=128595