»ö« 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.
lue masak: not that I've done an extensive check between the two lists, but I can't find this one grid I have as a rotation or symmetry in your list. 00:01
lue (I can paste it in chat if you don't mind a 7-line paste) 00:03
nvm, I didn't realize I needed to scroll over the gist :P 00:04
vendethiel masak: uh, yeah, but $changed = True works 00:05
masak vendethiel: it does. 00:05
vendethiel: I don't have a good rationale, except that it "feels" right to do ++ there. 00:06
vendethiel uhm. oke then :b
masak vendethiel: something about, it's OK if several actors do the ++, and if this bool were an integer, it'd care.
vendethiel that's irrelevant tho. it can't go back to false
adu I think I found a bug 00:07
pastie.org/9832410#23
masak vendethiel: neither does an Int if you just ++ it.
lue I use $sethash<key>++ in a couple places; it feels appropriate, and if I suddenly want to switch to a BagHash and care about the number of ++'s, it still works.
adu why is children and ident repeated in the .perl dump?
vendethiel masak: sure, that's not what I'm saying. 00:10
I'm just saying -- there's nothing that can go wrong
masak vendethiel: that is true. this value $changed toggles from False to True (if at all), and then never back. 00:12
vendethiel: and yes, I might equally well have used `$changed = True;` there. but somehow, the way I think about that pattern if `$changed++;` 00:13
CurtisOvidPoe m: role A does B {} role B
camelia rakudo-moar 7af6a8: OUTPUT«===SORRY!=== Error while compiling /tmp/yqEeKgqgqH␤Invalid typename␤at /tmp/yqEeKgqgqH:1␤------> role A does ⏏B {} role B␤»
masak vendethiel: Perl 6 is gracious enough to make that DTRT with bools.
CurtisOvidPoe: semicolon after block.
CurtisOvidPoe m: role A does B {}; role B {}
camelia rakudo-moar 7af6a8: OUTPUT«===SORRY!=== Error while compiling /tmp/g5zut20QMQ␤Invalid typename␤at /tmp/g5zut20QMQ:1␤------> role A does ⏏B {}; role B {}␤»
masak CurtisOvidPoe: Perl 6 doesn't auto-insert semicolons if you have two statements on the same line. 00:14
CurtisOvidPoe But I just added the semi-colon in that second example;
psch m: role B { ... }; role A does B; role B { }
camelia rakudo-moar 7af6a8: OUTPUT«===SORRY!=== Error while compiling /tmp/s3hzsukoi_␤Too late for semicolon form of role definition␤at /tmp/s3hzsukoi_:1␤------> role B { ... }; role A does B;⏏ role B { }␤»
adu why does .perl have duplicates?
psch errh
m: role B { ... }; role A does B { }; role B { }
camelia ( no output )
masak CurtisOvidPoe: one-pass parsing. if you want to refer to a type, you have to have declared, or predeclared it. 00:15
CurtisOvidPoe OK. Thanks.
masak because the parser doesn't look ahead to see if the type will eventually be declared.
adu: no idea.
psch adu: depends on your code. is the code that's on github for C::Parser up to date with what you're running?
lue Don't you get duplicates when using .^methods too? 00:16
broski got a question!
masak shoot!
broski does perl6 have a cms yet
masak don't think so.
there's some web stuff. 00:17
haven't heard about a CMS.
adu masak: github.com/andydude/p6-c-parser/tr...-version-2
broski I want to be all over that
masak (I won't count November, it's bit-rotted.)
broski: glad to hear it :)
adu masak: psch: it is now, the cast-version-2 branch
broski does apache have a perl6 module?
i'm sorry noob questions 00:18
masak I don't think it does.
jercos Does it need to? SCGI, FastCGI, so on so forth seem better to me.
lue Not to my knowledge, but you can use the various CGIs from P6.
masak I think Bailador et al just do their own web server.
also, what jercos said.
lue: CGI? what is this, the 90s? :P
broski yeah seriously lol 00:19
lue masak: CGIs, plural. As in CGI, FastCGI, SCGI, ... :P
geekosaur WSGI
masak .oO( SCSI )
geekosaur mod_* is kinda considered bad these days
CurtisOvidPoe Some thoughts on roles: github.com/perl6/specs/issues/80 00:21
It’s a long discussion and I need to head to bed.
masak 'night, CurtisOvidPoe
CurtisOvidPoe ‘night masak
masak ooh, wasn't aware of "Traits: The Formal Model". will read. 00:22
jercos Autobots, transform and role out
broski :)
CurtisOvidPoe It’s an awesome paper and reall clears up a lot of confusion.
TimToady is testing his solution for 4x4 00:24
psch m: role Foo { has @.foo; }; class Bar does Foo { }; class Baz is Bar does Foo { }; my $f = Baz.new(:children([1,2,3])); say $f.perl # adu
camelia rakudo-moar 7af6a8: OUTPUT«Baz.new(foo => Array.new(), foo => Array.new())␤»
psch that's what happens with e.g. FuncDef, Var and Children 00:25
psch i'm inclined to agree that it's probably a bug, but i'm not deep in our OOP 00:26
it does look wrong... :)
i was expecting composition to fail, as it does when Bar is a role and Baz does both, but...
m: role Foo { has @.foo; }; class Bar does Foo { }; class Baz is Bar does Foo { }; my $f = Baz.new(:foo([1,2,3])); say $f.perl 00:27
camelia rakudo-moar 7af6a8: OUTPUT«Baz.new(foo => Array.new(1, 2, 3), foo => Array.new(1, 2, 3))␤»
adu psch: wait, so is it because there are two "does Foo"?
I didn't realize that "does Foo" was inherited 00:28
masak that feels... odd...
but I guess you can mix in the same role once at every new inheritance level.
yeah, it's probably kosher.
TimToady this would probably run faster if I wasn't outputting all the solutions... 00:29
psch adu: roles get composed into the class, i.e. the class is actually created as a mixture between it's own declaration and the role (if i understand it correctly...)
adu although a pedantic compiler would complain about double-declarations
composition
hm
masak TimToady: I'm delighted that you've decided to join our obsessive problem-solving :>
lue Let's not forget there's always hexslide :) (Last I left off, I was busy getting annoyed at my first multithread program ever, a multithreading DLX solver for the square variant :P) 00:31
psch m: role Foo { has @.foo; }; role Bar does Foo { }; class Baz is Bar does Foo { }; Baz.^attributes.elems.say
camelia rakudo-moar 7af6a8: OUTPUT«2␤»
masak lue: I most definitely haven't forgotten hexslide.
lue: that third list item there, without a number? strangelyconsistent.org/blog/counti...igurations -- that's the universe daring me to come up with a program to compute it. 00:32
lue (Interestingly, the solver still works. It's specifically the multithreading that breaks things, I didn't break the solver itself when trying to multithread it.)
masak: oh, I know. The puzzle's been on and off my mind ever since you put it up :) .
masak anyway. sleep time. 00:33
'night, #perl6
lue masak o/
psch night masak 00:33
m: role Foo { has @.foo; }; role Bar does Foo { }; class Baz is Bar does Foo { }; Baz.^attributes.map(*.package).say 00:34
camelia rakudo-moar 7af6a8: OUTPUT«(Baz) (Bar)␤»
psch shrugs
adu: that's basically it. different packages the Attribute belongs to after being composed from the role into the class. it doesn't look particularly useful to me, but usually that doesn't mean much :) 00:35
*different packages allow this to work
psch forgot half the sentence there... 00:36
dalek jo6: ffcaf74 | hoelzro++ | lib/Mojo/DOM/CSS.pm:
Get .class.class2 to work properly
jo6: 88ca37e | hoelzro++ | lib/Mojo/DOM/CSS.pm:
Refactor CSS predicate creation to be clearer
broski see ya masak:
adu psch: so if I want the expected behaviour, I have to pick one-and-only-one class which "does Foo"
psch adu: for the current behavior, yes. you might want to bug TimToady++ or jnthn++ about this though, see if there is a good reason :) 00:37
adu :) 00:39
adu pokes TimToady
I can't find RoleHOW 00:43
lue adu: I believe there are different things, like ConcreteRoleHOW and whatnot (it's been a while for me though) 00:47
skids For methods the spec says: "A class's explicit method definition hides any role definition of the same name. A role method in turn hides any methods inherited from other classes." 00:48
psch i think this ties in with CurtisOvidPoe++'s specs issue, at least if i understood that right as well 00:49
skids Were we talking of methods, class Bar hides role Foo, so you have role Baz overriding the method from Bar, which is really from Foo.
erm no Baz was a class, strike that. 00:50
The direct one from Foo overrides the one from Bar which is really from Foo. 00:51
masak just popping by to say: 4x4: 33745 mazes. 4239 after removing symmetries. more details tomorrow. 00:59
&
adu hmm 01:03
that's not it
I can't use "use Perl6::Metamodel::ConcreteRoleHOW;" from either perl6 or nqp
japhb Try just Metamodel::ConcreteRoleHOW 01:06
There's a known issue with the Perl6:: prefix being visible or not. Also, you don't need to 'use' it, it's already there. 01:07
adu nope
adu oh without the use 01:08
ok
japhb .ask skids In irclog.perlgeek.de/perl6/2015-01-14#i_9939836 , what do you mean by "If you have a hand-tuned layout some of the .WHYs may present in ways that disrupt the final layout."?
yoleaux japhb: I'll pass your message to skids.
adu that works
skids japhb: when you perl6 --doc the file, the format of a method with a WHY may not be wha you want. 01:09
yoleaux 01:08Z <japhb> skids: In irclog.perlgeek.de/perl6/2015-01-14#i_9939836 , what do you mean by "If you have a hand-tuned layout some of the .WHYs may present in ways that disrupt the final layout."?
psch hrm, i might have over-fixed marshalling
on the other hand, how useful is a java.lang.Float in perl6..?
$ ./perl6-j -e'use java::lang::String:from<Java>; my $string = String.new("foo"); $string.WHAT.say' 01:10
(Str)
japhb skids: What kinds of things are known to render wrong? I can probably just avoid those. 01:11
psch i'm fairly sure that's too much
maybe differentiating by "do we come from a constructor" makes sense 01:12
although, probably not, considering java is famous for factories 01:13
skids japhb: signatures will have a newline after every parameter, for example. 01:15
japhb Ah, OK, interesting 01:16
Is this a "hard to fix" or a "just not dealt with yet"?
skids Sort of -- it would be an easy fix to Pod::To:Text if everyone consented, but if you open that file you may fid yourself wanting to rewrite it. 01:19
japhb Oooh, volunteer sniping 01:20
CurtisOvidPoe++ # preso 01:21
skids Personally I think a small spec change allowing an author a way to exclude the autogenerated part of a declarator pod is in order, because there's no way to automatically do the best thing for every situation. 01:24
adu psch: sounds like a debate 01:29
TimToady I got an answer of 269895. 01:31
psch adu: i suppose. i'm not sure what point of view i'm siding with yet either...
adu psch: I've been debating too 01:35
TimToady masak: assuming it's correct, here's my solution to 4x4: gist.github.com/anonymous/58437645a8aa131ac7b1
japhb Woah. 01:37
TimToady it relies on knowing that all solutions will have the same number of walls, and that all solutions must touch every internal point at least once
that is, if any wall is misplaced to divide the maze into two mazes, there will be an abandoned point somewhere 01:38
that's my assumption, anyway
lue TimToady: y'know, many people would see that many indentation levels and call it a code design smell :P . 01:42
japhb Part of knowing the rules is knowing when to break them. :-) 01:43
TimToady only because we don't have X that can depend on the previous list yet
there might well be a better way to generate all the 9-wall combinations in a set of 24 01:44
psch goes to sleep & 01:48
TimToady also, it would be considerably faster to not reslice every value every time, I'm sure 01:54
TimToady yes, my assumption is buggy, so my number is wrong 02:31
adu what's the difference between RoleToClassApplier and RoleToClassComposer?
TimToady oh well, lemme see if I can think of a way to rescue this approach 02:32
adu I should just stop reading the docs, they seem out of sync
JimmyZ adu: I didn't see RoleToClassComposer 02:35
TimToady afk &
adu github.com/rakudo/rakudo/blob/nom/...ctcomposer 02:36
JimmyZ: hence by comments
s/by/my/
JimmyZ oh, that's the same thing 02:39
*they are
mdinger I was looking at design.perl6.org/S05.html to determine how a character class is negated but I couldn't find it. I expect it's different from the perl 5 `[^abc]` but I can't tell. Is it written somewhere/ 03:46
*?
I also looked at doc.perl6.org/language/regexes and github.com/perlpilot/perl6-docs/bl...-intro.pod but still couldn't find it. 03:47
Mouq is finally fairly confident about his solution. It's generalizable to all grid widths and heights and could probably easily be extended for N-dimensions 03:52
Mouq What I have now is available here: gist.github.com/Mouq/a2e7dc887a4a35f9a131 03:54
I'll update it with more comments explaining/proving my algorithm at some point 03:55
Originally I had a large file that kept my first approach well documented, but I scrapped it 03:56
However, I get 192 solutions for the 3x3, so it's possible there's an oversight there. They are all unique, and as far as I can tell they're all valid mazes, but I haven't checked programmatically... 03:57
Mouq Oh, looks like there's lots of old, misleading comments too! Hm.. 04:01
skids mdinger: <-[abcd]> is inverted character class. 04:17
mdinger skids: Okay. Thanks. 04:18
mdinger Is the github.com/perl6/specs/ repository the proper place to file an issue such as character class negation difficult to find? It's a design document so it seems somewhat correct...or is there a more proper location? 04:25
Mouq I'd go with github.com/perl6/doc first 04:27
mdinger Mouq: okay 04:32
mdinger Thanks guys 04:38
Mouq mdinger++ 04:39
lue Mouq: I get 192 too. 04:44
Mouq :D 04:45
Mouq hasn't run 4x4 yet; is optimizing for readibility now, will optimize for speed next 04:46
However on 4x3 I get 2415
novice666 ?What's wrong with phaser BEGIN in perl6 -e ' say $x; BEGIN my $x=10;' and also perl6 -e 'say $x; BEGIN our $x=10;'
lue I haven't written my code to handle rectangle grids, so I can't confirm anything there. 04:47
Mouq novice666: That's because of non-strictness. "say $x" auto-declares $x, and then you declare it again. 04:48
m: say $x; BEGIN my $x = 10
camelia rakudo-moar 7af6a8: OUTPUT«===SORRY!=== Error while compiling /tmp/ZIbYgXdiLy␤Variable '$x' is not declared␤at /tmp/ZIbYgXdiLy:1␤------> say $x⏏; BEGIN my $x = 10␤ expecting any of:␤ postfix␤»
Mouq m: say my $x; BEGIN $x = 10
camelia rakudo-moar 7af6a8: OUTPUT«10␤»
novice666 Mouq: thanks 04:49
novice666 mouq: but...why interpreter ignore BEGIN phase and catch the first mention of the variable? 04:54
Mouq novice666: "my" actually works parse-time, like BEGIN, installing the variable in the innermost scope 04:55
so, (as far as I understand, anyway), "say my $x" is the same as "BEGIN my $x; say $x" or just "my $x; say $x" 04:56
So the parser sees that the variable is undefined before it even gets to the BEGIN 04:57
m: say EVAL '$x'; BEGIN my $x = 10; # :P 04:58
camelia rakudo-moar 7af6a8: OUTPUT«10␤»
adu why does p6-mode indent every subline? 05:05
it seems that emacs' perl-mode seems more accurate for perl6 code 05:07
lue adu: because the indenter's not perfect and I haven't touched it in months :) .
adu lue: ah, so I can blame you ;) 05:08
lue Hrm, 'M-x perl-mode' just gives me cperl, so I don't know what the real perl-mode is like (and CPerl is just crap, that's why p6-mode even exists) 05:08
Mouq Updated (with ~100 lines of comments): gist.github.com/Mouq/a2e7dc887a4a35f9a131 06:55
ponbiki j xubuntu 08:15
oops :x
woolfy nine: ping ping ping 09:36
dalek kudo/nom: a151332 | lizmat++ | src/core/Parcel.pm:
Add <0 test to Parcel.at_pos
kudo/nom: fdada00 | lizmat++ | src/core/Buf.pm:
Bounds for Blob.at_pos, <0 check for Buf.at_pos
woolfy afk 09:37
masak good antenoon, #perl6 09:45
jnthn o/ masak 09:50
masak all the mazes: gist.github.com/masak/db655cb7ab27...e-04-mazes 09:53
jnthn Amazing! :P
masak :D
jnthn CurtisOvidPoe++ # excellent write-up 09:55
Will read it again and comment more heavily once I'm not tied up with teaching and a cold.
CurtisOvidPoe Thanks, jnthn.
masak Mouq: if you're getting 192 for 3x3, then you should be able to compare my list gist.github.com/masak/c17a7c473bf6f6ad83a5 against yours and find a maze that you have but I don't. 09:56
Mouq: if you do, then I have a bug.
CurtisOvidPoe I’m glad the write-up was coherent. I was drinking and staying up late when I wrote it :) 09:59
masak reads github.com/perl6/specs/issues/80 now 10:18
CurtisOvidPoe: fixed a typo: s/Commu<()>tivity/ta/ 10:24
CurtisOvidPoe Thanks 10:25
masak .oO( ta )
CurtisOvidPoe: would "manually resolve the issue" in the last sentence mean something like add a trait to the overriding method to explicitly declare that it overrides? 10:27
moritz masak: and "ta" is short for "takk", right? :-)
masak moritz: you Norwegians with your "kk" :P 10:28
or, should I say, "kk" is admirably analytic/synthetic. but it just looks silly. 10:29
CurtisOvidPoe masak: in Smalltalk, resolving a conflict of that sort involves explicitly excluding conflicting methods. How it should happens in Perl 6 is something I could only guess at.
masak CurtisOvidPoe: I'm pretty sure with the changes you propose, github.com/masak/007/blob/master/lib/_007/Q.pm would break in one way or another :) 10:30
not that I consider that an argument against the change, necessarily -- what you say makes a whole lot of sense.
but it would be a slightly breaking change.
CurtisOvidPoe Yeah, I realize that not everyone would be happy with it. I’ve just been bitten by this enough times that I’ve realized that the traits researchers really did a brilliant job in their formalism (as opposed to say, mixins, which were an experimental hack that happened to get to the core of the inheritance problem) 10:32
masak CurtisOvidPoe: if I understand correctly what "explicitly excluding conflicting methods" means, then that feels like a slightly clunky way to do it.
CurtisOvidPoe: well, you had me at "associativity and commutativity" :) I want this too. 10:33
CurtisOvidPoe masak: I’m not overly fussed about the implementation so long as I can *know* when behavior is being discarded.
masak *nod*
masak TimToady++'s maze solver may have been wrong, but thinking about it made me think about another way to write my solver. 10:59
FROGGS now I think about thinking about thinking to write about a solver 11:03
rurban better FFI to a good existing solver, sat or smt. Simple ones get really slow soon 11:09
masak rurban: part of the joy is using Perl 6 for this, though.
masak rurban: also, I didn't find much of any code to enumerate spanning trees. much less identify symmetries afterward. 11:10
grondilu std: sub (:$a, @b) {} 11:22
camelia std f9b7f55: OUTPUT«===SORRY!===␤Cannot put required parameter after variadic parameters at /tmp/QucSA3sbdY line 1:␤------> sub (:$a, @b⏏) {}␤Potential difficulties:␤ @b is declared but not used at /tmp/QucSA3sbdY line 1:␤------> [3…»
grondilu is not quite sure about this
masak then maybe read up on S06 :) 11:22
can't put positionals after nameds in signatures. 11:23
it's fine in argument lists, though.
grondilu I thought I could put named args wherever I want. 11:35
jnthn CurtisOvidPoe: I wonder if you have an example of com/assoc bustage *without* using subset types.
grondilu (I mean, isn't that the point of nming them?)
jnthn grondilu: No, you put positional ones first in the sig, then nameds. 11:36
Been that way for as long as I can remember.
It's probably sane for the reader :)
grondilu k 11:37
jnthn CurtisOvidPoe: My gut feeling is that a warning is not the way to go, and an error and having to mark up the resolution somehow is maybe closer.
CurtisOvidPoe jnthn: You might be right, but I’m unsure. I’ve dithered on that a lot. 11:42
jnthn: the setset examples were there because they brought out the multi issues. For issues without multis, the subsets are necessarily to show the issue. 11:43
Gah! “For issues without multis, the subsets *aren’t necessary* to show the issue.” 11:44
I rather like the idea of fatal ambiguity due to the forcing devs to treat it more seriously and building unambiguous systems. However, I’ve had a number of people object to that idea in Moose on the grounds that “it wasn’t Perlish”. 11:45
jnthn CurtisOvidPoe: Well, we're stricter on various axes in Perl 6, so it may be more fitting with the langauge generally than it is in Perl 5... 11:49
dalek kudo/nom: 4af3cab | lizmat++ | src/core/Any.pm:
Merge two at_pos candidates
11:50
jnthn CurtisOvidPoe: I'd appreciate an example without multis/subsets, because I think it would make it clearer exactly where the issues lie; there may also be more than one underlying issue that wants looking at here. 11:51
CurtisOvidPoe Will do.
jnthn Thanks!
psch hi #perl6 \o 11:53
jnthn I should have a bit of time before FOSDEM to prototype some changes, if we can figure out what to try changing. :) 11:54
hi psch
psch o/ jnthn 11:57
jnthn: did you see the role attribute composition WAT by adu in the backlog? 11:58
m: role Foo { has @.foo; }; role Bar does Foo { }; class Baz is Bar does Foo { }; Baz.^attributes.map(*.package).say
camelia rakudo-moar fdada0: OUTPUT«(Baz) (Bar)␤»
psch i have a feeling that ties in with what CurtisOvidPoe bugged, but my understanding might be limited 11:59
also i got past my troubles in Binder.java and PR 354 implements definednes constraints :) 12:01
jnthn psch: taht's not a WAT, that's how it should work.# 12:02
Heck, the MOP even has code that *relies* on that.
More generally, attributes are scoped to classes 12:03
jnthn m: class Bar { has @.foo }; class Baz is Bar { has @.foo }; Baz.^attributes.map(*.package).say 12:04
camelia rakudo-moar fdada0: OUTPUT«(Baz) (Bar)␤»
jnthn It's equivalent to that.
CurtisOvidPoe jnthn: I’ve posted an example as a response on that ticket.
psch jnthn: oh, okay, shows what i know... :) 12:06
masak CurtisOvidPoe, jnthn: +1 on errors/strictures. the philosophy in Perl 6 is that if you require higher-level abstractions (such as declared types), then Perl 6 feels it can require things of *you*, the programmer, in return. 12:08
jnthn CurtisOvidPoe: Thanks. 12:15
And yeah, that illustrates what's at stake much more simply. 12:16
jnthn psch: Does #354 pass spectest? 12:18
psch jnthn: i had 2 flaps, in supply-related tests, but they passed on their own 12:19
aside from that it's a few TODOs passed, the ones mentioned in RT #122229 12:20
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...?id=122229
psch ...i'm rerunning now to be sure 12:26
dalek kudo/nom: a0de41f | lizmat++ | src/core/ (6 files):
Some more at_pos / assign_pos streamlining

  - have at least < 0 check
  - simplified range info in exception (no need to make a real Range object)
