»ö« 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.
TimToady m: say [=>] <a b c d> 01:44
camelia rakudo-moar 315ec6: OUTPUT«"a" => "b" => "c" => "d"␤»
TimToady S-EXPR in a can...
m: say [=>] <a b c d>, Nil 01:45
camelia rakudo-moar 315ec6: OUTPUT«"a" => "b" => "c" => "d"␤»
TimToady m: say [=>] <a b c d>, Mu
camelia rakudo-moar 315ec6: OUTPUT«"a" => "b" => "c" => "d" => Mu␤»
TimToady if you want everyhing in the CARs 01:46
dj_goku I brought this up awhile back, but I want to take what is on rosetta code and add it to perl6/roast 04:55
moritz +1 06:15
masak mornin', #perl6 07:06
timotimo blogs.perl.org/users/brad_gilbert/2...tions.html 07:07
timotimo especially that last loop that wants to find out what the most precise rat representation of pi is should be much, much easier with a ... 07:10
but i don't understand the line "last unless $current.Rat"; probably has to do with the exact way pi-fraction is implemented 07:13
also, why start the calculation of pi-fraction from the start each time; should be doable with a lazy list, too
masak it's quite good code. 07:18
m: sub prefix:<1/>($x) { "it works!" }; say 1/ "test" 07:19
camelia rakudo-moar 315ec6: OUTPUT«it works!␤»
masak m: multi prefix:<1/>(Rational ::R $rat) { R.new($rat.denominator, $rat.numerator) }; multi prefix:<1/>(Int $integer) { FatRat.new(1, $integer) }; say 1/ 3/4; say 1/ 42; 07:20
camelia rakudo-moar 315ec6: OUTPUT«0.083333␤0.023810␤»
masak m: multi prefix:<1/>(Rational ::R $rat) { R.new($rat.denominator, $rat.numerator) }; multi prefix:<1/>(Int $integer) { FatRat.new(1, $integer) }; say (1/ 3/4).perl; say (1/ 42).perl; 07:21
camelia rakudo-moar 315ec6: OUTPUT«FatRat.new(1, 12)␤FatRat.new(1, 42)␤»
masak m: say (3/4).perl
camelia rakudo-moar 315ec6: OUTPUT«0.75␤»
timotimo ah, precedence too tight?
masak oh!
m: multi prefix:<1/>(Rational ::R $rat) { R.new($rat.denominator, $rat.numerator) }; multi prefix:<1/>(Int $integer) { FatRat.new(1, $integer) }; say (1/ (3/4)).perl; say (1/ 42).perl;
camelia rakudo-moar 315ec6: OUTPUT«<4/3>␤FatRat.new(1, 42)␤»
masak indeed. 07:22
timotimo++
timotimo that's exactly what brad gilbert was worried about :) 07:22
masak heh :)
masak .oO( unfounded, I tell you! unfounded! )
timotimo the rosettacode on continued fraction has a pretty sweet bit of code that makes a lazy list for the continued fraction 07:23
rosettacode.org/wiki/Continued_fraction#Perl_6 - at the bottom of this section
mapping .($x) over the triangle-reduction of the composition operator is a bit brainfucky if you're not familiar with continued fractions :D 07:24
map { @a[$_] + @b[$_] / * } - this is supposed to create a WhateverCode for every step of the way? 07:25
masak stability as a deliverable -- blog.rust-lang.org/2014/10/30/Stability.html -- interesting.
timotimo that is quite crafty, but close to "obscure", IMO 07:26
masak timotimo: hm yes. not so obvious, IMO. 07:51
sergot hi o/ 08:28
FROGGS hi sergot 08:37
sergot: do we want to start working on server support based on HTTP::UserAgent code? 08:38
because... HTTP::Easy is not that reliable
nor fast...
masak hi sergot 08:55
timotimo i'd also like to find out at what places in the server code and farabi6 itself we can apply async i/o and concurrency 08:59
grondilu say Blob.new but role {}; 09:02
m: say Blob.new but role {};
camelia rakudo-moar 315ec6: OUTPUT«This REPR cannot change type␤ in any mixin at src/gen/m-Metamodel.nqp:1178␤ in sub infix:<but> at src/gen/m-CORE.setting:18615␤ in block <unit> at /tmp/ndgTcgM7NT:1␤␤»
grondilu p: say Blob.new but role {}; 09:03
camelia rakudo-parrot 315ec6: OUTPUT«Representation does not implement change_type␤ in any mixin at gen/parrot/Metamodel.nqp:1173␤ in sub infix:<but> at gen/parrot/CORE.setting:18736␤ in sub infix:<but> at gen/parrot/CORE.setting:18731␤ in block <unit> at /tmp/DzTxL_ZNoI:1␤␤»
grondilu n: say Blob.new but role {};
camelia niecza v24-109-g48a8de3: OUTPUT«===SORRY!===␤␤Undeclared name:␤ 'Blob' used at line 1␤␤Unhandled exception: Check failed␤␤ at /home/camelia/niecza/boot/lib/CORE.setting line 1502 (die @ 5) ␤ at /home/camelia/niecza/src/STD.pm6 line 1147 (P6.comp_u…»
grondilu can't Blob be mixed in?
moritz nope
arnsholt r-m: say Blob.new.REPR 09:19
camelia rakudo-moar 315ec6: OUTPUT«VMArray␤»
arnsholt VMArray is the REPR that implements packed arrays. Adding fields to that wouldn't be a good idea, I think 09:20
dalek rlito: 629bbbe | (Flavio S. Glock)++ | TODO-perlito5:
Perlito5 - TODO update
09:58
dalek rlito: 2417608 | (Flavio S. Glock)++ | / (2 files):
Perlito5 - parser - VSTRING tweak
10:14
rlito: 4d5d7c5 | (Flavio S. Glock)++ | TODO-perlito5:
Perlito5 - parser - VSTRING tweak
10:15
dalek rlito: 1b95122 | (Flavio S. Glock)++ | TODO-perlito5:
Perlito5 - TODO update
10:26
onur Hi guys. I am wondering why $fh.say ("something"); is different than $fh.say("something"); 10:26
moritz onur: background is that in perl 5, print (1 + 2) * 3 will print 3, not 9 10:28
onur: that's because it allows whitespace between the routine name and the parameter list
moritz onur: to avoid that pitfall, Perl 6 disallows the whitespace 10:29
masak parentheses-as-argument-list-container versus parentheses-as-grouping-circumfix-operator
onur I see, I am used to space after routine names. Need to change this habit. 10:31
masak yes :)
moritz though for methods, you can also the colon
$fh.say: 'something'
onur: also, Perl 6 uses it disambiguate subruotines and keywards
*keywords
masak and for subs you can `say\ ("something");`
moritz m: sub if() { 42 }; say if()
camelia rakudo-moar 315ec6: OUTPUT«42␤»
masak m: say\ ("something"); 10:32
camelia rakudo-moar 315ec6: OUTPUT«something␤»
moritz that way later-introduced keywords won't break your function calls
masak or just not use the parens, of course.
m: say "something";
camelia rakudo-moar 315ec6: OUTPUT«something␤»
onur thats great. tyvm for explanation. 10:33
masak yvw.
sergot FROGGS: I'm in! :) 10:34
masak .tell lizmat getting a deprecation warning (in one of my in-production tools) for this line in the setting: github.com/rakudo/rakudo/blob/nom/...mar.pm#L16 10:41
yoleaux masak: I'll pass your message to lizmat.
lizmat messages, please 10:42
yoleaux 10:41Z <masak> lizmat: getting a deprecation warning (in one of my in-production tools) for this line in the setting: github.com/rakudo/rakudo/blob/nom/...mar.pm#L16
lizmat masak: what is the warning (more precisely?)
masak Method slurp (from IO::Handle) called at: src/gen/m-CORE.setting, lines 14114,14116
Deprecated since v2014.10, will be removed with release v2015.10!
Please use IO::Path.slurp instead. 10:43
sergot FROGGS: btw. can't we apply timotimo's PR (github.com/supernovus/perl6-http-e.../17/files) to the HTTP::UserAgent module as well?
masak I don't really see why one'd need to do open/slurp/close there instead of just slurp. 10:45
we don't even take in a filehandle, we take in a string.
lizmat testing this diff now:
- my $fh := open($filename);
- my $match := self.parse($fh.slurp, |%opts);
- $fh.close;
+ my $match := self.parse($filename.IO.slurp, |%opts);
masak lizmat++
is `$filename.IO.slurp` preferable to `slurp($filename)`? 10:46
lizmat Stage parse : moar(22247,0x7fff7bf29310) malloc: *** error for object 0x7ff92d0efd10: pointer being freed was not allocated 10:46
*** set a breakpoint in malloc_error_break to debug
grrrr
masak :(
lizmat (sorry Grrrr)
sometimes this happens... could be just a matter of adding some whitespace to not have that anymore
did I mention that rakudo feels less stable lately ? 10:47
masak dunno, but that's something to take seriously. 10:49
Grrrr :)
masak can this be traced back to some point?
FROGGS sergot: hmmm, but then we should also profile it... so that we can be sure it is a speedup for HTTP::UA
masak maybe even worth doing a bisect to try to find what introduced the instability.
lizmat but what to bisect?
FROGGS you cannot bisect a Heisenbug 10:50
lizmat Moar? nqp? rakudo? we don't really have bisect tool that works on all 3 parts
FROGGS: this is not a Heisenbug: it reliably fails with the same error 10:51
FROGGS that's not the problem... the problem is that this is likely to be a bug in moarvm (or rakudo's extops), and you can't just build a very old moar
(because current rakudo uses nqp::closefh_i, which is just a few days old)
and that's just one recent example 10:52
lizmat: to me a Heisenbug is something that changes its behaviour when you poke it...
so when you add diagnostics to the setting for example, it is likely that it will vanish 10:53
lizmat to me a Heisenbug is different results *without* poking
FROGGS or remove unrelated stuff for that matter
"In computer programming jargon, a heisenbug is a software bug that seems to disappear or alter its behavior when one attempts to study it."
wikipedia - always right :P
lizmat hehe
ok, fair enough 10:54
FROGGS if I had an osx box I'd probably build the setting under valgrind 10:55
though, it could also mean that it works out in that combination
lizmat yeah 10:56
in this case, adding a dummy method, makes it work :-(
dalek rlito: 5946b0f | (Flavio S. Glock)++ | src5/lib/Perlito5/Javascript2/Runtime.pm:
Perlito5 - js - overload wip
lizmat gets valgrind 10:58
masak: slurp $filename will just do the $filename.IO.slurp for you 10:59
dalek kudo/nom: 6fc0d5e | (Elizabeth Mattijsen)++ | src/core/Grammar.pm:
Simplify .parsefile, spotted by masak++

Please note there is a dummy method in there, as without it, the settings would not compile: instead you would get:
Stage parse : moar(22277,0x7fff7bf29310) malloc: *** error for object 0x7fda5c32bf40: pointer being freed was not allocated
  *** set a breakpoint in malloc_error_break to debug
11:01
sergot FROGGS: when do you want to start working on this HTTP server? 11:06
Ulti another second off of my little benchmark :) so that's a 12.5% speedup in a couple of days! I assume it's the changes I noticed to Grammar? 11:14
FROGGS sergot: maybe this evening? 11:26
lizmat alas, valgrind doesn't build for me :-( 11:27
lizmat make[2]: *** No rule to make target `/usr/include/mach/mach_vm.defs', needed by `m_mach/mach_vmUser.c'. Stop. 11:27
sergot FROGGS: ok :) 11:28
lizmat putting a symlink in /usr/include to XCode's mach dir, brings me a lot further 11:38
lizmat now problems in linking :-( 11:39
lizmat gives up on valgrind for now 11:43
dalek kudo/nom: 4187566 | (Elizabeth Mattijsen)++ | src/core/IO/Dir.pm:
Initial version of IO::Dir

Not used anywhere yet
11:59
timotimo didn't notice changes to Grammar 12:02
moritz we really are running in circles 12:04
moritz we had IO::File and IO::Dir objects in the path, and unified them to IO::Path; now we have IO::Path and IO::Dir again :-) 12:05
lizmat so, are you saying I should stop working on this ?
moritz I'm not 12:06
lizmat I mean, if we really are running in circles, it just show we haven't found the real solution yet
*shows
moritz I'm merely remarking that we had that in the past, and it turned out to be not beneficial
maybe the version you are writing will be, though
lizmat what was the reason for getting rid of it in the past ?
moritz 1) there was a big overlap between IO::Path and IO::Dir 12:07
2) it was a hassle to always generate the right one (Path vs. Dir), with not much benefit
moritz 3) it put the hassle of creating the right type onto the user too 12:07
lizmat not much benefit from a perfomance point of view ? 12:08
fwiw, I would never put that in the hands of the user, unless they really want to
moritz I didn't benchmark it; I argued from a conceptual and ease-of-use PoV
lizmat I'm trying to make it easier to use *and* get better performance
the user need not know whether it is an IO::Dir or an IO::Path that got created 12:09
or returned from e.g. a dir()
moritz but if dir() returns a list of either, there should be a common role with the common functionality 12:10
masak lizmat++ # doing really good work which incidentally has similarities to some good (but superseded) work from the past 12:10
lizmat not sure of a common role yet
but yes, I'm thinking of usurping the IO role for that
moritz both should support file tests, at the very least?
lizmat which would make perfect sense in light of the .IO coercer 12:11
yes, they wouild
of course, .d on IO::Dir would just be True :-)
timotimo the common role would be like FileTestable? 12:12
moritz ... which lizmat++ killed at the start of the month :-)
lizmat yes, and which may get resurrected after all 12:13
shit happens :-)
moritz well, IMHO they should both also have in common that there's an absolute path and a basename
luckily, 'git revert' is very easy
lizmat absolute path I agree with, basename I'm not sure yet :-) 12:15
indeed :-)
PerlJam greetings Perl people! 12:28
timotimo hello PerlJam 12:29
thanks again for doing the release :) 12:30
PerlJam timotimo: welcome :) 12:35
Woodi hallo #perl6 :) 12:36
PerlJam hey Woodi
masak gureetings, PerlJam, Woodi 12:36
timotimo saluton Woodi
Woodi is it possible in Perl 6 to use scalar as "base" of the class (like in Perl5) ?
timotimo "the class"? 12:37
masak Woodi: what do you want to accomplish? :)
Woodi in v5 you usually use blessed hash refference, but using plain scalar was possible too..
masak Woodi: what do you want to accomplish? :)
Woodi masak: just consider using strings as base for io::dir_or_something :) 12:38
but question is general
masak ah, so subclassing Str?
lizmat m: my $s = Set; $s.new(<a b c>).perl.say
camelia rakudo-moar 315ec6: OUTPUT«set("a","b","c")␤»
PerlJam masak: IF you ever give the "goto" talk again (or just talk about your pause feature), consider mentioning pause as a testing or upgrade feature (you pause the execution and transport the cont to another machine for testing or you can upgrade software in place while it's paused)
Woodi no, just give methods to scalar
masak PerlJam: good point. 12:39
lizmat m: my $s = "Set"; ::($s).new(<a b c>).perl.say
camelia rakudo-moar 315ec6: OUTPUT«set("a","b","c")␤»
lizmat Woodi: something like that? ^^
masak Woodi: my $s = "foo"; $s does role { method foo { say "OH HAI" } }; $s.foo
masak m: my $s = "foo"; $s does role { method foo { say "OH HAI" } }; $s.foo 12:39
camelia rakudo-moar 315ec6: OUTPUT«OH HAI␤»
Woodi lizmat: I do not know :)
masak Woodi: something like that? ^^
timotimo m: my $s = "foo"; $s.VAR does role { method foo { say "OH HAI" } }; $s.foo; $s = "bar"; $s.foo 12:40
camelia rakudo-moar 315ec6: OUTPUT«OH HAI␤Cannot assign to an immutable value␤ in block <unit> at /tmp/aRXvvr19NP:1␤␤»
timotimo hmm.
Woodi masak: probably... 12:41
moritz m: my $s; $s := $s but role { method foo { say "OH HAI" } }; say $s.foo
camelia rakudo-moar 315ec6: OUTPUT«OH HAI␤True␤»
moritz m: my $s; $s := $s but role { method foo { say "OH HAI" } }; $s.foo; $s = 42; $s.foo
camelia rakudo-moar 315ec6: OUTPUT«OH HAI␤Cannot assign to an immutable value␤ in block <unit> at /tmp/pIy_t_P2h_:1␤␤»
moritz hah, it becomes immutable by mixing in
timotimo strange 12:43
moritz actually I'm surprise that containers don't have an optimized representation 12:44
timotimo as in: why doesn't this say "this repr cannot change type"? 12:45
moritz m: my $s; $s := $s but role { method foo { say "OH HAI" } }; $s.foo; say $s.VAR.^name 12:48
camelia rakudo-moar 315ec6: OUTPUT«OH HAI␤Any+{<anon>}␤»
moritz uhm 12:49
it didn't mix into the container :(
timotimo ah, hmm
Woodi but about IO::thingies, what we realy want ? end effect ~~ user experience... becouse for me it looks we want to _allow_ users to program exactly like in sh and in Perl5. and _this_ destroys clean api design...
moritz m: my $s; say $s.VAR.^name
camelia rakudo-moar 315ec6: OUTPUT«Scalar␤»
timotimo so "but" will decont
which makes sense
moritz notices he has no idea how VAR works 12:50
Woodi C and Java do not care about users like sh, they just give api, user must use it :) 12:50
moritz and there are reasons we want to program in Perl 6 instead of C and Java :-)
Woodi moritz: that's not explaining anything ;) 12:51
masak no, it's more of a recommendation ;) 12:52
Woodi so sh like user experience ? @a = dir "/etc"; for @a { chmode 000, $_ } # ? :)
lizmat dir("/etc")>>.chmod(0) 12:53
Woodi it's perlish way, I like it :)
PerlJam Woodi: Perl is glue still. Also, TMTOWTDI is about not constraining the user into some paradigm. IF the problem has more of a "sh-feel", then why not let the programmer have easy access to all the power Perl has to offer *and* let them code in a sh-way? 12:54
Woodi but that convenience sugar must be wrapper over c/java-like apis
in c you have struct DIR an you readdir it
lizmat Woodi: also on WIn32 ?? 12:55
dalek kudo/nom: 3f0f5ce | (Elizabeth Mattijsen)++ | src/core/IO/Dir.pm:
Add chdir/open, handle //unc/
12:56
Woodi lizmat: c is just an example....... we _create_ our own api... 12:57
moritz Woodi: right; and that's why we try to make them usable and so that they make sense 12:58
Woodi but in c and java you have some object like Path or File or DIR and in sh you have just strings everywhere... what our api need to use ?
and c/win/java/ whatever is all the same just use other names...
moritz Woodi: github.com/perl6/doc/blob/master/htmlify.p6#L88 12:59
if we just used strings, file tests wouldn't be so easy
and you'd have to worry about absolute vs. relative paths
there are dozens of questions on perlmonks why some custom recursive directory traversal isn't working, and the answer is always "because readdir returns relative paths, and you have to prepend the current path" 13:00
with IO::Path, those worries are all gone
not to mention platform-specific path manipulations, which are a real PITA to get right 13:01
huf it's a pita even in unix-only stuff
moritz aye
timotimo fwiw, i hate paths :P
huf "did i add the trailing slash? can i concat to this string?"
timotimo you *never* concat paths as strings unless you *are* the path implementation :)
huf that's because they're a separate datastructure but we always use them in their string-serialied format 13:02
which is weeeeeird :)
huf the syscalls expect strings instead of path objects too :) 13:02
it's a bit like not having arrays, and just using csv-strings instead... 13:03
moritz tcl, I'm looking at you :-)
PerlJam heh 13:04
timotimo huf: that's a very, very apt comparison
huf ... i've seen similar solutions when someone wanted to store arrayesque data in a mysql column :D 13:05
timotimo yes, of course
PerlJam ... or multi-level data structures in Perl 4 ;)
Woodi moritz: with IO::Path you worry about directories... so you don't like 'sh'-like code: @a = dir; ? 13:06
moritz Woodi: I don't understand your question 13:07
m: my @a = dir
camelia ( no output )
moritz that's how it can work with and without IO::Path
Woodi which one we need to implement ? :) 13:08
PerlJam moritz: I think he's assuming a dichotomy between "objects" and "strings" there.
Woodi PerlJam: maybe I see difference in usage
PerlJam Woodi: Then please elaborate :) 13:09
dalek rlito: 4b51a26 | (Flavio S. Glock)++ | / (3 files):
Perlito5 - js - 0+ overload
13:11
PerlJam It should be light outside but a passing storm makes it look like it's still early morning just before the sun comes up. 13:13
lizmat cycling& 13:19
Woodi PerlJam: for me: a) we have IO::namehere package (or few of it) using objects like struct DIR in C and wrappers for users returning strings to allow shell like programming; b) grammar-like magical and complex objets; c) strings everywhere... which one is prefered ?
PerlJam Woodi: Are you differentiating a) and b) based on efficiency concerns? Because I'd like to think that we can achieve something akin to a) *and* b) (simple, low-level-ish objects that can wield complex magic if needed) 13:26
Util #ps time 13:30
moritz there's still a parrotsketch? 13:32
PerlJam heh ... that's exactly what I was thinking :) 13:33
moritz and judging from the logs, it's even active-ish 13:34
Woodi PerlJam: I think that first part is user question: "how to use that thing ??". traditional or XXII-century like :) second: different implementation; and next is performance question. for now I have problems with using Match objects. and they are slow right now ? 13:51
timotimo hmm, not sure match objects are much slower than they should be
of course if you iterate over the list part, that's a GLR thing 13:52
dalek rlito: 2263d03 | (Flavio S. Glock)++ | / (3 files):
Perlito5 - js - fix scope in "if" statement
13:53
Woodi timotimo: so it's just my invalid "hunch" from gigantic output from 'say Match.perl' :)
timotimo if perlito6 is not going to be developed further, should we just get rid of the dalek notifications? 13:54
Woodi: .perl is slow, yes :(
also it's kind of weird to see a "tree" of Match objects that all have the orig string set
moritz well, that's what they all 13:55
have
timotimo right
moritz .perl isn't supposed to be pretty, it's supposed to be exact
timotimo in theory, the perl output could have a local $foo that gets set once and referenced over and over again :P
moritz amusing fact: .perl on a match could just return "'abc' ~~ /(b)/" or so (that is, original string + regex that reproduces this match object) 13:56
timotimo right, could :)
Woodi hey, I'm talking about gigantic size of Match object not .perl performance :) 13:59
big so must be slow :)
if context could help to reduce unsed features in compile time then design in that way cold be perfect
*unused...
timotimo Match objects all just reference the same string for orig, so that part is cheap 13:59
the from and to parts are just integers, so that's cheap, too
Woodi still, yo need to get memory for all of that lists :) 14:00
timotimo yeah
Woodi and allocating takes time
timotimo you'll get a little performance improvement if you turn not-really-needed captures into non-captures
Woodi huh ? :) 14:01
timotimo well, if you have a (foo) inside your regex and you don't ever use the result, you could write [foo] instead
then the list would be 1 shorter
and lists are nested in perl6 match objects
re-ordering groups and such can make a difference
i have no measurements to back this up 14:02
Woodi will try to test it with grammar
timotimo good idea
extra good idea if you can contribute a little benchmark to perl6-bench :)
moritz timotimo: you could just introduce a capture in token ws in the Perl 6 grammar, and measure setting compilation before and after
timotimo that reminds me, i should work the excel formula evaluation thingie into a benchmark 14:03
Woodi so IO::Path idesign is specced as such automagic structre ?
timotimo i don't know what you mean 14:04
Woodi keyboard have problems...
PerlJam probably wanted to have IO:: package to be like Match object...
moritz it's not a tree, if that's what you're asking 14:05
Woodi moritz: for now I just stuck on "automagic or not automagic" part :) 14:06
timotimo what does that difference mean for IO::Path? 14:07
moritz Woodi: an IO::Path is just a structure of three components: a volume, a directory, and a basename 14:07
Woodi: there's nothing magical about it
Woodi moritz: but IO::Dir appeared again... 14:08
moritz Woodi: but IO::Dir isn't IO::Path
moritz so I don't see how IO::Dir can affect the magicalness of IO::Path 14:09
Woodi I just assume that IO subsystem wants to have nice design...
moritz it's a bit like "is this pen magical?" -- "no, it's just a pen" -- "but a glass of water showed up!"
timotimo i want that pen 14:10
moritz then commit it :-)
Woodi I'm not sure I have skills to code something nicely... just can't stand circularity in discusions... 14:11
masak a very important quality in a language designer is the ability to entertain several, often conflicting world views at once, for comparison purposes. 14:14
timotimo i sometimes imagine five impossible things before breakfast 14:16
PerlJam never really thought of cognitive dissonance as a feature 14:17
masak I'm not saying put the cognitive dissonance in the language :)
just be able to handle it in order to evolve the language in a useful manner
masak basically be prepared for "the rules just changed, and here are the new rules", at all levels: parsing, AST manipulation, operators, builtins, types... 14:18
moritz is glad he only designed tiny bits of the language 14:19
[Coke] dj_goku: (from backscroll) 2 tests are already checked in. theoretically, ingy has a repo with the code ready to go in it. These two efforts could probably be combined. they should probably not be run as part of "spectest", but maybe stresstest would work. 14:22
PerlJam moritz: I guess it's also good to design tiny bits because no one is going to name something after you. ("... then I performed the moritz maneuver to get my data in the right shape" :-) 14:26
masak well, now I just have to name something "the moritz maneuver"... 14:39
moritz lying on your back, gazing at the sky 14:41
though given my history on the channel, it's more likely creating a useful but extremly ugly website/service, in the hope that somebody will make it pretty 14:42
PerlJam ... then I did the masak mangle so that my data sets were uniquely identified.
moritz ... and I used the PerlJam Push to get them to the remote database 14:43
masak .oO( ...so the data didn't end up in a big Perl-jam )
PerlJam heh
masak though "jamming with your Perl data" sounds like a pretty awesome talk title. 14:43
dalek rlito: 19efcc6 | (Flavio S. Glock)++ | TODO-perlito5:
Perlito5 - js - TODO update
14:44
[Coke] tcl has arrays. :P
moritz [Coke]: I knew you'd speak up :-) 14:45
[Coke] arrrr.
[Coke] looks like today is parrot's day to die. 14:51
masak could you be more specific? 14:52
[Coke] build failure (I assume) as all spectests are dying. 14:53
[Coke] S02-lexical-conventions/begin_end_pod.t............"load_bytecode" couldn't find file 'CORE.setting.pbc' 14:53
masak confesses to having read that in a different way before the explanation...
[Coke] looks like the same error bit moarvm-jit 14:54
moarvm-nojit seems fine.
96d6011 : introduce method for what? 14:56
(yes, I get it. :P) 14:57
masak ah, use and mention. we meet "again". 14:59
moritz [Coke]: 10 seconds after I pushed I realized I should have used quotes :-) 15:01
[Coke] jvm seems mostly ok today. 15:04
[Coke] hurls blogs.perl.org/users/brad_gilbert/2...tions.html 15:24
liztormato BradGilbert++ 15:26
Or is he known by another name here? 15:28
masak one very powerful idea of Qtree-powered macros -- just throwing this out there now because I'm really doing $work -- is the ability to take a Qtree node -- a class declaration, say -- and from that ask for the corresponding class type object. 15:29
that is, at compile time, you can correlate the definition of (say) a type with its actual runtime representation. 15:30
that makes it very much not just "a game of words", a transformation of the source text itself (or the structure it induces), but also an interplay between that text and the things it represents during execution. 15:31
ugexe whats the most perl6 way to swap 3 arrays? like (@a,@b,@c)=(@c,@a,@b)? i figured (@a,@b,@c).=rotate(-1); but that treats the array on the right hand of the assignment as a single array so its rotating the values of all arrays into 1 array which isnt what i mean to do 15:48
liztormato And with $@a? 15:50
masak m: my @a = <1 2>; my @b = <3 4>; my @c = <5 6>; :(@a, @b, @c) := (@c, @a, @b); say @a.perl # seems to work
camelia rakudo-moar 315ec6: OUTPUT«Array.new("5", "6")␤»
PerlJam ugexe: what was wrong with the straight-forward assignment?
masak PerlJam: it flattens (@c, @a, @b) 15:50
PerlJam oh 15:51
masak pre-GLR and post-GLR.
PerlJam masak++ for reading my mind on the follow-up question :)
TimToady the issue isn't so much flattening as it that assignment can't rebind a symbol 15:52
ugexe straight assignment works but if your array names are longer the code doesnt look quite so nice 15:54
TimToady m: my $a = [<a a>]; my $b = [<b b>]; my $c = [<c c>]; ($a,$b,$c) = $c, $a, $b; say $a.perl 15:55
camelia rakudo-moar 315ec6: OUTPUT«["c", "c"]␤»
TimToady there's how you could do it with assigment
ugexe i see
TimToady or you could put them into an array, and .rotate that 15:56
any reason the arrays have to be named?
TimToady m: my @abc = (<a a>; <b b>; <c c>); @abc .= rotate(-1); say @abc[0].perl 15:57
camelia rakudo-moar 315ec6: OUTPUT«$("c", "c")␤»
TimToady m: my @abc = (<a a>; <b b>; <c c>); my @a := @abc[0]; @abc .= rotate(-1); say @a.perl; # curious 16:00
camelia rakudo-moar 315ec6: OUTPUT«("a", "a")␤»
TimToady nope, alias to array elem stays with the elem
japhb TimToady: Curious about the implementation's current semantics, or curious about whether you would agree or disagree with the result? :-) 16:07
TimToady was just wanting to make sure my intuition matched reality, and it did :) 16:41
raydiak good morning #perl6 17:49
dalek rl6-roast-data: 02993e9 | coke++ | / (4 files):
today (automated commit)
18:06
[Coke] ^^ moar jit and parrot, DOA. 18:19
lizmat [Coke]: at which commit ? 18:20
dalek ast: bfa19a5 | (Elizabeth Mattijsen)++ | integration/advent2013-day14.t:
winner is now called earliest
18:23
[Coke] parrot: gist.github.com/coke/f2575a058941847dca6e 18:25
at rakudo 3f0f5ce
timotimo could someone please implement select-your-own-installation-path for the rakudo star msi for moarvm at least? 18:28
lizmat [Coke]: I only see different flappers each run: gist.github.com/lizmat/a64eca487f56b35c6a61 18:43
all of these run fine by themselves :-(
TimToady is testing a patch to make /$string/ run 7 times faster 19:15
lizmat b2gills++ (blogs.perl.org/users/brad_gilbert/2...ions.html) 19:16
dalek ast: 64db5b5 | TimToady++ | S05-metasyntax/litvar.t:
\@array is not an array ref
19:31
kudo/nom: b908ce2 | TimToady++ | src/core/Cursor.pm:
speed up /$string/, fix /$array/ to stringify

INTERPOLATE was setting up a very slow loop to traverse a single item. It was also depending on $order sometimes being a Perl 6 value and sometimes being an NQP value. It was also incorrectly introspecting positionals that are supposed to be hidden inside of scalars.
This method is still doing far too much introspection and should be split up into more specialized routines.
FROGGS_ TimToady++ # you're fixing my mess :o) 19:32
TimToady actually, more like 10 times faster on the s/$stuff/.../ test
geekosaur wow, valgrind on the spectests is painfully slow 19:37
lizmat geekosaur: are you on OS X? if so, how did you get valgrind to work ?
geekosaur macports install works fine, if sloooow, on 10.9.5
it doesn't like git for some reason but seems to be working otherwise 19:38
but it's taken 3 hours to reach S01-magicals/args.t
er, S02-magicals
timotimo oh wow. 19:42
[Coke] geekosaur: oh, it's like spectesting jvm without the eval server. :) 19:43
FROGGS_ Error while compiling, type X::Comp::AdHoc
payload: Please use !! rather than :
line: 14795
on parrot 19:44
lizmat: does your setting build when you fix that? 19:45
rakudo/src/core/IO/Handle.pm:56: $!pipe = $p ?? 1 : 0;
timotimo nativecall needs a bit of adjusting to be able to find the SDL2 libs ...
lizmat FROGGS_: will check 19:46
timotimo hm actually
maybe not!
dalek kudo/nom: cb99523 | (Elizabeth Mattijsen)++ | src/core/IO/Handle.pm:
Fix stupid P5o that crippled rakudo on parrot

  FROGGS++ for pointing it out
19:47
lizmat did I mention how I hate VM dependent code ? 19:48
FROGGS_ :o)
ohh, then it can't have an effect for you on moar 19:49
masak m: my $p = 5; say $p ?? 1 : 0
camelia rakudo-moar 315ec6: OUTPUT«===SORRY!=== Error while compiling /tmp/_dxlRLRSl7␤Please use !! rather than :␤at /tmp/_dxlRLRSl7:1␤------> my $p = 5; say $p ?? 1 ⏏: 0␤ expecting any of:␤ postfix␤ infix stopper␤ …»
lizmat indeed, that's why I didn't notice it
I run parrot only a few times a week 19:50
masak wait, you wrote code for parrot... but compiled it on moar...?
lizmat no, if it had compiled on moar, I would have noticed it was broken 19:50
dir() is one of those areas in the settings that has VM dependent code for all 3 backends 19:51
masak I see.
lizmat actually, open()
in this case
masak well, Rakudo's error message is pretty good in this case.
[Coke] so the moar failure was probably something else? checking... 19:52
lizmat yes, it is.. :-)
masak the problem was more that the code didn't get tried before it got pushed.
lizmat masak: yup 19:53
lizmat [Coke]: have you tried running spectest with MVM_SPESH_DISABLE=1 ? 19:53
I get a lot fewer test failures that way
[Coke] lizmat: no.
moar jit didn't even build here. 19:54
lizmat huh?
[Coke] I just went back to the folder and typed "make" and it started building the setting.
lizmat is that a memory alloc error you're getting?
[Coke] ... and now it's building fine. probably the random moarvm segfault.
[Coke] so yes, moarvm on osx, less stable :P 19:55
lizmat I'll see if I can start a build late tonight under valgrind 19:55
japhb TimToady: Is there a perl6-bench test that exposes the performance problem you fixed today, and if not, can you add one pretty please? 19:56
lizmat FROGGS_: parrot builds again, running spectest now 19:56
FROGGS_ cool
[Coke] lizmat: I have a beefy box here, I can try that also. 19:59
lizmat [Coke]: could you take 6fc0d5e980f and remove the dummy method from Grammar.pm ? 20:00
[Coke] and see if it builds?
lizmat that was for me *the* way to create a memory allocation error during parsing
that way it did not build for me
adding the dummy method made it work
lizmat method wemusthavethishereotherwiserakudowontcompile { } 20:01
[Coke] ok, doing a fresh build (at head, but minus that method)
lizmat not at 6fc0d5e980f ?
at HEAD without that method, it builds for me 20:03
FROGGS_ timotimo++ # cpandatesters feels way faster today 20:04
lizmat [Coke]: confirmed: only 6fc0d5e980f minus method breaks for me 20:05
[Coke] so, rollback to that commit? ok. (head minus that worked fine)
FROGGS_ hmpf 20:06
[2014-10-31T20:05:53Z] GET /dists HTTP/1.1
Commands out of sync; you can't run this command now
in method execute at lib/DBDish/mysql.pm6:170
timotimo FROGGS_: oh no! what did i do! :-P
FROGGS_ timotimo: the HTTP::Easy PR
[Coke] ok. I can't easily rebuild nqp/moarvm here (because there's no way to force a rebuild of the defaults), building...
worked fine. let me try in my non-standard build dir where I can start over easily... 20:07
b2gills timotimo: "last unless $current.Rat" checks for a failure to convert to a Rat, originally I used Rats instead of FatRats and just checked for silent conversion to a Num 20:08
timotimo ah, interesting
also, ah that's you! :)
b2gills /msg nickserve info Brad-Gilbert 20:09
*nickserv 20:10
[Coke] lizmat: using defaults nqp/moarvm on a fresh build (building everything), at that rakudo rev, without that method, I have no issues. 20:11
lizmat [Coke]: ok, I'll try later tonight then myself under valgrind 20:12
dalek rl6-bench: 0192ab8 | TimToady++ | microbenchmarks.pl:
add a test for scanning /$string/
20:18
[Coke] do we have a "how to use valgrind" doc somewhere? 20:19
sweet! I complain about stuff, and TimToady++ fixes it, write benchmarks, the whole deal! ;) 20:20
TimToady japhb: I did not test ^^^ except on the command line, so was just guessing on scale 20:21
timotimo [Coke]: usually you just "cat (which perl6) and call that with "valgrind" in front 20:23
moritz github.com/lucasbuchala/specs/comm...8b731L1628 is the s/general/specific/ correct here? 20:26
BenGoldberg Or even, valgrind $(which perl6) ..., depending on your shell 20:27
[Coke] danke. 20:28
dalek nda/reporter: 14223c6 | (Tobias Leich)++ | lib/Panda/ (2 files):
switch to new pipe() sub
lizmat FROGGS_: is that wise ? 20:29
won't that break code that is running on 2014.10 ? 20:30
FROGGS_ lizmat: it is a branch, which won't get merged soon
lizmat ok :-)
FROGGS_ this branch already relies on the new nqp::closefh_i op... so I can't merge it before 2014.11
tony-o is there a way to find installed modules that *do* a role? 20:39
lizmat installed? probably never, unless we add it to the META6.json 20:41
loaded? some introspection magic might be possible, but I wouldn't know atm
tony-o maybe available is a better word
not loaded but present in the system
japhb TimToady: Understood. You can always just do: `./bench --tests=some,test_names --verbose time ...` or even `./bench --tests-tagged=included_tag,-excluded_tag --verbose time ...` to try out your new benchmark definition, and see how it's scaling and such 20:42
lizmat tony-o: then only if it is somehow available in the meta info, and it isn't atm afaik
tony-o lizmat: thank you
geekosaur wonders if this thing just froze or something. it took forever to get to args.t but now isn't even consuming cpu time 20:58
lucas_ moritz: hello. thanks for the note. 20:59
should it be spelled "an heredoc introduction line", then? 21:00
I'm in doubt about the generic/specific roles as well. 21:01
Does concatenation and replication/repetition makes sense on Blobs or just on Strs?
dalek href="https://cpandatesters.perl6.org:">cpandatesters.perl6.org: 5770453 | (Tobias Leich)++ | setup/cpandatesters_pg.sql:
add initial postgresql setup
21:02
timotimo postgres! <3 21:03
if you have postgres trouble, feel free to ask me
i may be able to halp
masak 'night, #perl6
FROGGS_ timotimo: ohh, nice :o)
colomon o/
lizmat gnight masak!
colomon \o 21:04
colomon lizmat, o/
FROGGS_ timotimo: that's the first thing I am going to do with postgres...
colomon hopes #perl6 has been having a good Halloween while he was out and about.
FROGGS_ colomon: I had! it was fun to stroll around with $kids :D 21:05
lizmat Halloween++
colomon afk # back to carving out pumpkin guts. :)
dalek kudo/nom: aa28c0f | (Elizabeth Mattijsen)++ | src/core/IO.pm:
Introduce filetest and abspath primitives

