»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'p6: say 3;' or rakudo:, std:, or /msg camelia p6: ... | irclog: irc.perl6.org | UTF-8 is our friend!
Set by moritz on 25 December 2014.
b2gills .tell boski: just ask... someone will reply, even when not immediately ( we even have ways of telling you later, like this for example ) 00:28
yoleaux b2gills: What kind of a name is "boski:"?!
b2gills .tell broski: just ask... someone will reply, even when not immediately ( we even have ways of telling you later, like this for example ) 00:29
yoleaux b2gills: What kind of a name is "broski:"?!
b2gills ( first time trying to use it ) 00:30
.tell broski just ask... someone will reply, even when not immediately ( we even have ways of telling you later, like this for example )
yoleaux b2gills: I'll pass your message to broski.
broski which vm is better, moar or parrot? 01:08
yoleaux 00:30Z <b2gills> broski: just ask... someone will reply, even when not immediately ( we even have ways of telling you later, like this for example )
skids broski: moarvm is currently more performant for perl6 purposes. 01:18
BenGoldberg There are still some parts of the spec which parrot does more correctly, though. 01:19
(IIRC)
colomon BenGoldberg: that's probably true, but there are also areas of the spec which Moar does more correctly. It's not just speed vs. correctness. 01:21
broski ok 01:27
skids r: (1, :f, :g).perl.say; (:f :g).perl.say; (1, :f :g).perl.say 02:14
camelia rakudo-parrot 04ce88: OUTPUT«WARNINGS:␤Useless use of "," in expression "1, :f :g" in sink context (line 1)␤(1, "f" => Bool::True, "g" => Bool::True)␤duplicate named argument in call␤ in block <unit> at /tmp/tmpfile:1␤␤»
..rakudo-moar 04ce88: OUTPUT«(1, "f" => Bool::True, "g" => Bool::True)␤("f" => Bool::True, "g" => Bool::True)␤(1, "f" => Bool::True)␤»
japhb .botsnack 02:39
yoleaux 11 Jan 2015 10:30Z <timotimo> japhb: now the log is filled with lines of Run command exited with exit status 1: install/bin/perl6 --optimize=3 /home/timo/oldhome/timo/perl6/bench/perl6/rc-forest-fire 16 16 inf
:D
japhb 'inf' ...? 02:40
japhb wonders WTH that is about
adu so if I want to slurpify params 02:47
*@args or @*args? 02:48
ah, *@theRest 02:49
I love TFM
expected 'Positional[Any]' but got 'Array' 02:51
adu I thought Arrays were positional 02:51
expected 'Positional[Any]' but got 'List' 02:52
colomon m: say Array ~~ Positional 03:00
camelia rakudo-moar 04ce88: OUTPUT«True␤»
colomon m: say Array ~~ List 03:01
camelia rakudo-moar 04ce88: OUTPUT«True␤»
japhb adu: Show the broken code. 03:02
.tell timotimo I cannot recreate the rc-forest-fire problem you are seeing, with either rakudo-moar/nom or rakudo-jvm/nom. 03:03
yoleaux japhb: I'll pass your message to timotimo.
skids m: say so Array ~~ Positional[Any]; say so Array ~~ Positional; 03:04
camelia rakudo-moar 04ce88: OUTPUT«False␤True␤»
adu japhb: github.com/andydude/p6-c-parser/bl...Op.pm6#L62
skids You sure the error isn't when assigning to @.children? 03:06
adu skids: I'm trying to make a "simple" AST that is a little more complicated that multiple "has"s 03:07
adu skids: it's a different error now 03:08
how it says "Cannot look up attributes in a type object" 03:09
when I do my $x = CAST::Op.new(CAST::Op::OpKind::predec, 1, 2, 3)
skids Hrm aren't bracketless class definitions only allowed on first line? 03:11
adu skids: no, they're only allowed if they are the whole file 03:12
I think maybe I need a better understanding of roles 03:20
JimmyZ adu: maybe ([$operator, *@operands]) ? 03:26
adu JimmyZ: in the definition of new? 03:35
do I have to call bless? 03:36
do I have to call BUILD, BUILDALL, BUILDPLAN somewhere?
skids Oh, yeah, of course... you should be calling bless as the return value of the block. 03:38
skids e.g. bless(*,:children(@operators) :op($operator)) 03:38
adu what does bless do? 03:41
is Perl6 new() like Python __init__ or __new__?
skids does all the BUILD stuff I think. I think it's been refactored since I last read that part of the spec. 03:42
JimmyZ self.bress(:op($operator), :children(@operands));
*bless
geekosaur new calls BUILDALL calls BUILD, which is what you normally define instead of new 03:43
JimmyZ adu: try change to above 03:44
adu so is BUILD like Python __init__?
skids Don't you need the "*" in the call to bless to pass other nameds from subclasses?
I don't know any python so...
adu skids: I don't know, I've never done oop in Perl5 or Perl6, so this is all new to me
skids As far as I know, overloading new is primarily for changing the signature and preprocessing arguments to the constructor, 03:45
JimmyZ adu: github.com/japhb/perl6-bench/blob/...class_add1 #here has a BUILD , it doesn't need BUILD by deafult , but here have because rakudo optimization sucks. 03:46
adu so python's default T.__new__() is defined as: self = object.__new__(T); self.__init__(), so any object construction must be done in __new__, and any property assignment usually happens in __init__
JimmyZ since it's a benchamrk 03:46
*mark
adu ah, so BUILD is __init__ and new is __new__
that makes sense
JimmyZ BUILD is building attr value. 03:47
you don't need it normally if rakudo's optimization is good enough. 03:48
adu I'm thinking of just going without BUILD and new and just using the default impls
JimmyZ yeah 03:49
skids No it's more like new is a wrapper around bless which is about like python's __new__
adu bcuz I like the whole Op.new(:$op, :@children) 03:50
I wish you could do that in other languages
JimmyZ rakudo doesn't have pos args of new, you need declarse it yourself
adu yeah, but I like the keyword args
because that's the same as Op.new(op => $op, children => @children) 03:51
JimmyZ yes
tony-o yea it still segfaults 05:03
oops
moritz \o 06:21
JimmyZ morning #perl6 07:02
adu hi moritz JimmyZ 07:14
sergot morning o/ 07:19
andreoss m: multi foo([]) {"empty"}; my @x = 1..*; say foo(@x); 07:45
camelia rakudo-moar 04ce88: OUTPUT«empty␤»
lizmat good *, #perl6! 10:18
JimmyZ good * 10:19
jnthn o/ 10:20
yoleaux 11 Jan 2015 17:25Z <lizmat> jnthn: looks like nqp::mkdir on moar doesn't fail if the actual mkdir fails, it does on parrot and jvm
11 Jan 2015 17:46Z <lizmat> jnthn: or perhaps I'm not understanding fail() correctly :-(
JimmyZ \o
lizmat JimmyZ jnthn \o 10:21
dalek kudo/newio: 5e000da | lizmat++ | src/core/IO/Socket.pm:
First steps of making IO::Socket a class
10:41
kudo/newio: ccf03bf | lizmat++ | src/core/IO/Socket/INET.pm:
Disable IO::Socket::INET during re-imagining
kudo/newio: dafbcd7 | lizmat++ | src/core/PIO.pm:
Add PIO.send/poll
lizmat jnthn: in PIO constants such as PF_LOCAL, what does the PF stand for ? 10:44
moritz the 'F' stands for 'Family', I think 10:45
lizmat ok, so PIO Family 10:46
jnthn lizmat: Dunno, but perhaps Protocol Family?
lizmat ah... ok :-)
jnthn swoolley.org/man.cgi/7/unix
moritz C code uses the same constants
jnthn www.gnu.org/software/libc/manual/ht...rmats.html also 10:47
dalek kudo/newio: 70f9ad5 | lizmat++ | src/core/PIO.pm:
Create ProtocolFamily/SocketType/ProtocolType enums
10:55
dalek ast/newio: ae17707 | lizmat++ | S02-types/WHICH.t:
Add some more classes
10:59
masak good noon, #perl6
moritz \o masak 11:24
timotimo .tell japhb i assume the perl5 part of perl6-bench is increasing the number of steps for the benchmark to do by 2x until it hits inf and then doesn't want to stop for some reason? 11:32
yoleaux 03:03Z <japhb> timotimo: I cannot recreate the rc-forest-fire problem you are seeing, with either rakudo-moar/nom or rakudo-jvm/nom.
timotimo: I'll pass your message to japhb.
timotimo .tell perl6 .new() isn't like __init__ or __new__, it's like python's .frob or .blubber or .yoink; also, new calls bless calls BUILDALL calls BUILD unlike what geekosaur said, and skids wrongly wrote bless(*, ...), but the * as first argument is wrong nowadays 11:37
yoleaux timotimo: I'll pass your message to perl6.
timotimo damn 11:38
.tell adu perl6 .new() isn't like __init__ or __new__, it's like python's .frob or .blubber or .yoink; also, new calls bless calls BUILDALL calls BUILD unlike what geekosaur said, and skids wrongly wrote bless(*, ...), but the * as first argument is wrong nowadays
yoleaux timotimo: I'll pass your message to adu.
FROGGS .frob or .blubber or .yoink ?? 11:44
moritz .tell adu see perlgeek.de/blog-en/perl-6/object-c...ation.html and doc.perl6.org/language/classtut#Constructors
yoleaux moritz: I'll pass your message to adu.
timotimo FROGGS: well, or any other method name you invent 11:45
FROGGS timotimo: but these names are typical conventions?
moritz no 11:48
just an indication that it's not special
timotimo correct, because __init__ is what gets called - eventually - when you do something like MyClass() 11:51
timotimo also, in python you have to explicitly call super's __init__, in perl6 the BUILDALL calls all BUILD subroutines for you 11:52
dalek kudo/newio: d4357b4 | lizmat++ | src/core/PIO.pm:
Streamline PIO.get/getc a bit
12:00
timotimo leaves again
lizmat m: say List.end 12:38
camelia rakudo-moar 04ce88: OUTPUT«Memory allocation failed; could not allocate 163840 bytes␤»
lizmat something wrong there :-)
vendethiel hahahaha
missing a self:D?
lizmat yeah, probably, looking at the code now 12:39
dalek kudo/nom: 27c2d5a | lizmat++ | src/core/EnumMap.pm:
Make EnumMap.Bool/elems 5% faster

