»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg camelia perl6: ... | irclog: irc.perl6.org | UTF-8 is our friend!
Set by sorear on 25 June 2013.
timotimo what. 00:18
using >>.ast is actually faster than .map(*.ast) in JSON::Tiny ... ?! 00:19
and it's also faster than .map({ $_.ast }) 00:20
wow.
timotimo perl6-m is nowadays starting up the repl's input prompt in 0.02s 00:22
that's pretty good
when you actually execute code, like "say 1", the time jumps up to 0.25s on my laptop and the memory usage balloons up to about 6x the size 00:24
Mouq timotimo: well >>.ast is autothreaded ;) 00:34
timotimo m) 00:35
Mouq m: for 500..1000 { { $_.Str }($_) }; say now - BEGIN now 00:38
camelia rakudo-moar e16766: OUTPUT«0.04111123␤»
Mouq m: for 500..1000 { { $_.Str }($_) }; say now - BEGIN now
camelia rakudo-moar e16766: OUTPUT«0.0387570␤»
Mouq m: for 500..1000 { $_.'Str'() }; say now - BEGIN now
camelia rakudo-moar e16766: OUTPUT«0.02135463␤» 00:39
Mouq m: for 500..1000 { $_.'Str'() }; say now - BEGIN now
camelia rakudo-moar e16766: OUTPUT«0.0404778␤»
Mouq m: for 500..10000 { { $_.Str }($_) }; say now - BEGIN now
camelia rakudo-moar e16766: OUTPUT«0.1061059␤»
Mouq m: for 500..10000 { $_.'Str'() }; say now - BEGIN now
camelia rakudo-moar e16766: OUTPUT«0.05337681␤»
Mouq m: for 500..10000 { $_.'Str'() }; say now - BEGIN now
camelia rakudo-moar e16766: OUTPUT«0.05296991␤»
Mouq ^^ That's why, I think
>>.meth is more like for ... { .'meth'() } and .map(*.meth) is more like for ... { (*.meth)($_) }, which is slower 00:40
(apparently)
Well, also, isn't .map lazy be default? 00:41
Mouq *by 00:41
timotimo oh, hm. 00:48
hadn't considered that
but at least .'meth'() sounds like it ought to be slower
[Coke] moritz: no, I followed the directions on the perl6.org readme, which leaves off the --make; I'll give it a shot. 00:49
timotimo i hope it'll lead you onto a path of productivity 00:51
Mouq FROGGS: How do you use the nqp_to_perl6 branch of v5? 01:17
ren1us is there a built in function/operator for getting the intersection of two lists? 01:35
timotimo (&) should do 01:35
it will coerce both arguments to sets and give you a set back, though 01:36
ren1us i'm really not sure what to make of the result of & 01:37
m: 0,1,2 & 1,2,3
timotimo not &, (&)
camelia ( no output )
ren1us ah
timotimo if you need to keep the order, i'd suggest something like @list.grep(any(@otherlist))
ren1us m: say 0,1,2 (&) 1,2,3 # this still seems rather peculiar 01:38
camelia rakudo-moar e16766: OUTPUT«01set()23␤»
timotimo yes 01:39
it maskes a set from 2 and 1
and that's inside a list of 0, 1, *here*, 2, 3
m: say (0, 1, 2) (&) (1, 2, 3)
camelia rakudo-moar e16766: OUTPUT«set(1, 2)␤»
timotimo m: my @list = <foo bar baz quux>; my @otherlist = <bar quux potatoes>; say @list.grep(any(@otherlist)) 01:40
camelia rakudo-moar e16766: OUTPUT«bar quux␤»
ren1us that makes sense. it's weird that it showed up as 01set()23, since that looks like an empty set
timotimo it is an empty set 01:41
m: say (0,1,2 (&) 1,2,3).perl
camelia rakudo-moar e16766: OUTPUT«(0, 1, set(), 2, 3)␤»
timotimo it's just an operator precedence issue
ren1us ah
the list items need to be wrapped in something
that makes sense
timotimo it's not that it "needs to be wrapped in something", just that the , will bind looser than the (&) 01:42
ren1us yeah, but the wrapping is a workaround to adjust the order, so close enough 01:47
anyway, thanks :>
timotimo right
you're welcome :)
timotimo commutes
ren1us oh, right. timotimo++ 01:51
dalek kudo/nom: c270e91 | duff++ | src/Perl6/Actions.nqp:
Fix for RT #79160
05:00
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...l?id=79160
dalek ast: c2e9aa8 | duff++ | S12-subset/subtypes.t:
un-todo test for RT #79160
05:01
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...l?id=79160
dalek kudo/nom: b86a152 | duff++ | src/core/Temporal.pm:
Get Date from Instant (RT #111356)
05:23
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...?id=111356
dalek rlito: c119825 | (Flavio S. Glock)++ | misc/alias.pl:
misc - add a parameter aliasing example
07:07
FROGGS .tell Mouq What do you mean by 'how'? <Mouq> FROGGS: How do you use the nqp_to_perl6 branch of v5? 07:10
yoleaux FROGGS: I'll pass your message to Mouq.
FROGGS .tell Mouq In case you meant build instructions I updated the README.md 08:11
yoleaux FROGGS: I'll pass your message to Mouq.
itz this has to be one to steal :> 08:33
github.com/Russell91/pythonpy
masak good noon, #perl6 09:54
FROGGS[mobile] o/ 10:23
psch hi #perl6 o/ 11:12
psch unborked his pre-commit hook for roast. 11:27
testneeded RTs here i come! :p
...after building latest rakudo for all backends, that is
dalek p: 02f47bf | jnthn++ | src/QAST/Block.nqp:
Give QAST::Block a code object property.

This will hold the code object associated with the code ref.
12:58
p: 435e62c | jnthn++ | src/vm/ (3 files):
Teach backends about QAST::Block.code_object.

This is just doing the simple, naive thing for now - generating the code we once would have. However, this will enable doing something smarter on some backends - Moar first.
carlin sergot: are you planning on adding a .post() method to HTTP::UserAgent? 13:02
dalek p: 17a5794 | jnthn++ | src/NQP/World.nqp:
Switch to using new code_object support.
13:06
kudo/nom: c8736ab | jnthn++ | / (2 files):
Bump NQP_REVISION; use new .code_object support.
13:07
vendethiel oh what. 13:27
magic the gathering is turing-complete ???!!
tadzik :o 13:29
well, you could probably define every operation in terms of a different infinite combo available in mtg 13:30
pippo o/ #perl6 13:33
vendethiel timotimo: boingboing.net/2012/09/12/magic-the...ering.html 13:34
timotimo: actually, beza1e1.tuxen.de/articles/accidenta...plete.html - more global 13:35
pippo Anybody has time to explain me what does sink context mean? 13:36
vendethiel pippo: it means that everything will be thrown away 13:37
(the result is unused)
pippo vendethiel: Thank you! 13:38
psch RT #109800 is not horribly misplaced in S06-operator-overloading/sub.t, right? 13:41
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...?id=109800
psch .oO( "forgiveness before permission" might count for "this test should go somewhere else..." )
on one hand the name sub.t seems to indicate it's for using sub {}, but on the other it has binding to e.g. my &infix:<plus> 13:43
dalek ast: a9171d7 | (Pepe Schwarz)++ | S06-operator-overloading/sub.t:
Added test for RT #109800.
13:44
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...?id=109800
pippo o/
psch a few testneeded RTs depend on github.com/perl6/nqp/pull/173 and github.com/rakudo/rakudo/pull/301, the list on the rakudo PR is not exhaustive. i'll add those fudged i guess 13:45
dalek p: ee50e95 | (Pepe Schwarz)++ | src/QRegex/P6Regex/Grammar.nqp:
Convert panic() calls to more specific, overrideable methods.
13:53
p: 64be958 | jonathan++ | src/QRegex/P6Regex/Grammar.nqp:
Merge pull request #173 from peschwa/panics_to_typed

Convert panic() calls to more specific, overrideable methods.
kudo/nom: d78a1c0 | (Pepe Schwarz)++ | src/ (2 files):
Add a few typed exceptions and override P6Regex::Grammar methods to throw them.

This lets us test sensibly for RT #77380, RT #77522 and similar.
13:57
kudo/nom: 19a8e34 | jonathan++ | src/ (2 files):
Merge pull request #301 from peschwa/panics_to_typeds

Add a few typed exceptions and override P6Regex::Grammar methods to throw them.
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...l?id=77380
psch good thing i'm so timid about pushing :) jnthn++ 14:01
FROGGS jnthn: I need to follow the code_object changes? 14:04
jnthn FROGGS: Don't need to 14:05
FROGGS: May want to. 14:06
FROGGS: The previous way will continue to work.
timotimo the next memory conservation win we're going to get might end up being pretty big :D 14:13
vendethiel
.oO( big++ )
timotimo and startup time improvement etc etc 14:14
dalek kudo/nom: 5d5ec1e | jnthn++ | tools/build/NQP_REVISION:
Bump NQP_REVISION for regex error improvements.

Should allow tests to be safely unfudged and pass for everyone who is building against NQP_REVISION.
14:46
dalek p: c4db3ef | jnthn++ | / (2 files):
Adopt new MoarVM code object handling.

Includes a MOAR_REVISION bump.
14:47
psch apparently those two PRs were somewhat stale, the only one of the Exceptions that still works is X::Syntax::Regex::Unterminated, and it gets grouped with a X::Comp::Adhoc 15:07
the grouping might actually make sense, the Adhoc is "Unable to parse Regex; couldn't find final '/'" 15:09
psch eh, no, i just again and again forget how to properly set up CATCH blocks for compile time Exceptions... 15:24
psch m: /a ** 1 ..2/ # this does confuse me. 15:53
camelia rakudo-moar 5d5ec1: OUTPUT«===SORRY!===␤Cannot find method 'ast'␤»
masak submits rakudobug
rakudobug submits masak 15:53
masak it's mutual <3 15:54
psch the curious bit is that P6Regex::Grammar has <.integer> '..' <.throw_bare_spaces_in_range>
which is the patch jnthn merged a bit
vendethiel hahaha 15:54
psch but apparently it matches differently and gets through to the corresponding action in Perl 6's Actions.nqp
carlin uh oh, the rakudobugs have become sentient
psch where there's nothing in $<min>
because it shouldn't have matched or somesuch...?
vendethiel if "language composition" is really the future, then perl 6 might be able to get some chunk of the cake ;-)
(did they read about perl 6 slangs ?) 15:55
masak vendethiel: that matches my thinking.
psch unfortunately i get a segfault with --target=parse for that case on moar, which makes it hard to gain some insight
vendethiel masak: well, it certainly is an opportunity to get rid of string programming :-)
I like the idea of slangs because that means we can TOTALLY do away with SQL injections, XSS, etc. 15:56
(or, well, do away with it in 99% of the cases)
masak *nod*
one slang per child.
vendethiel and the perl 6 slang to rule them all ;) ? 15:57
perl 6 is merely a slang of perl 6, after all
psch supersede $~MAIN { } # rien ne va plus
masak vendethiel: that's a good point.
vendethiel psch: il y en a qui ont essayé, ils ont eu des problèmes ;-) 15:58
psch vendethiel: to be honest, that's about the extend of my french
vendethiel psch: haha - I guessed so, don't worry
masak: it does raise another point, though: we need something to get a bit terser slang-using. 15:59
we don't want to `{use SQL; SELECT * FROM a}.map(...)`; I don't think.
We could see `SQL{}`, obviously
psch that's module space though, isn't it? exporting a block-taking sub that uses the module slang for the block 16:00
masak vendethiel: I think overloading circumfix:<` `> as switch-into-slang in a given scope would work fine. 16:00
vendethiel: or, you know, something like SQL"..."
I dunno.
syntax will come for these things. 16:01
vendethiel masak: that can't work. you can't decide which slang with just ``
also, SQL"" (scala/c++-like) doesn't work because it doesn't really do away with string programming
masak I don't mean it should actually be a string.
vendethiel I know, but you're implying it with ""
masak so go with SQL[ ... ] or something. 16:02
my point is I'm not too worried about the specifics of syntax.
vendethiel no, but I'm very against using string-like anything.
masak nailing how everything will interop is the interesting/difficult challenge.
vendethiel it does seem interesting, though. I see myself doing stuff like that in 5 years 16:06
well, I already kinda do with haskell/hamlet and stuff like that
masak I see much of good module building as (a) finding the right algebra/model and building the corresponding functions for it, followed by (b) exposing this through an easy-to-grok grammar. 16:10
masak sometimes the (b) part only needs an "internal API" or something. sometimes, though, it would be greatly helped by some grammar tweak or other. sometimes, by an entirely different grammar. 16:11
FROGGS ahh, the SQL slang pops up again :o) 16:25
vendethiel FROGGS: It's 2014, and I refuse to write SQL strings ;-) 16:32
FROGGS I don't
vendethiel YMMV
FROGGS but I'd like to see compile time errors for typo's in these 16:33
timotimo there's people now who say "don't use ORM, write your sql yourself!"
vendethiel well, they have reasons
geekosaur would very much prefer writing some good sql instead of relying on the horrors created by "smart" packages with the intelligence of a 2yo 16:34
timotimo haha
if we had a package that is anything like SQLAlchemy, that would be swee. 16:35
vendethiel that string was in the programming sense. 16:39
I'm fine with handcrafting SQL queries. Not fine with them being strings
timotimo since we have compile-time code running and macros, we could surely make a nice DSL for sql query construction that makes objects of different types give you the semantics you want or something 16:40
vendethiel sure :)
that's the whole point 16:43
persistent (haskell) is pretty nice in that area
vendethiel well, yesod in a whole is a great piece of techonology 16:44
psch not sure what's more sensible here wrt the latest ticket that i saw masak++ create 16:45
psch turns out the error comes from the branch that throws the exception not capturing the integer 16:46
i.e. does it make more sense to assume that the grammar ontop of P6Regex::Grammar checks for $<min> in the action for sym<**> or should the token capture even if it's throwing an exception
or panicking rather, because that's the nqp grammar does 16:47
psch i.e. capture here github.com/perl6/nqp/blob/master/s...r.nqp#L240 16:48
or check for definedness of $<min> here github.com/rakudo/rakudo/blob/nom/....nqp#L7290
psch i have decided that the second of those options is out, because if anything it should be in P6Regex::Actions... :) 16:55
and because that'd be two places to check for definedness capturing min even if we're panicking seems more sensible 16:56
psch std: /a ** 1 ..2/ 17:04
camelia std 0f2049c: OUTPUT«===SORRY!===␤Spaces not allowed in bare range at /tmp/kN92GTOwA1 line 1:␤------> /a ** 1 ..⏏2/␤Parse failed␤FAILED 00:01 122m␤»
psch std: /a ** 1.. 2/
camelia std 0f2049c: OUTPUT«===SORRY!===␤Malformed range at /tmp/GiQ9V62RP0 line 1:␤------> /a ** 1..⏏ 2/␤ expecting quantifier␤Parse failed␤FAILED 00:01 122m␤»
psch this is also kind of weird, i think
the eject after .. in the first case bothers me very slightly
i guess the different types are due to LTM? 17:05
or rather, different messages
masak the ⏏ being where it is in both cases makes some sense to me. 17:10
it is where the error was discovered.
in the first case, after discovering that it was a range (and thus the spaces earlier are wrong)
in the second case, after not meeting the expectations of what comes after a range (which happens to be spaces, which we're not eating today) 17:11
a very small case could be made for having the same error message in both cases, I guess. "Spaces not allowed in bare range" being the best one.
psch eject as "where an error was discovered" seems to be the better understanding. i was operating with "where it breaks", which breaks in cases like these 17:13
unifying the message makes sense to me, as it seems a bit more user friendly - the problem is the same in both cases, the distinction is parser guts
pmurias masak: re quoting sql one problem is that our quasiquoting syntax is a bit heavyweight, quasi:lang(SQL) {select * from foobar} 18:17
masak so... don't do it that way ;) 18:18
qq string interpolation employs a kind of quasi quoting, and it doesn't need any heavyweight syntax. 18:19
vendethiel pmurias: re masak: re quoting, we should totally be able to get `sql{}` to workj 18:28
raydiak mornin p6ppl 18:34
vendethiel o/, raydiak 18:35
geekosaur do we still collect autopuns? "I both hate and love analogies with QM, but I can't decide until I see one" 18:39
masak ;) 18:45
vendethiel "how many implementations of `[a] -> [a]` are there ?" well, an infinite number. Parametricity doesn't buy you that. 18:46
that's one thing I dislike about these talks, saying that parametricity removes the need for a name. id and reverse can both have the type [a] -> [a]. 18:47
A function that pattern matches on different list sizes also does. etc...
masak aka "dang, we still have to implement stuff"
I envision a future where my job is to provide a spec of some sort, and AI agents mill around to provide an implementation, coming back now and then to challenge me on specifics. 18:48
vendethiel aka types aren't the only documentation. Function names *are* useful
admittedly, you can go *very* far, moreso with dependent typing, but it doesn't change the fact that *types are not a complete documentation*. Not even for abstractions 18:49
masak *nod* 18:50
vendethiel (though when idris/agda infers some implementation, I'm still quite happy :P (but then again, it knows which arguments your function takes)) 18:51
masak "X don't prevent *all* bugs, but they're still useful in preventing some of them" where X (in) <<types tests "things like tab completion and other IDE things">> 18:53
vendethiel that's a bit unfair. 18:54
"you don't have to tests to the extent that you have types" is a mantra I like to repeat
masak pretty sure I don't agree with that. 18:58
in the JavaScript code I write, I can feel how nice it is to move to something like TypeScript and have some stuff statically checked. 18:59
but I wouldn't trade that away for writing unit tests.
it's like, they catch errors, but two different kinds.
vendethiel masak: you read that wrong the same way I did first 19:03
"to the extent" doesn't mean they replace tests -- it means you start testing what can't be catched by said types
(and you can catch a lot more with haskell's type system than typescript (which is unsound)) 19:04
masak oh, you're talking about a kind of coverage then.
vendethiel (it's a pretty confusing way to say it, admittedly :P)
yes.
masak got it.
vendethiel types are like "free coverage", somewhat.
masak *nod* 19:05
I would love to hear more about TypeScript's unsoundness, and whether it has any real-world consequences.
I know it does inference both upwards and downwards.
vendethiel well, it's simply: it has untagged unions
ie forall A. A=A|undefined|null
vendethiel masak: gist.github.com/t0yv0/4449351 19:06
their generics are also unsound, because they allow types to be used both in co- and contra-variant positions 19:07
(dart is unsound as well. TypeScript is sound, yay :-).) 19:08
vendethiel www.dartlang.org/articles/why-dart-types/ <- there's even a blog post to justify it hahahaha. 19:09
.oO( they chose to be covariant by default because they couldn't decide whether they wanted definition-site variance or use-site variance. Little did they know they could have both ... )
19:10
vendethiel (on that note, I'll stop spamming #perl6 with was must not be an interesting topic for a lot of people here...) 19:11
masak no, thank you for sharing. 19:12
dalek ast: c1f9b00 | (Pepe Schwarz)++ | S32-exceptions/misc.t:
Added test for RT #77522.
19:29
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...l?id=77522
ast: ca327a9 | (Pepe Schwarz)++ | S32-exceptions/misc.t:
Added test for RT #77380.
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...l?id=77380
masak vendethiel: took me a while to see, but yeah -- that looks like a bug. 19:30
vendethiel masak: the typescript soundness? 19:31
masak yes. 19:32
masak I can see it has to do with contravariance. 19:32
but I had to step through it to viscerally feel that it does something wrong.
pippo good night #perl6! 19:35
vendethiel well, really, it's the simple rule that parameters are in a contravariant position. 19:35
masak right.
vendethiel erm, are you supposed to read "programming perl" when you don't know any perl? 19:48
there's a lot of stuff that's "there" but havn't been introducted. 19:49
dalek ast: 59436af | (Pepe Schwarz)++ | S32-exceptions/misc.t:
Added (fudged) test for RT #122502.
19:50
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...?id=122502
p: ad212c2 | (Pepe Schwarz)++ | src/QRegex/P6Regex/Grammar.nqp:
Always capture min for quantifier **.
19:53
p: 50b2038 | (Tobias Leich)++ | src/QRegex/P6Regex/Grammar.nqp:
Merge pull request #174 from peschwa/master

Always capture min for quantifier **.
psch btw, CLA won't go out for at least 2 more months, i'm moving end of this month and TPF probably wants my then-current address 19:54
but there won't be any PRs either starting in about 3 weeks 'cause we won't have internet for a bit so there's that at least 19:55
masak psch++ 19:58
FROGGS ohh dear, no internet /o\ 19:59
psch well, maybe not none at all, but not enough to push and pull code around all the time :P
although i could probably assume that git is better at saving bandwidth than i assumed 20:00
FROGGS git likes to eat up my mobile broadband limit very quickly :o) 20:02
timotimo m: my @test = 1, 2, 3; say " → @test[1..2] ← "; 20:06
camelia rakudo-moar 5d5ec1: OUTPUT« → 2 3 ← ␤»
masak m: my @test = 1, 2, 3; say " → @test[0..2] ← "; 20:12
camelia rakudo-moar 5d5ec1: OUTPUT« → 1 2 3 ← ␤»
masak m: my @test = 1, 2, 3; say " → @test[] ← ";
camelia rakudo-moar 5d5ec1: OUTPUT« → 1 2 3 ← ␤»
masak m: my @test = 1, 2, 3; say " → @test[0..*] ← ";
camelia rakudo-moar 5d5ec1: OUTPUT« → 1 2 3 ← ␤»
masak m: my @test = 1, 2, 3; say " → @test[*..2] ← ";
camelia rakudo-moar 5d5ec1: OUTPUT«(timeout)» 20:13
masak hm.
FROGGS m: my @test = 1, 2, 3; say " → @test[-Inf..2] ← "; 20:14
well...
camelia rakudo-moar 5d5ec1: OUTPUT«(timeout)»
FROGGS perhaps not the best idea :o)
masak I'm not able to locate a piece of spec that talks about what * means in the lhs of a range of an indexing. 20:16
jnthn What were you wanting it to mean? 20:18
Or were you just wanting to break stuff? :P
masak the latter. 20:19
but now I'm curious: what *does* it mean?
(a) by spec, and (b) in Rakudo today.
lue masak: if that range turns into WhateverCode, how do you know when the * is in the LHS? So, I'd expect *..2 to be (+@test)..2 20:20
masak me too, I think.
more generally, I expect * to mean +@array in a range in an indexing. 20:21
jnthn Ranges don't turn into whatevercode, though; afair, they are excluded from taht 20:22
masak *nod*
still, it doesn't hurt if they play to users' intuition. 20:23
jnthn I suspect therefore that indexing wiht a range must special-case the endpoint.
The endpoint being a *, that is
Probably nobody thought (quite reasonably :P) about the starting point being * :)
lue If array indexing can tell when the * is on the left, then it'd make sense for it to be 0, but otherwise I expect things with * in them to be WhateverCode, which wouldn't know where the * is. 20:24
masak jnthn: I get that no-one thought of writing the starting point as * before. it doesn't make much sense, since the first index is always 0. 20:29
jnthn: but it doesn't explain why Rakudo hangs on it.
jnthn masak: Oh, I can imagine that easily enough... 20:30
psch m: my @a := *..0; say @a[􏿽xC2^10] # a bit like watman
camelia rakudo-moar 5d5ec1: OUTPUT«===SORRY!=== Error while compiling /tmp/qFL5e1xob0␤Undeclared routine:␤ Â used at line 1␤␤»
jnthn masak: For example, maybe it grabs the first endpoint and loops, incrementing, until we hit the number of elems - 1.
psch eh, half a unicode character :/ 20:31
m: my @a := *..0; say @a[^10] # a bit like watman
camelia rakudo-moar 5d5ec1: OUTPUT«-Inf -Inf -Inf -Inf -Inf -Inf -Inf -Inf -Inf -Inf␤»
jnthn m: say -Inf + 1
camelia rakudo-moar 5d5ec1: OUTPUT«-Inf␤»
jnthn Right :)
masak m: my @a = 1..3; @a[-Inf] 20:35
camelia rakudo-moar 5d5ec1: OUTPUT«Unhandled exception: Unsupported use of [-Inf] subscript to access from end of Array; in Perl 6 please use [*-Inf]␤ at <unknown>:1 (/home/p6eval/rakudo-inst-2/languages/perl6/runtime/CORE.setting.moarvm:throw:4294967295)␤ from src/gen/m-CORE.setting…»
masak but it clearly doesn't try to index -Inf, or we'd see that.
hehe, "in Perl 6 please use [*-Inf]" :P 20:36
jnthn Right, we don't really want to have to make another multi-dispatch round-trip through postcircumfix instead of calling .at_pos, I guess...
And the negative check is there
jnthn I suspect we should probably just spot that it's -Inf at that point, tbh 20:37
psch m: my @a = 1..3; say @a[*-Inf] # but i am 20:39
camelia rakudo-moar 5d5ec1: OUTPUT«Unsupported use of [-Inf] subscript to access from end of Array; in Perl 6 please use [*-Inf]␤ in method gist at src/gen/m-CORE.setting:12952␤ in sub say at src/gen/m-CORE.setting:13890␤ in block at /tmp/eAPhGTSEue:1␤␤»
psch m: my @a = 1..3; say @a[*-*]
camelia rakudo-moar 5d5ec1: OUTPUT«1␤»
psch the last one surprised me a bit, but i guess it makes sense 20:40
vendethiel "inf inf inf inf BATMAN"++ 20:42
masak psch: it does make sense. one sometimes wants to do @a[*/2] 20:44
lue masak: wouldn't * div 2 be safer, or is subscripting just that smart? :) 20:45
timotimo i think we have an "as Int" nowadays
masak lue: subscripting floors.
lue ah, good to know. 20:45
masak or rounds towards 0, rather.
lue depends on your definition of flooring I guess :) 20:47
masak flooring always means towards -Inf
m: say floor(-2.5)
camelia rakudo-moar 5d5ec1: OUTPUT«-3␤»
timotimo right. so it truncates, right? 20:48
masak indexing does, yes.
which is the same semantics as "as Int"
lue masak: huh. my own definition is towards zero (or towards the smaller absolute value) 20:49
masak lue: if you can provide me with a source for that... :)
lue: otherwise I recommend you adjust your definition to everyone else's.
lue masak: I recall hearing long ago about there being confusion with floor/ceiling and what it means to everyone else's, and recently when I had to contend with floor/ceiling negative numbers, I figured "towards zero" made the most sense. 20:50
masak lue: the thing that rounds towards zero is called "truncating". 20:51
dalek p: 5f67fae | jnthn++ | src/vm/moar/QAST/QASTCompilerMAST.nqp:
Don't neglect to pass down :$want.
20:52
p: ba097e3 | jnthn++ | src/vm/moar/QAST/QASTCompilerMAST.nqp:
Can use a native int for this flag.
p: 6f9397f | jnthn++ | src/vm/moar/QAST/QASTCompilerMAST.nqp:
Convey $want down into variable compilation.
masak lue: the metaphor of "flooring" is that the space you're occupying between two integers has a floor (the integer below you). the floor is always downwards, towards a lower number.
unless you're on the integer, in which case you're already there. 20:54
dalek p: 224c4f7 | jnthn++ | src/vm/moar/QAST/QASTCompilerMAST.nqp:
Void context variable can generate no code.
20:55
p: f962e8f | jnthn++ | src/vm/moar/QAST/QASTCompilerMAST.nqp:
Cleanup/simplify compile_all_the_stmts.