At one point we probably want to have these live in a role. But at the moment it is unclear to me how that role would work in the different classes. So for now, I create these as primitive subs. And maybe they will stay this way, because they are better optimizing / inlining targets this way.
21:07
kudo/nom: 8117cbc | (Elizabeth Mattijsen)++ | src/core/IO/Path.pm:
Use filetest primives, add .rw and .rwx
21:12
kudo/nom: b7f32f4 | (Elizabeth Mattijsen)++ | src/core/IO/Dir.pm:
More work on IO::Dir
21:13
dalek ast: 7bcc20a | (Elizabeth Mattijsen)++ | S17-supply/uniq (2 files):
It's .unique now!
21:16
ast: 31e6e32 | (Elizabeth Mattijsen)++ | S17-supply/unique.t:
Really, it's .unique now
kudo/nom: ba7eee2 | (Elizabeth Mattijsen)++ | t/spectest.data:
It's really, really .unique now
21:17
moritz you are a .uniq*ue* snowflake! 21:19
[Coke] I of course got the spec test and the rakudo in between thoe 2 commits. 21:20
geekosaur mrr, I think this thing really did get stuck. guess valgrind doesn't quite work after all 21:21
lizmat [Coke]" sorry 21:23
timotimo valgrind does make things extraordinarily slow
geekosaur took kill -9 to exorcise it, even
lizmat well, valgrind takes the concept of a VM to a very high level :-)
geekosaur in 2 hours it had accrued zero cpu time 21:24
colomon OO::Monitors and Text::Levenshtein::Damerau both failed the last two days smoke run 21:26
wollmers \0 21:40
timotimo hi!
japhb In my console font, that looks like a large cyclops waving 21:42
(It uses a dotted 0)
wollmers m: "ab" ~~ :p5/a/; 21:47
camelia rakudo-moar 315ec6: OUTPUT«===SORRY!=== Error while compiling /tmp/SAUsxEXZv4␤Bogus statement␤at /tmp/SAUsxEXZv4:1␤------> "ab" ~~ :p5/a/⏏;␤ expecting any of:␤ argument list␤ postfix␤ infix stopper␤ …»
wollmers the specs lacck examples
lack
wollmers m: "ab" ~~ m:P5/a/; 21:52
camelia ( no output )
wollmers m: "ab" ~~ m:P5/\X/; 21:53
camelia rakudo-moar 315ec6: OUTPUT«===SORRY!=== Error while compiling /tmp/UwhrFp2zUH␤Unrecognized Perl 5 regex backslash sequence␤at /tmp/UwhrFp2zUH:1␤------> "ab" ~~ m:P5/\⏏X/;␤ expecting any of:␤ colon pair (restricted)␤»
wollmers Is this a known bug? 21:54
BenGoldberg p56: "ab" =~ /a/;
camelia p5-to-p6 : OUTPUT«'ab' ~~ m:P5!a!␤»
BenGoldberg p56: "ab" =~ /\X/; 21:54
camelia p5-to-p6 : OUTPUT«'ab' ~~ m:P5!\X!␤»
BenGoldberg std: 'ab' ~~ m:P5!\X!; 21:55
camelia std 14ad63b: OUTPUT«ok 00:01 160m␤»
BenGoldberg m: 'ab' ~~ m:P5!\X!;
camelia rakudo-moar 315ec6: OUTPUT«===SORRY!=== Error while compiling /tmp/8aoeIxFUdO␤Unrecognized Perl 5 regex backslash sequence␤at /tmp/8aoeIxFUdO:1␤------> 'ab' ~~ m:P5!\⏏X!;␤ expecting any of:␤ colon pair (restricted)␤»
dalek osystem: b3337ee | tony-o++ | META.list:
Add Fuzzy Equals operator 'feq' and related role

