»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg p6eval perl6: ... | irclog: irc.perl6.org/ | UTF-8 is our friend!
Set by sorear on 4 February 2011.
00:03 b1rkh0ff left 00:04 PacoAir left
diakopter karam niecza 00:08
karma niecza
aloha niecza has karma of 75.
diakopter karma rakudo
aloha rakudo has karma of 67.
sorear karma sorear
aloha sorear has karma of 2159.
sorear karma jnthn
aloha jnthn has karma of 2642.
diakopter karma pugs
aloha pugs has karma of 20.
00:10 libertyprime left, libertyprime joined
sorear pugs predates aloha :p 00:12
00:14 Chillance left 00:16 adu left 00:17 libertyprime left 00:18 libertyprime joined 00:21 ab5tract left 00:22 libertyprime left, libertyprime joined 00:25 libertyprime left 00:26 libertyprime joined
TimToady r: my module A { enum X is export <x> }; import A <x>; x 00:47
p6eval rakudo 024843: OUTPUT«===SORRY!===␤Error while importing from 'A': no EXPORT sub, but you provided positional argument in the 'use' statement␤»
TimToady two bugs for the price of one
r: my module A { enum X is export <x> }; import A <X>; x 00:48
p6eval rakudo 024843: OUTPUT«===SORRY!===␤Error while importing from 'A': no EXPORT sub, but you provided positional argument in the 'use' statement␤»
TimToady (the second one being that I didn't provide a 'use' statement...) 00:49
should be something more on the order of "Don't know how to import X from A" 00:51
the first bug being that it should know how...
diakopter hm, I'm starting to suspect I've been spamming people all day.. whoever's subscribed to rakudo RT 00:52
TimToady receiving death threats? 00:53
diakopter not yet
r: my module A { }; require A; 00:54
p6eval rakudo 024843: OUTPUT«Could not find A in any of: /home/p6eval/.perl6/lib, /home/p6eval/nom-inst2/lib/parrot/4.4.0-devel/languages/perl6/lib␤ in any load_module at src/Perl6/ModuleLoader.pm:99␤ in block <anon> at /tmp/mQmeWOiwNw:1␤␤»
diakopter what should it do if there's already a module A loaded
n: my module A { }; use A; 00:55
p6eval niecza v18-1-gc86e3f0: OUTPUT«Unhandled exception: Unable to locate module A in @path␤ at /home/p6eval/niecza/boot/lib/CORE.setting line 1401 (die @ 5) ␤ at /home/p6eval/niecza/src/NieczaPathSearch.pm6 line 23 (NieczaPathSearch.load_module @ 17) ␤ at /home/p6eval/niecza/src/NieczaCom…
diakopter rt's down again 00:57
TimToady n: my module A { }; need A 00:58
p6eval niecza v18-1-gc86e3f0: OUTPUT«===SORRY!===␤␤Action method statement_control:need not yet implemented at /tmp/TIg2g20bLr line 1 (EOF):␤------> my module A { }; need A⏏<EOL>␤␤Unhandled exception: Unable to resolve method statement_level in type Any␤ a…
TimToady r: my module A { }; need A
p6eval rakudo 024843: OUTPUT«===SORRY!===␤Could not find A in any of: /home/p6eval/.perl6/lib, /home/p6eval/nom-inst2/lib/parrot/4.4.0-devel/languages/perl6/lib␤»
TimToady it doesn't really make sense to 'need' a module you've already defined in this unit 01:00
need and require are only for pulling in external modules 01:02
diakopter r: use Test; use Test;
p6eval rakudo 024843: OUTPUT«===SORRY!===␤Cannot import symbol '&plan' from package 'Test', since it already exists in the lexpad␤»
diakopter is that a good error? 01:03
TimToady implicit imports should also probably follow the cancellation policy of enums
and enums should just be a special case of that
here's the reasoning
modules change over time, and new exports are added
if you blow up on a collision, you potentially break programs merely by upgrading the module 01:04
if you merely blow up on use of a colliding symbol, you at least don't blow up if the user doesn't care about that symbol
you only blow up if they've actually used it, and it has become ambiguous 01:05
so 'use A; use B;' might collide with symbol X, but that doesn't matter unless you actually use X
diakopter if a module you 'use' 'use's another module that auto-imports stuff, do you get the imports too?
TimToady there should be a way to import/export transitively 01:06
diakopter gobble Test; 01:07
TimToady see S11:153
diakopter oh, so all the intervening ones must also pass through their imports 01:08
TimToady there may be a better syntax for this 01:09
TimToady glares at the inside of his eyelids and sees nothing much
diakopter maybe there's a way to exclude a module from exporting certain symbols to you, so you can pre-use dependencies to import from them 01:10
or specify which ones you do want... oh wait.
there's the problem of conflicting symbols from imports, and you really do want one of them
oh wait. /me reads further on S11 01:12
so you can send unwanted symbols to a dummy namespace/scope 01:13
TimToady it is not clear to me that S11 is actually coherent on this subject 01:14
01:15 libertyprime left, libertyprime joined
diakopter well, I finished going through all of rakudo rt 01:16
now there's 129 testneeded tickets, up from about 80. 5 merged, a couple resolved, a couple rejected because of spec changes 01:18
now to go through the testneeded ones.... :|
I guess that'll be my chance to learn the test suite 01:19
again.
01:20 thou left, libertyprime left 01:21 libertyprime joined 01:26 thou joined 01:28 scott_ joined, scott_ is now known as Guest5520, Guest22737 left 01:38 libertyprime left, libertyprime joined
diakopter I'm guessing most of the ones marked testneeded actually have tests already 01:47
TimToady you should test that :) 01:53
diakopter I'm stuck on the first one. #53804 01:58
I can't tell whether it needs a test or not
both the version without and with whitespace work
TimToady shouldn't tests be commented with the RT they test for? 01:59
01:59 thou left
TimToady or are you looking for accidental tests? :) 02:00
diakopter ones that are now succeeding, and cover the functionality testing the brokenness of the bug, and the person who wrote the test didn't know about the bug ticket (probably because it didn't exist), or the person who wrote the ticket didn't know about the test, and 02:01
the unfudger didn't know there was a bug ticket relating to that functionality
02:05 thou joined 02:06 tokuhiro_ left
diakopter TimToady: is this correct? 02:10
r: my @array = 1, 2, 3; say @array.min:{ $^a <=> $^b } 02:11
p6eval rakudo 024843: OUTPUT«1␤»
diakopter the RT ticket has to do with the lack of space between : and {
previously rakudo didn't parse that 02:12
pmichaud++ guessed it should be parsed by colonpair
TimToady: rt.perl.org/rt3//Public/Bug/Displa...l?id=53804 02:13
n: my @array = 1, 2, 3; say @array.min:{ $^a <=> $^b } 02:14
p6eval niecza v18-1-gc86e3f0: OUTPUT«1␤»
dalek ast: ed219b0 | diakopter++ | S32-list/minmax.t:
add test for adverbial block form of min (RT #53804)
02:18
ast: aaab8c2 | diakopter++ | S (9 files):
Merge branch 'master' of git://github.com/perl6/roast
02:19 leprevost joined 02:21 wooden left
diakopter TimToady: such as the TODO ticket to implement NEXT. the tests didn't know about the RT and vice versa. 02:27
02:34 libertyprime left, libertyprime joined 02:39 JimmyZ_ joined
JimmyZ_ diakopter: ping 02:39
[Coke] diakopter: it's good you send out the messages on the tickets. I prefer to always cc perl6. 02:40
[Coke] waves from a undisclosed bunker in CT.
sorear waves back to [Coke]
[Coke] diakopter++ RT carnage. 02:41
diakopter [Coke]: actually I'm not on whatever list receives those 02:42
which one does
[Coke]: how do I write a test that just tests whether eval code doesn't die 02:43
02:43 xinming joined
diakopter doesn't misparse, I mean 02:43
TimToady put a leave; first 02:44
:{} not recognized as a valid name extension, so it parses as if there were a space there 02:45
after the :
02:46 xinming_ left
diakopter ok. it works on rakudo now, however it parses 02:46
put a leave; first where?
TimToady eval "leave; stuff-to-parse" 02:48
buubot_backup TimToady: leave; stuff-to-parse
TimToady heh
02:48 JimmyZ_ left
diakopter what does the leave do? 02:49
[Coke] diakopter: you have to explicitly hit the "cc the list" button to spam the list. 02:50
if you close a ticket, the OP is notified.
diakopter ah
[Coke] diakopter: eval_lives_ok
diakopter ah 02:51
diakopter thinks a test for #63596 should go in S06-signature/named-parameters.t 02:52
oh wait; std/niecza doesn't like the test 02:53
p6: sub s($i is copy) { my @array; for 1..3 { @array.push($i); my $i = 1 + $i; }}; s(9);
p6eval niecza v18-1-gc86e3f0: OUTPUT«===SORRY!===␤␤Lexical symbol '$i' is already bound to an outer symbol (see line 1);␤ the implicit outer binding at line 1 must be rewritten as $i␤ before you can unambiguously declare a new '$i' in this scope at /tmp/47XafYYQoo line 1:␤-…
..rakudo 024843: OUTPUT«use of uninitialized variable $i of type Any in numeric context in sub s at /tmp/tG2G1TJxh3:1␤␤use of uninitialized variable $i of type Any in numeric context in sub s at /tmp/tG2G1TJxh3:1␤␤use of uninitialized variable $i of type Any in numeric context in sub s…
..pugs: OUTPUT«*** ␤ Unexpected ";"␤ expecting "::", term postfix or operator␤ Redeclaration of "$i" conflicts with earlier OUTER references in the same scope␤ at /tmp/fZQERhne6f line 1, column 74␤»
diakopter the bug was originally that it Null PMC 02:54
it doesn't do the right thing in rakudo (error), but at least it doesn't Null PMC 02:55
anyway that's testable.
03:01 libertyprime left 03:02 libertyprime joined
dalek ast: 7ea105f | diakopter++ | S02-names-vars/variables-and-packages.t:
add test for RT #63596 (null pmc) - rakudo still does not do the right thing, so it fails the test, but for another reason.
03:09
diakopter [Coke]: oh noes. rt.perl.org/rt3/perl6/testneeded is broken 03:10
03:10 adu joined 03:11 wolfman2000 left 03:15 aesundstrom left
diakopter [Coke]: nm... oops wrong url 03:15
sorry
03:19 adu left 03:20 adu joined
dalek ast: a9a75b0 | diakopter++ | S02-types/lists.t:
add test for RT #63986 - negative indexes; rakudo and niecza pass it
03:37
03:52 crab2313 left
dalek ast: 87dfafd | diakopter++ | S03-operators/assign.t:
fix tests for RT #64818 - R~= actually does parse. test it.
03:56
04:08 thou left 04:24 adu left 04:28 sisar left 04:29 sisar joined 04:51 kcwu left 04:52 kcwu joined 04:56 leprevost left 05:06 Entonian joined 05:07 Entonian left 05:10 fgomez left
moritz r: say q=>1 05:11
p6eval rakudo 024843: OUTPUT«␤»
moritz r: say (q=>1)
p6eval rakudo 024843: OUTPUT«"q" => 1␤»
05:13 birdwindupbird joined, birdwind1pbird joined
moritz r: say (q=>1), (p=) 05:14
p6eval rakudo 024843: OUTPUT«>1), (p␤»
moritz r: my @a := 1..*; @a := @a[1, 3 ... *]; say @a[^5]
p6eval rakudo 024843: OUTPUT«(timeout)» 05:15
moritz std: say (q=>1), (p=) 05:16
p6eval std f179a1b: OUTPUT«Use of uninitialized value $x in pattern match (m//) at STD.pm line 66577.␤Use of uninitialized value $x in concatenation (.) or string at STD.pm line 66616.␤===SORRY!===␤Bogus term at /tmp/s4FYlZo4YE line 1:␤------> say (q=>1), (p=⏏)…
05:31 Telg left, stephenlb left 05:33 Telg joined 05:50 lestrrat left 05:51 lestrrat joined 06:00 wtw joined 06:04 kaleem joined 06:13 araujo left 06:26 araujo joined 06:27 pupoque joined 06:33 araujo left 06:55 araujo joined 07:05 kurahaupo left
tadzik hello #perl6 07:16
moritz \o tadzik 07:17
07:33 kresike joined
kresike morning all you happy perl6 people 07:33
tadzik hey hey kresike 07:34
kresike hello tadzik
07:37 lestrrat left, brrt joined 07:38 lestrrat joined 07:55 fhelmberger joined 08:01 lestrrat left 08:02 lestrrat joined
jnthn morning o/ 08:20
moritz \o jnthn 08:21
jnthn: I looked at STD.pm6's handling of 'Null pattern not allowed' -- it requires access to $*GOAL 08:22
ie the rightest token of things like \[ ~ \]
jnthn: is that accessible from within an NQP grammar?
jnthn moritz: Ah, it's not being placed in a contextual at the moment. 08:24
Is it spec that it goes in $*GOAL? 08:25
Also, does :dba(...) populate $*DBA? I may as well fix that at the same time...
STD doesn't mention any contextual variables, fwiw. 08:26
er
*S05* doesn't mention.
moritz the spec mentions $GOAL when talking about ~ expansion
eiro tadzik, can you please fill your proposal ?
jnthn moritz: I wonder if it means $*GOAL. 08:27
moritz jnthn: wait :-)
STD.pm6 explicitly sets $*GOAL occasionally
eiro also: tadzik jnthn cognominal masak : how about a hackathlon to implement spore spec in perl6 ( github.com/SPORE/specifications )
moritz maybe it's not supplied by the regex engine after all
eiro would be great with bailador to write web workers 08:28
08:28 sergot joined
sergot hi o/ 08:28
tadzik eiro: yeah, sure. I'll probably do it later today 08:29
hackathon: sounds cool :)
hello sergot
eiro if everyone is ok: i'll make an announcement on that 08:32
jnthn moritz: OK. Well, wasn't going to do it right away...but can probably find tuits today if we can figure out how it should be :) 08:38
08:39 pupoque left
moritz nqp: say(' ' ~~ /<-[\w\s]>/) 08:59
p6eval nqp: OUTPUT«␤»
moritz nqp: say('.' ~~ /<-[\w\s]>/)
p6eval nqp: OUTPUT«.␤»
09:00 dakkar joined 09:12 daxim joined 09:17 grondilu joined
grondilu p6: class Foo { has $.x }; my Foo $f .= new; $f.x = 42; 09:17
p6eval pugs, niecza v18-1-gc86e3f0: ( no output )
..rakudo 024843: OUTPUT«Cannot assign to a readonly variable or a value␤ in block <anon> at /tmp/UocfsFH6fH:1␤␤»
grondilu ??
cognominal eiro: for the frech workshop, my goal is to deliver tutorial and exercises to help people bootstrap themselves into Perl 6. And I think existing contributors who will come have already a full agenda of things to do. Not that I have anything agains your goal. 09:18
moritz grondilu: !!
jnthn rakudo++ gets that one right 09:19
moritz giving a hackathon a goal or topic is always a good idea
but you shouldn't be too disappointed if people get distracted by other stuff
eiro cognominal, there would be 0 preparation for the hackathlon: it can be done as background job of the classroom ? 09:21
cognominal yes.
tadzik grondilu: public accessors are ro by default 09:26
09:26 lestrrat left 09:28 lestrrat joined
grondilu tadzik: ok. But then why do rakudo behaves diff than pugs and niecza? 09:31
tadzik grondilu: because pugs and niecza are wrong 09:32
grondilu Also, to me when a member is public, I should be able to write on it.
moritz no
tadzik member is never public. Accessors are
moritz you should be allowed to see my face, but not change my nose
tadzik nice one 09:33
09:33 emias joined
moritz you can always stick an 'is rw' on the accessor 09:33
r: class A { has $.x is rw }; given A.new { .x = 3; say .perl }
p6eval rakudo 024843: OUTPUT«A.new(x => 3)␤»
grondilu r: class Foo { has $.x; method set($x) { $.x = $x } }; my Foo $f .= new; $f.set: 42; 09:34
p6eval rakudo 024843: OUTPUT«Cannot assign to a readonly variable or a value␤ in method set at /tmp/mnPJLkLzO6:1␤ in block <anon> at /tmp/mnPJLkLzO6:1␤␤»
grondilu what about this??
moritz grondilu: $.x is just the accessor, and not writable
grondilu: if you want to write to the attribute, assign to $!x
grondilu oh 09:35
I had no clue.
moritz now you have :-)
grondilu So I write to $!x even for $.x . Ok I'll remember. Thanks.
moritz Perl 6 OO tutorials should really start with private attributes 09:37
grondilu Also, if I have a method foo and a member $.foo, how do I call one and not the other?
moritz and only later add accessors
grondilu: you don't 09:38
grondilu: the member is called $!foo; you can still access from the inside of your class
grondilu: but to the outside, only methods are visible
tadzik if you declare $.foo, you get $!foo and a method foo { $!foo } 09:39
moritz ... unless you already have a method foo 09:40
tadzik right
moritz in which case you don't get a new accessor
grondilu r: class Foo { has $.x = "member"; method x { "method" } }; my Foo $x .= new; say $x.x
p6eval rakudo 024843: OUTPUT«method␤»
grondilu so in other words a method can hide an accessor. 09:41
kresike is watching a very entertaining perl6 OO tutorial
moritz yes
kresike: when you're done, please summarize it in a blog post or so :-)
grondilu well, it happens to suits me anyway :)
moritz and tell us the URL
grondilu: though if you don't want the accessor, you can simply write has $!x; in the first place 09:42
no accessor, no hiding
kresike moritz, after the perl5 OO, this thing in perl6 version will need a serious tutorial :)
grondilu I thought $!var was really only for private members, but that's fine if I can use it for public vars too. 09:43
moritz grondilu: all members are private in Perl 6
grondilu: if you write 'has $.var', you get the private member, plus the accessor method
grondilu Ok. 09:44
moritz though there is one more difference 09:45
initialization
r: class A { has $.foo }; say A.new(foo => 'x').perl
p6eval rakudo 024843: OUTPUT«A.new(foo => "x")␤» 09:46
grondilu needs to read S12 much more.
moritz r: class A { has $!foo; method foo() { $!foo } }; say A.new(foo => 'x').foo
p6eval rakudo 024843: OUTPUT«Any()␤»
moritz this is by design
09:46 wolverian joined, wolverian left
moritz if you want to keep your stuff private, you also don't want anybody from the outside to initialize it 09:47
09:47 wolverian joined
grondilu That an other point I wanted to ask. There is no way to call a constructor with initial value for private members? 09:48
I mean: unless I write one.
moritz r: class A { has $!foo; method foo() { $!foo }; submethod BUILD(:$!foo) { } }; say A.new(foo => 'x').foo 09:49
p6eval rakudo 024843: OUTPUT«x␤»
moritz you can do this submethod BUILD hack to actively enable the initialization again
09:49 [particle]1 left 09:50 b1rkh0ff joined
grondilu I don't understand your signature: ':$!foo' 09:50
moritz should really write a longer tutorial on that subject
grondilu: : indidcates a named parameter
and its name is 'foo' 09:51
but instead of using a separate variable slot, the attribute/memeber $!foo is reused
so, when BUILD is called with named parameter foo => 'x', $!foo is filled with 'x'
grondilu gets it 09:52
moritz \o/
grondilu Ok, makes sense.
pretty neat
moritz aye, but it does need a thorough explanation
10:00 tyatpi left
grondilu damn it I don't understand git. I have a local modif on Buf.pm and git tells me it prevents me from updating rakudo. It says I should stash them but I don't understand the git-stash manual page at all. Anyone can give me a quick help? 10:11
jnthn git stash 10:13
git pull
git stasy apply
It's like a stack of stuff.
10:13 skids left
jnthn stash pushes your current changes onto it 10:13
"git stash apply" later applies whatever is on the current stack top 10:14
grondilu ok. Thanks 10:15
10:18 tyatpi joined 10:23 Guest5520 left
apejens note that apply doesn't remove the stash from your stash list 10:23
git stash pop applies, then removes
jnthn Aye 10:27
I guess I tend to apply out of not wanting to lose stuff.
OTOH, there'd still be the reflog...
moritz often just commits before doing a 'git pull --rebase' 10:28
10:29 fgomez joined 10:34 fgomez left, fgomez joined 10:55 JimmyZ joined 11:04 JimmyZ left 11:05 JimmyZ joined, sftp left 11:20 grondilu left 11:27 preflex left, PacoAir joined 11:28 preflex_ joined, sftp joined 11:29 preflex_ is now known as preflex 11:41 skids joined 11:59 replore_ joined
gfldex for the records: if perl6 is persisent about a missing ICU on cygwin while it's not, rm -r rakudo helps 12:08
how do i quote # in a grammar? 12:09
jnthn Backslash it, or put it in single quotes 12:12
r: say '#' ~~ /\#/
p6eval rakudo 024843: OUTPUT«q[#]␤␤»
jnthn r: say '#' ~~ /'#'/
p6eval rakudo 024843: OUTPUT«q[#]␤␤»
gfldex r: gist.github.com/2835895 12:13
p6eval rakudo 024843: OUTPUT«Constraint type check failed for parameter '$a'␤ in sub alternator at /tmp/qM7j02hKzH:5␤ in block <anon> at /tmp/qM7j02hKzH:11␤␤»
gfldex r: say '#00aa00' ~~ / '#' <:hexdigit> ** 6 /; 12:16
p6eval rakudo 024843: OUTPUT«q[#00aa00]␤␤»
gfldex r: say ('#00aa00' ~~ / '#' <:hexdigit> ** 6 /).Bool; 12:17
p6eval rakudo 024843: OUTPUT«True␤»
12:23 rsimoes left 12:25 _jaldhar left
moritz r: subset HTMLColor of Str where / '#' <:hexdigit> ** 6 /; say '#00aa00' ~~ HTMLColor 12:28
p6eval rakudo 024843: OUTPUT«True␤»
moritz r: subset HTMLColor of Str where / '#' <:hexdigit> ** 6 /; say '#00XX00' ~~ HTMLColor
p6eval rakudo 024843: OUTPUT«False␤»
gfldex r: say ('#00AA00' ~~ / '#' <:hexdigit> ** 6 /).Bool;
p6eval rakudo 024843: OUTPUT«True␤»
moritz gfldex: the problem is that * does not always cause currying; some operators treat it differently 12:29
so * ~~ /.../ does not create a closure
gfldex i noticed :)
moritz but since the right-hand side of the 'where' clause is used for smart-matching, the regex itself is sufficient
12:36 tyatpi left, rsimoes joined
gfldex r: subset HTMLColor of Str where / '#' <:hexdigit> ** 6 /; sub alternator (HTMLColor *@l) { say 'triple' }; alternator('#00aa00', '#00bb00', '#00cc00'); 12:37
p6eval rakudo 024843: OUTPUT«Nominal type check failed for parameter '@l'; expected Positional but got Array instead␤ in sub alternator at /tmp/Y1FcoW07vr:1␤ in block <anon> at /tmp/Y1FcoW07vr:1␤␤»
daxim -Ofun: stackoverflow.com/questions/1081590...ance-issue shows a real-world grammar, I think it would be interesting to see how a perl6 grammar would fare, any takers? 12:38
gfldex is there a way to have typed slurpy arrays in signatures?
moritz gfldex: no 12:39
12:44 am0c joined 12:49 tyatpi joined 12:55 mucker joined
gfldex r: subset Foo of Str where /a|b|c/; sub bar(*@a){ @a >>~~>> Foo }; say bar(<a b c>).Bool; 12:55
p6eval rakudo 024843: OUTPUT«Cannot call 'hyper'; none of these signatures match:␤:(\$op, Associative \$h)␤:(\$op, Associative \$a, Associative \$b, :dwim-left(:$dwim-left), :dwim-right(:$dwim-right))␤:(\$op, \$obj)␤:(\$op, Associative \$a, \$b, :dwim-left(:$dwim-left), :dwim-right(:$dwim-righ…
gfldex is that because ~~ isn't really an operator? 12:56
moritz probably
12:56 bluescreen10 joined
moritz r: subset Foo of Str where /a|b|c/; sub bar(*@a){ [&&] @a X~~ Foo }; say bar(<a b c>) 12:57
p6eval rakudo 024843: OUTPUT«Type check failed in assignment to '$v'; expected 'Mu' but got 'Foo'␤ in method REIFY at src/gen/CORE.setting:5655␤ in method reify at src/gen/CORE.setting:4949␤ in method gimme at src/gen/CORE.setting:5323␤ in method elems at src/gen/CORE.setting:5303␤ in blo…
moritz that does look like a bug
subset Foo of Str where /a|b|c/; [&&] <a b c> X~~ Foo 12:58
r: subset Foo of Str where /a|b|c/; [&&] <a b c> X~~ Foo
p6eval rakudo 024843: OUTPUT«Type check failed in assignment to '$v'; expected 'Mu' but got 'Foo'␤ in method REIFY at src/gen/CORE.setting:5655␤ in method reify at src/gen/CORE.setting:4949␤ in method gimme at src/gen/CORE.setting:5323␤ in method elems at src/gen/CORE.setting:5303␤ in blo…
12:58 sisar left
moritz r: subset Foo of Str where /a|b|c/; ~( <a b c> X~~ Foo ) 12:58
p6eval rakudo 024843: OUTPUT«Type check failed in assignment to '$v'; expected 'Mu' but got 'Foo'␤ in method REIFY at src/gen/CORE.setting:5655␤ in method reify at src/gen/CORE.setting:4949␤ in method gimme at src/gen/CORE.setting:5323␤ in method elems at src/gen/CORE.setting:5303␤ in blo…
moritz r: subset Foo of Str where 1; ~( <a b c> X~~ Foo )
p6eval rakudo 024843: OUTPUT«Type check failed in assignment to '$v'; expected 'Mu' but got 'Foo'␤ in method REIFY at src/gen/CORE.setting:5655␤ in method reify at src/gen/CORE.setting:4949␤ in method gimme at src/gen/CORE.setting:5323␤ in method elems at src/gen/CORE.setting:5303␤ in blo…
moritz r: ~( <a b c> X~~ Str ) 12:59
p6eval rakudo 024843: ( no output )
gfldex it's not overly consistent to have X~~ but not >>~~>> 13:01
and it's means not autothreading for ~~
what makes me a little sad
moritz well, X~~ also doesn't work 13:02
gfldex shout it?
*should
moritz good question
it probably could, but without the automagic topicalization 13:03
gfldex TimToady: should X~~ and >>~~>> be and dwim?
moritz std: 1 X~~ 2
p6eval std f179a1b: OUTPUT«ok 00:00 41m␤» 13:04
moritz std: 1 >>~~>> 1
p6eval std f179a1b: OUTPUT«ok 00:00 41m␤»
moritz std parses them :-)
13:04 [particle] joined
gfldex does that mean they have to be or does it mean they can be? 13:04
jnthn r: subset Foo of Str where /a|b|c/; say Foo ~~ Mu 13:05
p6eval rakudo 024843: OUTPUT«False␤»
13:05 bacek joined
jnthn r: subset Foo of Str where /a|b|c/; say Foo ~~ Str 13:05
p6eval rakudo 024843: OUTPUT«True␤»
jnthn wtf...
tadzik r: subset Foo of Str where /a|b|c/; say Foo.^mro 13:06
p6eval rakudo 024843: OUTPUT«No such method 'mro' for invocant of type 'Perl6::Metamodel::SubsetHOW'␤ in block <anon> at /tmp/Q9t8t1Asel:1␤␤»
moritz gfldex: I don't know
tadzik hy
moritz tadzik: mro is only for stuff we call methods on, no?
r: subset Foo of Str where /a/; say Foo.uc 13:07
p6eval rakudo 024843: OUTPUT«Nominal type check failed for parameter ''; expected Cool but got Foo instead␤ in method uc at src/gen/CORE.setting:1876␤ in block <anon> at /tmp/6yKOSAo7iD:1␤␤»
moritz r: subset Foo of Str where /a/; say Foo ~~ Cool
p6eval rakudo 024843: OUTPUT«False␤»
gfldex the spec seams not to say anything about X~~ but got something about [~~]
13:08 Psyche^ joined
moritz std: [~~] 1, 2, 3 13:08
p6eval std f179a1b: OUTPUT«ok 00:00 42m␤»
gfldex it feels like there would be something amiss without X~~ but i felt wrong about perl6 before :) 13:09
moritz r: subset Foo of Str where /a/; augment class Foo { method foo() { say 'lol' } }; Foo.foo
p6eval rakudo 024843: OUTPUT«===SORRY!===␤augment not allowed without 'use MONKEY_TYPING'␤at /tmp/EE3wFUBGWn:1␤»
moritz r: use MONKEY_TYPING; subset Foo of Str where /a/; augment class Foo { method foo() { say 'lol' } }; Foo.foo 13:10
p6eval rakudo 024843: OUTPUT«Useless declaration of a has-scoped method in class␤===SORRY!===␤Method 'compose' not found for invocant of class 'Perl6::Metamodel::SubsetHOW'␤»
moritz that's quite a funny error :-)
tadzik moritz: oh, right
r: subset Foo of Str where /a|b|c/; say Foo.^parents
p6eval rakudo 024843: OUTPUT«No such method 'parents' for invocant of type 'Perl6::Metamodel::SubsetHOW'␤ in block <anon> at /tmp/P6iLqu8BH0:1␤␤»
tadzik okay
moritz where would a has-scaoped method make sense, if not in a class? (ok, a role...) 13:11
13:11 Patterner left, Psyche^ is now known as Patterner
moritz submits rakudobug (subset !~~ Mu) 13:13
gfldex std: subset Foo of Str; sub (*@l where { $^a X~~ Foo } ) { } 13:14
p6eval std f179a1b: OUTPUT«Potential difficulties:␤ @l is declared but not used at /tmp/OIjzCiWA9d line 1:␤------> subset Foo of Str; sub (*⏏@l where { $^a X~~ Foo } ) { }␤ok 00:00 43m␤»
13:15 benabik left
gfldex looks like i can have typed slurpy arrays in signatures for the price of sloooowness 13:15
moritz the reason we don't allow typed slurpies is that they are lazy 13:16
but type checks require evaluating all elements 13:17
gfldex that could take some time :)
moritz aye
mucker hi guys .. i'm thinking of writing a forthish compiler. should i use nqp or pir ??? 13:23
tadzik nqp
jnthn Maintaining a compiler in an assembly language considered unfun. 13:24
Rakudo is almost rid of things that are written in PIR. Every time we re-do something in Perl 6 or NQP it gets easier to maintain :)
And more accessible for people to hack on.
mucker okie dokie :)
moritz QAST! QAST! QAST!
jnthn Yeah.
mucker in the end nqp translates to pir, right ?? 13:25
jnthn I should deal with a few things before really digging into that though :)
dalek kudo: d7f45ff | moritz++ | src/core/Cool.pm:
Cool.eval
13:26
moritz meh 13:27
jnthn grr
moritz somebody pushed to mater
jnthn already :'d it away
moritz *mster
grrr
jnthn Then I typo'd nom.
:/
dalek kudo/nom: 12983a9 | jnthn++ | src/Perl6/Metamodel/SubsetHOW.pm:
Fix silly thinko in subset type checking.
jnthn deletes his local master
I thought I'd done that before. Guess it was on $other-machine.
moritz now +2 on renaming nom to master 13:28
jnthn By now is it only a problem for people who cloned long enough ago to already have a master branch? 13:29
moritz plus those that wonder where master is
jnthn No, I mean, if we push what is currently nom to master... 13:30
moritz hm, yes 13:31
jnthn We did it to avoid poeple having to re-clone. But now, only people who grabbed a clone quite a long time ago will have a local master branch.
moritz right 13:32
flussence running `git remote prune origin` every few months is a good idea :)
13:33 isBEKaml joined 13:34 am0c left
jnthn deletes a few branches of his from GitHub too 13:35
13:37 thou joined
PerlJam re nom->master +! from me too. (The only time I ever notice it though is when attempting to switch from another branch *back* to nom as my fingers tend to reflexively type "git co master") 13:40
er, +1 even
jnthn Mine are gonna type nom for ages though... :)
moritz well, I've had both problems
trying 'git checkout master' in rakudo, and later 'git checkout nom' in nqp :-) 13:41
PerlJam heh
13:43 fgomez left
moritz I have deleted several more branches on github 13:47
so now pruning branches in your local repos is a good idea :-) 13:48
13:54 fgomez joined 14:04 mucker left 14:06 benabik joined
pmichaud ... ".threw" ? 14:06
github.com/rakudo/rakudo/commit/02...d3ace680e3
moritz oops, should be .throw 14:07
I wonder why we're passing a test for it though :-) 14:08
pmichaud it still dies, I guess. :-)
good morning, #perl6
jnthn o/ pmichaud :)
moritz oh, it seems I was imagining things. We don't pass a test for it 14:09
that makes me feel slightly less nervous
14:09 icwiener joined
moritz r: sub f() { gather { return } }; f() 14:10
p6eval rakudo 024843: ( no output )
14:10 tokuhiro_ joined
moritz r: sub f() { gather { return } }; ~f() 14:10
p6eval rakudo 024843: OUTPUT«Attempt to return outside of any Routine␤ in block <anon> at src/gen/CORE.setting:363␤ in block <anon> at /tmp/3IDQ3DXSUd:1␤␤»
moritz r: sub f() { gather { return } }; try ~f(); say $!.WHAT
p6eval rakudo 024843: OUTPUT«X::ControlFlow::Return()␤»
moritz well, that's not the same exception type :/
turns out I don't know to trigger the line in that patch :/ 14:12
pmichaud r: sub f() { gather { take 1; return; } }; try ~f(); say $!.WHAT;
p6eval rakudo 024843: OUTPUT«X::ControlFlow::Return()␤»
jnthn pmichaud: I'm been pondering NFAs for alternations a bit. It's not so hard to see that we could store/build the NFA for an alternation. But I'm not sure where we'd store the fate list (the order to try the branches). If we were to backtrack into a rule, it'd seem that it needs to stay around longer than a single invocation...
moritz r: sub f() { return -> { return } }; f()() 14:13
p6eval rakudo 024843: OUTPUT«Attempt to return outside of any Routine␤ in block <anon> at src/gen/CORE.setting:363␤ in block <anon> at /tmp/03tFLvGRCS:1␤␤»
14:13 bluescreen10 left
pmichaud jnthn: ummmmm, I had this figured out at one point... thinking 14:14
oh, yes
you can store it on the backtracking stack
colomon n: say 1..6 ~~ 3
p6eval niecza v18-1-gc86e3f0: OUTPUT«False␤»
jnthn pmichaud: Ain't the bs an integer array? 14:15
colomon n: say 1..6 R~~ 3
p6eval niecza v18-1-gc86e3f0: OUTPUT«True␤»
sorear good * #perl6
jnthn pmichaud: Or is your point, "so are the fate"? :)
pmichaud jnthn: sure.... but the alternations are just jump targets
colomon r: say 1..6 R~~ 3
p6eval rakudo 12983a: OUTPUT«True␤»
colomon r: say 1..6 ~~ 3
p6eval rakudo 12983a: OUTPUT«False␤»
jnthn pmichaud: Oh...so you could just queue them all up on the bstack?
pmichaud yes, longest alternation is queued last
then fail
jnthn hah!
pmichaud++ 14:16
pmichaud so, just a bunch of mark_push calls for the alternations that match
jnthn Dang, that's really obvious in hindsight...
:)
sorear rakduo is going to use fates?
jnthn sorear: If you're thinking what I think you're thinking - that's not quite what I mean here; I'm just talking about the point we cross fate edges as in, "we consider this branch matched" 14:17
sorear: Not doing the "pass the matches down the tree" thing just yet. 14:18
14:19 fglock joined
jnthn pmichaud: I guess you saw the commit, but I tossed all of that weird sorting stuff in !protoregex too and twiddled the NFA runner to just spit out useful output. 14:19
sorear jnthn: What does fate mean in a rakudo context?
fglock o/
jnthn sorear: I mean $EDGE_FATE
pmichaud I didn't see the commit, no. For some reason I'm not getting notifications of nqp commits.
jnthn Oh
pmichaud I know that I was at one time, but they seem to have stopped.
anyway, "toss weird sorting stuff"++
sorear jnthn: I haven't read any of the new rakudo LTM code
jnthn sorear: The edge type in the NFA you cross when you hit the end of the declarative prefix.
sorear ah 14:20
jnthn We could potentially change things so we retain all of the crossing points from the NFAs of merged subrules etc.
And then we'd be able to do the fates a la STD.
Or what I understand STD does.
pmichaud right, I had planned that to be a "future optimization" :)
sorear the problem with *that* idea is that it leads to exponential blowup 14:21
which is why I dropped it from niecza
jnthn sorear: It's not immediately clear to me why. What am I (likely) missing?
sorear regex a { x | y }; regex b { <a>* }
pmichaud jnthn: anyway; yes, using the bstack for alternations also means that ratcheting/commits work properly 14:22
sorear currently that generates a rather small NFA
if the b NFA had to generate branch information for <a> as well, it would be much larger
perhaps a better example would be regex b { <a> <a> <a> <a> <a> } 14:23
dalek kudo/nom: 69240df | moritz++ | src/core/ (2 files):
cut an exception type that I do not know how to trigger