This therefore also applies to Hash.Bool/elems
12:41
kudo/nom: 6a3fc31 | lizmat++ | src/core/Any.pm:
Fix Any.end/elems
nwc10 lizmat: do you have any benchmark numbers yet for how awesome the awesomeness is? 12:42
lizmat apart from locally run one-liners, no 12:43
moritz codegen question 12:44
for
nqp::p6bool(nqp::defined($!storage) && nqp::elems($!storage));
does that box the return value from nqp::defined($!storage) into an Int?
(because && wants a Perl 6 value)?
or is it smart enough to avoid that? 12:45
FROGGS is that perl6 code or nqp code?
lizmat I thought && was smart enough not to box ?
moritz FROGGS: Perl 6 code
FROGGS then it should not make sense to p6bool the result of an expression that uses && 12:46
err, I'm wrong
nvm
moritz any sequence of boxing + boolification (where the boxing is only used for the boolification) could be optimized
if it boxes right now
lizmat moritz: indeed
moritz and if it boxes right now, nqp::p6bool(nqp::defined($!storage)) && nqp::p6bool(nqp::elems($!storage)); should be even faster 12:47
because p6bool doesn't allocate
lizmat checks 12:48
moritz (unless we have boxed Ints for 0 and 1 cached, which would probably be a really good idea)
(but also requires some care with 'does' not messing up the boxed thing)
jnthn moritz: && compiles into a QAST::Op if node. 12:58
lizmat indeed, moritz: your approach is slower
not much (like 2% or so)
jnthn: to verify: in nqp::p6bool(nqp::defined($!storage) && nqp::elems($!storage)); the && will not box, right ? 13:00
jnthn lizmat: Hopefully not. :) 13:04
lizmat: And if it does then we should improve code-gen so it doesn't
lizmat how can I check? 13:05
moritz agreed
jnthn You'd have to disassemble the generated bytecode
lizmat is not looking forward to that
lizmat do we have tools for that ? 13:05
jnthn moar --dump
And the .moarvm file
timotimo lizmat: it may very well be asier to cause spesh to become interested in the function you'd like to see and use the spesh log 13:06
get it interested by making it hot
lizmat well, it all seems very interesting, but I think I'll keep it to looking at simple benchmarks for now and see what is faster 13:07
because in the end, that's what we're after
lizmat tries not to get distracted too much
.oO( and is having a hard time not getting distracted )
jnthn Looks, squirrel! 13:08
*Look
lizmat what? where? :-)
donaldh jnthn: could you give me your thoughs on this gist gist.github.com/donaldh/91a212b38725642131be 13:09
timotimo donaldh: what the hell is :feature = 'broken' supposed to be :)
m: say (:feature = "broken").perl
camelia rakudo-moar 04ce88: OUTPUT«Cannot modify an immutable Pair␤ in block <unit> at /tmp/wDMBTo6AJ3:1␤␤»
timotimo m: say(:feature = "broken").perl 13:10
camelia rakudo-moar 04ce88: OUTPUT«Cannot modify an immutable Pair␤ in block <unit> at /tmp/LvmR443s6Y:1␤␤»
donaldh a golfed test case
jnthn donaldh: First of, really good find.
*off
timotimo it's kinda weird that that even parses :)
moritz timotimo: why? colonpairs are not special
jnthn timotimo: It's just term infix term :) 13:11
donaldh jnthn: it took me a while, getting misled by unrelated but obvious looking stuff.
lizmat std: say (:feature = "broken").perl
camelia std f9b7f55: OUTPUT«ok 00:00 138m␤»
moritz donaldh: ah, it dies before throwing X::NYI
even before calling X::NYI.new
timotimo inside an argument list, though?
timotimo well, i suppose 13:11
an assignment is a term, too
moritz argument lists aren't (so) special
jnthn Right, the point really being that it's named args that are causing the issue. 13:12
donaldh oh, ignore the colonpair stuff.
jnthn I suspect a plain X::NYI.new().throw also doesn't serialize a Match
moritz donaldh: well, it makes your code equivalent to sub f() {
donaldh Yeah, it's the fatarrow, but only in certain situations.
moritz die "something";
}
lizmat m: say Any.keys.perl; say Hash.keys.perl # the latter feels wrong in view of the former
camelia rakudo-moar 04ce88: OUTPUT«().list␤Nil␤»
moritz lizmat: agreed
jnthn donaldh: I don't have a good feel for which is the right fix immediately; I'll think about it (though I slept badly last night and seem to have a cold, so I may not get to anything sensible today :)) 13:13
donaldh Sanitizing QAST nodes in the annotations will be problematic because I noticed data structure cycles. 13:14
I'm happy to implement 1 or 2. It really depends on what the desired semantics of shallow_clone should be.
Oh, and 2 exposes a method from QAST::Node in nqp to add_inlining_info_if_possible in rakudo 13:15
jnthn 2 feels rightest at first thought; annotations are typically used during the Actions, and inlining info is used by the optimizer, and annotations are not meant to have an effect on the compilation process really. 13:18
dalek osystem: 6e40b4d | (Marcel Timmerman)++ | META.list:
Transfer of two modules

Update proposal because of transfer of two modules from bbkr to MARTIMM
osystem: 8f56999 | FROGGS++ | META.list:
Merge pull request #38 from MARTIMM/patch-1