12:28
ast: 8e21b00 | lizmat++ | S32-exceptions/misc.t:
Adjust for simplified Range information
12:29
psch jnthn: yes, spectest passes (with a different flapping test this time) 12:45
dalek ast: 5b8cca1 | hoelzro++ | S32-exceptions/misc.t:
Test that parameters are included in suggestions
12:55
ast: 22f9e21 | hoelzro++ | S32-exceptions/misc.t:
Test attribute suggestion

   ...when a lexical of the same name is accidentally used
colomon looking at CurtisOvidPoe's latest emailed example,isn't that exactly how p6 is supposed to work? 12:56
CurtisOvidPoe colomon: my latest emailed example? Do you mean the github issue I raised? 12:56
colomon yes 12:57
sorry, they are emailed to me from github
CurtisOvidPoe The traits paper’s state that the order in which roles are composed is irrelevant. The P6 spec also states that the order is irrelevant. But I posted several examples where the order is very irrelevant. 12:57
moritz well 12:58
CurtisOvidPoe Since ordering issues in multiple inheritance (and mixins) are one of the core problems that traits were designed to solve, there’s a problem here. 12:58
moritz roles can carry superclasses too
and order of superclasses matters
so at least in that case there's probably not much we can do 12:59
in other cases, maybe
dalek kudo/nom: bba2447 | lizmat++ | src/core/Capture.pm:
Unify on returning Nil on non-existing elements
kudo/nom: 0bb3add | lizmat++ | src/core/array_slice.pm:
Remove < 0 check from postcircumfix:<[ ]>

