»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'p6: say 3;' or rakudo:, or /msg camelia p6: ... | irclog: irc.perl6.org or colabti.org/irclogger/irclogger_logs/perl6 | UTF-8 is our friend!
Set by moritz on 22 December 2015.
masak hey, just want to show this, because it's pretty neat: 00:16
$ bin/007 -e='macro name(var) { return new Q::Literal::Str { value: var.name } }; my x; say(name(x))'
x
that is, `name(some_var)` is a macro that turns a variable into the name of that variable 00:17
I like it because it's short, and it *definitely* can't be done with a normal function
timotimo m: my $hello; sub name($var is raw) { say $var.name }; name($hello) 00:18
camelia rakudo-moar 668dc5: OUTPUT«Method 'name' not found for invocant of class 'Any'␤ in sub name at <tmp> line 1␤ in block <unit> at <tmp> line 1␤␤»
timotimo m: my $hello; sub name($var is raw) { say $var.^name }; name($hello)
camelia rakudo-moar 668dc5: OUTPUT«Any␤»
timotimo m: my $hello; sub name($var is raw) { say $var.VAR.^name }; name($hello)
camelia rakudo-moar 668dc5: OUTPUT«Scalar␤»
timotimo m: my $hello; sub name($var is raw) { say $var.VAR.name }; name($hello)
camelia rakudo-moar 668dc5: OUTPUT«$hello␤»
timotimo there we go.
masak: doesn't count as a "normal" function? :)
masak well, .VAR is "a macro" 00:19
in that it's noticed by the compiler and turned into magic
masak I'd maintain that `name(var)` is somewhat more impressive, since it's user-defined ;) 00:20
m: my $hello; my $goodbye := $hello; sub name($var is raw) { say $var.VAR.name }; name($goodbye) 00:21
camelia rakudo-moar 668dc5: OUTPUT«$hello␤»
masak also, .VAR.name has obvious problems such as the above one
timotimo OK :) 00:22
masak 'night, #perl6
timotimo gnite masak
MasterDuke m: my $a = 'a'; my $b = 'b'; say 'should not see this' if 'b' ne all($a, $b) 01:40
camelia rakudo-moar 668dc5: OUTPUT«should not see this␤»
MasterDuke m: my $a = 'a'; my $b = 'b'; say 'should not see this' if 'b' eq none($a, $b)
camelia ( no output )
TimToady ne does "not raising", so it's equivalent to not 'b' eq all($a,$b) 01:41
(so does English, btw)
MasterDuke huh, somehow that's not what i expect 01:42
TimToady the opposite is not what most English speakers expect
m: say 1 ne any 1, 2 01:43
camelia rakudo-moar 668dc5: OUTPUT«False␤»
MasterDuke that also seems wrong 01:45
TimToady in English, "A is not any of B or C" means "it is not the case that A is any of B or C" 01:46
you can't abstract 'ne' into a real operator like that; well, you can, but then you're choosing a consistency that will confuse the majority of the people 01:47
TimToady ne is really only a negated eq 01:47
MasterDuke i've spoken English my whole life and that still feels wrong, but maybe logic classes + programming experience has colored what i expect 01:48
TimToady ayup :)
you never say "I am not any of those." ? 01:49
you'd have to say "I am not all of those." :P
(by the logic view)
anyway, you found one of the workarounds :) 01:50
MasterDuke yep, but i suspect i'll make that mistake again 01:52
i'll have to ponder it a while 01:53
TimToady consider that ne is reall the !eq metaoperator
*really
and as a higher-order function, it's modifying 'eq'
TimToady the results of 'eq', that is 01:53
which is just like linguistic not-raising 01:54
MasterDuke the original code was $a ne 'a' and $a ne 'b'
TimToady the fact that one of the arguments to eq comes before the negation is just a trick of infix syntax plus metaoperators
MasterDuke so my first instinct was $a ne 'a' & 'b' 01:55
TimToady but that's really like "not $a eq 'a' and not $a eq 'b'"
the fact that a computer languages has smushed to two morphemes into one is kinda immaterial to the semantics, which is 'is' vs 'is not' in English 01:57
and not being an adverb, it modifies the entire predicate, and doesn't fire off before the modified verb 01:59
TimToady Are you Fred or Bob? No, I am not Fred or Bob. 02:00
MasterDuke somehow the de Morgan transformation, which does makes sense from a pure logic point of view, isn't quite sinking in to my natural language translation of the particular code that i wanted to write 02:01
TimToady we often give lip service to Perl being like a natural language, but in this case it really is
MasterDuke (and i'm not sure which is more deficient, my logic or my language)
but the docs were good enough to correct me! 02:03
TimToady De Morgan is: not A or not B :: not (A and B), but there's no 'eq' in there
and things get complicated in any computer language when negation is artifically attached to another operator; I seem to recall that C++ has special rules about overloading negated ops too 02:05
MasterDuke good grief, i didn't even read the docs right. "$a !op $b is rewritten internally as !($a op $b)" 02:06
not quite the same as De Morgan 02:08
TimToady yes, that's more like the not-raising I was mentioning, though that's not quite what not-raising means in English either
"I don't think so" really really "I think not."
that's the real not-raising 02:09
but we do, in fact, parse the not as applying to the whole predicate, even though it's embedded in the middle
just as with any other adverb: I am quickly running down the street. 02:10
a side effect of SVO order, which is kind of infixy when you think about it 02:11
MasterDuke makes we wonder what other language speakers would have the same/better/worse understanding of Perl 6 Junctions 02:14
MasterDuke does different native sentence structure lend itself to an easier understanding of formal logic 02:15
geekosaur not really because no natural language is based on formal logic :) 02:16
TimToady well, Japanese is pretty close to reverse polish, so as an SOV language, the negation actually comes after the V, so can't be confused for anything in the middle; otoh, they tend to double-negative their adverbs for that reason: I seldom don't do that 02:17
well, more like "seldom that don't" 02:18
Xliff_ *sigh* 02:32
I'm bored. Anyone have a problem they want solved in P6?
MasterDuke Xliff_: github.com/moritz/svg-plot/issues/8 and github.com/moritz/svg/issues/1 02:35
oh well, guess i don't have interesting problems... 02:41
Xliff_ OOH! 02:43
Beggars can't be choosers.
MasterDuke joking around 02:45
TimToady: would it be reasonable to request to warn the user if there's any code in a given block after the whens? e.g., given 42 { when Int { say 'Life...' }; say 'this does not get run'; } 02:47
ShimmerFairy MasterDuke: only if we were somehow able to analyze the "probability" of the when being True 02:48
MasterDuke: consider for ^100 { when * %% 12 { #`(these numbers are stupid) }; doing-stuff-here(); } as an example 02:49
MasterDuke ah right, but what about: given 'a' { when Int { say 'Life...' }; default { say 'this does get run' }; say 'this does not get run'; } 02:50
of interesting: given 'a' { when Int { say 'Life...' }; say 'this does in fact get run'; default { say 'this does get run' }; } 02:51
*oh interesting
MasterDuke ok, how about warning if there's any code after the default? is that too difficult? 02:54
ShimmerFairy not sure about that one. The default would be the only easy one to make the warning for, relatively speaking :) 02:56
dalek ateverable: 540aba6 | MasterDuke17++ | Bisectable.p6:
Instead of calling 'git bisect run', implement the functionality in code
03:04
c: 29f9b56 | (Douglas L. Schrag)++ | doc/Language/testing.pod6:
Remove references to 'done' method (obsolete)

Clarify to refer to the done-testing method.
03:06
c: cb3c5b5 | titsuki++ | doc/Language/testing.pod6:
Merge pull request #848 from dmaestro/done_testing_clarification

Remove references to 'done' method (obsolete)
TimToady ShimmerFairy: seems like warning after a default or a when * would make sense 03:10
ShimmerFairy yeah, that's fine and it seems like it'd be far easier than doing it after 'when' blocks. 03:11
TimToady and we could presumably know the outcome at compile time if the given was a constant, but maybe they're just writing it that way to select code for one architecture or another
ShimmerFairy TimToady: I don't imagine code after a default {} would be very useful unless you played around with labels and gotos, so there should certainly be a warning. 03:12
TimToady and otherwise the situation is unlikely to arise in practice
mainly you have the situation where someone puts the default first because they're thining C semantics
thinking, even 03:13
MasterDuke RT #129025
no link? RT#129025 03:14
oh, synopsisbot isn't running 03:15
rt.perl.org/Ticket/Display.html?id=129025
Xliff_ MasterDuke: Seems like output from SVG::Plot comes out in a pair. By the time it gets to XML::Writer it only sees one element to serialize. 03:20
MasterDuke Xliff_: think it makes sense to change SVG::Plot or XML::Writer? 03:23
Xliff_ SVG::Plot 03:24
MasterDuke: Take a look at an SVG encoding example in XML::Writer.
I will fpaste.
da.gd/ba6iU 03:26
I'm seeing something entirely different from SVG::Plot
MasterDuke think it's an easy fix? 03:35
Xliff_ MasterDuke: Depends if it really is an issue with the output from SVG::Plot or not. 03:43
This little diddy worked fine enough. 03:45
paste.fedoraproject.org/411794/14717511/
Xliff_ Looks to me like SVG::Plot is creating an extra array when it doesn't need to. 03:47
MasterDuke well i'm about to fall asleep at the keyboard, so i'm off, thanks for looking into it! 03:50
Xliff_ No worries! If I figure it out, I will put in a PR. 04:01
Xliff_ MasterDuke, BOOYAH! 04:12
nine win 13 09:50
Xliff_ How can I force a list to an array? 09:55
Xliff_ m: my $p = (c => 1, 2, 3); say $p.WHAT; 09:56
camelia rakudo-moar 668dc5: OUTPUT«(List)␤»
Xliff_ m: my $p = c => (1, 2, 3); say $p.WHAT;
camelia rakudo-moar 668dc5: OUTPUT«(Pair)␤»
Xliff_ m: my $p = c => (1, 2, 3); say $p.key 09:57
camelia rakudo-moar 668dc5: OUTPUT«c␤»
Xliff_ m: my $p = c => (1, 2, 3); say $p.value.WHAT
camelia rakudo-moar 668dc5: OUTPUT«(List)␤»
Xliff_ OK, so now I think I know what the issue is.
m: my $p = c => (1, 2, 3).flat; say $p.value.WHAT
camelia rakudo-moar 668dc5: OUTPUT«(Seq)␤»
Xliff_ m: my $p = c => !(1, 2, 3); say $p.value.WHAT
camelia rakudo-moar 668dc5: OUTPUT«(Bool)␤»
Xliff_ m: my $p = c => |(1, 2, 3); say $p.value.WHAT
camelia rakudo-moar 668dc5: OUTPUT«(Slip)␤»
Xliff_ m: my $p = c => @(1, 2, 3); say $p.value.WHAT
camelia rakudo-moar 668dc5: OUTPUT«(List)␤»
Xliff_ m: my $p = c => [1, 2, 3]; say $p.value.WHAT
camelia rakudo-moar 668dc5: OUTPUT«(Array)␤»
Xliff_ m: my $l = (1, 2, 3); $p = c => [1, 2, 3]; say $l.WHAT; say $p.value.WHAT 09:58
camelia rakudo-moar 668dc5: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Variable '$p' is not declared␤at <tmp>:1␤------> 3my $l = (1, 2, 3); 7⏏5$p = c => [1, 2, 3]; say $l.WHAT; say $p␤»
Xliff_ m: my $l = (1, 2, 3); my $p = c => [1, 2, 3]; say $l.WHAT; say $p.value.WHAT
camelia rakudo-moar 668dc5: OUTPUT«(List)␤(Array)␤»
Xliff_ m: my $l = (1, 2, 3); my $p = c => [$l.flat]; say $l.WHAT; say $p.value.WHAT; dd $p.value; 09:59
camelia rakudo-moar 668dc5: OUTPUT«(List)␤(Array)␤[1, 2, 3]␤»
Xliff_ m: my $l = (1, 2, 3); my $p = c => [$l]; say $l.WHAT; say $p.value.WHAT; dd $p.value;
camelia rakudo-moar 668dc5: OUTPUT«(List)␤(Array)␤[(1, 2, 3),]␤»
timotimo m: sub the_thing { succeed }; given 42 { default { say "vroom"; the_thing }; say "doesn't get run ... ?" } 10:45
camelia rakudo-moar 668dc5: OUTPUT«vroom␤»
timotimo m: sub the_thing { proceed }; given 42 { default { say "vroom"; the_thing }; say "doesn't get run ... ?" }
camelia rakudo-moar 668dc5: OUTPUT«vroom␤doesn't get run ... ?␤»
MasterDuke timotimo: interesting, that does seem to make it a bit harder to detect code that won't get run 10:49
timotimo definitely 10:50
i've got something that's even worse :)
m: my $*OUT = class { method print($_) { note $_; proceed } }; given 42 { default { say "vroom" }; say "doesn't get run ... ?" } 10:51
camelia rakudo-moar 668dc5: OUTPUT«vroom␤␤doesn't get run ... ?␤␤proceed without when clause␤ in method print at <tmp> line 1␤ in block <unit> at <tmp> line 1␤␤»
timotimo m: my $*OUT = class { method print($_) { note $_; proceed CATCH { default { } } } }; given 42 { default { say "vroom" }; say "doesn't get run ... ?" }
camelia rakudo-moar 668dc5: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤Undeclared name:␤ CATCH used at line 1. Did you mean 'Match'?␤␤»
timotimo m: my $*OUT = class { method print($_) { note $_; proceed; CATCH { default { } } } }; given 42 { default { say "vroom" }; say "doesn't get run ... ?" }
camelia rakudo-moar 668dc5: OUTPUT«vroom␤␤doesn't get run ... ?␤␤»
timotimo you don't even have to put it into a dynamic variable in scope, you can put it into PROCESS:: 10:52
at least i think so?
so, yeah. never going to be able to analyze that statically :) 10:55
until we have link-time analysis of things
MasterDuke i updated the ticket with your examples 10:58
timotimo that's not my fault! 11:00
Xliff_ MasterDuke: I've submitted patches to your issue. I can get circle.pl and test-suite-committers.pl working via changes to Plot.pm and Plot/Pie.pm 11:01
github.com/moritz/svg-plot/issues/10
github.com/moritz/svg-plot/issues/8 11:02
timotimo anyway, synopsebot6 is up again
MasterDuke timotimo: all will be forgiven if you just implement link-time analysis of things today
timotimo no, i meant ... synopsebot6 came in and our matrix users died
MasterDuke Xliff_: great
timotimo: ahh, that makes more sense 11:03
Xliff_ MasterDuke: Now I'm bored, again.
8-)
Also sleepy. So I guess I'll do that.
timotimo Xliff_: have you been able to use GTK::Simple in the past?
ah, ok
you can sleep, of course :)
Xliff_ timotimo, never tried it.
timotimo because GTK::Simple can't be installed on linux right now because it can't find a .dll it wants for some reason 11:04
Xliff_ timotimo, Are you tempting me? Sleep can wait for an interesting problem.
timotimo not interesting, though ;)
Xliff_ Um.
linux and dll used in the same sentence? Does not compute! =)
timotimo basically that's the issue :)
Xliff_ so .... s/dll/so/ 11:05
timotimo it tries to copy a lzma.dll or something
no, it ought to use the system-supplied so files
lzma doesn't make sense to me at all in this setting
Xliff_ libxml2-2 under windows aparently needs lzma. 11:08
timotimo OK
Xliff_ Same under Linux. 11:09
I will try to install my local clone. 11:10
It says its up-to-date
timotimo i suppose it's just because the resources in META6.json just has the dlls in there
Xliff_ Hmmm... no fpaste announcement?
fpaste.scsys.co.uk/532205
No.
Check the fpaste. libxml2 links against liblzma
timotimo you're not understanding the problem here
Xliff_ I'm building so I can get context. 11:12
MasterDuke .seen perlpilot
timotimo it also takes like an hour to build all the stuff
yoleaux I saw perlpilot 19 Aug 2016 21:40Z in #perl6: <perlpilot> perhaps
Xliff_ timotimo, I'm beginning to see that.... 11:13
timotimo Failed to open file /home/timo/perl6/ecosystem/gtk-simple/.panda-work/1471777961_1/resources/blib/lib/GTK/liblzma-5.dll: no such file or directory 11:14
that's the error i'm complaining about
and i think it's just resources: having all the dll in it that's breaking all platforms but windows 11:16
i'm almost tempted to just touch all these paths in Build.pm if no download is needed
Xliff_ Seen in last apt operation - "Setting up wayland-protocols (1.7-1) ..." 11:18
As long as there is no package starting with "yutani" we're good.....
timotimo, I'm looking. My install broke because it couldn't find libgtk.... 11:19
MasterDuke has anyone had a problem with temp files created by File::Temp disappearing earlier than they should?
timotimo i'm commiting a very rough fix 11:20
dalek k-simple: 8db5f12 | timotimo++ | Build.pm:
on non-windows, just create empty files for dlls