adds clean, fuzzy distance operator for pleasant to say and read if statements (if $i feq $me { ... }) -
timotimo how come we have uint32, but NativeCall doesn't know how to use it? 21:57
tony-o colomon: ugexe is working on fixing Test::Levenshtein::Damerau 22:00
wollmers std: "ab".comb(m:P5/\X/) 22:05
camelia std 14ad63b: OUTPUT«ok 00:01 160m␤»
wollmers m: "ab".comb(m:P5/\X/) 22:06
camelia rakudo-moar 315ec6: OUTPUT«===SORRY!=== Error while compiling /tmp/GLsnjuT06f␤Unrecognized Perl 5 regex backslash sequence␤at /tmp/GLsnjuT06f:1␤------> "ab".comb(m:P5/\⏏X/)␤ expecting any of:␤ colon pair (restricted)␤»
wollmers std: "ab".comb(m:P5/\w/).say; 22:07
camelia std 14ad63b: OUTPUT«ok 00:01 160m␤»
wollmers m: "ab".comb(m:P5/\w/).say;
camelia rakudo-moar 315ec6: OUTPUT«Cannot call 'match'; none of these signatures match:␤:(Cool:D: Any $target, *%adverbs)␤ in block <unit> at /tmp/wmYjaZ1NUc:1␤␤»
moritz wollmers: that can't ever work 22:11
wollmers: m// is an immediate match against $_
so you call .comb with a Match object, not with a regex 22:12
m: say 'ab'.comb(rx:P5/\w/)
camelia rakudo-moar 315ec6: OUTPUT«a b␤»
raiph wollmers: say 'nope' if not $*RT.search: <\X backslash P5> :by 'raiph'; # prints 'nope'
wollmers moritz: this an example for the specs being not understandable 22:18
raiph: \X is valid P5 22:20
timotimo hum. 22:21
i'd really like a "has CArray[uint8] $.bytes is length(58);" for NativeCall
wollmers it allows me to work with graphemes in Perl 5 22:22
my @graphemes = $string =~  m/(\X)/g; 22:24
raiph wollmers: so \X is both NYI (not yet implemented) and a striking omission. 22:25
wollmers raiph: \X in P6 is specced as not \x (AFAIK) 22:27
raiph wollmers: I meant \X under :P5 22:28
timotimo well, "int64 $.dummy1; int32 $.dummy2; int16 $.dummy3; int8 $.dummy4" is less terrible than having 56 int8 fields 22:29
wollmers raiph: if :P5 should be fully compatible, then yes. 22:30
timotimo spec says it's fully compatible! 22:31
raiph wollmers: I personally think :P5 should be declared a post 6.0 feature
wollmers std: "ab" ~~ /\w/; 22:35
camelia std 14ad63b: OUTPUT«ok 00:00 139m␤»
wollmers std: "!" ~~ /\w/;
camelia std 14ad63b: OUTPUT«ok 00:00 139m␤»
wollmers m: "!" ~~ /\w/;
camelia ( no output )
wollmers m: "!" ~~ /\x/;
camelia rakudo-moar 315ec6: OUTPUT«===SORRY!=== Error while compiling /tmp/_OQBxrC7bD␤Unrecognized backslash sequence: '\x'␤at /tmp/_OQBxrC7bD:1␤------> "!" ~~ /\x⏏/;␤ expecting any of:␤ postfix␤ infix stopper␤ inf…»
wollmers std: "!" ~~ /\x/; 22:36
camelia std 14ad63b: OUTPUT«===SORRY!===␤Unrecognized regex backslash sequence at /tmp/KK7cVrZPY3 line 1:␤------> "!" ~~ /\⏏x/;␤Check failed␤FAILED 00:00 139m␤»
wollmers std: "!" ~~ /\X/;
camelia std 14ad63b: OUTPUT«===SORRY!===␤Unrecognized regex backslash sequence at /tmp/8yHFCns1T7 line 1:␤------> "!" ~~ /\⏏X/;␤Check failed␤FAILED 00:00 139m␤»
wollmers std: "!" ~~ /\X7F/; 22:38
camelia std 14ad63b: OUTPUT«ok 00:00 139m␤»
wollmers m: "!" ~~ /\X7F/; 22:40
camelia ( no output )
wollmers m: "!" ~~ /\x7F/;
camelia ( no output )
raiph wollmers: Have you tried mixing P6 and P6 using Inline::P5 yet? 22:46
raiph s/P6/P5/ 22:48
wollmers No. At the moment I am deeply lost in the details of diff (LCS) algorithms, where P6 is very slow, and P5 is not fast enough. 22:49
timotimo oh damn, even p5 is too slow? 22:50
what chance do we have!
wollmers timotimo: the port of the P5 Algorithm::Diff to P6 is 300 times slower. And I got A::Diff in pure P5 50% faster for average cases. 22:53
japhb Sounds like an excellent benchmark to add to perl6-bench. *cough* 22:56
wollmers The XS version is 4 times faster, i.e 80 kHz for n=10, d=4 (which is my average case for spelling correction)
japhb adds "build a nice Perl 6 environment" to his "setup a new box" script 22:57
timotimo damn. i can't nativecast a CStruct 23:13
whhyyyyy
FROGGS_: i have a feature request :) 23:14
timotimo it is now a zavolaj issue 23:19
dalek kudo/nom: 7ee9752 | (Elizabeth Mattijsen)++ | src/core/IO.pm:
Primitives for basename and dir, for 3 backends
23:26
wollmers timotimo: This sort of algorithms is better written in C, a step better with bit vectors, and even fastest with bit vectors in the GPU (OpenGL/OpenCL) 23:42
timotimo mhh, fair enough 23:47
dalek kudo/nom: c7e4401 | (Elizabeth Mattijsen)++ | src/core/IO/Dir.pm:
Some more work on IO::Dir
lizmat and with that, I wish #perl6! good night!
timotimo good night, lizmat!
wollmers Oh, P6 has bitwise shift etc. Very nice for prototyping algorithms. 23:50
What would be idiomatic P6 for the P5: unshift @{ $bMatches->{$_} },$index++ for @$b[$bmin..$bmax]; 23:55