All of the at_pos/assign_pos have their own checks now, catered to the actual situation. This causes some spectest breakage, because in some situations the exception type has changed. Soon to be fixed.
lizmat ^^^ this should make inlining postcircumfix:<[ ]> a lot more feasible 13:00
colomon CurtisOvidPoe: you're saying that we shouldn't be able to declare a role which does another role but overrides one of its methods?
lizmat m: my $a; $a[10] := 24' # ooh, wow 13:01
camelia rakudo-moar 4af3ca: OUTPUT«===SORRY!=== Error while compiling /tmp/lEhkFAI99V␤Two terms in a row␤at /tmp/lEhkFAI99V:1␤------> my $a; $a[10] := 24⏏' # ooh, wow␤ expecting any of:␤ infix stopper␤ infix or meta-infix…»
CurtisOvidPoe No. I’m saying that we shouldn’t silently discard the other methods behavior and make a casual reordering of roles cause silent changes to the code’s behavior.
lizmat m: my $a; $a[10] := 24 # ooh, wow
camelia rakudo-moar 4af3ca: OUTPUT«No such method 'bind_pos' for invocant of type 'Any'␤ in sub postcircumfix:<[ ]> at src/gen/m-CORE.setting:2858␤ in block <unit> at /tmp/A37GDrCFms:1␤␤»
lizmat m: my $a = (1,2,3); $a[2] := 24 # huh? this is all legal, no? 13:03
camelia rakudo-moar 4af3ca: OUTPUT«No such method 'bind_pos' for invocant of type 'Parcel'␤ in sub postcircumfix:<[ ]> at src/gen/m-CORE.setting:2858␤ in block <unit> at /tmp/kIWj5BbYSw:1␤␤»
colomon but you're explicitly saying A does B but with A's foo in one case,and B does A but with B's foo in the other
lizmat m: my $a = (1,my $b,3).list; $a[1] := 24 # one more 13:04
camelia rakudo-moar 4af3ca: OUTPUT«No such method 'bind_pos' for invocant of type 'List'␤ in sub postcircumfix:<[ ]> at src/gen/m-CORE.setting:2858␤ in block <unit> at /tmp/JIMgXW12ai:1␤␤»
moritz lizmat: I don't think parcel should allow binding to slots
lizmat: but I might very well be confused 13:05
lizmat well, if you're allowed to assign into a Parcel, why wouldn't you allowed to bind into one ?
brb 13:11
pmichaud good morning, #perl6 13:35
moritz good am, pm 13:36
ab5tract yesterday i was playing with SQL::Rabbit in perl 5 13:37
something like this would be awesome to have in p6 13:38
github.com/robinsmidsrod/XML-Rabbit
now if only someone would finish a libxml wrapper ;)
robinsmidsrod ab5tract: :) 13:39
ab5tract oh, hai robinsmidsrod! awesome work there 13:40
when possible, i will attempt to port that over to p6 :D
still trying to think about how it would actually look as a p6-native module.. 13:44
ab5tract erm, wires crossed as i was looking at p5 db connectivity options.. that is XML::Rabbit 13:47
dalek ast: 4b5a806 | lizmat++ | S02-types/ (2 files):
Change exception types to new type
13:48
ast: 22ef35b | lizmat++ | S02-types/nested_arrays.t:
Fudge problematic test: we're throwing immediately
ast: 7cbffe8 | lizmat++ | S17-scheduler/at.t:
Make sure we don't die on empty arrays
jnthn o/ pmichaud
ab5tract but speaking of SQL.. i am also dithering on porting something like sequel.jeremyevans.net to p6
robinsmidsrod ab5tract: yeah, I haven't been paying much attention to p6, to be honest, and have little idea how it would work with the benefits that the p6 object model gives 13:49
dalek kudo-star-daily: 9c0dc9b | coke++ | log/ (9 files):
today (automated commit)
ab5tract robinsmidsrod: one thing i can quickly imagine is using the FALLBACK functionality to create the accessors
robinsmidsrod ab5tract: some of the internal method names and attributes could have better (more descriptive) names - I remember I was struggling a bit with moose internals when I created it 13:50
dalek kudo/nom: 63933cd | peschwa++ | src/vm/jvm/runtime/org/perl6/rakudo/Binder.java:
Implement definedness checks for the JVM Binder.