so that we can actually install the damn thing. otherwise panda will just try to copy all the resource files and complain that the dlls do not exist.
11:21
Xliff_ timotimo: Which commit. It installed here with no problems once I installed libgtk-3-dev 11:22
timotimo what? how? 11:23
Xliff_ Well... I should say that the tests have passed. It is in the installation phase, now.
pierre_ Hi, small question about multidimensional array and type 11:24
Xliff_ What commit level is your gtk-simple? It's quite possible I am on an old branch even though "git pull" said everything was up to date.
timotimo i'm on 8db5f1 now :)
pierre_ m: my Int @a = ( 1, 2, 3);
camelia ( no output )
timotimo god damn it. my commit didn't work apparently?
pierre_ m: my Int @a = ( 1, 2, 3); say @a[1]; 11:26
camelia rakudo-moar 668dc5: OUTPUT«2␤»
pierre_ m: my Int @a = ( 1, 2; 3, 4); say @a[1;1];
camelia rakudo-moar 668dc5: OUTPUT«Type check failed in assignment to @a; expected Int but got List ($(1, 2))␤ in block <unit> at <tmp> line 1␤␤»
pierre_ Is it possible to have a type shaped array? 11:27
Xliff_ Feck! Yeah. I was behind.
On my stale fork.
timotimo ah, well :)
Xliff_ headdesks
Well, I will try again and see if it blows up. 11:28
timotimo mhyup
i think i b0rked it by not mkdir-ing the basedir
pierre_ m: my Int @a[2;2] = ( 1, 2; 3, 4); say @a[1;1]; 11:29
camelia rakudo-moar 668dc5: OUTPUT«4␤»
pierre_ hum, just need to figure out how to handle unknow size
m: my Int @a[*;*] = ( 1, 2; 3, 4); say @a[1;1];
camelia rakudo-moar 668dc5: OUTPUT«Jagged array shapes not yet implemented. Sorry. ␤ in block <unit> at <tmp> line 1␤␤»
pierre_ m: my Int @a[*;*] = ( 1, 2; 3, 4); say @a[1;*]; 11:31
camelia rakudo-moar 668dc5: OUTPUT«Jagged array shapes not yet implemented. Sorry. ␤ in block <unit> at <tmp> line 1␤␤»
timotimo holy lord, this is so slow ...
pierre_ m: my Int @a[2;2] = ( 1, 2; 3, 4); say @a[1;*];
camelia rakudo-moar 668dc5: OUTPUT«Partially dimensioned views of arrays not yet implemented. Sorry. ␤ in block <unit> at <tmp> line 1␤␤»
dalek k-simple: e1d1aee | timotimo++ | Build.pm:
needed to mkdir the basedir first.