it is already well-covered by a similar type. pmichaud++ noted a typo in the original code, so I guess it was never called.
sorear STD expands out that NFA as xxxxx | xxxxy | ... yyyyx | yyyyy, each with a *different* fate set, because different fates need to go to a 14:24
14:24 masonkramer joined
jnthn Ouch. 14:24
Oh wait, it computes the fate sets AOT, rather than during traversal?
14:24 bluescreen10 joined
jnthn That...wasn't what I had in mind. :) 14:25
14:26 replore_ left
jnthn had figured you could cross multiple "sub-fate" edges, each of which fills in an entry in the fate set. 14:26
pmichaud Me neither, although I hadn't explored it very far ("future optimization")
jnthn Aye.
I'm not planning to work on it...it's the alternations I'm interested in.
moritz now the future is here :-). At least partially :-)
jnthn Feel free to beat me to it, but I may give it a go at the weekend.
pmichaud future is here suboptimally, I guess.
jnthn s/it/them/
(give the alternations a go, just to be clear :)) 14:27
pmichaud I think I'd rather spend my tuits on the .munch issue
sorear jnthn: doing it during traversal leads to an exponential blowup of a different sort
pmichaud since you're already spun up on the alternations one
jnthn pmichaud: OK, that's fine.
pmichaud also I need to catch up with nqp latest stuff
and I want to work on my synopsis-excerpting tool a bit
sorear jnthn: contrived example: regex a { x | x }; regex b { <a>* } 14:28
jnthn pmichaud: By now I can read NFAs by reading the list of integers. :)
pmichaud jnthn: yes, it's not really that hard once you're into it
jnthn pmichaud: Yeah, it ain't so bad :)
pmichaud I like that particular encoding for a variety of reasons
sorear jnthn: after reading xxx, the current set of active states is { K(fate = 000), K(fate = 001), ... K(fate = 111) }
jnthn: whereas without fate recording you only need to keep one copy of K in the active node set 14:29
jnthn sorear: Contrived example is contrived, but yes, I think I see where you're going.
pmichaud I suspect fate recording could be size limited somehow, though -- use the fate information if we have it, do it the long way if we don't 14:30
jnthn *nod*
So long as it's an optimization and not required for correctness, that works out fine.
pmichaud: I'd rather you spend your tuits on munch too, fwiw :) 14:31
I understand that area less well :)
pmichaud good for me
s/good/works/
jnthn \o/ 14:32
pmichaud I also may wrangle a few tickets, and work on regex performance a bit
jnthn Yeah.
sorear it seems that fates *are* required for correctness in the presence of backtracking though.
PerlJam Have You guys read swtch.com/~rsc/regexp/regexp1.html ? 14:33
jnthn pmichaud: On regex performance: our "startup" time has sufferred because of building a bunch of quite complex NFAs as we start parsing. I already know what to do with this issue.
pmichaud jnthn: what to do?
sorear PerlJam: that page talks about regular expressions, not p6regex
PerlJam: I have had that link forwarded to me so many times I am starting to take it badly 14:34
pmichaud PerlJam: yes, I read that page -- it was one of my sources for developing qregex
PerlJam okay, just checking
jnthn pmichaud: We can build them at compile time and they'll get serialized. (more)
PerlJam sorear: aye, I just wanted to make sure you guys were aware of it :) 14:35
jnthn pmichaud: Since they're held by a caching mechanism, invalidation that later happens at runtime will not cause us issues.
sorear p6: grammar F { regex a { a | aaaaa } ; regex TOP { ^ ( <a> | aaa ) <?{ $0.chars < 5 }> {} .* } }; say F.parse("aaaaa")
p6eval pugs: OUTPUT«*** No such method in class F: "&parse"␤ at /tmp/1aI5mChYN2 line 1, column 100 - line 2, column 1␤»
..rakudo 12983a: OUTPUT«q[aaaaa]␤ 0 => q[a]␤ a => q[a]␤␤»
..niecza v18-1-gc86e3f0: OUTPUT«#<match from(0) to(5) text(aaaaa) pos([#<match from(0) to(1) text(a) pos([].list) named({"a" => #<match from(0) to(1) text(a) pos([].list) named({}.hash)>}.hash)>].list) named({}.hash)>␤»
pmichaud jnthn: yes, I was hoping/thinking there would be a compile-time serialization possibility :)
sorear p6: grammar F { regex a { a | aaaaa } ; regex TOP { ^ ( <a> | aaa ) <?{ $0.chars < 5 }> {} .* } }; say ~F.parse("aaaaa").[0] 14:36
p6eval pugs: OUTPUT«*** No such method in class F: "&parse"␤ at /tmp/xKevWph4RE line 1, column 100 - line 2, column 1␤»
..rakudo 12983a, niecza v18-1-gc86e3f0: OUTPUT«a␤»
pmichaud jnthn: at the time qregex was first being built, a lot of serialization was nyi :)
jnthn pmichaud: Right. :)
pmichaud but I was comfortable it could be made to work
sorear I have been told that this should return q[aaa]
but making this work requires fatefulness
pmichaud or some mechanism to control backing into subrules in the declarative prefix 14:40
maybe some variation of :exhaustive where the subrule knows to cache and order its matches based on ltm 14:42
or some way for a subrule to return a state that says "I have more matches, but none longer than the minimum you sent me" 14:44
14:50 wtw left
pmichaud afk for a bit 14:51
14:51 kaare_ joined 14:53 lestrrat left 14:54 lestrrat joined 15:01 fgomez left 15:02 aesundstrom joined 15:06 lestrrat left 15:07 lestrrat joined 15:18 plobsing_ left 15:20 japhb left, plobsing joined
kresike bye all 15:24
15:24 kresike left 15:29 mucker joined, tokuhiro_ left 15:30 fhelmberger left 15:32 fglock left, bluescreen10 left 15:33 fhelmberger joined 15:35 fhelmberger left 15:44 bluescreen10 joined 15:52 bluescreen10 left 15:53 bluescreen10 joined 15:55 crab2313 joined 15:56 fgomez joined 16:02 JimmyZ left 16:04 masonkramer left 16:05 brrt left 16:07 simcop2387 left, simcop2387 joined 16:16 japhb joined 16:19 Kresike joined
Kresike hi all 16:20
tadzik hello again Kresike
Kresike hello again tadzik
16:42 not_gerd joined
not_gerd n: say "foo".subst(/(foo)/, { say $0.WHAT; "bar" }) 16:42
phenny not_gerd: 18 May 00:09Z <flussence> tell not_gerd I don't even remember what that error was from... but I've built rakudo on my desktop and netbook recently without problems so I'll assume it's fixed.
p6eval niecza v18-1-gc86e3f0: OUTPUT«Match()␤bar␤»
not_gerd r: say "foo".subst(/(foo)/, { say $0.WHAT; "bar" })
p6eval rakudo 69240d: OUTPUT«Any()␤bar␤»
not_gerd ^ known?
16:42 daxim left
jnthn p6: say "foo".subst(/(foo)/, -> $/ { say $0.WHAT; "bar" }) 16:44
p6eval rakudo 69240d, niecza v18-1-gc86e3f0: OUTPUT«Match()␤bar␤»
..pugs: OUTPUT«Error eval perl5: "if (!$INC{'Pugs/Runtime/Match/HsBridge.pm'}) {␤ unshift @INC, '/home/p6eval/.cabal/share/Pugs-6.2.13.20120203/blib6/pugs/perl5/lib';␤ eval q[require 'Pugs/Runtime/Match/HsBridge.pm'] or die $@;␤}␤'Pugs::Runtime::Match::HsBridge'␤"␤*** Can't locate P…
jnthn That's the way to do it.
not_gerd jnthn: thanks 16:45
is it a niecza-bug then?
jnthn I think there's an underlying unresolved spec question there, iirc.
We'd like it to work with what you wrote, but making it do so is problematic, because how does match .subst now what $/ to set in order to have the closure see the right thing? 16:46
s/now/known/
Unless this all got resolved/decided somewhere and I forgot, of course. 16:47
diakopter moritz: do we have an html version of Using Perl 6
moritz diakopter: 'make html' should produce one
diakopter oh! do we have the result linked from perl6.org? 16:48
and are the chapters separated to different pages
16:50 mikemol joined
diakopter I have the itch to write reams of documentation, and I think Using Perl 6 might be the place for it, as long as it was automatically rendered/published to perl6.org 16:50
"write reams.." also for my own learning. 16:51
dalek pan style="color: #395be5">perl6-examples: d792bfe | (Gerhard R)++ | shootout/regex-dna.p6.pl:
[shootout/regex-dna] workaround for unresolved spec issue, jnthn++
16:52
16:52 birdwind1pbird left 16:53 dakkar left 16:54 japhb left 16:55 birdwind1pbird joined, cognominal left, cognominal joined 16:56 estrabd joined 17:08 sjohnson left, am0c joined 17:10 PacoAir left
not_gerd gist.github.com/2837706 17:12
^ golfed version of the regex-dna issue
eats all your memory on 32-bit systems
sorear jnthn: What I (or was it colomon?) did some time last year was to set CALLER::<$/>, but save the old value to restore before .susbt returns
I'm happy with this, so is colomon, and no-one else has complained
17:15 brrt joined 17:17 bbkr_ left, birdwind1pbird left 17:18 birdwindupbird left 17:20 _ilbot left 17:21 _ilbot joined 17:27 sjohnson joined 17:31 benabik left 17:36 wolfman2000 joined
TimToady n: gist.github.com/2837838 17:38
p6eval niecza v18-1-gc86e3f0: OUTPUT«1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765␤1 1 2 4 7 13 24 44 81 149 274 504 927 1705 3136 5768 10609 19513 35890 66012␤1 1 2 4 8 15 29 56 108 208 401 773 1490 2872 5536 10671 20569 39648 76424 147312␤1 1 2 4 8 16 31 61 120 236 464 9…
TimToady r: gist.github.com/2837838
p6eval rakudo 69240d: OUTPUT«1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765␤1 1 2 4 7 13 24 44 81 149 274 504 927 1705 3136 5768 10609 19513 35890 66012␤Not enough positional parameters passed; got 3 but expected 4␤ in whatevercode <anon> at eval_2:1␤ in block <anon> at s…
TimToady rakudobug
17:48 birdwindupbird joined
diakopter ponders how to golf it 17:49
17:51 kaleem left
TimToady my guess is that something's not flattening in list context that should 17:52
s/list/slurpy/ to be a bit more precise
sorear rakudobug? usually it is niecza that has the horrible flattening problems 17:53
TimToady but installing calls to flat doesn't seem to help 17:54
well, it's always possible that TimToady is relying on niecza's buggy behavior somehow... 17:55
TimToady notes the odd semantics of "always" in that sentence 17:56
geekosaur will just point to James Nicoll re English 18:01
18:02 not_gerd left 18:03 raiph joined
TimToady A linguist has a problem and says "I know, I'll use a level of indirection." Now he has 7±2 problems... 18:04
diakopter n: gist.github.com/2837921 18:05
p6eval niecza v18-1-gc86e3f0: OUTPUT«Unhandled exception: Cannot unbox a Variable[] from an object of repr P6box[Int32]␤ at <unknown> line 0 (iter_flatten @ 0) ␤ at /home/p6eval/niecza/lib/CORE.setting line 2391 (GatherIterator.reify @ 6) ␤ at <unknown> line 0 (ExitRunloop @ 0) ␤ at /tmp/w…
diakopter internals leaky
sorear: fyi this revision was the one that did that ^^ gist.github.com/2837921/48f465d8c4...d724869ace 18:07
so you'll have to paste that into a new gist to run it
18:09 Celelibi left 18:11 raiph left 18:27 ruoso joined 18:34 kboga joined
kboga hi p6 18:38
t/spec/S02-types/bool.t seems to fail nondeterministically here: nopaste.snit.ch/paste 18:39
(was tested on latest nom) 18:40
jnthn kboga: I managed to get something based on it to fail quite reliably...but didn't manage to get to the bottom of what on earth is going on yet. 18:41
kboga ah, good that you guys are aware of it already though :) 18:42
diakopter r: say ((1,1, {[+] @_} ... *)[0...4], *+*+*+*+* ... *)[4]
p6eval rakudo 69240d: OUTPUT«8␤»
diakopter r: say ((1,1, {[+] @_} ... *)[0...3], *+*+*+*+* ... *)[4]
p6eval rakudo 69240d: OUTPUT«Not enough positional parameters passed; got 3 but expected 5␤ in block <anon> at /tmp/Rc_Hq3mTwO:1␤␤»
diakopter jnthn: ^^ note
something's off by one ;) 18:43
18:44 brrt left
diakopter n: say ((1,1, {[+] @_} ... *)[0...4], *+*+*+*+* ... *)[4] 18:46
p6eval niecza v18-1-gc86e3f0: OUTPUT«8␤»
diakopter n: say ((1,1, {[+] @_} ... *)[0...3], *+*+*+*+* ... *)[4]
p6eval niecza v18-1-gc86e3f0: OUTPUT«Unhandled exception: Need more items on the LHS␤ at /home/p6eval/niecza/lib/CORE.setting line 1401 (die @ 5) ␤ at /home/p6eval/niecza/lib/CORE.setting line 3128 (get-next-closure @ 11) ␤ at /home/p6eval/niecza/lib/CORE.setting line 3172 (ANON @ 17) ␤ at…
diakopter n: say ((1,1, {[+] @_} ... *)[0...5], *+*+*+*+* ... *)[4] 18:47
p6eval niecza v18-1-gc86e3f0: OUTPUT«8␤»
18:47 am0c left 18:49 kaleem joined
diakopter whoa. 18:49
r: say ((1,1, {[+] @_} ... *)[0...6], *+*+*+*+* ... *)[6]
p6eval rakudo 69240d: OUTPUT«32␤»
diakopter r: say ((1,1, {[+] @_} ... *)[0...5], *+*+*+*+* ... *)[6]
p6eval rakudo 69240d: OUTPUT«Not enough positional parameters passed; got 3 but expected 5␤ in block <anon> at /tmp/s7cfYb8Y8c:1␤␤»
diakopter r: say ((1,1, {[+] @_} ... *)[0...5], *+*+*+*+* ... *)[5]
p6eval rakudo 69240d: OUTPUT«16␤»
18:50 benabik joined
diakopter r: say ((1,1, {[+] @_} ... *)[0...6], *+*+*+*+*+* ... *)[7] 18:51
p6eval rakudo 69240d: OUTPUT«Not enough positional parameters passed; got 3 but expected 6␤ in block <anon> at /tmp/KHWhlbyY4K:1␤␤»
diakopter TimToady: it's always getting only 3 positional parameters
PerlJam r: say ((1,1, {[+] @_} ... *)[0...5], *+*+*+*+* ... *)[10] 18:52
p6eval rakudo 69240d: OUTPUT«Not enough positional parameters passed; got 3 but expected 5␤ in block <anon> at /tmp/m7rWnL_oHI:1␤␤»
PerlJam r: say ((1,1, {[+] @_} ... *)[0...5], *+*+*+*+* ... *)[9]
p6eval rakudo 69240d: OUTPUT«Not enough positional parameters passed; got 3 but expected 5␤ in block <anon> at /tmp/QgSok6vtpP:1␤␤»
18:53 replore_ joined
jnthn kboga++ # pull requests 18:58
19:00 brrt joined
kboga np 19:05
gtg bye p6 19:06
19:06 skids left, kboga left
PerlJam oh, SEQUENCE has 3 as a magic number. I was thinking something completely different. 19:09
19:11 kaleem left
diakopter r: say ((1,1,2,4,8)[^4], *+*+*+* ... *)[4] 19:16
p6eval rakudo 69240d: OUTPUT«Not enough positional parameters passed; got 3 but expected 4␤ in block <anon> at /tmp/WkDpAcE1QC:1␤␤»
jnthn r: say (*+*+*+*).signature
p6eval rakudo 69240d: OUTPUT«WhateverCode.new()␤»
jnthn r: say (*+*+*+*).WHAT 19:17
p6eval rakudo 69240d: OUTPUT«WhateverCode()␤»
benabik WhateverCode as a signature?
jnthn Hm.
diakopter r: say ((1,1,2,4,8), *+*+*+* ... *)[4]
p6eval rakudo 69240d: OUTPUT«8␤»
PerlJam I bet the sequence op will always only pass 3 parameters to the code
jnthn I doubt it.
diakopter n: say ((1,1,2,4,8)[^4], *+*+*+* ... *)[4]
p6eval niecza v18-1-gc86e3f0: OUTPUT«8␤»
jnthn PerlJam: Oh, it's in sequence?
PerlJam oh.
well, that's my current guess.
jnthn k 19:18
diakopter r: say ((1,1,2,4,8)[^4], *+*+*+* ... *)[4]
p6eval rakudo 69240d: OUTPUT«Not enough positional parameters passed; got 3 but expected 4␤ in block <anon> at /tmp/HgBaJv7BVP:1␤␤»
diakopter r: say ((1,1,2,4,8), *+*+*+* ... *)[4]
p6eval rakudo 69240d: OUTPUT«8␤»
19:18 replore_ left
jnthn say (1,1,2,4,8)[^4] 19:18
r: ay (1,1,2,4,8)[^4]
p6eval rakudo 69240d: OUTPUT«===SORRY!===␤CHECK FAILED:␤Undefined routine '&ay' called (line 1)␤»
jnthn r: say (1,1,2,4,8)[^4] 19:19
p6eval rakudo 69240d: OUTPUT«1 1 2 4␤»
PerlJam yeah, as soon as it needs to generate an element with the code block, it barfs with "got 3 but expected N" 19:21
TimToady r: say {$^a + $^b + $^c + $^d}.arity
p6eval rakudo 69240d: OUTPUT«4␤»
TimToady r: say (*+*+*+*).arity 19:22
p6eval rakudo 69240d: OUTPUT«WhateverCode.new()␤»
jnthn It's seemingly applying the *.foo logic and deriving a new closure.
r: say WhateverCode.^mro 19:23
p6eval rakudo 69240d: OUTPUT«WhateverCode() Code() Any() Mu()␤»
jnthn r: say Whatever.^mro
p6eval rakudo 69240d: OUTPUT«Whatever() Any() Mu()␤»
jnthn Hm, it ain't just inheriting it from Whatever. Guess it must be deliberate then...
oh
It's compile time I guess
TimToady nodnod
diakopter the parcel is flattening differently
jnthn r: say ((*+*+*+*)).arity 19:24
p6eval rakudo 69240d: OUTPUT«WhateverCode.new()␤»
jnthn r: say (my $ = (*+*+*+*)).arity
p6eval rakudo 69240d: OUTPUT«4␤»
TimToady r: say .arity given *+*+*+*
p6eval rakudo 69240d: OUTPUT«4␤»
diakopter r: say ((1,1,2,4,8)[^4]).WHAT; say ((1,1,2,4,8)[^4], *+*+*+* ... *)[4]
p6eval rakudo 69240d: OUTPUT«Parcel()␤Not enough positional parameters passed; got 3 but expected 4␤ in block <anon> at /tmp/AoA_4u5C4Y:1␤␤»
diakopter r: say ((1,1,2,4,8)).WHAT; say ((1,1,2,4,8), *+*+*+* ... *)[4]
p6eval rakudo 69240d: OUTPUT«Parcel()␤8␤»
TimToady so probably not the problem here 19:25
19:25 brrt left
diakopter r: say ((1,1,2,4,8)[^4]).WHAT; say ((1,1,2,4,8)[^4], {$^a + $^b + $^c + $^d} ... *)[4] 19:26
p6eval rakudo 69240d: OUTPUT«Parcel()␤Not enough positional parameters passed; got 3 but expected 4␤ in block <anon> at /tmp/23SVoLqOd5:1␤␤»
TimToady r: say (1,1,2,4,8)[^4].perl 19:27
p6eval rakudo 69240d: OUTPUT«(1, 1, 2, 4)␤»
PerlJam Is munch not specced?
TimToady it is not
PerlJam should it be?
TimToady (yet-ish)
maybe 19:28
PerlJam ok
diakopter r: say ((1,1,2,4,8,15)[^5], *+*+*+* ... *)[5] 19:29
p6eval rakudo 69240d: OUTPUT«Not enough positional parameters passed; got 3 but expected 4␤ in block <anon> at /tmp/baTUwurQkA:1␤␤»
TimToady r: (*+*+*+*).((1,1,2,4,8)[^4]).say 19:30
p6eval rakudo 69240d: OUTPUT«Not enough positional parameters passed; got 1 but expected 4␤ in block <anon> at /tmp/r0rKLstLgW:1␤␤»
TimToady r: (*+*+*+*).(|(1,1,2,4,8)[^4]).say
p6eval rakudo 69240d: OUTPUT«8␤»
diakopter workaround, I guess 19:31
jnthn uh, (1,1,2,4,8)[^4] will certainly pass as a single argument. 19:32
You need the |, as TimToady did, if it's going to flatten into the argument list.
19:32 mucker left
TimToady the ... is doing something different 19:33
jnthn $tail.munch($tail.elems - $count); 19:36
$value := $code(|$tail);
Is that right? 19:37
I'd naively have expected $value := $code(|$tail.munch(...));
19:38 Kresike left 19:39 Celelibi joined
timotimo can something like algebraic types be made with perl6 somehow? 19:44
19:45 Kresike joined
TimToady that depends on how "like" you need them, and how fancy "somehow" can be 19:46
19:47 isBEKaml left
aesundstrom FWIW, Sage is the best CAS system I've seen for abstract algebra, and it's written in Python. Now, given that everything in Python (pick your version) can be done better in Perl6 ? ;) 19:49
PerlJam They're turing equivalent, so ... ;) 19:50
aesundstrom www.sagemath.org/ 19:51
19:52 pupoque joined 19:56 alester joined
diakopter tries jnthn's patch 19:57
19:58 crab2313 left 20:00 cognominal left
sorear yay, small world 20:00
aesundstrom: william stein was my calc I instructor D:
TimToady r: gist.github.com/2838595 20:01
p6eval rakudo 69240d: OUTPUT«[RedBlack::B, [RedBlack::B, [RedBlack::B, Any, 1, Any], 2, [RedBlack::B, Any, 3, Any]], 4, [RedBlack::B, [RedBlack::B, [RedBlack::R, Any, 5, Any], 6, Any], 7, [RedBlack::B, [RedBlack::R, Any, 8, Any], 9, [RedBlack::R, Any, 10, Any]]]]␤»
TimToady n: gist.github.com/2838595
p6eval niecza v18-1-gc86e3f0: OUTPUT«===SORRY!===␤␤Lexical B is not a package at /tmp/n53wP0DbF5 line 3:␤------> multi balance(B⏏,[R,[R,$a,$x,$b],$y,$c],$z,$d) { [R,[B,$␤␤A type must be provided at /tmp/n53wP0DbF5 line 3:␤------> multi balance(B⏏…
TimToady timotimo: see gist ^^
20:02 Kresike left
aesundstrom sorear: cool 20:02
jnthn Whoa.
TimToady sorear: see nieczabug ^^
moritz TimToady: is that stolen from the Haskell solution? 20:04
colomon TimToady++
20:04 Kresike joined
sorear niecza: sub foo(True) { } 20:06
p6eval niecza v18-1-gc86e3f0: OUTPUT«===SORRY!===␤␤Lexical True is not a package at /tmp/xNq0ZDs_Ri line 1:␤------> sub foo(True⏏) { }␤␤A type must be provided at /tmp/xNq0ZDs_Ri line 1:␤------> sub foo(True⏏) { }␤␤Potential difficulties:…
sorear TimToady: golfed for yu
dalek Heuristic branch merge: pushed 25 commits to nqp by moritz 20:10
TimToady moritz: yes 20:11
20:11 brrt joined
jnthn 25 commits? 20:13
moritz jnthn: that's the branch merge from kboga++, replacing lots of pir:: ops with nqp:: ops
jnthn oh, it was a bunch of commits 20:14
yay :)
kboga++
moritz jnthn: and introduces quite some that were missing
I'm now spectesting the corresponding rakudo branch too
jnthn \o/
I need to review various 6model related ones and pick nqp:: names for those soon I guess. 20:15
diakopter I have a patch for the ... munch thing
jnthn Does it fix things? 20:16
brrt yay, i build perl6 again
diakopter building.. I think it will.
20:16 not_gerd joined
jnthn diakopter++ 20:16
not_gerd I further golfed the regex-dna failure: gist.github.com/2837706
TimToady diakopter: can you explain the problem in words of one polysyllable?
not_gerd it's just the hich number of match objects
someone needs to add some laziness to subst() 20:17
s/hich/high/
moritz not_gerd: huh? subst returns a string, strings aren't lazy
diakopter overmunch
do.
doh.
segfault
haha
that shouldn't be.... 20:18
not_gerd moritz: subst stores all matches in an array before starting the replacements
jnthn not_gerd: Those match objects still seem...crazy big. It's not that long.
not_gerd that array exhausts my 32-bit address space if the input string is too large
moritz not_gerd: oh
diakopter yeah, the patch fixes it. the segfault was while building Text.pir
jnthn checks something...
diakopter fix: gist.github.com/2838671 20:19
moritz r: my Str subset MyStr; say MyStr ~~ Str 20:21
p6eval rakudo 69240d: OUTPUT«False␤»
diakopter (it didn't segfault when I typed make again)
dalek Heuristic branch merge: pushed 20 commits to rakudo/nom by moritz
jnthn moritz: Wasn't that the $*OFTYPE thingy we discussed the other day? 20:22
moritz jnthn: yes. But it passed bogusly before your last fix
jnthn oh!
I...thought I spectested :S
diakopter spectesting my patch. 20:23
dalek ast: e208a23 | moritz++ | S12-subset/subtypes.t:
TODO a test that was passing bogusly before rakudo 12983a9c6
20:23 kaare_ left
diakopter TimToady: it was munching all but 3 even if there was a codeblock, then it tried to munch all but code.count 20:24
TimToady why is it copying 3 values from the front of $tail when it won't need them? 20:25
moritz the sequence code is surprisingly complex
diakopter TimToady: yes, probably the whole section should be in one $code.defined if 20:26
20:26 aesundstrom left
PerlJam and $code should be called $generator or something IMHP 20:26
eer, IMHO 20:27
20:28 spider-mario joined
diakopter ok, spectesting new (much bigger with indentation changes) patch 20:31
not_gerd is it feasible to steal Niecza's subst() implementation ( github.com/sorear/niecza/blob/mast...tting#L543 ) for Rakudo?
there are some implementation-specific bits in it...
moritz not_gerd: I think one can fix it incrementally 20:32
dalek p: aad2c3c | jnthn++ | src/QRegex/Cursor.nqp:
If we know we won't backtrack into a rule, throw away the bstack from the Cursor.
20:33
moritz not_gerd: testing a patch locally 20:36
diakopter test failures; ugh. 20:39
moritz diakopter: one in subset.t wouldn't be surprising 20:40
20:40 birdwindupbird left
diakopter there are a lot 20:40
it's surprising. 20:41
20:41 birdwindupbird joined
moritz note that character ranges listify through sequences 20:42
ie ('a'..'c').list goes through ('a' ... 'c') in rakudo
diakopter hm
moritz so you can get test failures that don't look like they should have anything to do with sequences if you bust that case
diakopter yeah 20:43
moritz oh, and did I mention that the sequence code is surprisingly complex? :-)
diakopter oh, I see my fail; fixing 20:44
PerlJam moritz: why is that a surprise? :) 20:45
moritz PerlJam: because it's such a small op, only three dots :-)
ok, that's not logical, I know
PerlJam It's one of the more magical ops though. 20:46
sorear tried to steal rakudo-nom's SEQUENCE earlier, it broke the compiler ;)
PerlJam diakopter: gist the patch? 20:48
What little I understand, it seems like you only need to comment out the first munch in SEQUENCE and that should fix it. 20:49
diakopter to be most efficient, as TimToady suggested, we don't need to access/copy the first three values... so I refactored it a bit more gist.github.com/2838884 20:50
ugh. still test failures. 20:51
wth
moritz r: say Match ~~ Positional
p6eval rakudo 69240d: OUTPUT«False␤»
jnthn diakopter: You haven't got any other local changes, like leftover NQP changes? 20:53
diakopter oh
no
I'm trying it more simply, but uglier 20:54
PerlJam diakopter: oh, I figured that first "if $code.defined {}" was needed because you don't want any of the other elsifs to trigger when you have a WhateverCode (i.e., you're not deducing the sequence from the values you have already, you're generating them from the WhateverCode)
diakopter now look at it: gist.github.com/2838884
PerlJam ah, that does it I bet 20:55
moritz looks much saner
diakopter we'll see 20:56
I'm still curious why I got the segfault earlier while building Test.pir
20:57 ilogger2 joined, ChanServ sets mode: +v ilogger2
diakopter that's better. 20:58
wait 15 minutes (even with TEST_JOBS=4) and I'll tell you whether it's all green 20:59
moritz r: say ('ab' ~~/(.)(.)).list.elems
p6eval rakudo 69240d: OUTPUT«===SORRY!===␤Preceding context expects a term, but found infix / instead␤at /tmp/gvmYNBcVl5:1␤»
moritz r: say ('ab' ~~/(.)(.)/).list.elems
p6eval rakudo 69240d: OUTPUT«2␤»
diakopter oh, I see why the big patch didn't work. oops. 21:00
moritz jnthn: how expensive are binding and assignment? 21:02
ie when both are possible to use, does it make sense to use binding over assignment?
jnthn moritz: I guess we're talking about scalars? 21:03
moritz jnthn: yes
jnthn moritz: Not much difference.
moritz: Most assignments are cheap. 21:04
(e.g. if there's not a Proxy or something)
The main improvemnet will be if the optimizer realizes you bind immediately to a scalar, then it doesn't need to create a scalar container. 21:05
dalek kudo/lazy-subst: 494bd4f | moritz++ | src/core/Str.pm:
in Str.subst, never produce the whole list of matches

for very long strings this is too memory intensive. not_gerd++
21:10
moritz not_gerd: at your convenience, please test if the lazy-subst branch improves the situation for that benchmark on 32bit 21:11
not_gerd moritz: will do 21:12
diakopter spectest was green 21:13
dalek ast: ef5c6d5 | diakopter++ | S03-sequence/basic.t:
test rakudo sequence overmunching
21:14
diakopter oops. forgot to increment plan.
PerlJam diakopter: that one won't trigger the error since it never needs to call the generator 21:15
dalek ast: ab4afba | diakopter++ | S03-sequence/basic.t:
increment plan
ast: 27dbc07 | diakopter++ | S03-sequence/basic.t:
increment plan
diakopter r: ((1,1,2,4,8)[^4], *+*+*+* ... *)[4] 21:16
p6eval rakudo b057f6: OUTPUT«Not enough positional parameters passed; got 3 but expected 4␤ in block <anon> at /tmp/b9F51w2XVH:1␤␤»
PerlJam Hrm.
r: say (1,1,2,4,8, *+*+*+* ... *)[4]; 21:19
p6eval rakudo b057f6: OUTPUT«8␤»
PerlJam ah, that's it.
r: say (1,1,2,4,8, *+*+*+* ... *)[6]
p6eval rakudo b057f6: OUTPUT«Not enough positional parameters passed; got 3 but expected 4␤ in block <anon> at /tmp/lioh_NNGt5:1␤␤»
diakopter would someone like to apply the patch to rakudo? 21:20
it spectested green
PerlJam diakopter: you don't have a commit bit?
diakopter not to rakudo
21:23 kurahaupo joined
not_gerd moritz: the regex-dna benchmark still runs out of memory 21:24
21:24 libertyprime joined
diakopter TimToady++ triggered the bug 21:25
21:26 libertyprime left 21:27 libertyprime joined
diakopter let's see, to whom do I fax/mail/email something these days to get a rakudo commit bit 21:31
gfldex if masak would be awake you would have got it already :) 21:32
not_gerd moritz: gist.github.com/2837706 21:33
fails at replacement 25580 here
it seems the match objects won't ger garbage collected...
^get
PerlJam hugme: add diakopter to rakudo
hugme PerlJam: You need to register with freenode first
PerlJam bummer. :) 21:34
jnthn Also, they're holding on to an insane amount of memory. I can't work out why right now.
diakopter also, I need to send in a CLA I thought
jnthn Yes. 21:35
diakopter who receives the CLA these days 21:36
jnthn I forget off hand...
diakopter [Coke]?
jnthn pmichaud may also know 21:37
sorear TPF, isn't it?
diakopter I shouldn't speak of it like it's a formality; I realize it's an application. 21:38
sorear no, it is not an applicated 21:39
application
the CLA is a one-sided contract. TPF has no incentive to ever refuse a CLA, and I've never heard of them doing so
I, the undersigned, agree that TPF has the non-exclusive rights to use my code as they see fit 21:40
not_gerd good night, #perl6 21:52
sergot good night o/ ! 21:53
21:59 b1rkh0ff joined 22:06 Teratogen joined 22:11 spaceships joined, libertyprime left 22:12 libertyprime joined 22:14 kubrat joined 22:18 spaceships left 22:20 libertyprime left 22:21 libertyprime joined 22:31 whiteknight joined, whiteknight is now known as Guest28985 22:34 spaceships joined 22:40 libertyprime left, libertyprime joined 23:07 [particle]1 joined 23:11 icwiener_ joined
diakopter phenny: ask moritz please apply my rakudo patch if you want the test I added to stop failing :) 23:15
phenny diakopter: I'll pass that on when moritz is around.
23:17 masonkramer joined
diakopter phenny: ask moritz (or fudge it, of course) 23:17
phenny diakopter: I'll pass that on when moritz is around.
23:24 Chillance joined, lestrrat joined 23:33 wooden joined 23:48 wolfman2000 joined
sorear the debootstrapping experiment begins in earnest. 23:55
TimToady have the appropriate amount of fun