Transfer of two modules
FROGGS ohh.... semver.org <3 13:22
arnsholt installs a Ubuntu 32-bit VM 13:24
FROGGS arnsholt++
arnsholt One nice thing about VMs is that reading from CD is a lot faster when the CD is actually just file IO from an SSD =D 13:25
nine I have not installed an OS from optical media in a decade... 13:26
yoleaux 10 Jan 2015 15:24Z <ab6tract> nine: yes what? was that in response to a pragma which would choke/complain about overlapping signature constraints at compile time?
moritz FROGGS: fwiw I've generally given people with pull requests to repos in the 'perl6' org pull a commit bit in the 'perl6' team 13:29
FROGGS: since you are in the 'owners' team too, you could also do that :-)
FROGGS ahh, I tend to forget that :P
moritz no harm done
FROGGS will do that next time hopefully :o)
lizmat moritz: one could also argue that Any.keys.perl should be Nil 13:31
arnsholt nine: True. It's faster than USB too though =)
moritz arnsholt: aye
masak m: multi foo([]) { "Empty" }; my @x = 1...*; say foo(@x) # RT #123581 13:36
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...?id=123581
camelia rakudo-moar 6a3fc3: OUTPUT«Empty␤»
masak m: sub foo([]) { "Empty" }; my @x = 1...*; say foo(@x)
camelia rakudo-moar 6a3fc3: OUTPUT«Empty␤»
masak m: sub foo([]) { "Empty" }; my @x = 1..*; say foo(@x) 13:37
camelia rakudo-moar 6a3fc3: OUTPUT«Empty␤»
masak that's... an excellent find. I'm a tiny bit envious :>
(Andrei Osipov)++
donaldh I've had brighter days. What's the bug? 13:42
FROGGS donaldh: the bug title is: "Infinite lists match [] signature" 13:45
masak "yours truly" -- but the post isn't signed from what I can see... -- p6weekly.wordpress.com/2015/01/05/...-to-party/ 13:45
donaldh ah yes. What should match [ ] ?
masak donaldh: an empty Positional. 13:46
list, array, etc
jnthn m: (1..*).Capture.perl.say 13:47
camelia rakudo-moar 6a3fc3: OUTPUT«Capture.new(hash => {"excludes-max" => Bool::False, "excludes-min" => Bool::False, "min" => 1, "max" => Inf})␤»
jnthn ah
m: (my @a = 1..*).Capture.perl.say
camelia rakudo-moar 6a3fc3: OUTPUT«Capture.new()␤»
jnthn That's a golf.
masak o.O
masak adds that to the ticket
jnthn I think the conservative thing to do is to refuse to coerce an infinite thing to a Capture.
masak +1
jnthn That let's us revisit/liberalize in the future 13:48
But I don't want to have to deal with it this side of 6.0.0 'cus it goes deeper than it first looks...
lizmat masak: hmmm.... I expected it to say "liztormato" somewhere automagically 13:50
masak: it actually does, way at the bottom, next to the date 13:51
FROGGS true
masak lizmat: you don't need to change anything, but... I notice that 007 didn't make the cut...
lizmat I'll mention it this week :-) 13:52
masak lizmat: I guess it's up to me/us now to make it significant for Perl 6. that's definitely the idea anyway.
colomon moritz++
lizmat masak: tbh, I'm not sure of 007's significance for Perl 6, but I am aware of *your* significance :-) 13:53
masak from masak.github.io/007/ : "It has been designed with the purpose of exploring ASTs, macros, the compiler-runtime barrier, and program structure introspection." 13:54
all of which are essentially part of the macro grant/work.
lizmat m: set(1, 2) «+» set(3, 4) # why is this supposed to be illegal ? 13:59
camelia rakudo-moar 6a3fc3: OUTPUT«Type check failed in binding; expected 'Positional' but got 'Any'␤ in any bind_error at src/vm/moar/Perl6/Ops.nqp:224␤ in sub hyper at src/gen/m-CORE.setting:20210␤ in block at src/gen/m-CORE.setting:20060␤ in block <unit> at /tmp/NUpL8519b3:1…»
lizmat the error is wrong, but the test has a simple dies_ok()
masak lizmat: it would seem to me that doing hyper there would imply an ordering, which sets don't have. 14:00
lizmat ah, duh :-) 14:00
m: ("a" «~« set(<pple bbot rmadillo>).perl.say # should this be a Set as well ? 14:02
camelia rakudo-moar 6a3fc3: OUTPUT«===SORRY!=== Error while compiling /tmp/Mj8RGzhSmt␤Unable to parse expression in parenthesized expression; couldn't find final ')' ␤at /tmp/Mj8RGzhSmt:1␤------> rl.say # should this be a Set as well ?⏏<EOL>␤ …»
lizmat m: ("a" «~« set(<pple bbot rmadillo>)).perl.say # should this be a Set as well ?
camelia rakudo-moar 6a3fc3: OUTPUT«("pple" => "aTrue", "bbot" => "aTrue", "rmadillo" => "aTrue").hash␤»
lizmat woah
moritz uhm
I thought sets were item-like? 14:03
lizmat yeah, ok, TODO test
moritz and thus hypers shouldn't enter them
masak moritz: that bothered me as well.
masak moritz: but I guess the same argument could be made for [] 14:03
lizmat ok, I guess I just opened another can of worms :-(
masak m: say ("a" <<~<< [<apple bbot rmadillo>]).perl
camelia rakudo-moar 6a3fc3: OUTPUT«("aapple", "abbot", "armadillo").list␤»
masak m: say ("a" <<~<< [<pple bbot rmadillo>]).perl 14:04
camelia rakudo-moar 6a3fc3: OUTPUT«("apple", "abbot", "armadillo").list␤»
masak moritz: [] is item-like, and yet, the above works.
moritz ah, right
masak but it's a bit of a slippery slope, what lizmat wants to make work 14:05
like `"a" <<~<< $set` has a well-defined semantics 14:06
but `("a", "b") <<~<< $set` doesn't
lizmat I'll keep that for another day
leont is still looking for a roommate for FOSDEM, anyone else looking for one? 14:21
woolfy: Schedule? ;-)
nwc10 leont: was leonerd? I have no idea 14:22
woolfy leont: El_Che and I are working on that right now.
leont Cool
colomon moritz++ 14:30
moritz colomon++ # fixing author listing on smoke.perl6.org/report
[Coke] what order are the modules in on smoke.perl6.org/report ? 14:43
PerlJam Um, I have a question about smoke.perl6.org/report ... What does "Tests fail" really mean? I noticed that my little Questhub thingy was showing "Passes all tests" until Jan 11, where it showed as "Tests fail". Which tests are these that are failing as that repo has no tests.
dalek kudo/nom: 49a0bf5 | lizmat++ | src/core/EnumMap.pm:
Remove unneeded "as Str" specification
14:54
kudo/nom: b55db85 | lizmat++ | src/core/ (11 files):
Make .keys/kv/values/pairs/invert multi methods