also don't put those nasty backslashes for path seps on anything but windows.
11:34
Xliff_ Failed to open file .../projects/gtk-simple/.panda-work/1471779562_1/resources/blib/lib/GTK/liblzma-5.dll: no such file or directory 11:51
Wheee.
timotimo yup. but i fixed it in the mean time
so you can sleep now if you want :)
Xliff_ Trying again. 11:53
This takes so long I can grab steal cat naps of 5 minutes and check. Rinse. Repeat.
timotimo :) 11:56
Xliff_ Fix confirmed. 11:58
Although I see what you mean about "rough"
timotimo :)
tbrowder I just added a new issue for the docs ref sprintf and printf. After more consideration, I think the best way to go is to take one function as the master description and reference it from the other. I think printf has the best description at the moment, but I defer to a consensus. By the way, the reason I am looking at the issue is I found neither 11:59
description mentions use of the asterisk for programmatic formatting of precision and width.
timotimo right now i have another annoying problem to deal with: i don't have my newest GPG key handy, and someone used it to send me mail
Xliff_ timotimo++ 12:00
Now I sleep.
tbrowder p6: say 3 12:18
camelia rakudo-moar 668dc5: OUTPUT«3␤»
tbrowder m: say 3 12:19
camelia rakudo-moar 668dc5: OUTPUT«3␤»
moritz fwiw I've invited Xliff++ as a contributor to the svg-plot repo. 12:20
timotimo heyo moritz :) 12:27
how's your trip? :)
masak hi, #perl6 12:48
timotimo hello, #masak 12:49
masak .oO( hello, masak-chan ) 12:53
TimToady
.oO(ohayo goes eye muss)
13:07
masak .oO( saw a dee, craw ) 13:11
gfldex 13:17
dalek c: 1e9acb9 | (Tom Browder)++ | doc/Language/io.pod6:
Add info on writing formatted strings to a file
13:41
moritz timotimo: quite nice, thanks 14:01
moritz leaving to more civilized areas (non-volume limited Internet :-) tomorrow 14:02
masak \o/ 14:03
moritz very nice beach here, we all enjoy it very much 14:04
so much so that in a week, we've only had one day of sight seeing / exploring, and spent the rest just going to the beach :-)
moritz afk again& 14:07
dalek c: 29a3726 | (Tom Browder)++ | doc/Language/io.pod6:
Re-arrange and reword note on printf
14:49
lucs Is there something analogous to Perl 5's 「$#array」 to get an array's last index? 15:29
CIAvash lucs: @array.end 15:31
lucs Aha, thanks.
grondilu m: say (^10).end
camelia rakudo-moar 668dc5: OUTPUT«9␤»
dalek osystem/MARTIMM-patch-1: 3a69ebc | (Marcel Timmerman)++ | META.list:
PKCS #5 with PBKDF2

