»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg p6eval perl6: ... | irclog: irc.perl6.org/ | UTF-8 is our friend! Set by sorear on 4 February 2011. |
|||
00:20
alester joined
00:28
havenn left
00:32
Vespakoen_ joined
00:34
Vespakoen left
00:35
localhost left
|
|||
shinobicl___ | should i redefine .WHAT for user defined classes? | 00:35 | |
i got this message when invoking what in a class i created. : use of uninitialized variable $message of type Workdate in string context | 00:36 | ||
00:36
localhost joined
|
|||
sorear | You can't redefine WHAT. | 00:39 | |
shinobicl___ | that's what i imagined... Maybe i broke something when making the derived class. | 00:42 | |
00:43
Chillance left
|
|||
cognominal | r: so.WHAT? | 00:43 | |
p6eval | rakudo 1968b8: OUTPUT«===SORRY!===Confusedat /tmp/hmfk5tfs6a:1» | ||
cognominal | :) | 00:44 | |
00:47
shinobicl___ left
00:48
notevent` left
00:58
shinobicl___ joined,
Vespakoen_ left
01:02
kshannon left
01:10
scott_ joined,
alester left
01:11
scott_ is now known as Guest2852
01:18
s1n joined
01:37
jferrero joined
02:00
shinobicl___ left,
shinobicl___ joined
02:03
flussence left,
whiteknight left
|
|||
shinobicl___ | i have a problem with one overloaded operator. i think that the fact that calling WHAT on my custom class reports an error, is the symptom of a deeper problem | 02:04 | |
02:08
swarley joined
02:17
flussence joined
02:27
flussence left
02:42
benabik joined
02:46
libertyprime left
02:49
libertyprime joined
02:52
swarley left
02:54
envi_ joined,
wolfman2000 joined
02:56
flussence joined
02:58
libertyprime left
03:11
cbk1090 left
03:13
awwaiid left
03:33
abercrombie joined
03:34
odoacre joined
03:58
orafu left
04:00
orafu joined
04:24
FACEFOX left
04:34
am0c joined
04:38
pernatiy left
04:44
dwierenga joined
|
|||
dalek | ecs: 7812d5d | larry++ | S04-control.pod: small typo |
05:02 | |
05:06
cj left
05:13
cj joined
05:18
kaleem joined
05:22
maxiozzi left
05:27
flussence left
05:28
birdwindupbird joined
06:14
NamelessTee joined
|
|||
moritz | shinobicl___: what you described earlier is a warning, not an error | 06:32 | |
shinobicl___: and it's expected that you get a warning when you use .WHAT inside a string. If you want to print the type object, do something like $obj.WHAT.gist or $obj.^name | |||
07:01
wtw joined
|
|||
masak | morning, #perl6. | 07:04 | |
lists.parrot.org/pipermail/parrot-d...06713.html looks like a "traditional p6l email" that somehow ended up on parrot-dev. | 07:06 | ||
tadzik | good morning #perl6 | ||
moritz | good am, * | 07:07 | |
masak | poranek, tadzik. | ||
moritz | masak: I jsut read it, and thought the same | ||
masak | moritz: never mind that the poster forgot the actual name of junctions, or doesn't actually know what constructs we have in place for immutability. | ||
or thinks that &map will hyper when given the chance. | 07:08 | ||
sorear | o/ masak, tadzik | ||
masak | moritz: do you want to craft a reply, or should I? | 07:09 | |
sorear | 1. yay, another persion who doesn't understand the difference between P and R | 07:10 | |
07:10
mdupont left
|
|||
sorear | 2. I unsubscribed to parrot-dev after travis-ci caused a 100x increase in traffic. has that been fixed yet? | 07:10 | |
masak | think so. | 07:11 | |
sorear | #parrot has told me I'm a jerk for being bothered by this | ||
masak | I still see travis emails sometimes, but they're much less obnoxious. | ||
sorear: they ended up complaining themselves on the list. | |||
07:15
tarch joined
|
|||
masak | sorear: fwiw, they told you that unsubscribing was "pretty curmudgeonly". that's two steps away from telling you you're a jerk... | 07:18 | |
sorear | Only two. | 07:27 | |
I really don't like being told that travis spamming the list is my problem. | |||
moritz | masak: I don't really think it deserves a reply | 07:28 | |
sorear | I'll stop this, I don't think I'm being productive | 07:30 | |
masak | sorry if I made it worse. I agree that the travis emails didn't fill any useful purpose at all. | 08:04 | |
by the way, I've stopped thinking of junctions as a threading primitive. most of the situations I use them in are for making code look simpler, nothing more. | 08:09 | ||
08:29
mj41_nb joined
|
|||
masak | that doesn't mean that they'll never *be* a threading primitive, of course. but I don't think they will be, or if they are, that it won't do much difference. | 08:29 | |
moritz | agreed | 08:32 | |
it's not a basic building block for building concurrent applications | |||
just some parallel sugar | |||
perl6: 'ab' ~~ /a/|/b/; say ~$/ | 08:33 | ||
p6eval | pugs b927740: OUTPUT«sh: /home/p6eval/Pugs.hs/Pugs: Permission denied» | ||
..rakudo 1968b8: OUTPUT«use of uninitialized value of type Any in string context» | |||
..niecza v15-4-g1f35f89: OUTPUT«Use of uninitialized value in string context at /home/p6eval/niecza/lib/CORE.setting line 1222 (warn @ 3)  at /home/p6eval/niecza/lib/CORE.setting line 230 (Mu.Str @ 10)  at <unknown> line 0 (ExitRunloop @ 0)  at /tmp/nFMb98uKiQ line 1 (mainline @ 3… | |||
08:34
kmp left
08:39
slavik1 left
|
|||
masak | and the "parallel" part of "parallel sugar" is really the smallest part of it. | 08:41 | |
it's the Huffman effect that I'm after most of the time. part "forget about sequencing, I'm not using it", part "make the same comparison (against the same variable or whatever) for all these values". | 08:42 | ||
it's *completely* right that this variant be spelled '|' rather than '||'. | 08:43 | ||
dalek | albot: 22a3f60 | moritz++ | evalbot.pl: fix pugs path, hopefull |
08:44 | |
albot: dff5c8f | moritz++ | evalbot.pl: install p6 alias for perl6 |
|||
08:44
shinobicl___ left
|
|||
moritz | evalbot control restart | 08:45 | |
08:45
p6eval left
08:46
p6eval joined,
ChanServ sets mode: +v p6eval
|
|||
moritz | r: say 'this is going to take a while' | 08:46 | |
I have no idea why, but the first execution after a restart always takes ages | |||
p6eval | rakudo 1968b8: OUTPUT«this is going to take a while» | 08:47 | |
moritz | p6: say 'new alias' | ||
p6eval | pugs, rakudo 1968b8, niecza v15-4-g1f35f89: OUTPUT«new alias» | ||
masak | woot. | ||
moritz | Juerd: ping | 08:52 | |
Juerd: the machine on which p6eval runs now is going to be discontinued, so I'd like to move p6eval to feather3, but currently it doesn't have enough memory to handle that load | |||
Juerd: is there some memory available than can be redistributed? | 08:53 | ||
08:53
y3llow left
08:56
y3llow joined
08:58
y3llow left
08:59
y3llow joined
09:01
y3llow left,
y3llow joined
09:07
perlish joined
09:10
Chillance joined
09:12
Bzek joined
09:26
rsimoes left,
Bzek left
09:27
rsimoes joined
09:34
dakkar joined
09:40
ab5tract joined
09:55
fglock joined
10:01
perlish left
10:02
Guest2852 left
|
|||
masak | p6: say 10 ** 10 | 10:10 | |
p6eval | pugs, rakudo 1968b8, niecza v15-4-g1f35f89: OUTPUT«10000000000» | ||
masak | p6: say (10 ** 10).flip.comb(/..?.?/).join('_').flip | 10:11 | |
p6eval | rakudo 1968b8, niecza v15-4-g1f35f89: OUTPUT«10_000_000_000» | ||
..pugs: OUTPUT«*** No such method in class Rat: "&flip" at /tmp/nDY3goR_Tg line 1, column 5 - line 2, column 1» | |||
10:13
kaleem left,
kaleem joined
|
|||
masak | r: use MONKEY_TYPING; augment class Cool { multi method comb(Int $n) { my $regex = '.' ~ '.?' xx ($n - 1); nextwith(eval "/$regex/") } }; say (10 ** 10).flip.comb(3).join('_').flip | 10:14 | |
p6eval | rakudo 1968b8: OUTPUT«Cannot call 'comb'; none of these signatures match::(Str:D , Mu %_!):(Str:D , Regex $pat, Any $limit = { ... }, Any :match(:$match), Mu %_!):(Cool , Mu %_!):(Cool , Regex $matcher, Any $limit = { ... }, Mu %_!) in method comb at src/gen/CORE.setting:1878 i… | ||
masak | r: use MONKEY_TYPING; augment class Cool { multi method comb(Int $n) { my $regex = '.' ~ '.?' xx ($n - 1); nextwith(self, eval "/$regex/") } }; say (10 ** 10).flip.comb(3).join('_').flip | 10:15 | |
p6eval | rakudo 1968b8: OUTPUT«Cannot call 'comb'; none of these signatures match::(Str:D , Mu %_!):(Str:D , Regex $pat, Any $limit = { ... }, Any :match(:$match), Mu %_!):(Cool , Mu %_!):(Cool , Regex $matcher, Any $limit = { ... }, Mu %_!) in method comb at src/gen/CORE.setting:1878 i… | ||
masak | hm. :/ | ||
r: use MONKEY_TYPING; augment class Cool { multi method comb(Int $n) { my $regex = '.' ~ '.?' xx ($n - 1); die (eval "/$regex/").WHAT } }; say (10 ** 10).flip.comb(3).join('_').flip | 10:16 | ||
p6eval | rakudo 1968b8: OUTPUT«Cannot call 'comb'; none of these signatures match::(Str:D , Mu %_!):(Str:D , Regex $pat, Any $limit = { ... }, Any :match(:$match), Mu %_!):(Cool , Mu %_!):(Cool , Regex $matcher, Any $limit = { ... }, Mu %_!) in method comb at src/gen/CORE.setting:1878 i… | ||
masak | oh, it's the .comb(3) that doesn't dispatch. | ||
why not? | 10:18 | ||
colomon | Str, Mu versus Cool, Int? | 10:21 | |
masak | r: use MONKEY_TYPING; augment class Str { multi method comb(Int $n) { my $regex = '.' ~ '.?' xx ($n - 1); die (eval "/$regex/").WHAT } }; say (10 ** 10).flip.comb(3).join('_').flip | ||
p6eval | rakudo 1968b8: OUTPUT«use of uninitialized value of type Str in string contextuse of uninitialized variable of type Regex in string contextuse of uninitialized value of type Str in string contextuse of uninitialized variable of type Regex in string context in method comb at /tmp… | ||
masak | that seemed to be it. colomon++ | ||
colomon | 'morning. :) | 10:22 | |
masak tips hat | |||
r: use MONKEY_TYPING; augment class Str { multi method comb(Int $n) { die $n } }; say (10 ** 10).flip.comb(3).join('_').flip | 10:23 | ||
p6eval | rakudo 1968b8: OUTPUT«3 in method comb at /tmp/gvNGpCXsG_:1 in block <anon> at /tmp/gvNGpCXsG_:1» | ||
masak | r: use MONKEY_TYPING; augment class Str { multi method comb(Int $n) { nextsame(eval "/{'.' ~ '.?' xx ($n - 1)}/") } }; say (10 ** 10).flip.comb(3).join('_').flip | 10:24 | |
p6eval | rakudo 1968b8: OUTPUT«===SORRY!===Can not get non-existent attribute '$!dispatchees' on class 'Routine'» | ||
masak | um. | ||
10:24
grondilu joined
|
|||
masak | r: use MONKEY_TYPING; augment class Str { multi method comb(Int $n) { nextwith(eval "/{'.' ~ '.?' xx ($n - 1)}/") } }; say (10 ** 10).flip.comb(3).join('_').flip | 10:25 | |
p6eval | rakudo 1968b8: OUTPUT«» | ||
grondilu | perl6: say join ':', $_ for [\,] 1, 2, 3 | ||
p6eval | rakudo 1968b8, niecza v15-4-g1f35f89: OUTPUT«112123» | ||
..pugs: OUTPUT«*** No such subroutine: "&prefix:[\\,]" at /tmp/YvJAmDYwgn line 1, column 22 - line 2, column 1» | |||
grondilu was expecting 1n1:2n1:2:3n | 10:26 | ||
masak | why? | ||
10:27
flussence joined
|
|||
grondilu | I guess I don't understand the triangular operator well. | 10:27 | |
masak | Perl has a long tradition of flattening. that's what you're seeing here too. | ||
r: .say for [\R,] "and a partridge in a pear tree", "two turtle doves" | 10:28 | ||
p6eval | rakudo 1968b8: OUTPUT«and a partridge in a pear treetwo turtle dovesand a partridge in a pear tree» | ||
masak | \o/ | ||
grondilu | Ok but what if I really want a list of lists? I tried "LoL" with no success. | ||
masak | LoL is only partially implemented, if that. | 10:29 | |
you're experiencing the effects of living in an imperfect reflection of the perfect future. | 10:30 | ||
grondilu | ok. I'll wait then. | ||
masak | r: my $s = ''; for 1, 2, 3 { if $s { $s ~= ':' }; $s ~= $_ }; say $s | 10:36 | |
p6eval | rakudo 1968b8: OUTPUT«1:2:3» | ||
masak | r: my @a; for 1, 2, 3 { push @a, $_; say @a.join(':') } | 10:38 | |
p6eval | rakudo 1968b8: OUTPUT«11:21:2:3» | ||
masak | grondilu: workaround ;) | ||
moritz | r: say join ":", @$_ for [\,] 1, 2, 3 | 10:39 | |
p6eval | rakudo 1968b8: OUTPUT«112123» | ||
masak | moritz: it's deeper than that. | ||
moritz | r: say join ":", @$_ for ([\,] 1, 2, 3).tree | ||
p6eval | rakudo 1968b8: OUTPUT«11:21:2:3» | ||
masak | woo | ||
moritz++ | |||
moritz | problem was that 'for' flattens | ||
masak | right. | 10:41 | |
10:42
fsergot left
|
|||
grondilu | well done, moritz++ | 10:46 | |
10:51
kaleem left
10:52
kaleem joined
10:59
grondilu left
11:07
daxim joined
|
|||
moritz has a new hobby: answering homework questions on perlmonks with Perl 6 :-) | 11:24 | ||
11:24
xinming left,
att joined
|
|||
arnsholt_ | Teehee | 11:24 | |
Educated trolling ;) | |||
moritz | for example www.perlmonks.org/?node_id=959903 | 11:25 | |
and hey, it prompted somebody to actually run my example code! | |||
masak | moritz: why have you pondered that SVG.pm should handle the 'style' attribute specially? | 11:29 | |
moritz | masak: because its insides have quite a specific structure | 11:30 | |
masak: which could well be expressed as an array of pairs, just like the SVG stuff | |||
masak: and because it's quite common | |||
masak | I... I think I agree. | ||
but I'd rather see a whole different approach to it all than my poor ol' XML::Writer :) | 11:31 | ||
I will ponder this over lunch. | |||
11:40
sftp left
11:41
xinming joined
11:45
snearch joined
|
|||
gfldex | svg is using CSS (of sort) and the latter is moving slowly into the direction of a script language proper | 11:49 | |
in the long run a list of pairs wont cut it | 11:50 | ||
11:50
sftp joined
11:51
mucker joined
12:04
skids left
12:17
tarch left
12:25
am0c left
12:27
att is now known as att_
12:37
alvis left
12:39
mtk joined
12:43
sporous left,
sporous joined
12:50
alvis joined
12:57
alvis left
|
|||
masak | having thought about it some, I realize I would probably want to template my XML. | 12:58 | |
expressing all the XML throught arrays and hashes just isn't worth it. | |||
however, the two killer features that would make me use this system and nothing else would be: | 12:59 | ||
bonsaikitten | sorear: so, niecza-bin packaged easily, is there a nice tarball for niecza source? | 13:00 | |
moritz | bonsaikitten: it's on github in the download section, iirc | ||
bonsaikitten | moritz: only the precompiled | ||
masak | (1) compile-time correctness checking of the XML template, ranging from just XML correctness to schema compatibility. sufficiently sensible behavior around XML template placeholders. | ||
moritz | bonsaikitten: oh, right. But you can get tarballs from github too | 13:01 | |
13:01
jerome_ left
|
|||
moritz | there's a "ZIP" button left of the field with the git URLs | 13:02 | |
masak | (2) the ability to fill placeholders with arbitrary objects, as long as they do some role, say, XML::Str-able | ||
13:02
sisar joined
|
|||
bonsaikitten | right, let's see if I can figure that one out | 13:02 | |
masak | interestingly, this pie-in-the-sky dream looks very much like the pie-in-the-sky dream for embedding SQL queries in code. | 13:05 | |
13:18
jerome_ joined
13:19
awwaiid joined
|
|||
masak | essentially, a macro could be made to handle the compile-time aspect of (1). | 13:19 | |
this again gives an indication of the desirability to be able to introspect literal arguments at compile-time, by the way. | 13:20 | ||
bonsaikitten | guh, .net wasn't meant to be run in a managed environment :) | 13:27 | |
sisar | try.rakudo.org is down ? | 13:31 | |
moritz | it usually is :( | ||
masak | where is it hosted? | 13:33 | |
moritz | feather2 | ||
flussence | 3 | ||
moritz | erm, right | ||
flussence | and yeah, "down" seems to be its normal state :( | 13:34 | |
moritz | feather2 only has perl6.org and hugme | ||
flussence | (and I think it's still running pre-nom...) | ||
flussence does some percussive maintenance | |||
oh, the dns isn't there :/ | 13:35 | ||
moritz | 193.200.132.142 | ||
bonsaikitten | cp boot/obj/Kernel.dll run/ | 13:36 | |
cp: cannot stat `boot/obj/Kernel.dll': No such file or directory | |||
heh, nice makefile confusion :) | |||
moritz | are you trying parallel make? | 13:37 | |
flussence | (ok, not pre-nom so it's not *terrible*...) | ||
bonsaikitten | moritz: augh. | ||
moritz | but pre-bs I think | ||
bonsaikitten: that doesn't work on the first build | |||
bonsaikitten | moritz: yes, trying ;) let's see if tuning that down helps | ||
moritz | bonsaikitten: once it got the bootstrap thingy downloaded and unpacked, paralell make works again | 13:38 | |
13:38
skids joined
|
|||
bonsaikitten | moritz: there will always be only one build in this case (distro packaging) | 13:38 | |
moritz | so, don't go parallel for now :/ | ||
flussence | moritz: I'm wondering whether it'd be worth ripping out the POE persistent TTY thing now that rakudo doesn't take forever and a half to start up. If there's no processes running in the background, they can't get stuck all the time :) | ||
moritz | bonsaikitten: what distro are you packaging for? | ||
bonsaikitten | gentoo | ||
masak | r: my $t = now; my @a; @a[ $_ ] = $_ for 1 .. 1e4; print now - $t | 13:39 | |
p6eval | rakudo 1968b8: OUTPUT«2.55866416794898» | ||
bonsaikitten | rakudo is getting boring ;) so I'm playing around with niecza | ||
masak | r: my $t = now; my %h; %h{ $_ } = $_ for 1 .. 1e4; print now - $t | ||
p6eval | rakudo 1968b8: OUTPUT«1.51738952909994» | ||
flussence | bonsaikitten: I've had problems with niecza and -j too, it used to work a few months ago IIRC | ||
masak | in Rakudo, hashes are faster than arrays :) | ||
bonsaikitten | flussence: oh well, three extra characters | ||
masak | in re perlmonks.org/?node_id=960334 | ||
moritz | flussence: well, you still have to persist the REPL session between several requestis | ||
*requests | |||
bonsaikitten: too boring because it's so little trouble? :-) | 13:40 | ||
masak: yes, it pays the price of lazyness | |||
(it = Arrays) | |||
bonsaikitten | moritz: well, apart from pcre being a bit silly ... and tests in 2012.02 have a few issues I need to track down and file bugs for | ||
masak | moritz: even when, as here, I'm not using that laziness at all. | 13:42 | |
moritz | masak: correct | ||
masak | what is the additional cost here, more exactly? | ||
moritz | well, for each array access we need to check if the number of reified elements is big enough | 13:43 | |
though that should be rather cheap-ish | |||
I kind think we're doing something very wrong when it comes to arrays and lists | |||
nom: my @a = 1, 2, 3; say @a.DUMP | 13:44 | ||
p6eval | rakudo 1968b8: OUTPUT«Array<-4100004978996074906>(:items(Mu), :nextiter(ListIter<-4100004978996073111>(:reified(▶Mu), :rest(RPA<-4100004978996040334>(Array<-4100004978996076959>(:items(RPA<-4100004978996035975>(▶1, ▶2, ▶3)), :nextiter(▶Mu)))), :list(Array<-4100004978996074906>))))»… | ||
moritz | there you see what's wrong | ||
it's not the outer-most array that holds all the reified elements | |||
masak | right. | ||
moritz | they are stored in two layers of nextiter | 13:45 | |
masak | I almost feel tempted to submit a rakudobug about that. | ||
moritz | please do | ||
masak submits rakudobug | |||
bonsaikitten | ok, bad idea: cp /opt/niecza/run/Kernel.dll boot/obj/ <-- this doesn't fix things *g* | ||
moritz | bonsaikitten: does a simple 'make -j1' not succeed? | 13:46 | |
13:48
[particle] joined
13:56
[particle] left
13:58
[particle] joined
14:01
leprevost joined
|
|||
bonsaikitten | moritz: nyet | 14:02 | |
moritz | bonsaikitten: then open an issue in the github issue tracker | ||
bonsaikitten | moritz: it's not finding the Kernel.dll ... I'll see if I can narrow it down to a proper bugreport | ||
at the moment it might just be User Error :) | 14:03 | ||
moritz | did you do anything more fancy than unpacking the archive, cd'ing into it and typing 'make'? | ||
ah, I too get an error if I remove the boot/ dir | 14:04 | ||
make: *** No rule to make target `boot/obj/Run.CORE.ser', needed by `boot/obj/Run.CClass.ser'. Stop. | |||
bonsaikitten | yeah, so I cp the precompiled bits in | 14:05 | |
mucker | Hi guys ... just a doubt. Is something like Devel::Declare(dispatch on a keyword) possible now in rakduo ? | ||
bonsaikitten | then it fails to find the Kernel.dll even with a simple make | 14:06 | |
14:06
shinobicl__ joined
|
|||
moritz | mucker: we now have basic support for macros | 14:06 | |
though not with 'is parsed' | |||
and I think you can declare custom terms and operators | |||
r: sub term:sym<foo>() { 'really foo' }; say foo | 14:07 | ||
p6eval | rakudo 1968b8: OUTPUT«===SORRY!===Cannot add tokens of category 'term' with a sub» | ||
moritz | why ever not? :/ | ||
mucker | ok ... i know about the macros. masak++ for that :) | ||
what is a term ? | 14:08 | ||
moritz | things that aren't operators or delimiters | ||
like, numbers or strings, function calls, variables, ... | |||
mucker | you can overload that ? neat ! | 14:09 | |
mucker digs up the perl6 cabal | |||
moritz | well, I dearly hope so | 14:10 | |
a simple (yet limited) form to do that is to declare a constant | |||
r: constant foo = 'my string'; say foo | |||
p6eval | rakudo 1968b8: OUTPUT«my string» | ||
moritz | that adds foo to the term category | ||
rakudo: my @a = 1, 2; @a[3] = 4; say @a.DUMP | 14:12 | ||
p6eval | rakudo 1968b8: OUTPUT«Array<-8937442109488417235>(:items(RPA<-8937442109493102304>(▶1, ▶2, (null), ▶4)), :nextiter(▶Mu))» | ||
14:13
sdo joined
|
|||
pmichaud | good morning, #perl6 | 14:14 | |
masak | pmichaud! \o/ | ||
pmichaud | bug #111848 is interesting. :-) | ||
moritz | good am, pm | ||
sdo | hello | ||
shinobicl__ | nom: use Test; my Int $i = 1; say $i.WHAT; diag $i.WHAT; | ||
p6eval | rakudo 1968b8: OUTPUT«Int()use of uninitialized variable $message of type Int in string context# » | ||
PerlJam | pmichaud: greetings! Good to see you on IRC :) | 14:15 | |
fglock | pmichaud: o/ | ||
shinobicl__ | now i see what you meant, masak.... about using WHAT in a string | ||
14:15
sftp_ joined
|
|||
moritz | shinobicl__: you need .gist or .^name for that | 14:15 | |
masak | pmichaud: I submitted it, but I'm not at all sure the criticism is relevant, because I don't know enough about the list model. | 14:16 | |
14:16
sftp left
|
|||
masak | pmichaud: though I do think it's rather insane that arrays are slower than hashes in that benchmark. | 14:16 | |
moritz | well, I see no pragmatic reason to nest it all that deep, and performance is a good reason against it | ||
pmichaud | I'm curious if there's a similar discrepancy in p5, though :) | ||
moritz | in p5, arrays are faster than hashes | ||
masak | I can guarantee you that arrays are faster in p5. | ||
pmichaud | the "nesting" is an artifact of laziness. I haven't found a way around it. | ||
moritz | but why two levels deep? | 14:17 | |
masak | the data indicates that in the short term, we'd be better off using hashes as underlying storage for arrays. | ||
which is just... wrong. | |||
pmichaud | masak: well, yes, if everything is eager then it can be faster. | ||
(much faster) | 14:18 | ||
moritz | but list assignment *is* eager (unless the RHS is potentially infinite), no? | ||
masak | I was doing item assignment. | ||
pmichaud | yes, the benchmark is on item assignment. | ||
masak | where the term *eager* doesn't really apply. | ||
moritz | though the example where I .DUMP'ed it was list assignment | 14:19 | |
r: my @a = 1, 2, 3; say @a.DUMP | |||
p6eval | rakudo 1968b8: OUTPUT«Array<-8535248794724126791>(:items(Mu), :nextiter(ListIter<-8535248794732518218>(:reified(▶Mu), :rest(RPA<-8535248794732485459>(Array<-8535248794724132930>(:items(RPA<-8535248794724091994>(▶1, ▶2, ▶3)), :nextiter(▶Mu)))), :list(Array<-8535248794724126791>))))»… | ||
moritz | even if it is lazy, I see reason for only one level of nesting | ||
pmichaud | moritz: I agree with you that something looks wrongish there. | 14:20 | |
moritz must leave now | |||
pmichaud | like, wrongish enough that I'm motivated to open up the code again and see what's going on :) | ||
masak | yay | ||
pmichaud | I'm curious if it's always been this way though (in nom) | 14:21 | |
the above doesn't jibe well with what I remember of the code, so I'm wondering if a change somewhere else has introduced this behavior | |||
r: my @a; @a[0] = 1; @a[1] = 2; @a[2] = 3; say @a.DUMP; # just curious | 14:22 | ||
p6eval | rakudo 1968b8: OUTPUT«Array<5730301629138936667>(:items(RPA<5730301629130058586>(▶1, ▶2, ▶3)), :nextiter(▶Mu))» | ||
pmichaud | yes, that's more like what I would expect. | ||
colomon just glanced at his IRC client to discover pmichaud++ is here! | |||
pmichaud | I'm thinking something has going wonky with list assignment. | ||
s/going/gone/ | 14:23 | ||
anyway, I don't think the double-nesting is the source of the speed delay noted by masak++, since that's an item assignment issue. | |||
r: my $t = now; my @a = 0 .. 1e4; print now - $t; | 14:24 | ||
p6eval | rakudo 1968b8: OUTPUT«0.966963239242268» | ||
pmichaud | r: my $t = now; my %h; %h{ $_ } = $_ for 1 .. 1e4; print now - $t; | 14:25 | |
p6eval | rakudo 1968b8: OUTPUT«1.42148155308195» | ||
pmichaud | it's also not true that "hashes are faster than arrays" :-) | ||
at least, not as written there. :-) | |||
14:26
mucker left
|
|||
masak | the above comparse one list assignment to an array against 1e4 item assignments to a hash. | 14:26 | |
compares* | |||
14:27
shinobicl joined
|
|||
pmichaud | well, for item assignment hashes currently have a few advantages. | 14:27 | |
e.g., we don't have to do checks for "infinite hashes" | 14:28 | ||
there also aren't exceptions tested for or generated for "invalid keys" | |||
r: my %h; %h{-1} = -1; say %h.perl; | 14:29 | ||
p6eval | rakudo 1968b8: OUTPUT«("-1" => -1).hash» | ||
pmichaud | r: my @a; @a[-1] = -1; say @a.perl; | ||
p6eval | rakudo 1968b8: OUTPUT«Cannot use negative index -1 on Array in method <anon> at src/gen/CORE.setting:8083 in <anon> at src/gen/Metamodel.pm:2250 in any find_method_fallback at src/gen/Metamodel.pm:2248 in any find_method at src/gen/Metamodel.pm:822 in block <anon> at /tmp/tRrA… | ||
14:30
shinobicl__ left
|
|||
masak | nod. | 14:30 | |
pmichaud | r: my @a; @a[$_] = $_ for 1 .. 10; print @a.DUMP; | ||
p6eval | rakudo 1968b8: OUTPUT«Array<7462650248283522845>(:items(RPA<7462650248282058266>((null), ▶1, ▶2, ▶3, ▶4, ▶5, ▶6, ▶7, ▶8, ▶9, ▶10)), :nextiter(▶Mu))» | ||
pmichaud | hmmm. clearly the code has changed a fair bit since I wrote it, since we now have :$BIND! arguments. | 14:31 | |
ggoebel | masak: regarding embedding SQL in code... I assume you are familiar with LINQ? That is microsoft's answer to that question en.wikipedia.org/wiki/Language_Integrated_Query | 14:33 | |
pmichaud | I suspect the main difference in the code has to be the use of self.exists($pos) in Array.at_pos versus nqp::existskey(...) in Hash.at_key | 14:34 | |
self.exists($pos) is likely to be far more expensive. | |||
flussence | ggoebel: we were talking about this a few days/weeks ago... someone suggested we can do most of the fancy DBIx-style stuff with the syntax we already have :) | ||
pmichaud | it might be worth rewriting Array.at_pos to avoid the self.exists() | 14:35 | |
(i.e., to use an nqp::builtin directly somehow) | |||
colomon: o/ | 14:36 | ||
colomon | \o | ||
sjn | pmichaud: hotel arrangements for your trip to the hackathon in Oslo have now been done. :) | 14:37 | |
pmichaud | anyway, I have to head off to run some errands; I'll take a look at the Array issue a bit more later. Also I'll look into moritz's double-level array bit; I agree that looks really wonky. | ||
sjn: \o/ | |||
tadzik | pmichaud: hello! | ||
pmichaud | I'm very much looking forward to being there | ||
sjn | pmichaud: hope you're fine with the same hotel as last time (they've refurbished since then, so it's a bit nicer now) | ||
tadzik | double-level arrays, almost like the double bacon bug | ||
14:37
PacoAir joined
|
|||
pmichaud | sjn: it was fine the last time (quite nice, actually) | 14:38 | |
bonsaikitten | github.com/sorear/niecza/issues/110 let's see how many people yell at me for doing it wrong ;) | ||
pmichaud | sjn: so yes, same hotel is very acceptable :) | ||
sjn | awesome \o/ | ||
pmichaud | okay, I must go or I shall be late for my appointments. bbl | 14:39 | |
(tadzik: hello :-) | |||
masak | ggoebel: I am (somewhat) familiar with LINQ, and I did think about LINQ when I wrote the comment about SQL. | ||
14:43
slavik1 joined
|
|||
colomon | Ack. Just wrote a very simple p6 script for $work. It goes completely wrong instantly in niecza, and blows up with a random error after 4 minutes in rakudo. :( | 14:43 | |
masak | :( | 14:44 | |
masak hopes both those behaviors can be turned into nicely golf'd bug reports | |||
colomon | gist.github.com/2114864 | 14:46 | |
On the principle of "Ask other people if you are doing something stupid you don't see". | |||
tadzik | colomon: .= I guess | 14:47 | |
that looks like a Perl5ism | |||
colomon | Script is supposed to go through a text file, which contains multiple large sections each labelled "Brep Start", and finally just print out the last one. | ||
tadzik: ooo, good call! | |||
masak | colomon: $brep .= $_; | ||
colomon: method call? | 14:48 | ||
14:48
ApHeX3211 left
|
|||
masak | I'm surprised that compiles. | 14:48 | |
colomon | nope, p5ism | ||
it compiles on both compilers!!! | |||
geekosaur | oosp | ||
masak | std: my $brep; $brep .= $_; | ||
geekosaur | "oops" even. | ||
p6eval | std 1ad3292: OUTPUT«Potential difficulties: Unsupported use of .= as append operator; in Perl 6 please use ~= at /tmp/XDvFIK591_ line 1:------> my $brep; $brep .=⏏ $_;ok 00:01 110m» | ||
colomon | and (as I said) it ran for 4 minutes on rakudo, going through a text file which looks nothing at all like a series of p6 methods. | 14:49 | |
masak ponders whether "oosp" can be considered a very short autopun | |||
colomon: what a wonderful way to crash Rakudo, though. | |||
colomon | niecza: my $brep; $brep .= $_; | ||
p6eval | niecza v15-4-g1f35f89: OUTPUT«Use of uninitialized value in string context at /home/p6eval/niecza/boot/lib/CORE.setting line 1222 (warn @ 3)  at /home/p6eval/niecza/boot/lib/CORE.setting line 230 (Mu.Str @ 10)  at /home/p6eval/niecza/src/STD.pm6 line 3853 (ANON @ 1)  at /home/p6… | ||
masak | colomon++ | ||
colomon | yup, that's the error I was getting locally on niecza. LTA and then some. | 14:50 | |
niecza: my $brep = ""; $brep .= "1 Regions In Brep" | |||
p6eval | niecza v15-4-g1f35f89: OUTPUT«===SORRY!===Unsupported use of . to concatenate strings or to call a quoted method; in Perl 6 please use ~ to concatenate, or if you meant to call a quoted method, please supply the required parentheses at /tmp/SYkG47nkbO line 1 (EOF):-… | ||
colomon | well, that's a fine error | 14:51 | |
r: my $brep = ""; $brep .= "1 Regions In Brep" | |||
p6eval | rakudo 1968b8: OUTPUT«===SORRY!===Quoted method name requires parenthesized arguments at line 1, near ""» | ||
colomon | as is that. | ||
gfldex | does $_ got a type? | 14:53 | |
colomon | n: my $brep = ""; $brep .= "1.0000000000000000 0.0000000000000000 0.0000000000000000 - Color" | ||
p6eval | niecza v15-4-g1f35f89: OUTPUT«===SORRY!===Unsupported use of . to concatenate strings or to call a quoted method; in Perl 6 please use ~ to concatenate, or if you meant to call a quoted method, please supply the required parentheses at /tmp/t58juqOhgY line 1 (EOF):-… | ||
colomon | n: my $brep = ""; for "1.0000000000000000 0.0000000000000000 0.0000000000000000 - Color\n".lines { $brep .= $_ } | 14:54 | |
p6eval | niecza v15-4-g1f35f89: OUTPUT«Use of uninitialized value in string context at /home/p6eval/niecza/boot/lib/CORE.setting line 1222 (warn @ 3)  at /home/p6eval/niecza/boot/lib/CORE.setting line 230 (Mu.Str @ 10)  at /home/p6eval/niecza/src/STD.pm6 line 3853 (ANON @ 1)  at /home/p6… | ||
colomon | there we are | ||
r: my $brep = ""; for "1.0000000000000000 0.0000000000000000 0.0000000000000000 - Color\n".lines { $brep .= $_ } | |||
p6eval | rakudo 1968b8: OUTPUT«Method 'postcircumfix:<( )>' not found for invocant of class 'Str' in <anon> at src/gen/BOOTSTRAP.pm:812 in any <anon> at src/gen/BOOTSTRAP.pm:808 in method dispatch:<var> at src/gen/CORE.setting:762 in method dispatch:<.=> at src/gen/CORE.setting:787 in … | ||
colomon | and there we are! | ||
r: my $brep = ""; for "1.0\n".lines { $brep .= $_ } | |||
p6eval | rakudo 1968b8: OUTPUT«Method 'postcircumfix:<( )>' not found for invocant of class 'Str' in <anon> at src/gen/BOOTSTRAP.pm:812 in any <anon> at src/gen/BOOTSTRAP.pm:808 in method dispatch:<var> at src/gen/CORE.setting:762 in method dispatch:<.=> at src/gen/CORE.setting:787 in … | ||
masak | o.O | ||
pmichaud | back again for a moment | ||
colomon | n: my $brep = ""; for "1.0\n".lines { $brep .= $_ } | 14:55 | |
p6eval | niecza v15-4-g1f35f89: OUTPUT«Use of uninitialized value in string context at /home/p6eval/niecza/boot/lib/CORE.setting line 1222 (warn @ 3)  at /home/p6eval/niecza/boot/lib/CORE.setting line 230 (Mu.Str @ 10)  at /home/p6eval/niecza/src/STD.pm6 line 3853 (ANON @ 1)  at /home/p6… | ||
masak | r: $_ = "say"; 42 .= $_ | ||
p6eval | rakudo 1968b8: OUTPUT«Method 'postcircumfix:<( )>' not found for invocant of class 'Str' in <anon> at src/gen/BOOTSTRAP.pm:812 in any <anon> at src/gen/BOOTSTRAP.pm:808 in method dispatch:<var> at src/gen/CORE.setting:762 in method dispatch:<.=> at src/gen/CORE.setting:787 in … | ||
colomon | masak: ideas for better golfing? | ||
moritz | r: $_ .= $_ | ||
p6eval | rakudo 1968b8: OUTPUT«Method 'Any' not found for invocant of class 'Any' in <anon> at src/gen/BOOTSTRAP.pm:800 in any <anon> at src/gen/BOOTSTRAP.pm:797 in method dispatch:<var> at src/gen/CORE.setting:762 in method dispatch:<.=> at src/gen/CORE.setting:787 in block <anon> at … | ||
colomon | oh, you're already on it. | ||
masak | n: my $brep = ""; $_ = "1.0"; $brep .= $_ | ||
p6eval | niecza v15-4-g1f35f89: OUTPUT«Use of uninitialized value in string context at /home/p6eval/niecza/boot/lib/CORE.setting line 1222 (warn @ 3)  at /home/p6eval/niecza/boot/lib/CORE.setting line 230 (Mu.Str @ 10)  at /home/p6eval/niecza/src/STD.pm6 line 3853 (ANON @ 1)  at /home/p6… | ||
pmichaud | as far as the "nesting" within moritz++'s list assignment example -- I suspect that may actually be rakudo being smart enough to not collapse the nesting until it's convenient (or necessary) to do so | ||
masak | r: my $brep = ""; $_ = "1.0"; $brep .= $_ | ||
p6eval | rakudo 1968b8: OUTPUT«Method 'postcircumfix:<( )>' not found for invocant of class 'Str' in <anon> at src/gen/BOOTSTRAP.pm:812 in any <anon> at src/gen/BOOTSTRAP.pm:808 in method dispatch:<var> at src/gen/CORE.setting:762 in method dispatch:<.=> at src/gen/CORE.setting:787 in … | ||
pmichaud | r: my @a = 1,2,3; say @a.DUMP; # nesting still exists | 14:56 | |
p6eval | rakudo 1968b8: OUTPUT«Array<9117123632094916941>(:items(Mu), :nextiter(ListIter<9117123632103330891>(:reified(▶Mu), :rest(RPA<9117123632103330897>(Array<9117123632094966091>(:items(RPA<9117123632094921045>(▶1, ▶2, ▶3)), :nextiter(▶Mu)))), :list(Array<9117123632094916941>))))»… | ||
moritz | r: my @a = 1, 2, 3; @a[0] = 5; say @a.DUMP | ||
p6eval | rakudo 1968b8: OUTPUT«Array<210349531758767697>(:items(RPA<210349531759943517>(▶5)), :nextiter(ListIter<210349531772507474>(:reified(▶Mu), :rest(RPA<210349531771335763>(▶2, ▶3)), :list(Array<210349531758767697>))))» | ||
pmichaud | r: my @a = 1,2,3; say @a[0]; say @a.DUMP; | ||
14:56
abercrombie left
|
|||
p6eval | rakudo 1968b8: OUTPUT«1Array<-4576368191250143623>(:items(RPA<-4576368191239098016>(▶1)), :nextiter(ListIter<-4576368190703353748>(:reified(▶Mu), :rest(RPA<-4576368191250124939>(▶2, ▶3)), :list(Array<-4576368191250143623>))))» | 14:56 | |
moritz | we'll still pay the double-nesting penalty for every item that is accessed | ||
pmichaud | no, not really. | 14:57 | |
how so? | |||
colomon | masak: the reason the rakudo failure was so slow was that for wasn't using lines() lazily, I'll bet. | ||
masak | moritz: you're still confusing the item assignment example with your list assignment example. | ||
moritz: I did too, for a while, I think. | |||
moritz | to get at @a[1], the list still has to descend into two ListIters | ||
masak | colomon: sounds reasonable. | ||
pmichaud | only the first time it's accessed. | 14:58 | |
moritz | yes, but still for every item once | ||
masak: no, I'm mixing on purpose | |||
14:58
birdwindupbird left
|
|||
pmichaud | that's true whether you do it as part of the list assignment or postpone it until later. | 14:58 | |
14:58
abercrombie joined
|
|||
pmichaud | rakudo is simply saying "don't bother reifying all of the elements until they're really needed" | 14:58 | |
where "reify" in this case means "move from the nextIter list into the items list" | 14:59 | ||
back to masak++'s case, what needs to happen is that we need to hotpath Array.at_pos for the case where the Array doesn't have any lazy (nextiter) part. | 15:00 | ||
instead of relying on self.exists() to do it, which gets expensive. | |||
(because of the method call overhead) | |||
masak | that sounds nice. | ||
pmichaud | I suspect that's the primary speed difference between the hash and array example. if so, that would get them closer in line, although Array still has a bit more work to do because it has the overhead of checking for a lazy part. | 15:01 | |
(which is just a definedness check) | |||
Hash has the advantage of being able to do all of its element existence checking in a single Parrot op. Array has to do several other boundary and laziness checks in addition to the exists Parrot op | 15:02 | ||
15:02
fgomez joined
15:03
fgomez left,
fgomez joined
|
|||
pmichaud | anyway, I still agree that the double-nesting looks a bit suspicious, but I suspect it's simply Rakudo being (possibly wisely) lazier than we would expect at first glance. | 15:03 | |
15:03
tokuhiro_ joined
|
|||
pmichaud | i.e., it's postponing some of the work of moving things into the items attribute, instead of incurring the cost at the point of the assignment | 15:04 | |
okay, I have to head off to next appointments now -- bbl. | 15:05 | ||
colomon | masak: you want to submit bug reports for your golfs, or shall I? | 15:07 | |
shinobicl | In this line of code... multi infix:<->(Date:D $a, Date:D $b) { $a.daycount - $b.daycount; } What does the ':' after 'Date' means? | 15:08 | |
masak | colomon: please go ahead. | ||
15:08
att_ left
|
|||
tadzik | shinobicl: Date:D means "a Date object, defined" I think | 15:08 | |
masak | shinobicl: the ':D' means "must be an instance, can't be a type object" | ||
tadzik | as in "instantiated, not a type object" | 15:09 | |
15:10
leprevost left
15:20
wolfman2000 left
15:22
att_ joined
|
|||
fgomez | hey guys, newbie doubt here | 15:22 | |
if i define a sub as sub mysub (*%params) {...} | |||
what is the reason a call like this works 'mysub(a=>1, b=>2, c=>3)' but a call like this doesn't 'my %h = a=>1, b=>2, c=>3; mysub(%h);' | 15:23 | ||
tadzik | in the second one you're passing a single hash object rather than a list of pairs | 15:24 | |
fgomez | I have to flatten the %h with '|' for it to work | ||
tadzik | yes | ||
fgomez | ah ok | ||
but why wouldn't it work regardless then? | |||
if it's being passed as an object, why wouldn't params assume key=Object, value=undef | 15:25 | ||
TimToady | named args share syntax with pairs, but they're only named args as a special syntax when used at the top level of a call | ||
the call object itself is called a Capture, and that contains the positional and named parameters | 15:26 | ||
fgomez | I was trying to verify what was going on in the generated capture | 15:27 | |
TimToady | the | is what moves something over from the positionals to the nameds | ||
fgomez | but turns out I can't do 'my $capture = \(|%hash) | 15:28 | |
so when I use a slurpy hash in my signature, it's expecting named lists of pairs specifically? | |||
list* | |||
masak | fgomez: key=Object, value=undef is p5-think. positional arguments and named arguments mostly move in different spaces. | ||
%h is a positional argument, and as such won't map to a slurpy hash parameter. | 15:29 | ||
geekosaur | maybe the p5think here is that %h is passed as a list in p5, but an object in p6, and the latter cannot be matched against a list of pairs | 15:30 | |
fgomez | mmm I see | 15:31 | |
that's what I understood wrong I think, that *%params implies a a bunch of pairs | |||
oh very nice, so if I do mysub(%h=>'something') it works | 15:32 | ||
masak | I think so. | 15:34 | |
though %h is likely to be Str-mangled on the receiving end. | |||
fgomez | wait actually no it doesnt | ||
hmm | |||
masak | r: my %h; my $pair = %h => 'something'; say $pair.perl | 15:35 | |
p6eval | rakudo 1968b8: OUTPUT«{} => "something"» | ||
fgomez | even if I do mysub(%h.Str=>1) it'll complain | 15:36 | |
r: my %h = a=>1; my %g = b=>2; sub mysub(*%params) { for %params.kv -> $k, $v { say "$k:$v"; } } mysub(%h.Str=>%b=>Str); | 15:37 | ||
p6eval | rakudo 1968b8: OUTPUT«===SORRY!===Confusedat /tmp/yUy0p5YHFe:1» | ||
fgomez | oops | ||
r: my %h = a=>1; my %g = b=>2; sub mysub(*%params) { for %params.kv -> $k, $v { say "$k:$v"; } } mysub(%h.Str=>%b.Str); | 15:38 | ||
p6eval | rakudo 1968b8: OUTPUT«===SORRY!===Confusedat /tmp/Zyso6Y1G99:1» | ||
masak | fgomez: missing ';' after '}' | 15:47 | |
well, after the '} }', let's say. | 15:48 | ||
15:49
Patterner left,
kaare_ joined
|
|||
fgomez | r: my %h = a=>1; my %g = b=>2; sub mysub(*%params) { for %params.kv -> $k, $v { say "$k:$v"; } }; mysub(%h.Str=>%b.Str); | 15:50 | |
p6eval | rakudo 1968b8: OUTPUT«===SORRY!===Variable %b is not declaredat /tmp/2iV53fodDK:1» | ||
fgomez | hmm, but that's a subroutine definition. does there need to be a ';' there? | ||
masak | Perl 6 syntax mandates that you either have a \n after a closing curly brace, or a ';'. | 15:51 | |
fgomez | I'm still playing around with this in the interactive interpreter, but i still don't understand it exactly | ||
15:51
Psyche^ joined,
Psyche^ is now known as Patterner
|
|||
fgomez | oh I see | 15:51 | |
awwaiid | masak, I wonder if at some point the principle of least surprise will win that one | ||
masak | awwaiid: how do you mean? | 15:52 | |
colomon | masak: bug not filed because I cannot convince myself it actually is a bug... I vacillate back and forth. | ||
awwaiid | like if for the next 10 years if I have to tell each person who learns how to do oneliners about that rule, it might get old | ||
masak | awwaiid: nowadays, I'm a bit suprised that one-liners in Perl 5 work without the ';' after the '}' :) | ||
awwaiid: seriously. it's highly illogical. | 15:53 | ||
awwaiid | the rule, or anyone who expects it to work? :) | ||
masak | the rule. | ||
I admit that it makes one-liners look prettier, but at the expense of consistency and sanity. | 15:54 | ||
awwaiid | yeah. There is a difference between \s+ sensitivity and /\n|;/ sensitivity | ||
masak | Perl 6 clearly takes the clean, high road here. | 15:55 | |
awwaiid | oh I thought you were agreeing with me :) | ||
masak | so no, I don't feel tired explaining it to people, even after 5 years :) | ||
awwaiid | ok | ||
clearly I've been poking at perl6 for a long time and only noticed it recently, so it isn't a big deal | 15:56 | ||
doy | well, it's only illogical if you've already gotten comfortable with whitespace-sensitivity in general | ||
15:57
alester joined
|
|||
masak | I recently realized that I can't break long expressions of after a closing (usually hash) curly. that bothered me, but not enough to complain about it. I still think it's a net win to have a simple, consistent rule. | 15:57 | |
awwaiid | doy: I only _barely_ tollerate the idea of \s+ having meaning. Giving /\n|;/ meaning feels icky. | ||
masak | off* | ||
doy | awwaiid: agreed | ||
(: | |||
masak | you're both arguing from a p5 viewpoint, where there simply is no consistency. | 15:58 | |
awwaiid | well why not take it the other way and allow \n to replace ; in other cases? | 15:59 | |
I'll tell you why - because it's sick and wrong :) | |||
fgomez | lol | ||
masak | in the same vein, I haven't heard any arguments in defense of sigil variance better than "it makes sense for sigils to vary, and I'm used to it". | ||
awwaiid | irrelevant | ||
doy | masak: i don't understand the consistency argument? | 16:00 | |
about whitespace specifically | |||
masak | doy: Perl 5's rule seems to be "you can leave off semicolons after block-ending closing curlies, because these sort of terminate a statement anyway. the parser will figure it out for you" | 16:01 | |
doy: Perl 6's rule is 'every statement, including sub declarations, needs a semicolon. however, "};\n" is so common that we will infer it from "}\n" for you' | 16:02 | ||
16:02
MayDaniel joined
|
|||
awwaiid | oh, I thought the rule was "you can leave off semicolons before or after blocks because there is no ambiguity on what you mean" | 16:02 | |
masak | in Perl 5? yeah, maybe. | 16:03 | |
fgomez | r: sub mysub(*%params) { say "$_:{%params{$_}}" for %params.keys; }; mysub(a=>1,b=>2); | ||
p6eval | rakudo 1968b8: OUTPUT«a:1b:2» | ||
fgomez | r: sub mysub(*%params) { say "$_:{%params{$_}}" for %params.keys; }; mysub(3=>1,4=>2); | ||
p6eval | rakudo 1968b8: OUTPUT«Too many positional parameters passed; got 2 but expected 0 in sub mysub at /tmp/E6ZMFo7FW6:1 in block <anon> at /tmp/E6ZMFo7FW6:1» | ||
fgomez | what is the reason that wouldn't work? | ||
the second call that is | |||
masak | awwaiid: the point is, in Perl 6, there *is* ambiguity as to what you mean, because you can use blocks and closures more freely. | ||
awwaiid | so the consistency is that sub declarations are statements, just like other statements. makes sense. | ||
ah. because it looks like a block to me, but it could actually be a param? | 16:04 | ||
16:04
sdo left
|
|||
masak | fgomez: I don't know, actually. 3 and 4 makes the pairs be interpreted as pairs, not as named arguments. | 16:05 | |
fgomez: maybe because those are not valid parameter variable names. | |||
awwaiid: yes, or anything really. | |||
awwaiid | and why is \s+ not good enough? We should at least write this down to point stupid pedantics like me at | 16:06 | |
masak | awwaiid: From S04: "Because subroutine declarations are expressions, not statements, this is now invalid: sub f { 3 } sub g { 3 }" | ||
it's two terms in a row, basically. | 16:07 | ||
std: sub f { 3 } sub g { 3 } | |||
p6eval | std 1ad3292: OUTPUT«===SORRY!===Strange text after block (missing comma, semicolon, comment marker?) at /tmp/SXasBnbCoX line 1:------> sub f { 3 }⏏ sub g { 3 } expecting any of: infix or meta-infix infixed function statement modifier loopPa… | ||
awwaiid | I find it disturbing that I almost prefer a forced ';' instead of /;|\n/ | ||
fgomez | masak: I see, yeah that makes an awful lot of sense actually hehe | ||
masak | awwaiid: then I have an easy solution for you. | 16:08 | |
awwaiid | hehe | ||
masak | always use '};' | ||
awwaiid | yeah yeah | ||
masak | if it helps, *I* can force you. | 16:09 | |
awwaiid | that's awefully kind of you to offer :) | ||
masak | anytime :) | ||
16:10
plobsing left
|
|||
awwaiid | so what can we legitamately put in the blank: sub f { 3 } ________ | 16:10 | |
cognominal | on the shell, how can I ask if something (say Hash) is a class, and somehting (say Associative) is a role? | ||
awwaiid | I guess an operator | ||
16:12
plobsing joined
|
|||
cognominal | r: Associative.^roles | 16:13 | |
p6eval | rakudo 1968b8: ( no output ) | ||
cognominal | r: say Associative.^roles | ||
p6eval | rakudo 1968b8: OUTPUT«Associative()» | ||
cognominal | I guess this a good enough answer | ||
masak | r: say sub f { 3 } + 42 | ||
p6eval | rakudo 1968b8: OUTPUT«Cannot call 'Numeric'; none of these signatures match::(Mu:U \$v, Mu %_!) in method Numeric at src/gen/CORE.setting:644 in sub infix:<+> at src/gen/CORE.setting:2284 in block <anon> at /tmp/pJnI10rBAj:1» | ||
masak | r: say sub f { 3 } // 42 | 16:14 | |
p6eval | rakudo 1968b8: OUTPUT«sub f() { ... }» | ||
awwaiid | yeah | ||
dalek | kudo/nom: 69791b0 | masak++ | src/Perl6/Metamodel/BOOTSTRAP.pm: [BOOTSTRAP.pm] fixed copy-paste-o |
16:15 | |
16:15
wtw left
16:16
snearch left
|
|||
cognominal | r: say Associative.^methods | 16:16 | |
p6eval | rakudo 1968b8: OUTPUT«of» | ||
cognominal | strange that I can call .^roles that does not appear on .^methods | ||
is .^roles some other kind of entity? | 16:17 | ||
masak | you're confusing levels, I think. | 16:18 | |
awwaiid | masak, yeah. pretty significant cost and scary road to go down to start making exceptions to treating the blocks I care about different. that don't make it feel less wrong, but shuts me up for now :) | 16:19 | |
fgomez | sub mysub($a, $b) { say "$a,$b"; }; mysub(a=>'a', b=>'b'); | ||
masak | .^methods lists the methods on the class. .^roles is a method on the metaclass object. | ||
fgomez | r: sub mysub($a, $b) { say "$a,$b"; }; mysub(a=>'a', b=>'b'); | ||
p6eval | rakudo 1968b8: OUTPUT«Not enough positional parameters passed; got 0 but expected 2 in sub mysub at /tmp/PCW0oR55xf:1 in block <anon> at /tmp/PCW0oR55xf:1» | ||
masak | awwaiid: happy to have had this discussion. | ||
fgomez | is this an outdated construct? I grabbed it from the using Perl6 book | ||
masak | awwaiid: it was eye-opening for me as well. | ||
fgomez: yes. | 16:20 | ||
fgomez | but (clearly) it doesn't work right now, but hte book is from july last year | ||
ah ok | |||
so in order to pass an argument by name, the parameter has to be named as well? | |||
masak | fgomez: according to the spec, proto subs may declare positional paramteres which can then be bound to named arguments. | 16:23 | |
fgomez: but it's definitely not implemented in Rakudo, and I doubt it's implemented in Niecza. | 16:24 | ||
16:24
tokuhiro_ left
|
|||
sjn has updated the Perl 6 Hackathon info page: gist.github.com/1711730 | 16:24 | ||
there's a registration link there now \o/ | |||
GO FORTH AND REGISTER! \o/ | 16:25 | ||
masak | \o/ | 16:27 | |
cognominal | r: Associative.HOW.^methods | 16:28 | |
p6eval | rakudo 1968b8: OUTPUT«Method 'dispatch:<.^>' not found for invocant of class 'Perl6::Metamodel::ParametricRoleGroupHOW' in block <anon> at /tmp/P8KkIYum1t:1» | ||
16:29
pmurias joined
|
|||
pmurias | fglock: hi | 16:29 | |
masak | cognominal: the metaclass object has a metaclass object; it just doesn't have the sugar to invoke methods on it that way. :) | 16:30 | |
cognominal | r: Associative.HOW.HOW.methods | 16:31 | |
pmurias | fglock: we now pass 3 perl5 tests ;) | ||
p6eval | rakudo 1968b8: OUTPUT«too few positional arguments: 1 passed, 2 (or more) expected in methods at src/stage2/gen/nqp-mo.pm:984 in block <anon> at /tmp/wHyuJkRYWg:1» | ||
masak | cognominal: and now you see what the sugar does for you (it supplies the object you're interested in) | 16:32 | |
r: Associative.HOW.HOW.methods(Associative.HOW) | |||
p6eval | rakudo 69791b: OUTPUT«too few named arguments: no argument for required parameter 'local' in methods at src/stage2/gen/nqp-mo.pm:984 in block <anon> at /tmp/wsn1zMf7Sr:1» | ||
16:32
kaleem_ joined
|
|||
masak | r: Associative.HOW.HOW.methods(Associative.HOW, :local(1)) | 16:32 | |
p6eval | rakudo 69791b: ( no output ) | ||
masak | r: say Associative.HOW.HOW.methods(Associative.HOW, :local(1)) | ||
p6eval | rakudo 69791b: OUTPUT«Method 'gist' not found for invocant of class 'NQPRoutine' in method gist at src/gen/CORE.setting:4189 in sub say at src/gen/CORE.setting:6216 in block <anon> at /tmp/AZqTSPqVNo:1» | ||
masak | anyway, that works :) | ||
16:32
fglock left
|
|||
masak | r: say Associative.HOW.HOW.methods(Associative.HOW, :local(1)).elems | 16:33 | |
p6eval | rakudo 69791b: OUTPUT«22» | ||
16:34
kaleem left
16:40
nwc10 joined
16:42
pmurias left
16:49
havenn joined
16:50
M_o_C joined,
fgomez left
|
|||
PerlJam | .oO( How now brown cow? ) |
16:50 | |
pmichaud | PerlJam: good to see you again also :) | 16:51 | |
nwc10 is impressed with how masak stumbled across an incantation that summons pmichaud | |||
pmichaud | yes, masak++. It's also a matter of having really good timing on that one. Other tickets have gotten my attention but I've been too busy with other stuff to "respond" :) | 16:52 | |
masak | nwc10: I was thinking the same. | ||
nwc10: "I should submit more List-internals tickets!" :) | 16:53 | ||
pmichaud | long ago in the early days of my contributions, it was thought that simply mentioning any form of PGE bug was sufficient to summon me to #parrot :) | ||
sjn | pmichaud: gist.github.com/1711730 :) | ||
jnthn: same to you | |||
moritz: and you :) | 16:54 | ||
tadzik: and you :D | |||
pmichaud | sjn: excellent! | ||
sjn | fsergot isn't there though | ||
here* | |||
how does one leave messages to people? | 16:55 | ||
tadzik | sjn: I did it already :) | ||
phenny: tell sjn this way | |||
phenny | tadzik: I'll pass that on when sjn is around. | ||
sjn | yay! | ||
phenny | sjn: 16:55Z <tadzik> tell sjn this way | ||
sjn | phenny: tell fsergot gist.github.com/1711730 for your register-joyment :) | 16:56 | |
phenny | sjn: I'll pass that on when fsergot is around. | ||
sjn | tadzik: have you recieved a host from us yet? :) | 16:57 | |
masak decommutes | |||
sjn | tadzik: or have you organized something else | ||
tadzik | sjn: oh, huh, weren't you to be my host? | 16:58 | |
sjn | I'm going the find you one :) | 17:00 | |
tadzik | okay :) | ||
sjn | although if you prefer, you can stay at my place | ||
no problems with that | |||
tadzik | what suits you best, although I seem to recall you offering me a place :) | ||
17:00
fgomez joined
|
|||
sjn | well, I almost did :) | 17:00 | |
we have commitments for 6 beds from 4 hosts | 17:01 | ||
fgomez | lol, vim-perl perl6 syntax plugin for vim brings it down to its knees | ||
sjn | but we haven't really matched people with hosts yet :) | ||
tadzik | okay :) | 17:02 | |
17:02
wolfman2000 joined
|
|||
sjn | masak: so you're planning on staying at a hotel? | 17:04 | |
masak: we can probably find you a sofa if you're interested saving money | |||
PerlJam | Is someone going to blog on what happened with GSoC + TPF ? | 17:05 | |
arnsholt_ | fgomez: Yeah, it's a known issue, unfortunately | ||
sjn | masak: buf if you want to stay at a hotel anyway, pmichaud will be staying at anker-hotel.no/ :) | ||
cognominal | thx, masak. was way from keyboard and will be. | 17:13 | |
17:19
fglock joined
|
|||
pmichaud | gist.github.com/2119935 # before and after timings of patch to hotpath Array.at_pos | 17:19 | |
spectesting now. | 17:20 | ||
all tests pass | 17:26 | ||
shinobicl | some time ago, i used to have some overloaded operators with "our multi...." in a .pm file. Now, i understand that this is not possible. Well, i declared those operators in a .pm file as "multi infix..." , and i have a .t that uses that .pm file. Now I can't invoke those overloaded operators. | 17:27 | |
tadzik | pmichaud: cool! | 17:28 | |
17:28
colomon left
|
|||
moritz | shinobicl: you need to 'is export' them | 17:28 | |
shinobicl | oh, i see. thanks moritz! | ||
pmichaud | updating the patch to handle the at_pos(int) case | 17:29 | |
PerlJam | moritz: it's enough to "is export" the proto isn't it? | ||
17:30
nwc10 left
|
|||
shinobicl | i was using Temporal.pm as an example... i can't find the 'export' word in that file. | 17:30 | |
moritz | PerlJam: yes, but if you want to add multis to an existing operator, a proto is the wrong thing to export | ||
shinobicl: Temporal.pm isn't "use"ed in the normal way; it's part of the setting | 17:31 | ||
shinobicl: so things are different | |||
17:31
colomon joined
|
|||
pmichaud | r: say (1.1902-0.8430)/1.1902 | 17:34 | |
p6eval | rakudo 69791b: OUTPUT«0.291715678037305» | ||
pmichaud | 30% speedup isn't bad :) | 17:35 | |
oops | |||
r: say (1.1902-0.8929)/1.1902 | |||
p6eval | rakudo 69791b: OUTPUT«0.249789951268694» | ||
pmichaud | 25% speedup isn't bad :) | ||
PerlJam | www.slate.com/articles/technology/t...ingle.html | ||
Scroll down to where she asks "But what language to learn?" and look at the 3 reasons cited for choosing ruby | 17:36 | ||
particularly that third one. | |||
moritz | pmichaud: I also suspect that iteration could be optimized for reified lists somehow (unless it already is) | 17:37 | |
as well as iteration over integer ranges | 17:38 | ||
17:38
tyatpi joined
|
|||
pmichaud | moritz: it has some optimizations already but there are more to be explored | 17:38 | |
moritz | though the real beef is in sink context, where we don't have to keep the return values around | ||
pmichaud | it's important to note that reified/not reified isn't the only dimension, there's also flattened/unflattened | ||
daxim | PerlJam, conclusion? | 17:39 | |
moritz | right, that's one that I don't really appreciate yet | ||
pmichaud | something can be reified but unflattened, which means that in e.g., list assignment you still have to walk through the list to do flattening. | ||
fgomez | Oh gee, just downloaded the updated draft for Using Perl 6, and the wording on the Signatures part is much clearer than the old version I was reading | ||
pmichaud | List.reify uses some opcode optimization in place to avoid walking through elements when it can detect (how much of) a simple splice is sufficient | ||
what lists really want is some sort of flag that says "I'm fully reified and all of my elements are flattened." The Seq type held that honor at one point, but its place in the type parentage was always off. | 17:41 | ||
17:44
mj41_nb left
17:49
kaleem_ left
17:50
havenn left
|
|||
fgomez | are the synopses the best reference to learn perl6 right now? | 17:52 | |
17:54
colomon left
17:55
colomon joined
|
|||
PerlJam | fgomez: there's also "Using Perl 6" | 17:56 | |
17:56
havenn joined
|
|||
moritz | which fgomez already mentioned :-) | 17:56 | |
there are also various blogs about perl 6, for example the Perl 6 advent calendar | |||
PerlJam | ah, so he did. | ||
fgomez: I'd say there is currently no "best reference" for learning Perl 6. :) | 17:57 | ||
or, the best reference is to use everything you can find. | |||
fgomez | hmm | ||
moritz | the best is to read all the stuff out there, and hang around here and ask questions whenever there's something unclear | ||
PerlJam | (but treat the synopses as definitive) | ||
moritz | and play with the compilers | ||
fgomez | .. | 18:01 | |
ops | |||
moritz | rakudo: say 'play with me!' | ||
p6eval | rakudo 69791b: OUTPUT«play with me!» | ||
18:02
NamelessTee left
|
|||
dalek | kudo/nom: c10792f | pmichaud++ | src/core/Array.pm: Hotpath the check for existing elements in Array.at_pos(), addressing (partially) the Array-versus-Hash initialization speed anomaly described in RT #111848. Each Array element access via .at_pos($pos) resulted in an expensive call to self.exists($pos) for each access, whereas Hash element accesses via .at_key($key) were able to use nqp::existskey() directly. This patch uses nqp::existspos() to hotpath the detection of existing elements and avoids calls to self.exists($pos) when the Array is already fully reified. For the benchmark given in RT #111848, this results in a ~25% speedup for array element accesses, and brings it to within 5% of Hash element access times. (At present Array element accesses still have more overhead at the PIR level than Hash element accesses due to laziness considerations and boundary checks.) |
18:06 | |
18:07
dakkar left
18:11
plobsing left
18:18
havenn left
18:26
tyatpi left
18:34
sisar left
|
|||
fgomez | Oh I didn't know you could specify a return type in sub definitions.. | 18:37 | |
TimToady | yup | 18:38 | |
in any of three different places, in fact | 18:39 | ||
18:40
havenn joined
|
|||
fgomez | r: sub bar ($x, $y --> Int()) { return 3.5 }; bar(); | 18:40 | |
p6eval | rakudo c10792: OUTPUT«===SORRY!===Missing blockat /tmp/92lqv2sp41:1» | ||
18:40
jaldhar left
|
|||
fgomez | :< | 18:41 | |
18:41
NamelessTee joined
|
|||
pmichaud | r: sub bar ($x, $y --> Int) { return 3.5 }; bar() | 18:41 | |
p6eval | rakudo c10792: OUTPUT«===SORRY!===CHECK FAILED:Calling 'bar' will never work with no arguments (line 1) Expected: :(Any $x, Any $y)» | ||
pmichaud | r: sub bar ($x, $y --> Int) { return 3.5 }; bar(3,4) | 18:42 | |
p6eval | rakudo c10792: ( no output ) | ||
pmichaud | r: sub bar ($x, $y --> Int) { return 3.5 }; say bar(3,4) | ||
p6eval | rakudo c10792: OUTPUT«3.5» | ||
pmichaud | nyi, I guess. | ||
afk | 18:44 | ||
jnthn | afternoon, #perl6 | 18:48 | |
ooh, pmichaud! \o/ | |||
Pro tip: in Argentina, the price for wine in the menu that would seem to get you a glass of it in Sweden does actually get you a whole bottle here in Argentina. Lunch was very liquid. :) | 18:49 | ||
colomon | o/ | ||
jnthn | Given arrays are lazy in Perl 6 and hashes need not do that, somehow I don't actually feel that surprised that arrays aren't crazy faster than hashes. | 18:51 | |
18:51
ksi joined
|
|||
jnthn | Natively typed arrays, otoh, apparently won't have to do any laziness. | 18:52 | |
So should be decidedly faster. | |||
pmichaud | do natively typed arrays have to deal with undefined elements? | 18:53 | |
or non-existent elements? | |||
jnthn | pmichaud: There's no "undefined" as far as natives go since everything is unboxed | ||
pmichaud | (jnthn: o/ !) | ||
jnthn | Non-existent - yeah, if you index past the end. And then it depends if it's an explicitly sized array or not. :) | 18:54 | |
pmichaud | jnthn: right. Much of the overhead for Array is dealing with vivification and laziness issues | ||
jnthn | *nod* | 18:55 | |
There's still a few oddnesses with arrays/lists, fwiw. | |||
I put in a patch that helped with list assignment at some point a while back. | |||
pmichaud | anyway, my patch got Array to within 5% of Hash, so I suspect that's about as good as to be expected until we stop optimizing for constant lists or lists that we know certain characteristics of (e.g., constant lists) | ||
jnthn | "until we stop" - start? :) | ||
pmichaud | *start, yes. | 18:56 | |
jnthn | :) | ||
TimToady | well, you can't stop until you've started either... | ||
jnthn | Anyway, the patch I did was likely imperfect. | ||
pmichaud | I'm likely to look a little more at List issues as I start finding tuits :) | ||
especially since there are some good list-y tickets :) | |||
jnthn | Nice. They're still the bit of Rakudo that I find hardest to hack on. | ||
pmichaud | I still want to try to refactor List.munch to improve iteration speed, too. | 18:57 | |
jnthn | I'm relatively comfortable on the regex engine by now, but the lists are still a place I don't feel I've wrapped my head around the model. | ||
TimToady | perl6: constant @foo = 1, @foo; say @foo[5] | ||
jnthn | Well, parts of it I have...but when I go to hack on it I always feel I'm missing something. | 18:58 | |
p6eval | rakudo c10792: OUTPUT«===SORRY!===Variable @foo is not declaredat /tmp/5ZXhMWKSIe:1» | ||
..pugs: OUTPUT«pugs: *** Undeclared variable: ("@foo",MkPad (padToList []),[PCompiling {pc_pad = MkMPad {mp_id = 140653128351729, mp_pad = <ref:0x7fec5b5ccb21>}}]) at /tmp/BhLhXlKgdw line 1, column 20-24» | |||
..niecza v15-4-g1f35f89: OUTPUT«Any()» | |||
TimToady | be nice when that works too | ||
jnthn | TimToady: In Rakudo, that *may* just be an error in symbol handling. | ||
TimToady | is probably missing some "I'm not defined yet" backpressure somewhere or other | 18:59 | |
jnthn | TimToady: Oh, I think it's deeper than that. | ||
TimToady: How is it meant to work? | 19:00 | ||
TimToady: Constant delcarations are kind binding as far as I understand them. And there's nothing to say that @foo should be lazily read. | |||
s/ind// | |||
s/ind/kind/ # clearly, the wine worked... | |||
pmichaud is not crying for jnthn++ in Argentina. | 19:01 | ||
jnthn | :) | ||
TimToady | if .ar wines are like .uy wines, then only about 10%, but that just makes it easier to have too much :) | ||
jnthn | pmichaud: Happy you're going to make it over to Oslo :) | ||
pmichaud | jnthn: me too! | ||
jnthn | TimToady: I think I'm still suffering from expecting Swedish prices to apply to alcohol here. :) | 19:02 | |
pmichaud | afk | ||
TimToady | @foo is in a list, and lists are supposed to be lazy unless forced not to be | ||
and the = is not really an assignment, which would be eager | |||
jnthn | TimToady: OK, so...what is it? :) | ||
TimToady | it's an initializer | ||
jnthn | To elaborate, my problem with the construct is this (more) | ||
"1, @foo" to me is making a Parcel from 1 and a lookup up @foo | 19:03 | ||
19:03
havenn left
|
|||
jnthn | In that constant declaration, @foo is not yet bound to anything. | 19:03 | |
s/up/of/ | |||
TimToady | which is why it's an initializer, not just a binding | ||
19:03
fgomez left
|
|||
jnthn | TimToady: I'm happy enough that they're different, I just don't grok what the "it's an initializer" bit actually boils down to here. | 19:04 | |
19:04
sporous left,
fgomez joined,
sporous joined
19:05
cogno joined
|
|||
jnthn | TimToady: If the answer is "@foo has an Array installed in the symbol, *then* we evaluate the RHS and assign it" then I can go with that. | 19:06 | |
(In that case, it's just like a "my" declaration) | |||
TimToady | no | ||
that's not what is wanted here, since my's initializer is like assignment in being eager | 19:07 | ||
this needs to be a recursive definition that returns 1,1,1,1,1...* | |||
useless in this case, but there are more useful recursive definitions | 19:08 | ||
jnthn | I understand the desired result. I'm missing how we get to it. | ||
TimToady | reify can never reify more than one value at each level with that definition, and has to recurse through the laziness to get another 1 | ||
19:09
tyatpi joined
|
|||
TimToady | well, maybe it can reify twice as many each time | 19:09 | |
so each recursion level is like 1,@foo 1,1,@foo 1,1,1,1,@foo 1,1,1,1,1,1,1,1,@foo | 19:10 | ||
but a more interesting example (required to work by the Python test suite!) is hamming numbers | 19:11 | ||
constant @hamming = 1, dedup (@hamming X* 2) M (@hamming X* 3) M (@hamming X* 5); | |||
where M is a merge infix | 19:12 | ||
well, different syntax in Python, of course | |||
jnthn | If we have "1, @foo" then we don't want to change the semantics of parcels, which means @foo has to be *something* at the time we evaluate the RHS of the constant declaration. I'm just missing 1) what @foo is at that point, and 2) what we do with @foo once we've BEGIN-time evaluation of the RHS. | ||
TimToady | it's the promise to return whatever is in @foo | 19:13 | |
interpolating @foo into a list should be lazy | |||
so it represents an iterator of some sort | |||
jnthn | I guess what I'm really asking is, does what you want desugar to something we already have, or is it something different? | ||
19:13
libertyprime joined
|
|||
jnthn | Because I'm looking at this expecting it to desugar into something we already have. Which may be wrong... | 19:14 | |
TimToady is not sure if it desugars, having failed so far to get any hamming implementation to work | |||
19:15
cogno_ joined
|
|||
TimToady | but that may be the lack of ability to merge lists lazily, which is why I simplified to 1,@foo | 19:16 | |
something in there seems to be snapshotting the current reification of @foo, not the abstraction of a lazy array | 19:17 | ||
or maybe it's copying over the current plan and not allowing that to be extended somehow with lazy plans that we don't know yet | 19:19 | ||
19:20
M_o_C left
|
|||
masak home | 19:26 | ||
19:26
cogno left
|
|||
TimToady | here's some discussion of hamming in Python: paddy3118.blogspot.com/2009/11/hamm...-just.html | 19:27 | |
defer_output is their way of talking about lazy iterators, I think | 19:28 | ||
19:28
wolfman2000 left,
cogno_ left
|
|||
TimToady | another: mail.python.org/pipermail/python-li...16102.html | 19:29 | |
pmichaud | (just here for a second) ... also, are we clearly making the distinction that constant @foo = 1, @foo; is lazy while my @foo = 1, @foo; is eager? | 19:31 | |
TimToady | yes | ||
pmichaud | okay | ||
TimToady | each declarator can treat = however it likes | ||
that's one of the reasons we changed the parser to slurp the = with the declarator | |||
pmichaud | wfm | 19:32 | |
afk again, kid school pickup | |||
TimToady | it can also decide what :=, ::=, or .= mean | ||
masak | sjn: ah. I didn't want to impose unnecessarily. but if you have spare sofas in circulation, I'd be happy to fill one. :) | ||
19:32
aindilis left
|
|||
masak | sjn: 'd probably be more of an adventure than hotel anyway. | 19:33 | |
19:33
aindilis joined
|
|||
masak | fwiw, jnthn and I are les slow, and haven't made definite trav plans yet. | 19:33 | |
TimToady | lunch & | 19:34 | |
jnthn | True :) | ||
masak | pmichaud++ # 30% speedup | ||
jnthn was guessing hotel, or short-term appartment, or something :) | 19:35 | ||
19:37
cogno joined
19:38
birdwindupbird joined
|
|||
masak | PerlJam: (re Ruby and hugging) I knew it! Perl 6 is the new Ruby! :P | 19:40 | |
PerlJam | masak: yep :-) | 19:41 | |
19:41
cogno left
19:55
cogno joined
19:57
daxim left
20:03
cogno left,
havenn joined
|
|||
shinobicl | nom: class A { has Int @.val is rw = <100>; method perl{ return "A.new($.val)"; }; method cloneadd3(){ my $aclone = self.clone; $aclone.val.push(3); return $aclone; } }; my A $a = A.new(); say $a.perl; my $b = $a.cloneadd3; say $a.perl; say $b.perl; | 20:12 | |
p6eval | rakudo c10792: OUTPUT«A.new(100)A.new(100 3)A.new(100 3)» | ||
shinobicl | i think the second "say" is wrong.... why $a has another element added being that i add the element to the clone? | ||
tadzik | possibly it doesn't deepcopy | 20:13 | |
moritz | there's no possible one-size-fits-them-all solution for clone | ||
shinobicl | nom: class A { has Int $.val is rw = 100; method perl{ return "A.new($.val)"; }; method cloneplus3(){ my $aclone = self.clone; $aclone.val += 3; return $aclone; } }; my A $a = A.new(); say $a.perl; my $b = $a.cloneplus3; say $a.perl; $a.cloneplus3(); say $a.perl; say $b.perl; | 20:14 | |
p6eval | rakudo c10792: OUTPUT«A.new(100)A.new(100)A.new(100)A.new(103)» | ||
shinobicl | for scalars it seems to work | ||
moritz | well, only for value types | 20:15 | |
masak | more specifically, no language provides a general deepcopy method, and no language ever will. | 20:17 | |
the world is too gnarly for that. it contains spoilsport types like database handles and other perishable-resource things. | 20:18 | ||
shinobicl | but even then, isn't much safer to make clone send a warning when trying to clone complex structures? or maybe i'm just using the wrong function (clone) | 20:19 | |
moritz | you should make your own method for deep cloning | 20:22 | |
shinobicl | i will... thanks again :) | ||
20:22
fglock left
|
|||
masak | making your own method for deep cloning is the only solution I know of, from a language design perspective. | 20:24 | |
well, the far extreme of that is a serialization framework :) | 20:25 | ||
shinobicl | my own clone method sounds much saner | 20:26 | |
20:31
birdwindupbird left
20:35
snearch joined
20:37
MayDaniel left
20:44
pernatiy joined
20:49
fgomez left
20:59
perimosocordiae left
21:00
fgomez joined
21:07
libertyprime left
21:09
libertyprime joined
|
|||
shinobicl | nom: use Test; ok(1==2, "fails"); dies_ok( { my $x = (1/0); }, 'division by zero'); dies_ok( { my $x = (1/1); }, 'division'); | 21:11 | |
p6eval | rakudo c10792: OUTPUT«not ok 1 - failsnot ok 2 - division by zeronot ok 3 - division» | ||
21:12
kaare_ left
|
|||
benabik | r: try { my $x = (1/0); }; say $! | 21:12 | |
p6eval | rakudo c10792: OUTPUT«Mu()» | ||
benabik | r: my $x = (1/0) | ||
p6eval | rakudo c10792: ( no output ) | ||
shinobicl | i think that the 2nd test should report success | 21:13 | |
benabik | r: say (1/0) | ||
p6eval | rakudo c10792: OUTPUT«Inf» | ||
21:13
havenn left
|
|||
benabik | shinobicl: 1/0 doesn't die, it returns Inf. | 21:13 | |
shinobicl | ok.. i see , 1/0 is not an exception:S | ||
benabik | I'm not sure why it does. That's not the right answer. | ||
21:15
skids left,
mj41_nb joined
21:29
tokuhiro_ joined
21:30
snearch left
|
|||
flussence | shouldn't that only happen for Num, not Int? | 21:33 | |
perl6: say 1e0 / 0e0; say 1/0; | |||
p6eval | niecza v15-4-g1f35f89: OUTPUT«InfInf» | ||
..rakudo c10792: OUTPUT«Divide by zero in block <anon> at /tmp/hNLuyrwdB7:1» | |||
..pugs: OUTPUT«*** Illegal division by zero at /tmp/4UUG04Skbi line 1, column 5-14» | |||
flussence | perl6: say 1/0; say 1e0/0e0; | 21:34 | |
p6eval | niecza v15-4-g1f35f89: OUTPUT«InfInf» | ||
..rakudo c10792: OUTPUT«InfDivide by zero in block <anon> at /tmp/cVnBBXkWEU:1» | |||
..pugs: OUTPUT«*** Illegal division by zero at /tmp/qi8QECl0_M line 1, column 5-8» | |||
dalek | ast: eb002d6 | jonathan++ | S04-phasers/pre-post.t: Correct and unfudge a test; POST runs LIFO. |
21:35 | |
21:37
shinobicl left
21:47
NamelessTee left,
NamelessTee joined
21:57
havenn joined
|
|||
Juerd | moritz: Possibly. Can you be more specific about the requirements? | 21:58 | |
22:01
pernatiy left
22:02
havenn left
22:03
havenn joined
|
|||
dalek | kudo/nom: eff8364 | jonathan++ | src/ (3 files): Aborted PRE does not run POST or LEAVE phasers of the block. |
22:05 | |
ast: 70ba2f8 | jonathan++ | S04-phasers/pre-post.t: Untodo another PRE/POST test. |
22:06 | ||
atures: 96c433a | jonathan++ | features.json: Update for PRE/POST phasers; Rakudo gets +, and since the submethod form is gone from spec then Niecza no longer needs +- on this. |
22:07 | ||
flussence | the alt+f4 ending | ||
whoops, ww | |||
masak | sounds like an abrupt endind. | 22:12 | |
ending* | |||
I'm in xmonad, and I still haven't really gotten used to alt+f4 not being bound to anything. | |||
22:13
ksi left
|
|||
flussence | I've used e17 a few times, its default shortcuts really threw me off. I think "close window" is alt+X | 22:14 | |
tadzik | I'm in KDE and I can't imagine it any other way than shift-windows-c ;) | 22:15 | |
huf | i've been using win-e for ages | ||
masak | you're all freaks, the lot of you :P | 22:17 | |
flussence | .oO( close windows manually? just let the OOM-killer clean them up for you! :) |
22:18 | |
masak | clearly Ctrl+Alt+Bksp is the only way to end applications. | 22:19 | |
tadzik | window garbage collector | ||
masak | flussence: actually, that's the way it seems to work on my phone. | ||
I never close stuff, I just shift over to some other app. | |||
tadzik | you never close tabs, too ;) | ||
well, g'night #perl6 | 22:20 | ||
sjn | nn o/ | ||
jnthn | 'night, tadzik | ||
flussence | I remember (a long time ago now) reading about "crash-safe app design" where things should be built around the expectation that the process can be killed at any time. Sounds like that idea got put to use :) | ||
masak | dobranoc, drodzy tadzik. | 22:21 | |
flussence: fwiw, in Android there are hooks for various levels of inactivity. | 22:22 | ||
flussence: apps are expected to preemptively save away everything already at the first level, which is just "unfocus" or something like that. | |||
dalek | kudo/nom: 169bc80 | jonathan++ | docs/ChangeLog: Couple more ChangeLog notes. |
22:23 | |
jnthn | Hmm. Rakudo has a release manager for the April release, but not one for the March release on this Thursday. If you fancy releasing the release with a bunch of phasers implemented and a nice startup time reduction, do sign up in docs/release_guide.pod. :) | 22:26 | |
masak: If you get a moment, something in the ChangeLog about macros landing would be le nice. :) | 22:27 | ||
[Coke] | pugs: say 3.Rat | 22:34 | |
p6eval | pugs: OUTPUT«*** No such method in class Int: "&Rat" at /tmp/KL6AvTuNvr line 1, column 5 - line 2, column 1» | ||
22:34
plobsing joined
|
|||
masak | jnthn: gotcha. | 22:35 | |
masak looks into it | |||
I can do this months release, but I would *prefer* to see some enthusiastic semi-newcomer sign up. I did last month. | 22:36 | ||
22:38
skids joined
|
|||
dalek | kudo/nom: b2505be | masak++ | docs/ChangeLog: [docs/ChangeLog] added macros and quasis Oh right! Almost forgot. :-) |
22:38 | |
masak | 'night, #perl6 | 22:39 | |
felher | o/ masak | ||
colomon | \o | 22:41 | |
22:46
cognominal left
|
|||
[Coke] | when is the release this month? | 22:53 | |
22:53
NamelessTee left
22:56
whiteknight joined
|
|||
[Coke] | ah, nevermind. I'm not going to move up my volunteer month. ;) | 22:57 | |
pmichaud: o/ | |||
23:05
tyatpi left
23:07
tokuhiro_ left
|
|||
jnthn | [Coke]: Yes, I noticed you were up for next month. Thanks. :) | 23:07 | |
jnthn => finding dinner in a thunderstorm :) | 23:08 | ||
23:12
mj41_nb left
23:23
havenn left
|
|||
[Coke] | I figured this month was too close to the week of meetings in the UK for me to pay attentions. | 23:27 | |
[Coke] has now had some great Thai and Indian, and wonders if they will hit an ``English'' place some night this week. | 23:28 | ||
23:29
cognominal joined
|
|||
[Coke] | gah. again I've been charging my laptop for hours except I didn't flip the little switch next to the power outlet. | 23:29 | |
23:31
BooK left,
BooK joined
23:32
doy left
23:33
att_ left
23:36
att_ joined
23:40
y3llow left,
y3llow joined,
doy joined
23:45
PacoAir left
|
|||
sorear | good * #perl6 | 23:59 |