No need to handle QAST::Var here specially; that falls out of the logic in compile_var now. Also don't dupe-fetch .node.
lue eh, sure. (I could swear there was something debatable there...) I still think going for the smallest absolute value has a better symmetry to it though :)
masak sure. it's just not called "flooring".
timotimo jnthn: is there a big benefit to this codegen? 20:56
masak you might be thinking of the debatability of infix:<%>
lue wonders if the absolute-value-based version of ceiling has a special name
lue masak: no, it was purely mathematical, and about floor/ceiling. Maybe I'm misremembering the section on wikipedia called "stuff that got it wrong" :P 20:56
dalek p: 804aa54 | jnthn++ | src/vm/moar/QAST/QASTCompilerMAST.nqp:
Fix QAST::WVal void context optimization.

It failed to generate nothing if in a void context.
20:57
p: 3f1e934 | jnthn++ | src/vm/moar/QAST/QASTOperationsMAST.nqp:
Don't emit anything for a null in void context.

We often use nqp::null() as a symbolic "null" op when optimizing bits away. Make the code-gen cooperate with this technique.
jnthn timotimo: Yes, just take a look at Frame_1 for CORE.setting before and after it :P
masak lue: it's called "rounding towards infinity" according to en.wikipedia.org/wiki/Rounding
lue aw, that's not nearly as fun to say as "antitruncation" or something :) 20:58
timotimo jnthn: ok
lue masak: thanks for clearing that up. I blame my brain taking "floor(n) rounds to the smaller integer for all positive n" and extending that concept to "smaller absolute value" instead of "smaller number, including negatives" :P 21:00
masak extending concepts is always intriguing. 21:01
lue vows to call rounding to infinity "countertruncation" or whatever prefix makes the most sense :) 21:04
psch no good sounding antonym for truncate on thesaurus.com :/ 21:06
"prolong" is most striking, but not pretty
lue The opposite of truncation would be to add more digits, so a pure antonym doesn't really make sense. 21:07
dalek p: 40b6408 | jnthn++ | src/vm/moar/QAST/QASTOperationsMAST.nqp:
Fix coercion code-gen bug found by FROGGS++.