Partly implemented PKCS #5 with Key derivation function PBKDF2 from RFC2898
15:44
dalek osystem: 3a69ebc | (Marcel Timmerman)++ | META.list:
PKCS #5 with PBKDF2

Partly implemented PKCS #5 with Key derivation function PBKDF2 from RFC2898
16:16
osystem: f4e0e58 | (Zoffix Znet)++ | META.list:
Merge pull request #237 from perl6/MARTIMM-patch-1

PKCS #5 with PBKDF2
thowe Hello 16:38
b2gills m: camelia: say "hello thowe" 16:53
camelia rakudo-moar 668dc5: OUTPUT«hello thowe␤»
pmurias how do I import the QAST classes into my Perl 6 program? 17:06
pmurias ahh, I was using :from<nqp> instead of :from<NQP> 17:14
it would be great to have an error message for unsupported :froms
timotimo m: use foobar:from<durane> 17:22
camelia rakudo-moar 668dc5: OUTPUT«===SORRY!===␤Could not find foobar at line 1 in:␤ /home/camelia/.perl6␤ /home/camelia/rakudo-m-inst-1/share/perl6/site␤ /home/camelia/rakudo-m-inst-1/share/perl6/vendor␤ /home/camelia/rakudo-m-inst-1/share/perl6␤ CompUnit::Reposi…»
timotimo ah, hmm.
pmurias seems significantly LTA
TimToady about to board PIT -> ORD -> MUC -> CLJ 17:23
pmurias I got a "Too few positionals passed; expected 2 arguments but got 1" error message without a stack trace, are those expected to sometimes happen? 17:40
lack of stack trace golfed down: paste.debian.net/790824/ 17:51
dataangel Is there a better way to write this?: my $object-file = (with-suffix $_, ".o").relative(%config{"SOURCE_FOLDER"}); 18:06
I really like being able to call functions without having to use parentheses 18:07
But every permutation I try for this doesn't work, unless I use parentheses
pmurias I don't think there is a better way than with-suffix($_, ".o").relative(%config<SOURCE_FOLDER>) 18:13
dataangel Oh yeah not sure why I didn't think to do that for with-suffix... Didn't know you could index hashes that way though 18:15
Got it down to: my $object-file = .&with-suffix(".o").relative(%config<SOURCE_FOLDER>);
pmurias dataangel: is that better? 18:18
or are you trying to golf things?
dataangel Honestly I don't know if it is or not, I'm a complete newbie so I don't know if it counts as good or bad style... It doesn't seem any worse to implicitly use .& on the topic variable than just . which people seem to do all over the place and examples 18:19
s/and examples/in examples 18:20
pmurias mostly writes NQP 18:23
.&foo seems to do something slightly different than foo($_)
dataangel What do you mean? Like there is an actual behavior difference? 18:27
arnsholt Well, the semantics are subtly different 18:31
.&foo calls foo as a method with $_ as the invocant
Of course that maps to $_ being passed as the first arg on a sub, so not sure if there's any *actual* difference
pmurias if the object being called on overwrote dispatch:<var> there would be a difference 18:39
dataangel Why is this okay?: my %dependencies := set with-suffix $target, ".o"; but not this: my %dependencies := SetHash.new with-suffix $target, ".o"; ? 18:50
For the latter I had to insert parentheses
arnsholt dataangel: You need a colon, I think 19:05
SetHash.new:
There's a (parsing related, IIRC) reason why you can't do method invocations without parens and nothing else, but I can't remember what it is 19:06
gfldex set is a sub, SetHash.new is a method
dataangel arnsholt: that works as well, but then why do I need it in one case but not the other
arnsholt It's sub versus method, as gfldex pointed out
dataangel For methods do you always have to use parentheses or the : ?
arnsholt Yeah, it's either parens or colon 19:07
dataangel Interesting, that actually clears up a lot 19:08
cygx o/ 19:15
dataangel: you don't want something like p.x + p.y be parsed as p.x(+p.y)
dataangel Is it safe to nest : ? 19:18
smls m: say (1..3).map: *.subst: /2/, "a"; 19:19
camelia rakudo-moar 668dc5: OUTPUT«(1 a 3)␤»
smls You mean like that? 19:20
dataangel Yes ;) 19:22
dataangel I've just stumbled on the behavior of Nil letting you call any method on it and having it do nothing... It's really nice for prototyping 19:22
dataangel Why is Nil considered defined for the sake of return types while not being considered defined in all other contexts? Why the special case? 19:38
cygx assuming that's by design and not a bug, I'd guess it's because Nil (like Failure) can be used to signal exeptional conditions in-band 19:44
pmurias are error messages without line numbers expected from rakudo? 19:47
Xliff_zzzz moritz: PRs created for both issues in SVG-Plot
Now I have to look and see if I can do other nifty things with it.
dataangel I have a SetHash object containing IO::Paths and I want to write a new function that will take it as an argument, what is the most constraining type declaration I can use for the function argument and what is the syntax? SetHash:D %object-files doesn't work and neither does IO::Path:D %object-files which I thought might be would be what I wanted since apparently for declarations the type specifies the type of the elements inside so I 19:59
thought it might work the same for function arguments
brrt hey, you know what occured to me earlier this week 20:00
brrt perl5 doesn't have any protocol or solution for iterators 20:00
and.. it sucks
MasterDuke dataangel: %hash{IO::Path} 20:02
not sure about the SetHash part 20:03
gfldex m: my SetHash[Int] %h;
camelia rakudo-moar 668dc5: OUTPUT«5===SORRY!5=== Error while compiling <tmp>␤An exception occurred while parameterizing SetHash␤at <tmp>:1␤Exception details:␤ 5===SORRY!5=== Error while compiling <tmp>␤ SetHash cannot be parameterized␤ at <tmp>:1␤ ------> 3my Set…»
MasterDuke m: my SetHash %h{IO::Path}
camelia ( no output )
gfldex dataangel: IO::Path as key or value? 20:04
cygx gfldex: key - a SetHash should always has Bool as value type, doesn't it? 20:05
*have
gfldex yes
BenGoldberg brrt, perl5 doesn't have a builtin solution for iterators, but there are many modules on CPAN...
dataangel Someone said yesterday that SetHash can't be parameterized, which is annoying but if I could at least constrain the function to say that it requires some form of SetHash that would at least be something... It's confusing because why use SetHash:D as the constraint the error I get is "expected SetHash but got Hash" even though SetHash is actually when I'm passing in o_O
s/why use/when I use 20:06
cygx dataangel: the type of % or @ variables sets the value contraint
m: say (my Int @foo).^name 20:07
camelia rakudo-moar 668dc5: OUTPUT«Array[Int]␤»
cygx m: say (my @foo of Array[Int]).^name
camelia rakudo-moar 668dc5: OUTPUT«Array[Array[Int]]␤»
cygx hm...
brrt BenGoldberg: i know. none of these modules are standard like the __iter__ method is in e.g. python 20:08
this sucks
mst AlexDaniel: are you drunk? # github.com/perl6/doc/issues/850#is...-241277646 20:09
brrt it means that random perl hackers make modules that iterate over stuff and don't work together 20:10
gfldex sub f(%h where .keyof ~~ IO::Path){ dd %h}; my %h{IO::Path}; %h{IO::Path.new("~/.vimrc")} = True; f %h
dataangel: ^^^
AlexDaniel mst: hello. No, that's just my opinion
mst: didn't mean to disappoint you :)
mst AlexDaniel: your opinion didn't cover anything actually suggested though
somebody proposes annotating the *first* example
BenGoldberg brrt, In python, there is only one way to do things. In perl, there are many. 20:11
mst you argue against (1) changing the example (2) annotating *all* examples
neither was proposed
BenGoldberg Also, using modules from CPAN is *the* standard way of doing things.
mst AlexDaniel: in light of that, perhaps you could have an opinion about the actual ticket? :)
AlexDaniel mst: by annotating the first example we assume that the user will read the document from top to bottom, does it make any sense? 20:12
mst a new perl5 person coming to perl6 is likely to read the 5to6 document from top to bottom
in fact, I happen to know that that's exactly what masochist was doing
dataangel ... The confusion deepens... Apparently using set operators on SetHash returns a hash, according to WHAT. All I want is a mutable set type that stays that type, instead I have documentation telling me that some SetHash operations will actually return sets and then when I try other operations I get hashes
brrt no, this means that there is /no/ way i can make the N different iterators in $giant-codebase can't work together unless i glue them 20:13
mst if they skip half the document and become confused, well, that's a different problem
brrt: yeah, that's somewhat annoying - most things seem to provide $iter->next that returns nothing when exhausted, but it's far from perfect
I did at one point consider trying to get a standardised stream role and encourage people to conform to it 20:14
but I never quite got round to making it exist
brrt :-( 20:14
ties can't really do it
brrt is going to sleep anyway 20:14
mst the big problem, really, is that nobody really agrees on an object system
so a standard interface is hard
BenGoldberg List::Gen looks very much like what I'd like for a standardized interface... 20:15
AlexDaniel mst: well, if you insist on annotating the first example then yeah… I think that it's OK. Tomorrow someone will write another example on top of this one and the problem will appear again…
🤷 20:16
mst well, yes, that happens with documentation
it doesn't mean we shouldn't *try* and not confuse people
rid newbie question, if i may: my $array = []; my @array; say @array == $array; # prints true ... so what's the difference between @array and $array and why should I use one over the other?
mst AlexDaniel: If you could post a less obnoxious comment to that effect, perhaps it would result in a patch 20:17
cygx rid: wrong comparison operator: == is numeric comparison 20:18
rid: arrays contained in scalar variables are treated as single items for various purposes (eg iteration via for) 20:19
dataangel m: my %built = SetHash.new; say %built.WHAT; # why doesn't it say SetHash?
camelia rakudo-moar 668dc5: OUTPUT«(Hash)␤»
gfldex rid: @-sigiled container must provide some interfaces, like iteration, array-subscripts etc. $-sigiled container may or may not do so. Also, there are different interpolation and assignment rules. see docs.perl6.org/language/list#List_Contexts
dalek c: 95cd619 | (Zoffix Znet)++ | doc/Language/5to6-nutshell.pod6:
Add a blurb about dashes in identifiers

Closes #850
20:20
cygx dataangel: you need to use := or a $ sigil
AlexDaniel ↑ that is actually a better solution
BenGoldberg m: my $array = []; say +$array;
camelia rakudo-moar 668dc5: OUTPUT«0␤»
AlexDaniel and I stand corrected, there was an easy way to fix it
gfldex rid: there are plenty of other spots in the docs that show the difference, as sigils are pretty much everywhere in Perl 6 20:21
cygx dataangel: using = copies the contents of your SetHash into the Hash variable
rid okay so the sigil gives you an idea of how it can be used, not just what it is?
gfldex rid: it's a plural singular thing. It's esp. useful in signatures. 20:22
rid: see docs.perl6.org/type/Signature#Slur...Parameters 20:23
rid: defining slurpy arguments would be pretty wordy without the @-sigil
dataangel cygx: oh I thought the sigil was just going to control iteration behavior 20:25
rid aha! that actually makes sense. ingenious use of * 20:26
dataangel cygx: if I use := than the type is what I expected, thanks. But later I want to merge another SetHash into %built, and the only way I found to do that was: %built (|)= %old-dependencies; # but then this complains I can't modify an immutable SetHash... But I thought the entire difference between one of those and a set is that they're mutable, so I assume it's complaining that I'm trying to reassign the variable to a new object which 20:30
isn't what I mean to do... Is there a different way I should be doing it? I don't see a method in the documentation like this, in python it would be the update method on set
pmurias my \Δ = 72; in the identifiers section of the 5to6 nutshell seems like something that could be explained 20:33
cygx dataangel: I guess the SetHash interface could use some improvements 20:34
cygx what you can do is %built{%old-deps.keys} = True xx * 20:34
geekosaur I thought SetHash and friends were up for an overhaul 20:35
(waiting, inevitably, on round tuits)
cygx that may very well be - I've not followed the post-Christmas developments in P6-land very closely 20:36
gfldex m: dd my $sh = SetHash.new; $sh.append(:1th) 20:40
camelia rakudo-moar 668dc5: OUTPUT«SetHash $sh = SetHash.new()␤Cannot resolve caller append(SetHash: Int); none of these signatures match:␤ (Any:U \SELF: |values is raw)␤ in block <unit> at <tmp> line 1␤␤»
pmurias is there a way to get .gist/.perl for a instance of a class with indentation? 20:46
gfldex pmurias: there are datadumper modules with pretty-printing in the ecosystem 20:48
pmurias gfldex: Data::Dump seems to be working 21:02
I need to make a PR to it to enable turning of the printing out of all the avalible methods 21:03
_ramix_ Hello! I need to know if the method listen of IO::Socket::Async is able to get the remote address from a remote client connection. It's possible? Thanks! 21:04
geekosaur doesn't look like that exists at present :( 21:09
(even more worrisome, nothing in IO::Socket or IO::Socket::INET either) 21:10
_ramix_ I have found that the method native-descriptor of IO::Socket::INET refers to "socket descriptor". Perhaps I found it there, but it seems very esoteric. Thanks also. 21:13
geekosaur yes, if you can get to that then you can getpeeraddr() via NativeCall. but you shouldn't have to go through those gyrations imo 21:15
_ramix_ Indeed, it should be easier. I hope that incorporate this functionality in Rakudo Perl6. Thanks! 21:20
geekosaur best is not to just say it here, but file a rakudobug 21:25
"Bug reports should be sent to “rakudobug@perl.org” with the moniker [BUG](including the brackets) at the start of the subject" 21:26
_ramix_ thx
MasterDuke question about LEAVE: in a sub, there are a couple places it returns values. i want to do a chdir whenever the sub is left, so i thought i could just 'LEAVE chdir <path>' and not have to put a chdir before every return 21:32
however, the explicit return values in the sub are getting overwritten by the result of the chdir
any way to get around this? 21:33
ugexe m: sub foo { LEAVE { chdir ".." }; 100 }; say foo() 21:39
camelia rakudo-moar 668dc5: OUTPUT«100␤»
MasterDuke m: sub foo { LEAVE chdir ".."; 100 }; say foo() 21:40
camelia rakudo-moar 668dc5: OUTPUT«100␤»
MasterDuke m: sub foo { LEAVE chdir ".."; return 100 }; say foo()
camelia rakudo-moar 668dc5: OUTPUT«100␤»
MasterDuke hmm, not sure what's going on 21:43
ugexe i assumed you were doing this 21:44
m: sub foo { 100; LEAVE { chdir ".." }; }; say foo()
camelia rakudo-moar 668dc5: OUTPUT«WARNINGS for <tmp>:␤Useless use of constant integer 100 in sink context (line 1)␤Nil␤»
MasterDuke m: sub foo { return 100; LEAVE { chdir ".." }; }; say foo() 21:45
camelia rakudo-moar 668dc5: OUTPUT«100␤»
MasterDuke ugexe: when this ( github.com/perl6/whateverable/blob...le.p6#L228 ) line is hit the the $value in this ( github.com/perl6/whateverable/blob...le.p6#L137 ) line is not “‘bisect run’ failure” 21:49
geekosaur m: sub foo { return 100; LEAVE chdir ".." }; say foo() 21:56
camelia rakudo-moar 668dc5: OUTPUT«100␤»
geekosaur m: sub foo { { return 100; LEAVE chdir ".." } }; say foo()
camelia rakudo-moar 668dc5: OUTPUT«"/home".IO␤»
geekosaur golfed
MasterDuke yep, just figured that out 21:57
the sad thing is, that was the very code i was bisecting with to test! 21:58
Eduardo_ I'm thinking about creating a NoSQL system using Perl6 - any thoughts on that, friends? tx 22:24
Idea is to have .pl files being like the MongoDB documents which would allow for sharding and inside, have classes representing items or roles representing items, not sure which already 22:26
woolfy1 Hey Eduardo, nice to see you here,
Eduardo_ tx wollfy
woolfy 22:27
woolfy1 Wga van Dijk here (as my name is on Facebook)'
Eduardo_ oh
great
woolfy1 Hehe
Eduardo_ tx
should i paste code here too?
woolfy1 Well, it's night now. For some reason, most Perl 6 developers are from Europe. So, please be patieent.
patient'
Eduardo_ or there is a specific forum for that? 22:28
sure
no rush
woolfy1 You can paste code here, but in small amounts, as concise as possible.
TimToady otherwise use some nopaste site like gist.github.com 22:29
woolfy1 There is also a mailing list (see perl6.org/community/ ) where you can send a mail with bigger chuncks of code. Irc is just not suitable for shuch chunkcs of code.
Eduardo_ well, perl is an elegant language, i guess that would be the reason :)
TimToady sitting at ORD
woolfy1 TimToady! Looking forward to meet you in Cluj!!! 22:30
Eduardo_ what is cluj?
TimToady m: say "I am a small amount of code" # :)
camelia rakudo-moar 668dc5: OUTPUT«I am a small amount of code␤»
woolfy1 is sitting in Hungary...
(driving with lizmat by car from The Netherlands via Germany, Czech, Slowakia and Hungary to Romania) 22:31
TimToady++
Eduardo_ well, just had this idea of using Perl6 cool OO "new abilities" to develop a NoSQL system
meta-programming pieces of .pl files that should act as data 22:32
still carrying the ability to run its code 22:33
thowe at some point rakudo stopped running for me, and it also fails to build... 22:34
it would run, but never give the prompt.
so I tried doing rakudo self-upgrade and rakudo build moar 22:35
TimToady rakudobrew?
thowe er yes, sorry
running again so I can give a real error message...
TimToady I just pulled and made, so HEAD seems fine 22:36
thowe is there a preferred pastebin?
TimToady I usually use gist.github.com
thowe sounds good... 22:37
TimToady but I only have 4 minutes of internet left...
Eduardo_ Tim, do you think a NoSQL database system built with Perl6 is a good idea?
TimToady I don't actually answer to "Tim"... 22:38
thowe gist.github.com/thowe/540cbf8c7a90...0409869fa3
TimToady but hey, the more the merrier
TimToady thowe: how much memory do you have? you need about a gig 22:39
Eduardo_ who do you answer to? :)
TimToady I answer to my wife :)
Eduardo_ lol
TimToady looks like we're boarding now 22:40
TimToady afk & 22:40
thowe I have 4Gig in this machine
jdv79 good luck
er, safe travels
thowe but don't let me keep you 22:41
woolfy1 Good journey, TomToady!
jdv79 who's TodToady? 22:42
thowe hm, something may be odd, I should try a reboot maybe.
I'm not running anything of note, but more than half my mem seems to not be free 22:43
woolfy1 Pff. I am drunk, I mean TimToady 22:45
thowe Oh, well. I'll go for a walk and then worry about it later.
Eduardo_ TimToady for president!!! yay 22:46
woolfy1 Ow, that would be so much better than Trump, Clinton, Stein or Johnson... 22:48
Eduardo_ sure would!
jdv79 woolfy1: why do you know so many us candidates? 22:49
woolfy1 idv79: it's a skill called "reading". Too many Americans lost that skill. 22:51
jdv79 ive heard reading is hard. 22:54
but you are in nl, right? i guess im still surprised so many non-us peeps pay attention to our political shenanigans. 22:55
woolfy1 jdv79: some Dutch people understand the importance of who is going to be the next US president... 22:57
just as some people understand how important Perl 6 is to all the programming communities worldwide...
jdv79 ah:)
bbkr r: my Int @t = Int; sub foo (Int:D @x) {}; foo(@t); # should this fail with "...requires an instance of type Int, but a type object was passed." error? 23:07
camelia ( no output )
geekosaur probably should but I don't think rakudo makes any attempt to handle :D or :U applied within containers 23:19
(also that seems like a nice way to slow a program down a lot...)