This will also make all of these methods return an empty list on a type object. Should we decide that these methods should return Nil on type objects, this can now be easily achieved by changing the U: candidates in Any.pm
[Coke] pings masak w/ github.com/masak/ufo/pull/21 15:17
masak [Coke]: applied. thanks. 15:20
leont My code is broken by rakudo update 15:26
Seems the namespace issue I hit when precompiling is now also affecting non-compiled code. Guess I need to clean up my code. 15:27
lizmat leont: can you gist the error?
leont 􏿽xABCould not find symbol '&Proc'􏿽xBB, I'm nesting namespaces in ways I apparently shouldn't 15:28
vendethiel told me that much in Salzburg after looking at it, but I never got around to doing it 15:31
Guess I have no choice now
lizmat leont: could be a new bug, so a golfed gist would be appreciated 15:34
leont ok, will look at it
leont False alarm, was working on an unclean checkout apparently. Sorry for the noise. 15:37
lizmat *phew* :-) 15:38
vendethiel doesn't remember :P 15:39
dalek kudo/nom: af6200a | lizmat++ | src/core/ (10 files):
Make all .at_key multi method with signature
15:40
leont Async IO still seems the same issues it had 2 months ago though
Should look at openpipe, but I don't see it documented anywhere
leont Getting the impression it's a nqp-only thing 15:42
andreoss m: my @x; @x[0] = 1; say @x[0] == @x[0][0]; 15:43
camelia rakudo-moar b55db8: OUTPUT«True␤»
andreoss why?
FROGGS m: say 1 == 1[0]
camelia rakudo-moar b55db8: OUTPUT«True␤»
leont Guess I'll have to do with qx and friends􏿽x85
[Coke] will be near detroit a few days this month if anyone is near there. 15:44
andreoss m: my @x; @x[0][0][0] = 3; say @x[0][0][0] == @x[0];
camelia rakudo-moar b55db8: OUTPUT«False␤»
geekosaur akron is only conceptually near detroit >.>
andreoss m: my @x; @x[0] = 3; say @x[0][0][0] == @x[0];
camelia rakudo-moar b55db8: OUTPUT«True␤»
FROGGS [0] on an object is always itself, unless it implements [...] differently... 15:53
lizmat fwiw, I can see andreoss's point
FROGGS m: say 1.list == 1 # see also
camelia rakudo-moar b55db8: OUTPUT«True␤»
lizmat m: my $a; $a[0] = 3; say $a 15:54
camelia rakudo-moar b55db8: OUTPUT«3␤»
FROGGS m: say 42.elems # also
camelia rakudo-moar b55db8: OUTPUT«1␤»
andreoss omg. why such thing was done? 15:55
vendethiel you need $a == $a[0] for autovivification
andreoss who needs indexing on scalars?
vendethiel it's so that you can treat any scalar as a list
FROGGS the three shown weirdnesses ([0], .list and .elems) are there to make it easy to iterate recursively of lists that contain items somewhere deeper
so you can always call .list, and don't have to check if it actually is a list when iterating over it 15:56
osfameron k 16:00
bah, mischan
ugexe m: my @x; @x[0][0][0] = 3; say @x.perl; my @y; @y[0] = 3; say @y.perl
camelia rakudo-moar b55db8: OUTPUT«Array.new([[3]])␤Array.new(3)␤»
andreoss m: sub foo(\n,\m) {return if (m <= 0) && (n >= 0);} 16:08
camelia rakudo-moar b55db8: OUTPUT«===SORRY!===␤Unrecognized regex metacharacter = (must be quoted to match literally)␤at /tmp/ytTvy0wfmf:1␤------> sub foo(\n,\m) {return if (m <⏏= 0) && (n >= 0);}␤Unrecognized regex metacharacter (must be qu…»
andreoss m: sub foo(\n,\z) {return if (z <= 0) && (n >= 0);} 16:08
camelia ( no output )
dalek kudo/nom: e320eb4 | lizmat++ | src/core/ (7 files):
Make .exists_key a multi and some opts
16:12
leont My code segfaults moar when I precompile -_- 16:16
colomon is pretty much always near Detroit in the #perl6 sense, though in practice it's 2 hours drive away in the opposite direction as Akron. 16:16
lizmat leont: are you precompiling with CompUnit.new(..).precomp ? 16:18
leont Probably not, I'm doing something I copied from panda a few months ago 16:19
E.g. 􏿽xABperl6 -Ilib --target=mbc --output=lib/TAP/Entry.pm6.moarvm lib/TAP/Entry.pm6􏿽xBB
lizmat could you try: 16:20
perl6 -Ilib -e 'CompUnit.new('lib/TAP/Entry.pm6').precomp'
perl6 -Ilib -e 'CompUnit.new("lib/TAP/Entry.pm6").precomp'
leont Same result 16:22
lizmat is it on github? 16:23
leont yes, github.com/Leont/tap-harness6 16:24
lizmat leont: compiles with me on OS X without problem :-( 16:26
leont It compiles ok here, but it doesn't run (I was ambiguous before) 16:28
lizmat ok, do you have a one liner that I can run myself?
japhb .botsnack 16:30
yoleaux 11:32Z <timotimo> japhb: i assume the perl5 part of perl6-bench is increasing the number of steps for the benchmark to do by 2x until it hits inf and then doesn't want to stop for some reason?
:D
leont perl6 -Iblib/lib bin/prove6 t/generator.t
(assuming precompiled libs are in blib/lib) 16:31
japhb timotimo: The problem is that, well ... that shouldn't happen with any test that does real work. Which indicates the test itself is failing, but somehow in a way that does not trigger the stress-test cutoff (in which it notices a test always failing at a given SCALE and stops trying).
leont t/{source-file,string}.t also segfault, t/generator{,-more}.t don't. Haven't figured out yet why. 16:33
japhb Ah, I see the issue. Two brainos. 16:35
lizmat leont: trying to compile Harness gives me "No such method 'resolve' for invocant of type 'Parameter'"
investigating 16:36
hmmm...seems Result needs to be compiled first, so this was an LTA error 16:37
dalek rl6-bench: 7dbbb69 | (Geoffrey Broadwell)++ | timeall:
No point in having max_failures >= runs; it would never trigger.
16:40
japhb .tell timotimo Try 7dbbb69 . :-)
yoleaux japhb: I'll pass your message to timotimo.
lizmat now getting No STable at index 10
lizmat hopes jnthn will be able to make sense of this 16:41
lizmat m: class A { multi method a(int $a) { say "int" }; multi method a($a) { say "other" } }; A.new.a(1) # why is this dispatching to Any ??? 16:47
camelia rakudo-moar af6200: OUTPUT«other␤»
arnsholt m: 1.WHAT.say 16:48
camelia rakudo-moar af6200: OUTPUT«(Int)␤»
lizmat m: say int.^mro # but but
camelia rakudo-moar af6200: OUTPUT«(int) (Int) (Cool) (Any) (Mu)␤»
arnsholt IIRC int extends int, so that's why
lizmat ah, ok 16:49
lizmat got it topsy tury again
arnsholt Yeah, this is the kind of stuff that's easy to get askew when it's so obvious what should happen 16:49
tony-o m: say 1 ~~ int 16:51
camelia rakudo-moar af6200: OUTPUT«False␤»
lizmat apparently, there is a whole set of candidates in array_slice that will never get called
because they have "int" in the signature
japhb lizmat: That doesn't mean you can't call with int. Checking ... 16:54
japhb m: multi foo(Int $i) { say "Int" }; multi foo(int $i) { say "int" }; my int $a = 1; foo($a); 16:56
camelia rakudo-moar af6200: OUTPUT«int␤»
japhb There you go.
lizmat m: multi foo(Int $i) { say "Int" }; multi foo(int $i) { say "int" }; my int $a = 1; foo(1);
camelia rakudo-moar af6200: OUTPUT«Int␤»
lizmat feels to me that should dispatch to "int" 16:57
japhb The fact that a constant integer is always interpreted as Int and not int is a different issue, but yeah, seems like you'd want the (presumably) optimized variant.
lizmat m: multi foo(Int $i) { say "Int" }; multi foo($i) { say "int" }; my int $a = 1; foo($a);
camelia rakudo-moar af6200: OUTPUT«Int␤»
lizmat m: multi foo($i) { say "Int" }; multi foo(int $i) { say "int" }; my int $a = 1; foo($a);
camelia rakudo-moar af6200: OUTPUT«int␤»
lizmat hmmm.... 16:58
arnsholt That'd require all kinds of shenanigans in the compiler though
How do you know if a 1 is int or Int?
japhb arnsholt: static optimization
lizmat well, I sorta expected that to optimize
yes
jnthn Note we have to be REALLY careful about literals dispatching to native candidates 16:59
lizmat for integers as well ?
arnsholt Oh, goody. I was about to ask you for a second opinion, jnthn =)
jnthn integer literals, yes 17:00
japhb m: multi foo(Int $i) { say "Int" }; multi foo(int $i) { say "int" }; foo(my int $ = 1);
camelia rakudo-moar af6200: OUTPUT«int␤» 17:01
japhb ^^ workaround
Kinda hokey though
jnthn The rule basically is that you should have at least one parameter declared as a native.
japhb: In real code you're probably not doing it with literals :P
We had bugs in the past involving the optimzier too eagerly picking native int candidates, and then getting data loss when Int woulda got the right answer. 17:02
japhb When you say "at least one parameter declared as native", I'm not sure what you mean (because I'm not sure if 1. you meant "argument", or 2. I'm horribly confused) 17:03
lizmat but the upshot of this is, that @a[1] is *not* taking the "int" candidate in array_slice
jnthn japhb: In src/Perl6/Optimizer.pm, search for allomorph
lizmat so I'm wondering whether it would make sense to create separate Int candidates, or make the current int -> Int candidates 17:04
jnthn And read the code around that area. It's not that much, but it's a more precise description than I'm likely to come up with today :)
leont lizmat: yeah, in my Makefile I have them ordered
jnthn lizmat: Well, the typical Perl 6 user will likely not be using native types, to the degree that helps... 17:05
And if they are, they'll probably be using native arrays in with them.
skids
.oO(I know I'm not typical but 95% of what I want to do involves interfacing with native types, mostly packet fields)
17:07
lizmat m: my @a; @a["foo"]
camelia rakudo-moar af6200: OUTPUT«Cannot call 'Real'; none of these signatures match:␤:(Mu:U \v: *%_)␤ in method Real at src/gen/m-CORE.setting:4152␤ in sub infix:<<> at src/gen/m-CORE.setting:4663␤ in sub postcircumfix:<[ ]> at src/gen/m-CORE.setting:2768␤ in block <unit> at…»
lizmat m: my @a; @a["foo".Int] # better error
camelia rakudo-moar af6200: OUTPUT«Cannot convert string to number: base-10 number must begin with valid digits or '.' in '⏏foo' (indicated by ⏏)␤ in method Int at src/gen/m-CORE.setting:13937␤ in method Int at src/gen/m-CORE.setting:6229␤ in block <unit> at /tmp/vBuhFTR6JS:1…»
japhb I wonder if we should s/indicated by/starting at/ to increase the awesome 17:09
jnthn: If I'm reading that code right, you can only dispatch a literal integer to an int multi if it only has one argument, or if it has two and one of them is typed as int. No more than two parameters can usefully be used for a native-typed variant. 17:11
jnthn japhb: Sounds like it may want generalizing in the future, but yeah, that would be good enough for all of the various native int built-in operators. 17:15
jdv79 ugexe: around? 17:21
ugexe yeah
jdv79 what "uri commit" are you refering to in github.com/sergot/http-useragent/issues/38? 17:22
ugexe 'quickfix: use URI;' 17:23
jdv79 thanks
gtodd skids: that seems fairly typically atypical 17:28
++ packets and internetty thingies 17:29
ugexe i get those 'no such method resolve' errors when i precompile modules out of order. for whatever reason you can often precompile a module before precompiling its dependency (but not always) 17:31
jnthn It's meant to explicitly disallow it :/
CurtisOvidPoe Is there a declarative way to say “this object attribute is required”, or must I write a BUILD submethod? 17:41
TimToady has $.foo = !!! '$.foo is required'; 17:42
or die
has $.foo = die '$.foo is required';
CurtisOvidPoe Thank you!
TimToady someone might have attempted a trait to add that 17:43
arnsholt Oh, neat!
Didn't know !!! took an argument
TimToady or we'll probably get some sugar with macros eventually
it's not like it saves keystrokes over 'die'
but perhaps it reads better 17:44
being more "stubby"
jnthn is sure he's written that trait at least twice to show folks how to do it...
TimToady obviously you didn't do it right the first time... :P 17:45
lizmat well, if people ask for it so often, maybe it needs to be in core ?
TimToady it's kind of on the edge 17:45
so probably worth a 'use' 17:46
jnthn It's not like there's one obvious way to do it either, I guess... 17:47
lizmat well, that goes for "is cached" as well, and we put that in code 17:48
*core
TimToady m: class Foo { has $.foo is rw = ... '$.foo is required' }; my $f = Foo.new; $f.foo = 42; say $f.foo 17:49
camelia rakudo-moar e320eb: OUTPUT«$.foo is required␤ in method <anon> at src/gen/m-CORE.setting:13945␤ in any find_method_fallback at src/gen/m-Metamodel.nqp:2737␤ in any find_method at src/gen/m-Metamodel.nqp:988␤ in block <unit> at /tmp/qFwAMd2M6u:1␤␤»
TimToady maybe lazily-loaded traits?
if most programs won't use a trait, maybe loading the bodies can be deferred, just leave the name there as an autoload stub 17:50
dalek p/parrot-rpa: f6d965a | rurban++ | / (7 files):
Replace unneeded QRPA with ResizablePMCArray
nqp/parrot-rpa: 796c3be | rurban++ | tools/build/Makefile-Parrot.in:
nqp/parrot-rpa: Makefile-Parrot: simplify ops2c rule, no chdir needed
TimToady remembers making p5 rather faster by putting slow stuff out into utf8_heavy 17:51
arnsholt Is nqp/Configure.pl's --with-moar option somehow not working? 17:52
TimToady another consideration is that traits are mostly used at compile time, and could probably be thrown away instead of serialized, if any run-time use would just reload
so autoloading traits might debloat both setting and precomps 17:54
vendethiel autoloading, as in "you use X::Y::Z, let me look in @*INC for them"? 17:56
dalek kudo/nom: 25956c3 | lizmat++ | src/core/array_slice.pm:
@a[1] uses Int candidate, @a["foo"] better error
17:57
TimToady vendethiel: more like, I already know which one I *would* pull in, if asked for
one of those spots where we try to separate identity from operational defs 17:58
any such trait coming from the standard library should have a fixed identity already
and @*INC should have very little to do with it 17:59
@*INC is really supposed to be only for developers, not for users
vendethiel right, implementation detail
TimToady realizes he's fighting a great deal of culture here 18:00
well, except insofar as it's the *wrong* implementation :P
lizmat TimToady: could you elaborate on that?
TimToady if it doesn't nail down the identity, it's wrong
that's what S11 is mostly trying to say 18:01
vendethiel lizmat++ # weekly
lizmat vendethiel: thanks for the nudge :-)
TimToady if the *user* can change the identity of things in the standard libarary, you have no security
and for some reason people are worrying a bit more about security these days 18:02
so if PERL6LIB can change which standard library you're loading, you have a lovely 0-day exploit 18:03
this is why I keep harping about identity and immutability in the standard library 18:06
geekosaur only if yu can inappropriately inject envars, which is itself a lovely 0day
if I am at a command line, it's a faster version of me downloading and installing my own perl6
TimToady well, root priviledge escalation, for setuid stuff 18:07
geekosaur your standard library does not execute with elevated privileges, after all
true, root wants to scrub envars... but PERL6LIB is kinda the least of what I'd worry about there
TimToady but more to the point, the standard library is kind of part of the language definition, and allowing it to be mutable is accidental genericity at the top of your Perl 6 program, which is verbotten 18:08
you can't maintain a language if the user's are running a different language than you think they are
s/"'"// 18:09
er, :2nd
TimToady same reason we've always rejected .perlrc files from the very beginning of the development of Perl 18:10
vendethiel perlrc as in "perl config"?
TimToady yeah
vendethiel what would that configure, though, even if it existed? 18:11
TimToady anything an explicit 'use' could
vendethiel stuff like old $) $] variables?
alright.
huf isnt there some .pl file you can drop somewhere in @INC?
TimToady but implicitly
huf one that can load whatever it wants
TimToady if you say "use MyStupidModule;" then you've declared that you want your brain to melt and run out your nose, and that's fine because it's explicitly declared 18:12
vendethiel i'm not sure why you consider taht that an exploit
TimToady writing in a different language than you think you are means you can have breakage of invariants you thought you could rely on for security 18:13
TimToady maybe it's not an exploit without a little help, but there are lot of folks out there who are willing to help with that... :/ 18:14
vendethiel alright. 18:15
lizmat huf: you can create your own CompUnitRepo object and put that in @*INC 18:16
TimToady it's the moral equivalent of persuading someone to put "use TrustMe;" at the front of their script without checking it out
arnsholt crosses fingers 18:38
I wonder if Rakudo/Moar will build in a VM with a gig of memory
jdv79 i did it with 1.5 last week 18:39
arnsholt Ah, cool. Might work then 18:40
And it's 32-bit, so pointers are a bit smaller
dalek kudo-star-daily: a8a8795 | coke++ | log/ (10 files):
today (automated commit)
kudo-star-daily: ae543c8 | coke++ | log/ (9 files):
today (automated commit)
rl6-roast-data: 06b2c7a | coke++ | / (5 files):
today (automated commit)
rl6-roast-data: 4b4be1d | coke++ | / (5 files):
today (automated commit)
jnthn arnsholt: Actually, pointers are 32 bits smaller... :P 18:44
[Coke] Testing modules/Grammar-Profiler-Simple with /home/coke/sandbox/rakudo-star-daily/star-jvm/rakudo-star-daily/install/bin/perl6-j... 18:46
java.lang.StringIndexOutOfBoundsException: String index out of range: -3
[Coke] looks like lots oof jvm module failures today. 18:47
*of
(on R*)
moritz [Coke]: I'd guess this is somebody trying to Match.to from a failed match object for string indexing
[Coke] why woudl it fail only on JVM & not moar, then? 18:48
moritz no idea 18:48
TimToady P6 should never see a failed Match object, since Nil or () is supposed to be returned for match failure 18:50
moritz oh right
things changed
[Coke] these modules have jvm-only failures: Grammar-Profiler-Simple, uri, perl6-lwp-simple, json, Bailador, Template-Mojo 18:51
nwc10 arnsholt: of course it will. Did you mean "a gig and no swap" ? :-) 18:53
TimToady perhaps "before the heat death of the universe" was implied 18:54
nwc10 or even "before Perl 6 is released" 18:55
TimToady a slightly lower bar
nwc10 (which will be much sooner. I hope. In that, I'm not assuming that the heat death is any time soon)
:-)
TimToady or higher, depending on how you measure 18:56
nwc10 Last time I tried, the Raspberry Pi finished within a bounded amount of time
(I forget if it was 8 hours or 24.)
TimToady "many"
nwc10 but not so many that the spec moved. 18:57
TimToady either Galileo or Einstein might have opinions on that 18:58
G wrt movement, and E wrt simultaneity... 18:59
[Coke] tenses.
TimToady I'm sure someone has a physick for that
gtodd Economic Policy Wonks say: with the pace of innovation accelerating ....
" chances are that by 2016 raspberry pi key fobs with perl6 preinstalled will be on amazon ..." 19:00
TimToady and on E-Bay a couple days later
gtodd hehe
jercos AM33x isn't really destined for keyfob use imo... neat concept though. 19:03
gtodd that never stopped an Economic Policy Wonk :) 19:09
jercos then again, they might put the raspi name on a different device too... 19:11
just look at all the random chips are are "arduino" now :)
arnsholt nwc10: To be honest, I haven't a clue if it has swap or not 19:13
I didn't look to closely, just installed a plain Ubuntu server in a Virtualbox =)
Anyways, it built and passed make test 19:14
jdv79 impressive 19:15
arnsholt (Incidentally, that use of "build" is likely idiosyncratic to developer communities and weird to others)
lizmat has started on the p6w, but is going to have dinner first 19:16
moritz what's p6w? 19:29
PerlJam perl 6 weekly 19:30
hobbs p6weekly.wordpress.com/
colomon has been forgetting to read that... 19:35
timotimo colomon: i haven't posted for a few weeks now :) 19:40
yoleaux 16:40Z <japhb> timotimo: Try 7dbbb69 . :-)
timotimo lizmat was kind enough to hop in while i'm distracted with life stuff 19:41
moritz is there a semantic difference between sub f(Int) { } and sub f(Int $) { } ? 19:42
(imagine a non-empty body, if necessary)
(and maybe with another type constraint) 19:43
moritz I'm reviewing github.com/rakudo/rakudo/pull/302 and try to find out whether it makes sense 19:44
m: class A { method x(*@a) { say 1 for @a } }; class B is A { method x(Any) { nextsame } }; B.x((42, 23)) 19:45
camelia rakudo-moar 25956c: OUTPUT«1␤1␤»
moritz m: class A { method x(*@a) { say 1 for @a } }; class B is A { method x(Any $) { nextsame } }; B.x((42, 23))
camelia rakudo-moar 25956c: OUTPUT«1␤1␤»
psch m: sub foo ($) { }; &foo.signature.say; sub bar(:$) { }; &bar.signature.say # moritz 19:46
camelia rakudo-moar 25956c: OUTPUT«:(Any)␤:(Any :($))␤»
psch 302 removes that inconsistency
*PR
also hi #perl6 \o
moritz m: sub f(:($)) { }; say &f.signature.perl 19:48
camelia rakudo-moar 25956c: OUTPUT«:(Any :($) (Any))␤»
moritz didn't even know :($) was allowed 19:49
colomon "<=> on lists should distribute to elements" WAT?!?!!! 19:50
moritz colomon: that's basically lexicograph sorting
erm, ordering
($a, $b, $c) <=> ($d, $e, $f) becomes ($a <=> $d) || ($b <=> $d) || ($c <=> $f)
colomon sure
but doesn't doing that violate standard p6 procedure on operators very badly? 19:51
moritz you mean because <=> should force numeric context?
colomon yes
moritz hm, good point
colomon was infix:<leg> also changed? 19:52
moritz psch: your example doesn't seem to be changed by the pull request
psch: I merged it locally, and I still get :(Any $) \n :(Any :($)) \n 19:53
psch moritz: recheck with camelia, currently the anon positional just gets ":(Any)"
moritz oh 19:54
hm
I'm not sure it's a win though
the point of anonymous positional parameters is that the names don't matter
but I guess it doesn't hurt either
moritz m: sub f(@) { }; say &f.signature.perl 19:55
camelia rakudo-moar 25956c: OUTPUT«:(@)␤»
dalek kudo/nom: 1c097d4 | peschwa++ | src/core/Parameter.pm:
Return bare $-sigil for anonymous parameters.