We should not so carelessly re-use registers that may actually be for variables.
21:10
p: 92be0f8 | jnthn++ | tools/build/MOAR_REVISION:
Get latest MoarVM.

Includes lazy deserialization imrpovements, including thread safety fixes.
dalek kudo/nom: 9bca34d | jnthn++ | tools/build/NQP_REVISION:
Get latest NQP for code-gen fixes, better Moar.
21:12
kudo/nom: 40748bc | jnthn++ | src/vm/moar/ops/perl6_ops.c:
Use new API for grabbing a code object.

This handles lazily deserializing it if needed.
jnthn This also deals with the recent regressions in encode.t, which I think was also noticed in the ecosystem.
psch lue: abtruncate maybe, as "truncate away from [zero]" 21:13
actually that would have to be abstruncate, because t, says wordinfo.info/unit/2357/ip:1 21:14
lue I was just going to say, there would need to be some sort of sound change for abtruncate.
psch it doesn't sound bad to my german ears... :) 21:15
masak 'night, #perl6
FROGGS correct :o)
gnight masak
lue masak o/
colomon \o
lue abstruncate works for me, now to find excuses to spread it across the globe! :) 21:16
psch night masak
timotimo sweet! we're down to 104 megabytes maxrss when we run "say 1" on perl6-m 21:19
we seem to be going in the right direction 21:20
lizmat jnthn: we got a few new failures though: 21:21
timotimo oh no :<
lizmat make t/spec/S32-list/uniq.t fails 11 tests, but running without the harness it's ok 21:22
jnthn Yes, I get it fine without the harness too. Had no luck hunting down why. I'm not sure how much it is to do with recent changes. 21:22
lizmat t/spec/S04-phasers/init.t fails 7 of 11 21:23
jnthn Yup, that one's on my "to fix tomorrow" list.
That one is easily reproducable without the harness, but really weird.
lizmat the third one was a flap
jnthn Which ws the third one?
*was
lizmat t/spec/S03-operators/subscript-adverbs.t
jnthn Oh
Never seen that one have any issues here... 21:24
lizmat Non-zero wait status: 6
Parse errors: No plan found in TAP output
jnthn Odd
lizmat no, it's just every now and then a random test file fails
jnthn Hm
Was there a time improvement?
lizmat Files=912, Tests=31961, 176 wallclock secs ( 8.91 usr 3.73 sys + 1099.75 cusr 127.86 csys = 1240.25 CPU)
parsing the setting: 29.409 21:25
the lowest I've ever seen
jnthn What were your previous values, ooc? 21:25
Lowest for spectest too?
lizmat a few weeks ago around 35
jnthn is almost at a new low on spectest
lizmat could be the lowest, lemme try again
jnthn Lowest for me was before we added the threading tests 21:26
Some of them still take a while and clog the run on windows. :(
But certainly what I get now is the lowest since we've got them.
lizmat Files=912, Tests=32080, 172 wallclock secs ( 8.56 usr 3.62 sys + 1065.74 cusr 125.92 csys = 1203.84 CPU) 21:29
only t/spec/S04-phasers/init.t failed this time
jnthn Ah, OK
lizmat that is *definitely* the loweset I've seen
jnthn I'll see if I can nail that one tomorrow.
lizmat okidoki... it was a long day and a long drive for me... so I'm calling it a day 21:30
sleep&
jnthn :)
See you tomorrow o/
grondilu are transliterations supposed to accept the :pos adverb? 21:51
m: say "foo bar".trans: 'ao' => 'oa', :pos(1); 21:52
camelia rakudo-moar 5d5ec1: OUTPUT«faa bor␤»
grondilu m: say "foo bar".trans: 'ao' => 'oa', :pos(3);
camelia rakudo-moar 5d5ec1: OUTPUT«faa bor␤»
psch .trans (and tr///) adverbs aren't really clear to me either. i mentioned only thinking :i and :ii sensible a few days back, with lue++ adding :m and :mm 22:04
roast tests for :c, :squash and :delete, the last of which seems redundant
lue :p doesn't make sense, but I can see a case for :c
lue I'm noticing more and more that S05 was either never fully completed, or it's an extreme victim of "oh, we won't bother mentioning stuff that's the same as in Perl 5" syndrome. 22:06
psch i'm still a bit unsure about m:g//, especially in for 22:10
the perl5 idiom is something like "say $1 while m/(.)/g"
m: $_ = "abc"; for m:g/(.)/ { say $1 } # works now, iirc 22:11
camelia rakudo-moar 5d5ec1: OUTPUT«(Any)␤(Any)␤(Any)␤»
psch i don't... :)
m: $_ = "abc"; for m:g/(.)/ { say $/[0] } # works now, iirc
camelia rakudo-moar 5d5ec1: OUTPUT«「c」␤␤「c」␤␤「c」␤␤»
psch m: $_ = "abc"; for m:g/(.)/ { .say } # works now, iirc
camelia rakudo-moar 5d5ec1: OUTPUT«「a」␤ 0 => 「a」␤␤「b」␤ 0 => 「b」␤␤「c」␤ 0 => 「c」␤␤»
psch that last one
but that's because m:g// returns a List 22:12
but the spec usually says "m:g// returns a Match"
psch so in the branch i implemented that does that we'd have to run it as 'for @(m:g/(.)/) ...' which seems a bit unwieldy 22:12
but no one told me it's really wrong, so it sits there untill someone looks at it and says whether it's wrong or not :) 22:13
that's the main gripe i have with S05 :P
lue psch: like I said, either it's secretly never been finished, or suffers from "it's in Perl 5, so why say it" syndrome, or both :) 22:14
btw, the P6 version of that idiom would be say $_ for $str.comb(/./) , most likely. 22:15
psch that does seem more idiomatic, yes. 22:17
cono paste.org.ru/?krh2pi is it possible to say ^sqrt(*) somehow? 22:52
colomon cono: what do you want it to do? 22:55
lue r: my @a = 1,2,3,4; say $_ for @a[^*.sqrt]
camelia rakudo-{parrot,jvm,moar} 40748b: OUTPUT«1␤2␤»
lue for some reason [^sqrt(*)] fails
cono uh :)
thanks 22:56
lue no problem :)
colomon sqrt(*) is passing a Whatever to the sqrt function, rather than making a WhateverCode. 22:57
cono my first version was with loop: paste.org.ru/?2zfau0 What am I doing wrone ? 22:58
------> t $i = 0; $i < @cache.elems.sqrt; ++$i) ⏏{
psch m: loop #`[[ without this space here you have a function call ]] (my $a = 0; $a < 5; ++$a) { say $a } 23:01
camelia rakudo-moar 40748b: OUTPUT«0␤1␤2␤3␤4␤»
psch m: loop(my $a = 0; $a < 5; ++$a) { say $a }
camelia rakudo-moar 40748b: OUTPUT«===SORRY!===␤Word 'loop' interpreted as 'loop()' function call; please use whitespace around the parens␤at /tmp/7YqNoPLv1Z:1␤------> loop⏏(my $a = 0; $a < 5; ++$a) { say $a }␤Unexpected block in infix position…»
cono uh, got it. Thanks
colomon m: my @a = 1..10; say @a.sqrt 23:15
camelia rakudo-moar 40748b: OUTPUT«3.16227766016838␤»
cono I did it :) ./perl6-m ~/perl/25k_prime.pl 1082.62s user 4.10s system 100% cpu 18:05.34 total 23:21
cono inspired by this video www.youtube.com/watch?v=UJPdhx5zTaw 23:26
timotimo oof, 18 minutes 23:42
cono: can you tell us moar --version?