This fixes RT #122229.
synopsebot Link: rt.perl.org/rt3//Public/Bug/Displa...?id=122229
dalek kudo/nom: 9c74ab6 | jnthn++ | src/vm/jvm/runtime/org/perl6/rakudo/Binder.java:
Merge pull request #354 from peschwa/rt122229

Implement definedness checks for the JVM Binder.
jnthn lizmat: Yu're not allow to assign into a Parcel, you're allowed to assign into containers a Parcel may hold. 13:51
lizmat ok, so the error message is LTA :-)
ab5tract i haven't actually looked at the internals yet, but the interface is really awesome 13:52
lizmat m: my $a; $a[10] := 24 # but this should work, no?
camelia rakudo-moar 0bb3ad: OUTPUT«No such method 'bind_pos' for invocant of type 'Any'␤ in sub postcircumfix:<[ ]> at src/gen/m-CORE.setting:2843␤ in block <unit> at /tmp/qGB4WKSHCv:1␤␤»
robinsmidsrod ab5tract: well, do ask if something about XML::Rabbit is strange, and I'll try to explain as best I can - you can also join the #xml-toolkit channel on irc.perl.org were we discuss it occasionally
ab5tract will do, thanks :) 13:53
moritz was confused about the name, because he works a lot with RabbitMQ recently
ab5tract wonders if psch++'s recent work on JVM interop means that accessing an XML parser in Java is now feasible 13:54
where feasible stands for hacking-on-it-is-fun
psch ab5tract: well, i'm always looking for real use-case feedback... ;) 13:56
[Coke] psch++ 14:00
thank you SO MUCH for improving the state of rakudo-jvm
psch [Coke]: you're welcome :) 14:01
moritz and somebody please give psch++ a rakudo commit bit 14:02
psch: have you submitted a CLA to The Perl Foundation already?
psch moritz: about 6 weeks ago or so i think. i inquired 2 or 3 weeks back if it arrived and was told it hasn't yet
[Coke] still not entered into the list. 14:06
jnthn Aww
But +1 from me for psch to have commit bit once CLA is in the list
masak my new 4x4 maze algorithm runs for 32 minutes. that's a bit better than the last one, which ran for 2.5 hours. 14:08
(the new algorithm, instead of "melting" away fringe walls, "grows" walls in all possible ways from an empty starting state) 14:09
ab5tract what's a CLA? btw, i did check here first: github.com/perl6/specs/blob/master...ossary.pod
masak unfortunately, *this* algorithm thinks there are 4258 solutions! grr.
[Coke] Contributor Licensing Agreement.
ab5tract masak: will you be publishing a blog post? i love reading about the mini-challenges on strangelyconsistent
[Coke] s/ing/e/ 14:10
masak ab5tract: I just might. this was a captivating problem.
[Coke] www.perlfoundation.org/contributor_..._agreement
jnthn
.oO( Commit-bit Legal Annoyance )
masak .oO( Come, Lawyer Away! )
[Coke] basically, you agree that the TPF has a license to use the stuff you commit directly. 14:11
masak wow, this is the worst rakudobug I've had in a while. 14:27
m: for 2, 3 -> $n { my $s = "0" x $n ~ "1"; say $s, ": ", $s.substr(0, 1) ~ "1" ~ $s.substr(2) } 14:28
camelia rakudo-moar 0bb3ad: OUTPUT«001: 011␤0001: 0100␤»
masak just stare at that for a while.
masak that last expression with the .substr calls essentially means "put in a 1 in the second place, but leave everything else intact". 14:28
well, if that is so, where did the final "1" go in "0001"? 14:29
masak submits rakudobug
p6: for 2, 3 -> $n { my $s = "0" x $n ~ "1"; say $s, ": ", $s.substr(0, 1) ~ "1" ~ $s.substr(2) }
camelia rakudo-parrot 0bb3ad: OUTPUT«001: 011␤0001: 0101␤»
..rakudo-moar 0bb3ad: OUTPUT«001: 011␤0001: 0100␤»
masak right.
masak since I know a tiny bit about how strings are implemented on Moar, I predict that the bug will be tracked down in how string repetitions are handled. 14:30
this is ultimately what's causing the different results for me in the maze finding. well, it's the most obvious cause, anyway. 14:31
p6: for 2, 3 -> $n { my $s = "0" x $n ~ "1"; say $s.substr(2) } 14:32
camelia rakudo-moar 0bb3ad: OUTPUT«1␤00␤»
..rakudo-parrot 0bb3ad: OUTPUT«1␤01␤»
masak p6: my $s = "0" x 3 ~ "1"; say $s.substr(2) 14:33
camelia rakudo-moar 0bb3ad: OUTPUT«00␤»
..rakudo-parrot 0bb3ad: OUTPUT«01␤»
masak p6: say ("0" x 3 ~ "1").substr(2)
camelia rakudo-moar 0bb3ad: OUTPUT«00␤»
..rakudo-parrot 0bb3ad: OUTPUT«01␤»
masak even golfer.
...and if anyone felt that we took up a bit much of the airwaves with our mazes nonsense, know that it led directly to the finding of this bug. :> 14:37
moritz is only sorry that he couldn't follow the airwaves more closely 14:40
tadzik hmm, at some point Steroids got broken, in particular this: github.com/tadzik/steroids/blob/ma...SDL.pm#L45 14:43
it says "use the :() form if you meant to add signature info to the function's type", where should that colon go?
&cb:() doesn't seem to do the same thing
pmurias tadzik: add whitespace, I have seen the same error in Inline-Python 14:45
masak `&cb (int32)`?
pmurias yes 14:46
tadzik yeah, that works
thank you pmurias++
woolfy nine: ping svp 14:47
tadzik wow. Profiling Steroids is eye opening 14:53
tadzik I might just have a very interesting talk cooking up :) 14:53
FROGGS I expected 'memory consuming', but your's is better :o) 14:54
tadzik that too
4.4 MB HTML file is no fun for any browser I've tried
FROGGS yeah
tadzik I literally wait a few minutes after each click for angular to react
(or crash my browser. JS pls)
FROGGS though, 4.4MB does not sound that much
tadzik most of it is JSON, aiui 14:55
FROGGS but still
that's not BIG DATA, is it?
tadzik you know what big data is? :D
s-media-cache-ak0.pinimg.com/736x/...22c57f.jpg
FROGGS I have an idea :o)
>.< 14:56
*g*
tadzik anyway: most GC runs take more than there's time for a single game frame to render
the clear winner of allocations is no other than our friend Scalar
so if we somehow avoided boxing things, perhaps using binding here and there, we'll be able to relieve GC a little bit, does that make sense? 14:57
woolfy nine: I am afk, till later this evening...
pmichaud woolfy: did you get my email? 14:59
pmichaud Ah, I just got your reply, thanks. 14:59
tadzik pmichaud: can you tell me if my ramblings above sound correct? About Scalar allocations being avoidable to our benefit in certain places? 15:03
masak pmichaud! \o/ 15:07
donaldh jnthn: what was the motivation for using annotations on the JVM backend? 15:08
jnthn: I think annotations have a performance cost, versus an alternative like generating coderef init code. 15:10
tadzik :w 15:11
pardon
masak .oO( yes ) 15:12
pmurias tadzik: you have a gigantic list you made with ng-repeat?
tadzik pmurias: ng-repeat? Well I do have lists here and there :) 15:13
skids wonders whether applying a type system on the endianness issue has been done elegantly in any existing HL language. 15:14
i.e. is it the right tool for that job, and if so why is it seldom used for that job. 15:15
jnthn donaldh: I think annotations did work out faster for some reason, possibly because they deserialize lazily 15:25
donaldh: I think it led to smaller output than the code-gen too
donaldh: I know we replaced some code-gen with annotations along the way. 15:26
And it was some kind of improvement :) 15:27
donaldh jnthn: I'm seeing ~ 500ms time being spent in sun.reflect.annotation.AnnotationParser.parseAnnotations 15:28
jnthn Wow 15:28
donaldh jnthn: this is for ./perl6 -e 'say "hi"' which currently takes 3.2s on my machine. 15:29
jnthn donaldh: Hmm...question is if generating/executing code would take less than that. 15:30
donaldh I know. And the only way to find out for sure is to try it.
jnthn Well, other question is if we're being too eager about looking at annotations
donaldh Yes, I think that is the case.
jnthn And if we can put off accessing some of them until later - as in, never for many things we dont' use. 15:31
donaldh That path may be quite fruitful.
jnthn Yeah, I'd explore that before code-gen.
donaldh is exploring adding profiling capability like moar has.
jnthn Also maybe mine the commit log. 15:32
Because there may be hints about "why annotations" in there.
pmurias jnthn: what is required for automatic precompilation?
jnthn masak: Wow, nice golf. 15:33
masak :)
donaldh Yeah. I can't remember if annotations predate jvm landing in the nqp repo
jnthn donaldh: I'm sure they don't.
So you should find it in the nqp log.
tadzik jnthn: could you check my logic in irclog.perlgeek.de/perl6/2015-01-15#i_9946128 ? 15:34
jnthn pmurias: Well, making manual precompilation have a bug or two less may be a pre-req. But then, some mechanism of knowing (a) where to cache precomps, and (b) how to invalidate them when something they depend on changed
pmurias IMHO automatic precompilation is a really important feature 15:35
because the current alternatives are either waiting which is boring and causes distractions 15:36
or writing Makefiles which is barbaric and annoying
tadzik and even if you do that it blows up in your face every so often 15:38
donaldh jnthn: This is probably the most insightful commit message - "Eliminate code-gen for huge code refs array."
jnthn donaldh: Apparently it caused problems, then :) 15:43
tadzik: How long do you have for a frame, ooc?
m: say 1/60
camelia rakudo-moar 9c74ab: OUTPUT«0.016667␤»
tadzik jnthn: 16.6ms
most GC runs on this machine (a little aged) take about 18 15:44
donaldh jnthn: Yes, the setting may have blown some classfile limit like method size.
jnthn Hm, that's a bit longer than I'm used to seeing. I wonder why.
donaldh: That sounds familiar. :)
donaldh: That problem happened quite a bit in general - blowing limits.
tadzik jnthn: imgur.com/7qbsVS6 might explain a bit :) 15:45
every run slices off about 400,000 Scalars
jnthn That explains GC frequency better than it explains the GC taking a while.
tadzik err, scratch that 15:46
jnthn Wait, what are the colors in the allocations graph?
jnthn doesn't remember that chart :)
tadzik oh, hm, I assumed greens are those removed from nursery 15:47
54 garbage collections for the code in that sample 15:48
jnthn Well, I understand the graph in the GC tab
But I dunno what the graph in the allocation tab means.
I'm fairly sure I didn't implement it. :)
tadzik you don't know? We're doomed :D
jnthn timotimo may know :) 15:49
tadzik oh, that's okay :)
anyway, I did some experiments and it's clear that binding and avoiding 'for' is a great way to avoid Scalar allocation 15:50
so if I throw a lot of that away, it's a huge win
I wonder if there's anything to do about BOOTCode 15:51
jnthn Less closures... :) 15:52
tadzik heh 15:53
a loop {} running ten times comes up with 20 BOOTCodes
jnthn An...empty loop? o.O 15:54
tadzik no, not empty :)
hoelzro o/ #perl6
jnthn oh, well could be anything in there then :P
tadzik oh wait, if I cross the loop out it's still 11
so it makes sense
tadzik so, I think I'll talk on FOSDEM about it, looking at allocations and avoiding them to make your code less GC reliant and thus faster :) 15:55
jnthn Hopefully showing the tool that helps you discover such things :) 16:00
masak ++tadzik 16:00
jnthn BTW, for folks wishing the profiler UI wasn't written in Angular: I'm not attached to it, I just had to write it in the space of about a couple of days worth of working time.
And it's a quick way tos omething that works at all. 16:01
tadzik jnthn: otherwise even I myself wouldn't believe it :P
masak Angular for prototyping! \o/ 16:01
tadzik I like it, and the reasons why it stutters on tons of data I can understand
it looks shiny and works well
jnthn Aye
Well, looks shiny is mostly thanks to BS 16:02
masak jnthn: tbh, I think I would enjoy stripping off the Angular and making it pure JS and more performant. :)
jnthn masak: Happy stripping :)
masak wouldn't mind pairing up with someone over it. 16:02
tadzik thanks to BS? Hmm 16:03
oh, Bootstrap. Of course
jnthn Yes! :P 16:04
donaldh yes bootstrap is good for shiny OOTB
jnthn Yeah, I even used it for moarvm.org :P
pmichaud tadzik: oops, just now saw your comment 16:07
reading
avoiding scalar allocations can be helpful, but I think you have to be very careful with context. 16:08
pmichaud Scalars are also a way that flattening behavior is controlled. For something that is naturally flat, it doesn't matter if it's in a Scalar, but for something like an Array, Range, or Hash (something Iterable), binding directly instead of using a Scalar may cause it to flatten where otherwise it wouldn't. 16:09
moritz what's an example of a thing that's naturally flat? 16:14
FROGGS a disk? 16:17
PerlJam pancakes :)
donaldh en.wikipedia.org/wiki/Flat_Earth
lumimies The NL?
moritz ... in Perl 6 context
FROGGS our jokes
PerlJam moritz: isn't a Parcel "naturally flat" in some sense? 16:18
masak the adoption curve
FROGGS >.<
lumimies FROGGS: They're not naturally flat, they just fall that way
moritz m: say 42 for $(1, 2), $(4, 3)
camelia rakudo-moar 9c74ab: OUTPUT«42␤42␤»
moritz PerlJam: ^^ two non-flat Parcels
PerlJam yeah, but you forced item context upon them against their will 16:19
masak nice. I now have parity between the two algorithms. there are 4238 4x4 mazes. 16:20
jnthn stuff & 16:24
masak .oO( you are in a result set of 4238 unique 4x4 mazes, all alike )
dalek c: c5c4e68 | moritz++ | lib/Language/regexes.pod:
Expand on negated char classes. Closes #40.
16:26
masak new, easier/faster solution: gist.github.com/masak/6f1c0ba393fe5eb508b1 16:29
I note with sadness that gist.github.com no longer highlights Perl 6. 16:30
:/
would someone be willing to port 01-mazes.p6 to Perl 5, and measure how long it takes to run? I'd appreciate that. 16:32
maybe we can use this as a benchmark in p6bench (though with lots fewer iterations).
also, I'd be very interested in any possible speedups to the Perl 6 program. 16:33
moritz where's that program? 16:43
masak gist.github.com/masak/6f1c0ba393fe5eb508b1 16:43
japhb masak: I happened to see it since it's near the bottom, but if you mention it as 'perl6-bench' instead of 'p6bench', I'll be highlighted. 16:44
masak got it 16:45
japhb So question for the erstwhile designers/architects: I am designing a framework for RPG systems. I've gotten to a point where I'm not sure about the right OO design to describe my mental model. 16:49
When I create a character, I have a system by which I can apply a set of templates to a "blank" character, and build up most of the basic character stats that way. 16:50
I want to have different types of templates have a decent OO type layout.
So for example, I have a class for AttributeTemplate, which has arrays for unused score numbers, and a preferred array to apply them. 16:51
masak doesn't sense a question yet 16:52
japhb Now I want to be able to specify e.g. HeroicNPCAttributes, and have it provide *default values* for the unused score numbers, and e.g. MeleeFighter, and provide default preference order array. 16:53
Gah, sorry, VERY poor connectivity right now
masak japhb: I'm getting vibes of steve-yegge.blogspot.se/2008/10/uni...ttern.html -- but you're probably already aware of that. 16:54
japhb So mentally I'm thinking of these as roles to apply to a (possibly anopnymous) classand instantiate. 16:54
masak: Quite possibly 16:55
japhb In any case, the question is (or perhaps questions are): 16:55
How would you best specify default values for attributes in a role that should be applied to the parents' attributes? 16:56
Is there a better design for that kind of default setting than instantiating as: (AttributeTemplate but HeroicNPCAttributes does MeleeFigher).new(...other stuff...) ? 16:57
sjn thought roles were applied to classes, and when doing so may add change or require attributes
japhb Gah, this connectivity is killing me
sjn japhb: it sounds to me that you're overgeneralizing 16:58
japhb sjn: Unfortunately, I got here from a more specialized design, and had to keep generalizing. 16:58
vendethiel seems like I can't type [ and ] in perl6's repl 16:59
japhb It turns out when people design pen&paper RPGs, they design completely free-form rules. So you take e.g. Pathfinder and try to convert even just character generation rules to code, and you go crazy with special cases and crazy cross-cutting concerns
masak japhb: I'm also reminded of OLOO. don't have a good reference for that, but here's *something*: gist.github.com/getify/5572383 17:00
dsm what's the Perl6 version of open( my $fh, '>', \$content );? 17:01
masak dsm: writing to a scalar reference?
dsm writing to a scalar 17:01
masak dsm: I'd probably make a custom class for that which responds to the right method calls. 17:02
masak dsm: I often make a custom Output thingy -- and there's a module for that by sergot++ -- hold on 17:02
github.com/sergot/IO-Capture-Simple/ 17:03
dsm great 17:03
masak here's a similar, simple example: github.com/masak/007/blob/master/l...est.pm#L68
ab5tract what's the difference between that use and slurp ? 17:08
masak ab5tract: it's the difference between output and input. 17:09
(for one thing)
ab5tract okay, i must be dumbing at the moment 17:10
pmurias if I call QAST::CompUnit.new(QAST::Block.new(...)) from Perl6 it should work? 17:20
the *@children on the nqp is passed a proper nqp::list? 17:21
hoelzro I just saw this in S05-regex.pod: method name { "Name = $.name" } 17:28
won't that infinitely loop?
shouldn't it be $!name there? 17:29
japhb is rereading that Steve Yegge article masak++ linked above -- it's amazing how much more I'm thinking about all the details when I'm hip deep in a relevant problem, rather than just reading for general knowledge 17:29
[Tux] use Test should mention the line of tests that fail (like Test::More does) 17:30
s/line/line number/
masak japhb: glad I could help :)
japhb masak++ # Sometimes it's just the right thing said at the right time, even when the listener "already knows that" 17:31
TimToady tadzik: note tht &cb (int32) is technically wrong and will likely break someday; the current implementation steals the subsig slot for attaching function parameter constraints, but eventually we will steal it back, and &cb:(int32) will be the correct form 17:33
TimToady and the latter form ought to work currently, since the parser is just pretending the colon is a space; at least I thought I made it do that 17:35
dalek rl6-roast-data: 57b62aa | coke++ | / (5 files):
today (automated commit)
17:37
TimToady tadzik: so the &cb:(int32) form will be more future proof, if it works 17:38
and if it doesn't, I'd like to know why...
masak why during this Twitter conversation do I feel a little confused? twitter.com/YDKJS/status/555119366115565571 (for context, the quiz was "Can you name three or more cases of 'significant whitespace' in JavaScript?" twitter.com/YDKJS/status/555117730198585344 ) 17:39
huf if + + vs ++ matters, then so does par seInt vs parseInt 17:40
huf s/matters/counts/ 17:40
masak huf: except that the latter is not legal syntax. 17:41
huf hey, the meaning changes :)
but yeah, okay.
TimToady
.oO(one of them is meaner)
huf we just feel that symboly stuff should be less whitespace-sensitive than alnummy stuff 17:42
masak I dunno... that's just not what I *mean* by "significant whitespace"... 17:45
TimToady "I don't like your I-know-what-a-word-is-li-ness." :P
masak :P
huf a ton of english words have spaces inside them 17:46
it's just an artifact of ortography, the germans (or we) wouldnt put any space in the middle of compound words
PerlJam huf: we call those "phrases" :)
huf sure, sure :) 17:47
masak I can't think of another case in JavaScript where it's valid both to have two words with whitespace between them, and to write them together, and where those two cases have different meaning.
lumimies masak: var mint = 1; varmint = 1 17:49
huf a-ha! :) 17:50
[Tux] can someone explain why www.xs4all.nl/~hmbrand/t.pl gives me "Variable $!show used where no 'self' is available " 17:51
can't I have helper subs inside a class? 17:52
TimToady those are called private methods
subs have no invocant
masak lumimies: :D I *just* realized that one too! but your variable name is better ;) 17:53
PerlJam [Tux]: you could move the helper sub into a scope where an invocant is available. (but maybe hic sunt dracones if you're not careful:) 17:54
TimToady [Tux]: so declare 'method !myhelper {...}' and then call self!myhelper() 17:55
we try to keep subs and methods very far apart in Perl 6, after all the confusion in Perl 5
[Tux] I tried it like this because I want that sub to be used from two (or more) different methods but I do not want the method visible to the caller of the class
PerlJam [Tux]: private method it is then!
TimToady m: class Me { has $!show = "me"; sub myhelper(\self, *@args) { say @args, $!show }; method start() { myhelper(self, "Sink ") } } 18:01
camelia rakudo-moar 9c74ab: OUTPUT«===SORRY!=== Error while compiling /tmp/fx3EPQTGCC␤Variable $!show used where no 'self' is available␤at /tmp/fx3EPQTGCC:1␤------> elper(\self, *@args) { say @args, $!show⏏ }; method start() { myhelper(self, "Sin␤»
TimToady aww
there is so a 'self' available :P
TimToady jnthn: ^^ should that be made to work? 18:02
or do we need to know the class of self at compile time? 18:03
TimToady m: class Me { has $.show = "me"; sub myhelper(\self, *@args) { say @args, $.show }; method start() { myhelper(self, "Sink ") } } 18:04
camelia rakudo-moar 9c74ab: OUTPUT«===SORRY!=== Error while compiling /tmp/TnjJCfKcEO␤Variable $.show used where no 'self' is available␤at /tmp/TnjJCfKcEO:1␤------> elper(\self, *@args) { say @args, $.show⏏ }; method start() { myhelper(self, "Sin…»
TimToady arguably that one should worker than the first one
[Tux] tux.nl/Files/20150115190501.png 18:05
\o/
[Tux] some parts do not (yet) DWIM for me :) 18:06
[Tux] commits and pushes
Mouq masak: perl6 masak-maz3.perl6 | perl6 masak-sym3.perl6 |perl6 -e"my @masak's = lines; my @mouq's = <my-3x3-sym.txt>.IO.lines; say @mouq's (-) @masak's"
set(000100010011, 000100011100, 000101010010, 000101100010)
psch hrm, i found what's probably a big blocker for real-world jvminterop use :/ 18:07
gist.github.com/peschwa/45ff88238adc74aa2405 18:08
it's not only StringBuilder that has that problem, but i haven't isolated yet what pattern causes it
tgt masak: Did anyone translate 01-mazes.p6 to Perl 5? 18:13
vendethiel I'm looking at some kind of hole to start backlogging in, but it seems today has been a busy day :-) 18:14
masak Mouq: very interesting. I'm having supper now -- will verify later.
masak tgt: not to my knowledge, no. 18:16
tgt: feel free -- it would be great to know how much faster the Perl 5 version is.
tgt I just did a quick translation. Takes just under 3s in Perl 5, but results are currently slightly different from the fifth iteration, not sure why yet. (920 vs 917, 2442 vs 2435). 18:19
masak interesting. 18:25
masak well, at least one of the versions is wrong, then :P 18:25
Mouq tried to run 4x4 last night and saw output at ~30,000 before stopping it this morning (I forgot to prevent my computer from falling asleep) 18:28
Mouq Though I may be misremebering severly, since I no longer have the output 18:30
tgt How long can I expect the Perl 6 version to take? It's been running for about 20 minutes so far. 18:31
moritz tgt: it takes 21 minutes on hack.p6c.org with rakudo-moar
tadzik TimToady: it didnot 18:32
I got some strange "Expected Signature, got Any when calling such function"
tgt Current Perl 5 version: gist.github.com/tgt/e07a3ba2a82ab4bc9348 18:35
masak tgt: on my laptop it took 32 minutes. 18:43
tgt: surprised you don't get a warning if you omit the parens at gist.github.com/tgt/e07a3ba2a82ab4...le1-pl-L11
looks like a very straightforward translation. nice. 18:44
tgt++
any discrepancies will turn out to be quite enlightening. 18:45
flussence hi *! I'm trying to use Grammar::Tracer but it's giving me the silent treatment. I've used it before, but it's not working with a moar I built 10 minutes ago... 18:58
PerlJam flussence: are you sure you put "use Grammar::Tracer;" at the top of your code? :) 19:01
flussence yep, right before the grammar ...; line even
(I've tried putting it in a few places besides that, nothing works...)
flussence oh... MVM_SPESH_DISABLE makes it work. 19:04
PerlJam sounds like either a bug that needs fixing or at least something that should be documented with Grammar::Tracer 19:06
TimToady p6: for <aa aba> xx 50 { if not m/b/ { print "."; next }; print "!"; }; say ""; 19:10
camelia rakudo-moar 9c74ab: OUTPUT«.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!............................................␤»
..rakudo-parrot 9c74ab: OUTPUT«.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!␤»
TimToady there's a lovely moarvm bug
works right on jvm too 19:11
disabling spesh fixes it 19:13
flussence huh, if I clone the grammar-debugger repo and add to the tests to check for some output, it works fine. Maybe it's a precomp bug... 19:14
PerlJam sounds like disabled spesh is often a good thing :(
geekosaur mrrr. masak should test his little joy with spesh disabled too, perhaps
TimToady however, disabling jit, osr, or inline does not fix it 19:16
TimToady moving discussion of this bug over to #moarvm 19:17
flussence well now I'm just confused; my problem went away without spesh disabled... 19:20
dalek ast: ef44fab | coke++ | S17-supply/ (24 files):
:D now works in rakudo.jvm, unfudge
19:28
[Coke] ^^ psch++
whoops, it was D: 19:29
vendethiel :D
psch D: isn't a thing, that's half of :D and the invocant marker 19:30
[Coke] er :D: ?
anyway, unfudged. thanks for doing the hard work. 19:31
psch well, that patch was mostly translating the existing binder to java
...but i suppose the emphasis is on "doing" and not on "hard" :) 19:32
m: my method foo(Str:D :) { "yup, have self: " ~ self }; say foo "foo" 19:34
camelia rakudo-moar 9c74ab: OUTPUT«yup, have self: foo␤»
moritz masak: I have a trivial-ish patch that speeds up your script from 20m55s to 7m57s 19:36
moritz masak: the trick is to numify %summetries values up-front, so that it isn't repeated inside the tight loop 19:37
rot1 => +«<15 19 23 14 18 22 13 17 21 12 16 20 2 5 8 11 1 4 7 10 0 3 6 9 24>,
moritz and with +« for the other ones too 19:37
tgt masak: Using minstr instead of min in the Perl 5 code causes them to behave the same. 100000000100000100100011 and 100000000100000100110001 are identical when compared numerically since they're too large. 19:43
tgt (Gist updated.) 19:46
timotimo tadzik, jnthn, the colors in the allocations tab show how many allocations have been made from interpreted, spesh'd or jitted code 20:30
andreoss how do i declare state variable within multi subroutine? 20:44
moritz same as everywhere
'state $var;'
psch i think using the same state var over multiple multi candidates isn't obviously possible and you need a wrapper method or somesuch 20:45
andreoss moritz: seems it's not shared between multies 20:46
timotimo psch: not a wrapper method, just put it into the proto method
"just"
moritz andreoss: correct 20:47
andreoss: you could have a common outer scope, and a state variable in there, if you need that
moritz wonders if multis can be inside the proto 20:48
timotimo hm, interesting question
moritz m: proto f(\x) { state $a; multi f(Int $x) { $a += $x }; multi f(Str) { say $a }; {*} }; f 42; f 'a' 20:49
camelia rakudo-moar 9c74ab: OUTPUT«Cannot call 'f'; none of these signatures match:␤ in sub f at /tmp/yHPufhFJpS:1␤ in block <unit> at /tmp/yHPufhFJpS:1␤␤»
Mouq m: proto foo { state $*called = 0; {*}}; multi foo { say $*called++ }; foo
camelia rakudo-moar 9c74ab: OUTPUT«0␤»
lizmat moritz: the multi's inside the proto would not be visible outside unless you made them our maybe ? 20:55
skids Mouq: That's neat. I bet there's somewhere I've failed to use that, (Assuming it is working because it is supposed to.) 20:56
lizmat m: proto f(\x) { state $a; our multi f(Int $x) { $a += $x }; our multi f(Str) { say $a }; {*} }; f 42; f 'a'
camelia rakudo-moar 9c74ab: OUTPUT«===SORRY!=== Error while compiling /tmp/OwCogCehiL␤Cannot use 'our' with individual multi candidates. Please declare an our-scoped proto instead␤at /tmp/OwCogCehiL:1␤------> ate $a; our multi f(Int $x) { $a += $x }⏏…»
lizmat m: our proto f(\x) { state $a; our multi f(Int $x) { $a += $x }; our multi f(Str) { say $a }; {*} }; f 42; f 'a'
camelia rakudo-moar 9c74ab: OUTPUT«===SORRY!=== Error while compiling /tmp/fHL0IbXeKe␤Cannot use 'our' with individual multi candidates. Please declare an our-scoped proto instead␤at /tmp/fHL0IbXeKe:1␤------> ate $a; our multi f(Int $x) { $a += $x }⏏…»
lizmat m: our proto f(\x) { state $a; multi f(Int $x) { $a += $x }; multi f(Str) { say $a }; {*} }; f 42; f 'a'
camelia rakudo-moar 9c74ab: OUTPUT«Cannot call 'f'; none of these signatures match:␤ in sub f at /tmp/AbnXREYpl8:1␤ in block <unit> at /tmp/AbnXREYpl8:1␤␤»
lizmat alas 20:57
TimToady: is there a reason there is no autogenerated signature: (self: *@_, *%_) on methods ? 20:59
m: class A { method a { .say for @_ } }; A.a(1,2,3) 21:00
camelia rakudo-moar 9c74ab: OUTPUT«===SORRY!=== Error while compiling /tmp/qo1_ea5vW2␤Placeholder variables cannot be used in a method␤at /tmp/qo1_ea5vW2:1␤------> class A { method a { .say for @_ } ⏏}; A.a(1,2,3)␤»
lizmat m: class A { method a(*@_) { .say for @_ } }; A.a(1,2,3)
camelia rakudo-moar 9c74ab: OUTPUT«1␤2␤3␤»
moritz masak: I've tried some more optimizations, but +« is the only one worth it 21:03
timotimo tadzik: i'm very strongly hoping Escape Analysis and stack-allocations will make eliminating scalar container allocations manually a thing of the past 21:04
at some point in the future ...
masak tgt: ooh, I'm glad the bug was on the Perl 5 side for once :> 21:05
TimToady lizmat: well, only that @_ is a sop to P5 programmers in the first place, so extending it to methods seemed like gilding a pig's ear
lizmat sop? 21:06
TimToady other than that, it would certainly make sense to allow it in methods
hmm
masak moritz: trying your speedup.
lizmat standing operating procedure ? 21:07
FROGGS lizmat: www.dict.cc/?s=sop
timotimo .o( gilding a pig's ear? )
hobbs lizmat: no, like... concession.
lizmat pacifier ok, I can go with that
TimToady no, a bribe, a sweetener
hobbs that too 21:08
FROGGS nine would say 'Zuckerl' :o)
lizmat so, don't we need to bribe P5 class programmers as well :-)
TimToady sorry, all my native english seems to have leaked out all at once :)
lizmat hands TimToady a blanky
masak "something given to pacify or quiet, or as a bribe", says dictionary.reference.com/browse/sop 21:10
TimToady like what you give a baby to suck on so it doesn't cry 21:11
except I've never heard a baby pacifier called a 'sop'
masak @_ ==> baby
TimToady looks more like a perambulator
TimToady other than 'pacifier', I've heard 'plug' and 'binky' 21:12
timotimo and then there's the words the little ones invent to refer to the pacifier 21:14
TimToady specifically, however, a sop is something porous that you've dipped into a liquid and given to someone
quite a complicated valence
TimToady 'pah', for one of our kids 21:14
moritz ah, in good old Bavaria that liquid would have been beer, even for babies 21:15
lizmat and in france, it would probably be wine :-)
vendethiel has never drank wine in a family dinner
moritz lizmat: array_slice.pm has lots of occurrences of '+@positions'. Shouldn't @positions.elems be faster? 21:16
lizmat: prefix:<+> dispatches to .Numeric, and .Numeric to .elems
lizmat moritz: will do that
but it won't matter much, I'm afraid
moritz lizmat: I'd do it myself, but I have no idea how to benchmark it 21:17
lizmat to make things like @a[^10] much faster
moritz because I don't know which path triggers it
lizmat we need a separate at_range method, I think
TimToady notes that putting the <0 check into at_pos means every entry of [^10] has to check it
unless we provide an at_pos_raw 21:18
lizmat well, I was more thinking at_range
TimToady well, would probably be _nocheck
lizmat BTW, at the moment this also happens 21:19
timotimo if you implement at_range, that wouldn't "automatically" exist for things that implement at_pos ...
lizmat because @a[^20] internally maps to @a[$_} for ^20 21:20
*]
I actually tried to put a shortcut to at_pos in there
but then all sorts of nested arrays break
lizmat timotimo: at_range would be called from circumfix:<[ ]> only for limited Range objects 21:21
with numeric keys, so we can do the bounds check on the first/last element of the range once 21:22
timotimo OK, fair enough 21:22
oooooh my gosh 21:24
lizmat ???
timotimo i can move through the history of CWDs in fish shell just with alt and left and right arrows
that's awesome
TimToady just leaves a different desktop in each directory 21:25
timotimo hehe
TimToady I know that nom/src is two to the right and two down from here 21:27
specs are just down one, nom to the right of that, nom/nqp to the right of that, and nom/nqp/MoarVM to the right of that :)
timotimo have you ever considered a "3d grid" of workspaces? :) 21:28
TimToady that's my other computer :) 21:29
masak moritz: yup. 7 minutes, 14 seconds here too. 21:30
moritz: I wonder if there's an optimization could be crammed out of that one.
timotimo out of what exactly? @positions.elems? 21:31
moritz timotimo: pre-numifying a list of strings that is used often
timotimo: in masak++'s maze code
timotimo oh
lizmat masak: hmmm.... seems Array.elems is falling back to List.elems 21:32
timotimo is there an optimization opportunity in that?
lizmat hmmm... I guess we must check for unreified elemens :-(
something for the GLR for sure 21:33
timotimo oh, hm
lizmat on bounded Array's for sure :-)
moritz has an idea for that
can't we check nqp::defined($!nextiter), and only call .gimme if it's defined? 21:35
lizmat moritz: I'm still not sure when I can do that, but I can sure try :-) 21:36
moritz lizmat: I can try too :-)
lizmat be my guest :-)
timotimo gimme also checks if nqp::defined($!nextiter), right? but we probably don't inline that
dalek kudo/nom: 4853cce | lizmat++ | src/core/array_slice.pm:
Faster check for +@positions, moritz++
21:37
TimToady yowsers, euobserver.com/justice/127232
now where would a large group of people be gathering in Belgium...
lizmat I specifically did not touch that, as I hoped it would solve itself when pmichaud continues to work on the GLR
moritz lizmat: you're probably right 21:38
lizmat: I also note that either I have to introduce a new scope, or do a return, both of which might be slower
lizmat yeah :-(
but I do think I can make the [*-1] case faster 21:39
timotimo hm
maybe we could have a global instance of *-1 that we can identity-check and special-case?
because i think *-1 is pretty common 21:40
[Tux] FROGGS++; # Tuxic - it caused my return
TimToady might be able to generalize to *-anything
lizmat well, *-1 is a Callable
timotimo TimToady: perhaps ... perhaps with the 6model parametric extensions :)
lizmat can we distinguish that any other way ? 21:41
TimToady we have control of the parse, so anything is possible :P
FROGGS [Tux]: but I did nothing in that regards lately :o)
timotimo if our optimizer turns all instances of *-1 into the same instance of Callable, we can just $argument eqv (*-1)
[Tux] it still works
lizmat m: (*-1).WHAT.say 21:42
camelia rakudo-moar 9c74ab: OUTPUT«(WhateverCode)␤»
lizmat still, I don't know how to introspect that for the "-1" part
timotimo just let it does an int or something :P
Int*
TimToady you use that introspect word again, which is evil 21:44
the parser should turn it into a different type 21:45
it could be something derived from WhateverCode
or maybe it could be a specially typed integer that just counts from the end, and happens to respond as a WhateverCode as well 21:49
just optimizing for *-1 is too specific 21:50
timotimo fair enough
lizmat TimToady: the big time sink atm is the gimme(*) on the array 21:56
just to find out how many elements there will be
TimToady gimme is a vast pit of introspection 22:02
timotimo aye 22:04
dalek c: 0e44c0c | moritz++ | lib/Type/IO/FileTestable.pod:
IO::FileTestable: link anchors, mention method form
moritz perlpunks.de/paste/show/54b839ca.21f9.313 spectests fine; does anybody know how to benchmark it in a meaningful way? 22:06
shaves off one second off the spectest run, which is just noise
lizmat m: for ^10000 { (1,2,3).list.elems } 22:07
camelia ( no output )
lizmat the difference between the patches is your gain / loss
moritz ok, my patch makes it slower :( 22:11
erm, no
I compared the wrong way around :-)
time ./perl6-m -e 'my $l := (1, 2, 3).list; loop (my int $i = 0; $i < 100_000; $i = $i + 1 ) { $l.elems }' 22:12
before: 0.61s
after: 0.55s
jnthn TimToady: No, making attribute lookup work in a sub just 'cus there happens to be a \self is probably a bad idea. Just write a private method instead of a sub.
moritz m: say (0.61 - 0.55) / 0.61 * 100
camelia rakudo-moar 9c74ab: OUTPUT«9.836066␤»
moritz ... except that the 0.55s was an outlier 22:13
now I get 0.59s instead
timotimo oh, huh
moritz m: say (0.61 - 0.59) / 0.61 * 100
camelia rakudo-moar 9c74ab: OUTPUT«3.278689␤»
dalek kudo/nom: 0463a4b | lizmat++ | src/core/array_slice.pm:
Streamline @a[*-1]:adverb by about 25%
jnthn PerlJam: Joy, the first MoarVM dynamic optimizer bug I see in literally weeks and you treat it like we have one every day. :/
When was the last time you implemented a VM's dynamic optimizer? 22:14
*sigh*
moritz I'd like to use this opportunity to point out how few JIT bugs we've had
jnthn That also.
moritz I really didn't expect that
PerlJam jnthn: nah, just that I'd seen "works without spesh" like 3 times "all at once" (relatively speaking) 22:15
jnthn The last significant soruce of MoarVM bugs was the various OSX segfaults.
*source
TimToady: I guess we have $*PACKAGE available when compiling the sub so technically we could perhaps make it work. I'm still not sure if it's a good idea... We've kept sub/method pretty separate. 22:16
moritz messed up the benchmarks again
lizmat m: my $a; (1,my $,3).list[1] := $a # should this be allowed ?
camelia rakudo-moar 9c74ab: OUTPUT«No such method 'bind_pos' for invocant of type 'List'␤ in sub postcircumfix:<[ ]> at src/gen/m-CORE.setting:2843␤ in block <unit> at /tmp/rD_n0tQi9x:1␤␤»
moritz I'd also think that making attributes in subs work just because there's a 'self' makes 'self' much more magical than it is now 22:17
PerlJam indeed.
moritz m: say (0.61 - 0.54) / 0.61 * 100 22:18
camelia rakudo-moar 9c74ab: OUTPUT«11.475410␤»
lizmat m: say .54/.61 22:20
camelia rakudo-moar 9c74ab: OUTPUT«0.885246␤»
lizmat is what I usually do and see that's about 11% 22:21
moritz m: say 1 - 54 / 61 # :-)
camelia rakudo-moar 9c74ab: OUTPUT«0.114754␤»
lizmat moritz: turns out I didn't need .elems at all 22:22
moritz lizmat++ 22:23
moritz -> sleep 22:24
lizmat gnight, moritz
psch github.com/peschwa/eigmip6/blob/ma...e-in-c.pl6 heh 22:40
apparently generative music is fun, i hadn't known :P
with all the frameworks for it in some lisp-dialect it's not that easy to find out either 22:41
(fsvo "all")
psch well, maybe it's more "random chords" and not really generative... 22:45
lizmat jnthn: is :D the same check as self.DEFINITE ? 23:02
masak_grr found this on LinkedIn: gist.github.com/masak/401aeda40b6631ed4ae9 23:16
masak_grr is this still an issue? 23:16
Mouq masak_grr: I found I can count the number of mazes without keeping track of the state of the walls 23:22
masak_grr Mouq: count, but not enumerate, right? 23:23
Mouq masak_grr: Well sure, enumerating would entail keeping track of them 23:24
masak_grr hm. I guess that's fine by the original problem specification :) 23:25
Mouq available here, no comments though: gist.github.com/Mouq/a2e7dc887a4a3...quicker-p6 23:26
masak_grr me looks
masak_grr looks
masak_grr Mouq: you're still getting 192 3x3 mazes? I have 160, and I'm fairly confident about that number now. 23:33
Mouq: thing is, when you're only getting a *number*, we can't compare our mazes :P
Mouq masak_grr: The first file still generates the mazes 23:34
Mouq masak_grr: Oh, actually I forgot to add the code to make it print like yours does, given --numify. Updated 23:36
(for the first file)
masak_grr Mouq: well, here are my 160 mazes: gist.github.com/masak/bdcb97294af42e31a804
(something about looking at those arrays of mazes reminds me of Unicode CJK code pages) 23:37
Mouq masak_grr: What about the 4 maze symmetries here: irclog.perlgeek.de/perl6/2015-01-15#i_9947672
masak_grr oh, I forgot about those. 23:38
masak_grr looks now
...huh. 23:40
yes, well, I clearly don't have that first one. and I should.
ok, you've convinced me that something is wrong somewhere in my code. 23:41
Mouq masak_grr: Still, your approach is an order of magnitude faster than mine :) 23:42
masak_grr I'll congratulate myself on that when it's correct... :) 23:45
masak_grr oh, I see what's happening. 23:47
my algorithm doesn't allow two edges to grow out of the same corner. 23:48
that's what all my missing solutions have in common: a 90-degree corner in the middle of the maze.
masak_grr oh, it's lovely to be wrong :> 23:49
masak_grr in the case of the "melting" algorithm, as maz3 was, the two walls in a corner end up protecting each other from melting, even though they are both fringe edges. 23:51
dalek ecs: f076396 | hoelzro++ | S05-regex.pod:
Don't use accessor methods in their own implementation

  &name should not be defined in terms of &name with no terminating
condition
23:52
hoelzro I would like to add some text describing how Grammar actions' methods work with look[ahead|behind]; where would that go best? 23:56
El_Che ladies and gentlemen, le voila: fosdem.org/2015/schedule/track/perl/ 23:58
masak_grr \o/
El_Che wendy harassing you all == results :)