Parameter.perl previously didn't return a $-sigil for anonymous positional parameters without post-constraints. This patch fixes that.
kudo/nom: 107a5c2 | moritz++ | src/core/Parameter.pm:
Merge branch 'more-param-perl' of github.com:peschwa/rakudo into nom
moritz psch++
psch the anon array was gonna be my next example. i agree that names don't matter but leaving out the sigil seems weird if it's only the scalar case 19:56
and leaving them out for all is asking for confusion i guess
m: sub f($ where * > 1) { }; &f.signature.say
camelia rakudo-moar 25956c: OUTPUT«:(Any $ where { ... })␤»
psch that's another inconsistency, with post-constraint the $ is back again
...but i guess the points been made :) 19:57
moritz++
moritz timotimo: you have several open rakudo pull requests 19:58
timotimo: what's up with them? do they need discussion?
timotimo: if not, you can merge or close yourself :-)
timotimo oh, i do? 20:01
how many years old? :)
moritz timotimo: 1.5 20:02
timotimo threw out two 20:08
that makes it a bit better
[Coke] gets a sql error on a 100 line query with no line number. arglebargle. 20:10
(sorry, 250 line) 20:11
timotimo wow
masak has been happily writing Perl 6/DBIish/sqlite3 for the past few days 20:12
jnthn urgh
arnsholt masak++ # Actual Perl 6 code! 20:13
masak I expect to involve HTML output before long. 20:13
hoping to blog about it, too.
arnsholt Even more awesomer! 20:15
masak arnsholt: did you see the timings I posted yesterday? gist.github.com/masak/0714a0d412f2ab4e5f12 -- that was fun.
got the script down from 38k requests and 48 minutes to 78 requests and 3.5 minutes. 20:16
jnthn m: class class {}; say class.new.perl 20:17
camelia rakudo-moar 25956c: OUTPUT«===SORRY!=== Error while compiling /tmp/11nWiHJu_B␤Unable to parse class definition␤at /tmp/11nWiHJu_B:1␤------> class class {}; say class⏏.new.perl␤ expecting any of:␤ generic role␤»
jnthn std: class class {}; say class.new.perl
camelia std f9b7f55: OUTPUT«ok 00:01 137m␤»
arnsholt masak: With request being DB queries?
masak arnsholt: yes, right. insert statements, in this case.
arnsholt Neat!
This november++ you're hacking on, or something else? 20:18
masak something else -- but I bet I'll be able to use this knowledge a bit for November, too. 20:18
masak or November++, or whatever. December. 20:18
arnsholt I almost called it december, but decided not to in case it was too internal to my own logic =D 20:19
masak no, the thought has occurred to me. 20:19
arnsholt Very cool at any rate! All of the upboats for large(r?)-scale Perl 6 things
jnthn TimToady: In design.perl6.org/S12.html#Invocants it says: 20:28
Note that the self function is not context sensitive and thus always returns the current object as a single item even in list context.
However, we've more generally in the language concluded that sigilless things do *not* tend to imply any additional context.
jnthn Thus why |$c became |c 20:29
moritz also 'self' is not a function
jnthn So this bit of spec feels rather fossil-ish to me. Not to mention I've no idea how to implement it.
moritz: Very true also. It's just a normal lexical
jnthn Which makes it even stranger. :) 20:29
moritz let's just say it's a term
jnthn *nod*
moritz which is implementation-independent 20:30
jnthn Right. 20:30
moritz so, what would be a saner way?
self is just the invocant, without any additional (de)containerization 20:31
jnthn Something like that 20:31
Or
"The C<self> term refers to the invocant as it was received, without any item or list context being enforced on it."
moritz +1 20:31
TimToady I'm fine with just assuming it was declared \self
masak that sounds very sane. 20:32
jnthn TimToady: That's also a nice way to define it. And maps pretty much exactly to how it's implemented.
OK, I'll tweak S12 and then rt.perl.org/Ticket/Display.html?id=111914 can go away
moritz ++jnthn 20:33
timotimo does our http client lib do redirections properly yet? 20:35
dalek ecs: 8284cda | jnthn++ | S12-objects.pod:
Correct spec of context aspects of the self term.
20:40
dalek ast: 0ffea18 | jnthn++ | S12-methods/instance.t:
Test for self not enforcing item context.
20:44
masak timotimo: TIAS? 20:49
moritz huh, lots of r-m spectest failures for me :(
moritz with moar and nqp master 20:49
jnthn I get S02-types/array.t, S02-types/set.t, and S06-signature/types.t having failures since my last run a couple of days ago. 20:52
moritz m: say Metamodel::ClassHOW 20:55
camelia rakudo-moar 107a5c: OUTPUT«(Perl6::Metamodel::ClassHOW)␤»
timotimo i flew off the server :( 20:56
moritz m: so so Int.HOW ~~ Metamodel::ClassHOW 20:57
camelia ( no output )
moritz m: say so Int.HOW ~~ Metamodel::ClassHOW
camelia rakudo-moar 107a5c: OUTPUT«True␤»
jnthn std: class class {}; say class.new.perl 20:58
camelia std f9b7f55: OUTPUT«ok 00:01 137m␤»
moritz m: say Int.^methods(:all).pick.name
camelia rakudo-moar 107a5c: OUTPUT«hash␤»
moritz m: say Int.^methods(:all).pick.name
camelia rakudo-moar 107a5c: OUTPUT«sin␤»
jnthn TimToady: I can't work out why STD mangaes to parse the "class.new.perl"
TimToady: I just added keyspace to Rakudo's grammar, and then tweaked our package_declarators to call that after the sym 20:59
jnthn TimToady: However, now it explodes with "Whitespace required after keyword" 20:59
timotimo what is keyspace? 21:01
timotimo hmm. i don't expect rakudo's grammar would benefit from this optimization at all, but i've been pondering - for a bit now, actually - how to implement "after a fixed length beginning, this regex has a constant string, so we can just go boyer-moore for the literal and skip back a bit" 21:02
jnthn A token in STD
std: /$^ /
camelia std f9b7f55: OUTPUT«ok 00:00 136m␤»
jnthn std: /$. /
camelia std f9b7f55: OUTPUT«===SORRY!===␤Unsupported use of $. variable; in Perl 6 please use the filehandle's .line method at /tmp/HLmaPIZ9px line 1:␤------> /$.⏏ /␤Parse failed␤FAILED 00:00 136m␤»
moritz m: class A { }; A.^add_fallback(-> $, $ { 1 }, -> $, $ { sub (|) { say 42 }); A.blerg 21:03
camelia rakudo-moar 107a5c: OUTPUT«===SORRY!=== Error while compiling /tmp/E5fQW2jq0F␤Unable to parse expression in block; couldn't find final '}' ␤at /tmp/E5fQW2jq0F:1␤------> $, $ { 1 }, -> $, $ { sub (|) { say 42 }⏏); A.blerg␤ expecting a…»
jnthn Oddly, STD now accepts the first one, reported in rt.perl.org/Ticket/Display.html?id=77558, but still rejcects the latter in rt.perl.org/Ticket/Display.html?id=77550 :)
moritz m: class A { }; A.^add_fallback(-> $, $ { 1 }, -> $, $ { sub (|) { say 42 }}); A.blerg
camelia rakudo-moar 107a5c: OUTPUT«42␤»
jnthn moritz: Please use method FALLBACK these days ;)
moritz jnthn: I know 21:04
jnthn (Unless you've a good reason not to, in which case pop the .^add_fallback in a BEGIN block)
moritz jnthn: I'm documenting the meta model :-)
jnthn Ah, OK :)
m: $.
camelia rakudo-moar 107a5c: OUTPUT«===SORRY!=== Error while compiling /tmp/BNGqKHOCZR␤Missing semicolon.␤at /tmp/BNGqKHOCZR:1␤------> $.⏏<EOL>␤»
jnthn std: $.
camelia std f9b7f55: OUTPUT«===SORRY!===␤Unsupported use of $. variable; in Perl 6 please use the filehandle's .line method at /tmp/59FIRAS8qy line 1:␤------> $.⏏<EOL>␤Parse failed␤FAILED 00:00 134m␤»
timotimo i was thinking once the optimizer figures out the fixed length prefix of a regex ends in a literal, it could insert a node that's ignored by the NFA and by declarativity considerations and just creates a little "scan loop" so to speak that lands in the code at the very beginning of the regex (but after the initial scan node) 21:06
dalek kudo-star-daily: 568a130 | coke++ | log/ (9 files):
today (automated commit)
timotimo it'd just have to store the literal string and the known length of regex before it
but i have *no* idea about backtracking and stuff 21:08
and how to properly handle the position register in this case
lizmat p6w preview: p6weekly.wordpress.com/?p=299&...iew_id=299 21:09
timotimo colomon added an infix:%lt;%> candidate to fix this 21:10
damn you, html :) 21:11
timotimo lizmat: i recommend you write that the stuff psch worked on is only ("only") for the JVM native interop thingie 21:12
TimToady jnthn: STD's keyspace is inside <?before> so includes \s in LTM, so it will always be one longer than <ident> matches
lizmat timotimo: fixed
TimToady and it won't match if tied 21:13
lizmat re psch , it states that it is for the JVM backend, no?
timotimo well, the JVM backend can be a great many things
jnthn TimToady: So I need <?before <.keyspace>> ?
colomon has no idea what timotimo is talking about. was that infix:<%> ?
timotimo what he's done is just for use ...:from<Java>
jnthn lizmat: I get page not found trying to access that...
timotimo colomon: correct 21:14
TimToady keyspace should contain the ?before
timotimo lizmat: are you using the shitty new compose post page?
or the old one?
lizmat timotimo: I think the new one
which I actually quite like :-)
timotimo because in the old one, there's a "request feedback" button below the text input and there you can "get a link without sending an email"
that should work for everyone
i don't like it at all because it lacks this button 21:15
lizmat ah, ok
timotimo which i've been relying on quite heavily during my p6weekly workflow 21:15
moritz it also seems impossible to remove the 'uncategorized' category with the new interface, at least after the post is already published
jnthn TimToady: STD has it as: 21:16
bbkr hi. how can I weaken reference?
jnthn token keyspace { <!before '('> [ <?before <[ \s \# ]> > || <.panic: "Whitespace required after keyword"> ] }
lizmat new link for preview of p6w: p6weekly.wordpress.com/?p=299&...439914854d
jnthn I copied it exactly as that.
TimToady then something must be committing to a shorter LTM before that
jnthn bbkr: You can't, but since GC is based on reachability, not ref-counting, then you don't need to for cyclic data structures...
TimToady in STD we call it directly after <sym> 21:17
safinaskar hi 21:17
bbkr jnthn: wow, awesome! thanks
safinaskar perl6 has "grammar" feature
safinaskar what is it? is it part of language? of std lib? or what? 21:17
jnthn TimToady: Yeah, I put those calls in directly after <sym> and it actually hit the panic...
dalek c: cd28fdf | moritz++ | lib/Type/Metamodel/ClassHOW.pod:
start to document ClassHOW
21:18
jnthn safinaskar: Part of the language
safinaskar jnthn: is there something like this in perl5?
jnthn safinaskar: Well, Perl has always been good at making regexes a fairly first class part of the langauge. Perl 6 just takes this several steps further, providing full grammars. 21:19
So more interesting parsing tasks can be handled in a neat way.
moritz safinaskar: newer versions of Perl 5 have the ability to define named regexes within a regex 21:20
safinaskar: but it doesn't integrate well with OOP in perl 5
and thus reuse is still tricky
and then there are modules, of course 21:21
jnthn std: $_ = 'oh 2!'; s[\d+] += 40; .say
camelia std f9b7f55: OUTPUT«ok 00:01 139m␤»
safinaskar jnthn: moritz: thanks 21:23
b2gills safinaskar: Grammars are basically Object classes with regular expressions (rules/tokens/regexes) as methods 21:24
lizmat Perl6 Weekly live: p6weekly.wordpress.com/2015/01/12/...n-delayed/ 21:25
moritz lizmat++ 21:26
woolfy lizmat++ 21:29
jnthn lizmat++ # nice post 21:39
pyrimidine I suppose the closest thing to Grammars in p5 is Marpa 21:42
broski Hi! 21:45
I have a qeustion
can you use hyphens for variable names too?
timotimo yep
broski @an-array
$an-array
timotimo m: my @an-array = 1, 2, 3; say @an-array;
camelia rakudo-moar 107a5c: OUTPUT«1 2 3␤»
broski sub i-know-this-works {}
NICE!!!
that's great, I always wondered that because to me hyphens are quicker to type than underscores 21:46
i've been reading the documentation, I really like the implementation and I really dig how the @ and % are kept unlike Perl 5 where %hash => $hash{'ref'} 21:47
b2gills I'm fairly sure one of the quick ways to spot Perl6 vs Perl5 code, is by its use of hyphens in identifiers
b2gills I like that @hash{'a','b'} isn't a thing in Perl6 21:48
timotimo but you can still write it exactly like that if you want 21:49
b2gills I meant the @ 21:50
jnthn Note that %hash<a b> is a neater way to write %hash{'a', 'b'} :)
timotimo oh
good point
b2gills I was typing the Perl5 code
timotimo "sigil invariance"
jdv79 pyrimidine: maybe closer would be Regexp::Grammars? depends on your criteria i guess. 22:02
dalek kudo/nom: d3d2ebb | lizmat++ | src/core/operators.pm:
Add IS-NAN-OR-INF helper sub

This is backend dependent atm, so concentrate backend dependendness
kudo/nom: e4ff687 | lizmat++ | src/RESTRICTED.setting:
Make restricted settings a bit more strict

  - alphabetically ordered like items, for better perusing
  - added some existing/new internal helper subs
  - added (new) roles, preventing people from writing their own classes for access
jnthn lizmat: Isn't there an nqp:: op for nan or inf? 22:04
lizmat yes, but that only works directly on parrot
in moar/jvm you must first check if it's a Num
jnthn Just go with the maor/jvm version of it everywhere
I can't believe it reliably works out on Parrot without the type check in every case. 22:05
lizmat ok, will do that then :-)
timotimo a non-num is very, very unlikely to be nan or inf :P
so ... seems legit :)
lizmat m: nqp::isnanorinf(Str) 22:06
camelia rakudo-moar 107a5c: OUTPUT«Cannot unbox a type object␤ in block <unit> at /tmp/6Qj7QWcc06:1␤␤»
dalek kudo/nom: d7338dc | jnthn++ | src/Perl6/Grammar.nqp:
Bring a couple of special vars in line with STD.
kudo/nom: 495bc53 | jnthn++ | src/Perl6/ (2 files):
Implement s[...] op= foo.
lizmat m: nqp::isnanorinf("foo")
camelia rakudo-moar 107a5c: OUTPUT«This type cannot unbox to a native number␤ in block <unit> at /tmp/moS5DuzxYC:1␤␤»
dalek ast: 35714a7 | jnthn++ | S05-substitution/subst.t:
Correct and un-fudge s[...] op= foo tests.
timotimo jnthn: sweet :)
lizmat that gives very LTA error messages
jnthn lizmat: uh, what's LTA about it?
It's an nqp:: op and you broke its usage contract. 22:07
And it told you why.
lizmat it;s usually hidden somewhere
El_Che lizmat: you b'stard: "The beginning of the Party has been delayed!" :)
a catchy open title 22:08
lizmat :-)
jnthn Yes, but if you end up hitting the op without giving it something valid, it's a failure to guard using it properly, imo.
lizmat jnthn: the name is "isnanofinf" , there is nothing about a contract there
not in the name
"foo" is neither NaN or Inf either
hobbs now is the time for all good men to come to the aid of the party 22:09
timotimo only men?
jnthn lizmat: *All* of the nqp:: ops on native types behave in an unbox-y way, not a coercy way.
That's just the level of abstraction they're at.
hobbs in the generic sense :)
(in case you're not familiar: www.straightdope.com/columns/read/2...-good-men) 22:10
lizmat jnthn: it may be clear to *you* it requires a Num, but it wasn't to me
and apparently, in parrot's case either :)
but, no worries, I get the point :-)
El_Che lizmat: I wonder what an up-to-date version of this talk would sound like: archive.fosdem.org/2013/schedule/e...a_perlito/ 22:12
jnthn Yes, the Parrot code-gen, partly due to how Parrot works, is a bit mroe sloppy in that sense. It turned out to be a great place for performance/semantic bugs to hide...
lizmat shorter, as there are at least 2 casualties in that list 22:13
jnthn timotimo: It's one more feature down, and an RT too :)
dalek kudo/nom: 8ceebf5 | lizmat++ | src/core/operators.pm:
Revert "Add IS-NAN-OR-INF helper sub"

Turns out we don't need it after all. Just use:
   nqp::istype(val,Num) && nqp::isnanorinf(val)
That should give better performance
jnthn The RT queue is huge, so I'm going to try and pick off some easy-medium tickets now and then, when I've got bits of time when I'm not concentrated enough to work on the bigger, harder, things. 22:15
jnthn m: my $x; $x [R/]= 1 22:16
timotimo goon on ya :)
camelia rakudo-moar 107a5c: OUTPUT«===SORRY!===␤Unknown QAST node type NQPMu␤»
timotimo i'm glad
dalek kudo/nom: 0a99f9f | jnthn++ | src/Perl6/Actions.nqp:
Fix exception handlers in main program body.

These would previously fail to actually catch the exception. Resolves RT#116056.
22:36
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...?id=116056
dalek ast: 93081cd | jnthn++ | S04-exception-handlers/top-level.t:
Add test for program-level handlers.

In its own test file rather than catch.t, so as not to cause trouble debugging issues with catch.t tests.
22:37
kudo/nom: 6ba20d0 | jnthn++ | t/spectest.data:
Run S04-exception-handlers/top-level.t.
jnthn m: sub foo(Int $x is copy) { $x = 5; } f(1); 22:41
camelia rakudo-moar 495bc5: OUTPUT«===SORRY!=== Error while compiling /tmp/I_Qyq5bjdW␤Two terms in a row␤at /tmp/I_Qyq5bjdW:1␤------> sub foo(Int $x is copy) { $x = 5; } ⏏f(1);␤ expecting any of:␤ infix stopper␤ infix or me…»
jnthn m: sub foo(Int $x is copy) { $x = 5; }; f(1); 22:42
camelia rakudo-moar 495bc5: OUTPUT«===SORRY!=== Error while compiling /tmp/F64H7KK0E0␤Undeclared routine:␤ f used at line 1␤␤»
jnthn m: sub foo(Int $x is copy) { $x = 5; }; foo(1);
camelia rakudo-moar 495bc5: OUTPUT«Cannot assign to an immutable value␤ in block <unit> at /tmp/7Jxz1nmjRL:1␤␤»
jnthn m: sub foo(Int $x is copy) { $x = 5; my $omg-prevent-inline; }; foo(1); 22:43
camelia ( no output )
dalek ast: d0f0a18 | lizmat++ | S06-signature/types.t:
Fix changed gist
tony-o that isn't intended behavior? 22:44
lizmat tony-o: not if "is copy" si specified
*is
jnthn tony-o: It looks like the static inlining stuff doesn't account for "is copy", and so messes up the program 22:45
sub foo(Int $x is copy) { $x = 5; }; foo(1); # works fine with --optimize=0
tony-o i saw it happen a few days ago too and thought that it was changed that way intentionally
dalek kudo/nom: 72228a6 | lizmat++ | src/core/Buf.pm:
Streamline Buf.at_pos + add error for Inf/NaN
22:47
kudo/nom: e56d60d | lizmat++ | src/core/Capture.pm:
Streamline Capture.at_pos + error for Inf/NaN
jnthn Getting a little tired to fix that one today, so think I'll leave it for tomorrow. :) 22:51
lizmat feels likewise :-)
dalek kudo/nom: 0506869 | lizmat++ | src/core/Array.pm:
Lose VM dependent code for nqp::isnanorinf
23:00
lizmat and with that, I say "good night, #perl6"
japhb o/ lizmat 23:01
jnthn wanders off to relax/rest also :) 23:08
See y'all tomorrow o/
masak 'night, jnthn 23:52