»ö« 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.
AlexDaniel zostay: right 00:00
star: my $a = 0..2; my $b = 0..2; for cross($a, $b) -> ($x, $y) { say ++$ } 00:01
camelia star-m 2015.09: OUTPUT«1␤2␤3␤4␤5␤6␤7␤8␤9␤»
AlexDaniel m: my $a = 0..2; my $b = 0..2; for cross($a, $b) -> ($x, $y) { say ++$ }
camelia rakudo-moar 3259ba: OUTPUT«1␤»
skids jvcakg: Hello
AlexDaniel zostay: you are right, that's how it was before GLR
zostay even if i wasn't, my mental map got all messed up by that... eventually i will recover 00:02
RabidGravy heads up to anyone who cares, there may be a "slight" infelicity in doing a subsequent .grep on a Supply that is the result of a previous grep
zostay is @$a still safe if $a = 0 .. 10**15? i think it will lazily evaluate, but it will start filling up memory, won't it? 00:05
not important to me for what i'm working on now, but to help me rebuild my mental map... 00:06
vendethiel m: say (@(my $a = 15)).perl
camelia rakudo-moar 3259ba: OUTPUT«(15,)␤»
leont Why would that not be safe?
zostay i just meant it would create an array with 10**15 elements over time, right? 00:07
or not?
vendethiel no, it's only a one-element array
zostay i'm trying to understand
what? i missed something 00:08
leont List context doesn't do much 00:09
leont And you probably mean ... not .. 00:10
jvcakg anyone here has a free time on making me a site? we can be partners, must be talented =)
leont .. is a range, ... a sequence
zostay okay, i'll RTFM again
masak 'night, #perl6
jvcakg I only know C++ =/ 00:11
ely-se why can't you pass environment variables to Proc::Async?
jvcakg hobbyist? 00:12
passionateist? is that a word
vendethiel jvcakg: no one knows C++ //cc El_Che 00:14
ely-se*. sorry El_Che :s
jvcakg =P
ely-se I'm going crazy
stupid deadlocks
jvcakg Yea I would take on Perl 00:15
but sooooo big
I reallly like the modules
pmqs_ zip 00:15
jvcakg remember the zip drives? that went obsolete fast! 00:16
leont ely-se: good point!
jvcakg Perl ftw 00:30
mspo why is doc.perl6.org/language/nativecall using { * } (whatever code, I think) in all of the examples? 01:21
instead of using ... or !!!
skids mspo: that syntax is an "onlystar" whereas { ... } is "stub code" 01:25
skids One is a prototype, the other is a die-if-you-ever-fallback-to-this 01:26
Juerd m: sub foo { * }; foo() 01:27
camelia ( no output )
Juerd Dunno, having a stub might make debugging easier :) 01:28
m: sub foo { ... }; foo()
camelia rakudo-moar 3259ba: OUTPUT«Stub code executed␤ in sub foo at /tmp/ZjHWcpLeh5 line 1␤ in block <unit> at /tmp/ZjHWcpLeh5 line 1␤␤Actually thrown at:␤ in block <unit> at /tmp/ZjHWcpLeh5 line 1␤␤»
skids m: ...; # The stub is generic, so it would have to be aalyzed out of the code by the compiler. 01:29
camelia rakudo-moar 3259ba: OUTPUT«Stub code executed␤ in block <unit> at /tmp/sycFqYvCMG line 1␤␤»
skids Also, there are NYI ways to treat onlystars with wrapping IIRC.
mspo well in my case 01:32
* segv and ... works ;) 01:33
skids Huh, does { 1 } work?
AlexDaniel { ‘it should’ } 01:45
skids I would think an "is nativecall" sub with actual code in the body should probably warn. 01:46
skids *is native 01:47
(Warn as NYI, that is, until we have the S06 wrapping stuff, and definitely not run the native code without the {*} somewhere in there) 01:48
mspo I think { * } must be expanding to something 01:54
skids What it's supposed to expand to is in S06, but I don't think it's quite implemented that way yet. 01:55
mspo okay I think this is some other kind of bug 01:56
this is amazing 02:00
it's really just a sometimes kind of situation 02:04
gist.github.com/msporleder/2e59371765812a3c1cd6 02:06
just reordering the file is enough to make it segv vs not
skids heisenbugs--
mspo it's consistent 02:07
the ones that work always work :)
oh a bunch of cached stuff is landing in ~/.perl6 ? 02:09
gfldex do i understand github.com/rakudo/rakudo/blob/nom/...d.nqp#L636 right, that the tags are never handed over to the to be imported package? 02:09
mspo skids: I added "use v6;" to all foo's and now they all work 02:20
dalek c: 03c2f46 | skids++ | doc/Language/traps.pod:
Add a caveat about tricky precedence on ranges
02:28
skids gfldex: I don't think any code in the to-be-imported package is called -- just the EXPORT hash is used. 02:48
gfldex the calling of EXPORT in the imported package is called here github.com/rakudo/rakudo/blob/nom/...d.nqp#L664 02:54
gfldex my $result := &EXPORT(|@positional_imports, |@to_import); # or somesuch is on my v6.d wishlist 02:55
skids Maybe the EXPORT hash could do some fancy AT-POS stuff :-) 02:57
gfldex i just need the tags as named parameters in &EXPORT 03:02
EXPORT as it is, is a nice flexible ways to react to the wishes of a modules user. As soon as you start to do that, tags become pretty much useless. You have to provide them in is export but you can't devide what symbols to return from &EXPORT based on those tags. 03:03
so you either hava tags or positionals for use 03:04
autarch hmm, I just said this in #perl6-toolchain but there's more folks here so I'll repeat it ... 04:46
I think I have a more or less working Test::Stream 04:47
and by more I mean it has events, a Test.pm6-alike sub exporter, and it has a context system for making sure that test events appear to come from the place where you call ok() rather than inside the ok() sub or elsewhere
and by less I mean no built-in IPC support and it could probably use more tests
and it has no docs yet
github.com/autarch/perl6-Test-Stream
skids autarch++ though I don't know much about TAP etc. 04:53
autarch actually, the whole point of this system is that it's not tied to TAP at all
though the distro does include a TAP formatter
but it'd be very easy to output other test formats too
skids Have you taken a look at the specialized roast/packages/Test/ modules? -- some of them get a little deep in the weeds. 04:57
autarch I don't really expect this to replace anything in the core 04:58
autarch We talked about making the Test.pm6 in core an internal-only thing and recommend this distro (probably renamed to Test) for the ecosystem to use 04:59
it's actually really important that everyone use an event based test system as soon as possible in order to make it easier to build testing tools (and to test the testing tools)
but I don't know that there's any desire to actually put the thing I wrote into core, and my understanding is that p6 is aiming for a lightweight core to avoid the p5 "why do we have this ancient piece of junk in core?!" problem 05:00
skids Certainly parallelizing tests is good. Is there any predictability built in, so that we only get spurious failures due to weird scheduling when we want to? 05:01
MadcapJake lol the github perl6 syntax highlighter catches my method «is-before» as two keywords seperated by a minus op :P 05:04
autarch skids: what I'm working on has very iittle to do with parallelization 05:05
autarch it's just an abstraction of testing from "spit out some TAP to stdout" to "send an abstract event describing the thing (Plan, Test, Skip) to a bunch of listeners and let the listeners do what they want (and one of those listeners may be a TAP formatter that prints to stdout)" 05:06
what is possible under this system is to implement an IPC layer so events can be passed from one thread or process to a central monitoring process - so it provides a reasonable toolset for parallelization, and I'd like to add an actual IPC mechanism to the distro 05:07
gfldex m: gist.github.com/57bb505e41eb7649b1ba 08:32
camelia rakudo-moar 3259ba: OUTPUT«5===SORRY!5=== Error while compiling /tmp/GHw2wy1jJc␤Confused␤at /tmp/GHw2wy1jJc:1␤------> 3https:7⏏5//gist.github.com/57bb505e41eb7649b1ba␤ expecting any of:␤ colon pair␤»
gfldex what am i doing wrong? ^^^ 08:33
moritz camelia doesn't seem to recognize the gist URL 08:37
gfldex ===SORRY!=== Error while compiling /home/dex/projekte/perl6/tmp/import/export.pod.p6 09:12
Error while importing from 'ParametrisedLib':
no EXPORT sub, but you provided positional argument in the 'use' statement
at /home/dex/projekte/perl6/tmp/import/export.pod.p6:57
------> arametrisedLib NewBaseClass, {:consumer}⏏;
that's the error that gist produces and leaves me confused
any ideas why it cant see the &EXPORT? 09:13
sortiz gfldex, Try: import ParametrizedLib { NewBaseclass, :consumer}; # Just guessing 09:20
moritz gfldex: I think EXPORT must be outside the module
gfldex sortiz: no luck 09:27
RabidGravy m: my $supp-a = Supply.from-list(<foo bar baz>); $supp-a.tap( { say "original $_" }); my $supp-b = $supp-a.grep(/bar/ ).map({ $_.uc }); $supp-b.tap( { say "B: $_" }); $supp-b.grep({ /foo/ }).tap({ say "C: $_" }); 09:35
camelia rakudo-moar 3259ba: OUTPUT«original foo␤original bar␤original baz␤B: BAR␤C: FOO␤»
RabidGravy ^ I'm pretty damned sure that it's not supposed to do that 09:36
RabidGravy If someone thinks that it is expected behaviour and I'd be all ears as to why they think so 09:38
sortiz m: package Foo { our sub EXPORT(|a) { say |a; } }; import Foo Any, Int, <:flags &gol>;
camelia ( no output )
RabidGravy as it stands it's totally broken Net::AMQP as it uses that pattern all over the place 09:39
sortiz m: package Foo { our sub EXPORT(|a) { say |a; } }; Foo::EXPORT(Any, Int, <:flags &gol>); 09:40
camelia rakudo-moar 3259ba: OUTPUT«(Any)(Int)(:flags &gol)␤»
sortiz Seems that import extra args is NYI 09:40
dalek ecs: 2168554 | (Sterling Hanenkamp)++ | S04-control.pod:
[S04] Add missing parenthesis in zip() example
09:41
ecs: 21525aa | niner++ | S04-control.pod:
Merge pull request #105 from zostay/zip-parens

  [S04] Add missing parenthesis in zip() example
gfldex sortiz: it does work when the modules are put into individual files
dalek osystem: 8767ce6 | pmqs++ | META.list:
Update META.list
osystem: 43517bd | niner++ | META.list:
Merge pull request #126 from pmqs/patch-3

Aded Archive-SimpleZip
sortiz Maybe that EXPORT handling is per compunit 09:44
nine sortiz: do you mean "import" specifically or EXPORT in general? 09:45
RabidGravy wonders whether it is worth bisecting the above as there have been several opportunities to break it 09:51
sortiz Both, see:
m: module Foo { sub bar is export {} }; module Bar { sub foo is export {} }; UNIT::EXPORT::DEFAULT::.keys.say 09:52
camelia rakudo-moar 3259ba: OUTPUT«(&foo &bar)␤»
sortiz I.e. un the same compunit, both modules uses the same UNIT.
RabidGravy yes 09:53
sortiz s/un/in
RabidGravy I don't suppose anyone knows the commit where the GLR branch got merged? 09:56
sortiz So, when use or import search for an EXPORT sub, they expect only one per UNIT. I'm just speculating. 09:58
RabidGravy yes that is currently the case 09:59
sortiz Make sense, that way we can have many packages (classes, emums, etc.) per compunit, all sharing the same import/export machinery. 10:02
nine RabidGravy: commit 9622594885a50a761887a7bb451102ad2adeb9c1 10:06
sortiz: yes, module management is all about comp units 10:07
RabidGravy I'm pretty certain that the offending commit for the Supply.grep badness is a8231f14 but I'll do the full bisect anyway 10:08
nine, cheers
moritz RabidGravy: 9622594885a50a761887a7bb451102ad2adeb9c1 seems to have been the GLR merge 10:09
RabidGravy cool
RabidGravy that's the last time I know that Net::AMQP was tested 10:09
RabidGravy actually this an even more succinct example, with no map involved 10:12
m: Supply.from-list(<foo bar baz>).grep(/foo/).grep(/baz/).tap({say $_}
camelia rakudo-moar 3259ba: OUTPUT«5===SORRY!5=== Error while compiling /tmp/I8aBuHgh0K␤Unable to parse expression in argument list; couldn't find final ')' ␤at /tmp/I8aBuHgh0K:1␤------> 3z>).grep(/foo/).grep(/baz/).tap({say $_}7⏏5<EOL>␤ expecting any of:␤ post…»
RabidGravy m: Supply.from-list(<foo bar baz>).grep(/foo/).grep(/baz/).tap({say $_})
camelia rakudo-moar 3259ba: OUTPUT«baz␤»
RabidGravy that is, it appears that a subsequent grep on a supply derived by grep goes back to the original supply 10:13
and I really, really can't think of any plausible reason why that might be intentional 10:14
moritz yes, bug 10:15
sortiz m: use NativeCall; class Foo is repr('CStruct') { }; sub foo(Pointer[Foo]) is native('bar') { }; 10:16
camelia ( no output )
sortiz m: use NativeCall; class Foo is repr('CStruct') { sub foo(Pointer[Foo]) is native('bar') { }; } # Bug ? 10:17
camelia rakudo-moar 3259ba: OUTPUT«5===SORRY!5=== Error while compiling /tmp/EbcMCANe5k␤An exception occurred while parameterizing Pointer␤at /tmp/EbcMCANe5k:1␤Exception details:␤ Cannot call infix:<===>(Foo, Str); none of these signatures match:␤ ($?)␤ ($a, $b)…»
masak good antenoon, #perl6 10:37
sortiz o/ masak 10:39
Hotkeys good early morning masak :p 10:41
RabidGravy good quarter to eleven GMT 10:44
RabidGravy bisecting over four months of commits is really rather tedious 10:46
nearly every step requires a make distclean && rm -rf install 10:47
moritz RabidGravy: if you suspect one commit, you can simply build it and the previous commit; if the previous succeeds and the one fails, you've found the offending commit 10:48
RabidGravy I'm pretty sure I know which commit already to be honest (a8231f14) but it seems too obvious 10:50
moritz RabidGravy: then it's easier to test that hypothesis than to find for that in the vast space of possible offenders 10:51
RabidGravy indeed, but not enough coffee yet 10:54
it is does throw something interesting up
that is that the parse stage varies wildly over time 10:55
[Tux] UNDER 12! 11:00
csv-ip5xs 50000 18.119 12.488
test 50000 23.267 22.634
test-t 50000 12.603 11.717
csv-parser 50000 51.006 0.912
abaugher, leading v fixed. Try again 11:03
nine RabidGravy: do you use git bisect run?
RabidGravy no
does that help? 11:04
masak I'm curious, is someone actively using Tux++'s benchmarks to optimize Rakudo?
[Tux] Text::CSV requires Perl version 6.0.0. Cannot continue.
moritz it helps you to automate the bisects
[Tux] that is without the v. I need guidance I think
RabidGravy I think it's the 6.c or whatever
moritz [Tux]: use v6.c;
RabidGravy or just plain 6 will do 11:05
azawawi hi 11:05
nine RabidGravy: well it makes git do all the tedious work, so you can do something else :) As long as you can automate the testing
moritz \o azawawi 11:06
masak RabidGravy: `git bisect run` takes a shell command as arguments, and considers exit code 0 to be "good" and other exit codes to be "bad"
nine [Tux]: there's no 6.0.0. It's always 6.c: use v6.c; and in the META6.json "perl": "6.c", # without the v
RabidGravy oh okay 11:07
azawawi what's the best way to *depend* on a specific module under platform X in META.info? 11:07
RabidGravy I think it's time to flip Test::META to use always fail for a v
jdv79 hola * 11:08
yoleaux 11 Jan 2016 12:15Z <Zoffix> jdv79: How is work on the P6 variant of PAUSE/CPAN/MetaCPAN going? Maybe the repo should be moved under the perl6 GitHub organization, so it'd be easier for potential volunteers to finds and contribute to?
11 Jan 2016 12:18Z <Zoffix> jdv79: we also now have #perl6-toolchain you may be interested in joining.
masak azawawi: you mean you want the dependency to be different, depending on platform?
azawawi masak: yup 11:09
masak hola jdv79
azawawi: no idea. is that even possible?
azawawi masak: e.g. on windows, i want to depend on Alien::OpenCV::Windows to install the DLL . On unix, i need LibraryMake but not on windows 11:09
masak: otherwise OpenCV will be bloated given that the openv (static) DLL is like 3.24MB 11:10
masak: the zipped tarball from github that is
jdv79 anything extraordinarily interesting happen in the last few weeks?
masak azawawi: this might be something to ask about in #perl6-toolchain 11:11
jdv79: ...Christmas? :)
jdv79 i ducked out just after new years so i caught that part 11:12
[Tux] Hmm, it wasn't under 12. I looked at the wrong column :( sorry
azawawi masak: done 11:13
jdv79: github.com/azawawi/perl6-opencv/bl...drawing.p6 :) 11:14
jdv79 masak: i meant a couple weeks. my bad. thanks. 11:26
pierre-vigier p6: <121 200 333 392 605 684 707 944 909 320 1221 1296 1404 1414 1080>.map( * / ++$ ).map(*.chr).join.flip.say
camelia rakudo-moar 3259ba: OUTPUT«Hello everybody␤»
lucs m: unit class A; class B::C { }; say A::B::C.perl; 11:30
camelia rakudo-moar 3259ba: OUTPUT«A::B::C␤»
lucs m: unit class A; class Test::C { }; say A::Test::C.perl;
camelia rakudo-moar 3259ba: OUTPUT«A::Test::C␤»
lucs m: unit class A; class X::C { }; say A::X::C.perl;
camelia rakudo-moar 3259ba: OUTPUT«Could not find symbol '&C'␤ in block <unit> at /tmp/ZCdm_oTPlE line 1␤␤Actually thrown at:␤ in block <unit> at /tmp/ZCdm_oTPlE line 1␤␤»
lucs Why does the last one fail?
pierre-vigier i might be totally wrong, however 11:32
say A.WHAT
p6: say A.WHAT
camelia rakudo-moar 3259ba: OUTPUT«5===SORRY!5=== Error while compiling /tmp/tmpfile␤Undeclared name:␤ A used at line 1␤␤»
pierre-vigier A is unkonw in core 11:33
where X is not
say X.WHAT
p6: say X.WHAT
camelia rakudo-moar 3259ba: OUTPUT«(X)␤»
lucs Hmm...
p6: say Test.WHAT
camelia rakudo-moar 3259ba: OUTPUT«5===SORRY!5=== Error while compiling /tmp/tmpfile␤Undeclared name:␤ Test used at line 1␤␤»
lucs Okay, makes sense I guess. 11:34
pierre-vigier X might be reserverd only for Exception 11:34
p6: unit class A; A::X.WHAT.say 11:35
camelia rakudo-moar 3259ba: OUTPUT«Could not find symbol '&X'␤ in block <unit> at /tmp/tmpfile line 1␤␤Actually thrown at:␤ in block <unit> at /tmp/tmpfile line 1␤␤»
pierre-vigier but that is strange
lucs What's 'p6:' as opposed to 'm:'? 11:36
pierre-vigier i don't know if there is any
lucs Oh, right, according to the output, they do look the same.
pierre-vigier rakudo: "test".say 11:37
camelia rakudo-moar 3259ba: OUTPUT«test␤»
lucs That too :)
geekosaur I think they're currently the same becaase rakudo-moar's the only one that works right now. but notionally p6: runs in every working backend?
jdv79 .tell Zoffix absolutely nothing. i fell off the grid for two weeks. sure, i can move them over.
yoleaux jdv79: I'll pass your message to Zoffix.
RabidGravy .tell pierre-vigier yes X is implicitly at least created in the setting because that's where all the exceptions live 11:48
yoleaux RabidGravy: I'll pass your message to pierre-vigier.
lucs m: unit class A; class X::C { }; say X::C.perl; # This is why I'm confused. 11:49
camelia rakudo-moar 3259ba: OUTPUT«A::X::C␤»
lucs m: unit class A; class X::C { }; say A::X::C.perl;
camelia rakudo-moar 3259ba: OUTPUT«Could not find symbol '&C'␤ in block <unit> at /tmp/khvZqzkGHL line 1␤␤Actually thrown at:␤ in block <unit> at /tmp/khvZqzkGHL line 1␤␤»
RabidGravy because you're still in A 11:50
m: class A { class X:::C { } }; say A::X::C.perl;
camelia rakudo-moar 3259ba: OUTPUT«5===SORRY!5=== Error while compiling /tmp/tnh3fiXN29␤Cannot use adverb C on a type name (only 'ver' and 'auth' are understood)␤at /tmp/tnh3fiXN29:1␤------> 3class A { class X:::C7⏏5 { } }; say A::X::C.perl;␤ expecting any of:␤ …»
RabidGravy m: class A { class X::C { } }; say A::X::C.perl; 11:51
camelia rakudo-moar 3259ba: OUTPUT«Could not find symbol '&C'␤ in block <unit> at /tmp/Q0ULrbn43G line 1␤␤Actually thrown at:␤ in block <unit> at /tmp/Q0ULrbn43G line 1␤␤»
RabidGravy eh?
lucs m: unit class A; class B::C { }; say A::B::C.perl; 11:52
camelia rakudo-moar 3259ba: OUTPUT«A::B::C␤»
RabidGravy I'm confused now as well 11:53
azawawi tadzik: ping 11:57
azawawi .tell tadzik Shell::Command is now failing to install on windows after the which command was added. Please consider using File::Which 11:58
yoleaux azawawi: I'll pass your message to tadzik.
RabidGravy I can only think that the 'X' is actually special cased somewhere
lucs Actually, it appears to fail in the same way for all built-in types (the one I've tried anyway). 12:00
m: unit class A; class Bag::C { }; say A::Bag::C.WHAT
camelia rakudo-moar 3259ba: OUTPUT«Could not find symbol '&C'␤ in block <unit> at /tmp/dFjuudGQvw line 1␤␤Actually thrown at:␤ in block <unit> at /tmp/dFjuudGQvw line 1␤␤»
lucs m: unit class A; class Bag::C { }; say Bag::C.WHAT
camelia rakudo-moar 3259ba: OUTPUT«(C)␤»
lucs m: unit class A; class Bag::C { }; say Bag::C.perl
camelia rakudo-moar 3259ba: OUTPUT«A::Bag::C␤»
RabidGravy I cannot comment on whether it is intentional or not, but I can hypothesize a failure mode 12:01
azawawi zef/panda both fail at different things... zef works but you cant --force it :) panda will ignore your --force with the famous "Sorry.. already installed" ... :) 12:02
RabidGravy time for a new one
;-)
azawawi I declare opencv to be working on windows but not when installed through panda or zef.... :) 12:03
azawawi wonders where is rakudo star 2015.12 (rakudo.org/downloads/star) 12:06
RabidGravy azawawi++ coolio I can't think of a use I may have for it quite yet but cool nonetheless 12:07
azawawi RabidGravy: I want to make a demo script where camelia flies around and then eats a python :) 12:08
another pet project to start later for Arduino with Perl 6 .... Implementing github.com/firmata/protocol :) 12:09
RabidGravy Ooh, then you'll be wanting to do some serial port thingy :) I've been putting it off myself, but will need it to drive a PiLite 12:11
azawawi and then try to remote control an arduino board through firmata over a bluetooth connection in Perl 6
RabidGravy I think I've got a bluetooth shield around somewhere 12:12
azawawi i bought an HC-06 bluetooth chip 12:13
pretty cheap
RabidGravy I was going to have a play with the MQTT thing Arduino -> RabbitMQ -> Perl 6 at some point but seem to have got totally bogged down in fixing Net::AMQP 12:14
azawawi cool 12:15
also simplecv.org/ is now another project for OpenCV::Simple :) 12:16
azawawi windows reboot... brb & 12:17
lucs m: class A { class X::Meh { }; }; class B { class X::Meh { }; }; die X::Meh.new; 12:21
camelia rakudo-moar 3259ba: OUTPUT«B::X::Meh<140541024946368>␤ in block <unit> at /tmp/aenCLaASRp line 1␤␤»
lucs m: class A { class X::Meh { }; }; class B { class X::Meh { }; }; die B::X::Meh.new;
camelia rakudo-moar 3259ba: OUTPUT«Could not find symbol '&Meh'␤ in block <unit> at /tmp/SwAvDhVyFE line 1␤␤Actually thrown at:␤ in block <unit> at /tmp/SwAvDhVyFE line 1␤␤»
lucs How can I be sure to avoid name collisions in the X namespace? 12:22
Do you folks do something like this in your modules? class X::MyModule::Meh ? 12:23
RabidGravy yes, but I always only use them in the module
so it isn't a problem
lucs Ah, I hit the problem when testing exceptions (from another file, eh). 12:24
RabidGravy m: class A { class X::Meh { }; method foo() { die X::Meh.new } }; class B { class X::Meh { }; method foo() { die X::Meh.new }}; A.foo 12:25
camelia rakudo-moar 3259ba: OUTPUT«A::X::Meh<140617387570104>␤ in method foo at /tmp/o27asXUoVa line 1␤ in block <unit> at /tmp/o27asXUoVa line 1␤␤»
RabidGravy m: class A { class X::Meh { }; method foo() { die X::Meh.new } }; class B { class X::Meh { }; method foo() { die X::Meh.new }}; B.foo
camelia rakudo-moar 3259ba: OUTPUT«B::X::Meh<139659739210712>␤ in method foo at /tmp/Eo708hzNdL line 1␤ in block <unit> at /tmp/Eo708hzNdL line 1␤␤»
lucs Well, that works, but I was trying to pass around the exceptions with throws-like(), and tripping all over myself with these failures. 12:28
RabidGravy throw-like will match the short name fine 12:29
lucs Hmm... I'll revise my code...
RabidGravy infact 12:30
RabidGravy m: use Test; class A { class X::Meh { }; method foo() { die X::Meh.new } }; throws-like { A.foo }, X::Meh, "there"; 12:31
camelia rakudo-moar 3259ba: OUTPUT« 1..2␤ ok 1 - code dies␤ not ok 2 - right exception type (A::X::Meh)␤ ␤# Failed test 'right exception type (A::X::Meh)'␤# at /home/camelia/.perl6/2015.12-212-g3259ba3/precomp/6F03C0411DF045AC18E1EFD65118CA6D717A8AA5.1452723027.09182/3…»
RabidGravy m: use Test; class A { class X::Meh { }; method foo() { die X::Meh.new } }; throws-like { A.foo }, A:X::Meh, "there"; 12:32
camelia rakudo-moar 3259ba: OUTPUT«5===SORRY!5=== Error while compiling /tmp/ZxGhuoRVG0␤Invalid type smiley 'X' used in type name␤at /tmp/ZxGhuoRVG0:1␤------> 3:Meh.new } }; throws-like { A.foo }, A:X7⏏5::Meh, "there";␤ expecting any of:␤ pair value␤»
RabidGravy m: use Test; class A { class X::Meh { }; method foo() { die X::Meh.new } }; throws-like { A.foo }, A::X::Meh, "there";
camelia rakudo-moar 3259ba: OUTPUT«Could not find symbol '&Meh'␤ in block <unit> at /tmp/qJXa0wWa_G line 1␤␤Actually thrown at:␤ in block <unit> at /tmp/qJXa0wWa_G line 1␤␤»
RabidGravy m: use Test; class A { class X::Meh { }; method foo() { die X::Meh.new } }; throws-like { A.foo }, X::Meh, "there";
camelia rakudo-moar 3259ba: OUTPUT« 1..2␤ ok 1 - code dies␤ not ok 2 - right exception type (A::X::Meh)␤ ␤# Failed test 'right exception type (A::X::Meh)'␤# at /home/camelia/.perl6/2015.12-212-g3259ba3/precomp/6F03C0411DF045AC18E1EFD65118CA6D717A8AA5.1452723027.09182/3…»
RabidGravy okay that'll be weird right there
I have tests that do exactly that
lucs Yeah, that looks like what I was trying. 12:34
RabidGravy: Are you saying that you have tests that don't work (anymore?) as expected? 12:38
RabidGravy no
m: use Test; module A { class X::Meh is Exception { }; class C { method foo() { X::Meh.new.throw } } }; throws-like { A::C.foo }, X::Meh, "there";
camelia rakudo-moar 3259ba: OUTPUT« 1..2␤ ok 1 - code dies␤ ok 2 - right exception type (A::X::Meh)␤ok 1 - there␤» 12:39
RabidGravy it was just a bad example
lucs Oh.
RabidGravy If the class isn't an Exception it will never work 12:40
lucs With throws-like()? It better not, eh. 12:41
I'll revise my code, see if I can fix it.
RabidGravy no, but the example I ran first it wasn't which confused me 12:42
(doing ten things at once)
pierre-vigier Is there any way to get the private methods added by a role? 12:55
yoleaux 11:48Z <RabidGravy> pierre-vigier: yes X is implicitly at least created in the setting because that's where all the exceptions live
pierre-vigier p6: role A { method A() {}; method !B() { } };say A.^methods; 12:56
camelia rakudo-moar 3259ba: OUTPUT«(A)␤»
pierre-vigier p6: role A { method A() {}; method !B() { } };say A.^private_methods;
camelia rakudo-moar 3259ba: OUTPUT«Method 'private_methods' not found for invocant of class 'Perl6::Metamodel::ParametricRoleGroupHOW'␤ in block <unit> at /tmp/tmpfile line 1␤␤»
pierre-vigier i found nothing in the doc
RabidGravy m: role A { method A() {}; method !B() { } };say A.^methods(:all) 12:57
camelia rakudo-moar 3259ba: OUTPUT«(A)␤»
RabidGravy oh I did an example yesterday but I forgot 12:58
pierre-vigier i checked as well the rakudo source for ParametricRoleHOW and ParametricRoleGroupHOW 12:59
but did not found anything
moritz : role A { method A() {}; method !B() { } }; say A.^private_method_table().keys 13:04
m: role A { method A() {}; method !B() { } }; say A.^private_method_table().keys
camelia rakudo-moar 3259ba: OUTPUT«Method 'private_method_table' not found for invocant of class 'Perl6::Metamodel::ParametricRoleGroupHOW'␤ in block <unit> at /tmp/M1IGwJHW4z line 1␤␤»
RabidGravy ah yes, that was it
moritz m: role A { method A() {}; method !B() { } }; say A.^candidates(0).private_method_table(A).keys 13:05
camelia rakudo-moar 3259ba: OUTPUT«Too many positionals passed; expected 2 arguments but got 3␤ in any candidates at gen/moar/m-Metamodel.nqp line 2653␤ in block <unit> at /tmp/M0rCSTafDD line 1␤␤»
moritz m: role A { method A() {}; method !B() { } }; say A.^candidates(0).private_method_table().keys
camelia rakudo-moar 3259ba: OUTPUT«Too many positionals passed; expected 2 arguments but got 3␤ in any candidates at gen/moar/m-Metamodel.nqp line 2653␤ in block <unit> at /tmp/CB_scRG3gp line 1␤␤»
moritz m: role A { method A() {}; method !B() { } }; say A.^candidates(0).perl
camelia rakudo-moar 3259ba: OUTPUT«Too many positionals passed; expected 2 arguments but got 3␤ in any candidates at gen/moar/m-Metamodel.nqp line 2653␤ in block <unit> at /tmp/xW1R_yOfeM line 1␤␤»
timotimo o/
moritz m: role A { method A() {}; method !B() { } }; say A.^candidates[0].private_method_table().keys
camelia rakudo-moar 3259ba: OUTPUT«Method 'private_method_table' not found for invocant of class 'A'␤ in block <unit> at /tmp/nZrIOjOXtu line 1␤␤»
moritz m: role A { method A() {}; method !B() { } }; say A.^candidates[0].private_methods() 13:06
camelia rakudo-moar 3259ba: OUTPUT«Method 'private_methods' not found for invocant of class 'A'␤ in block <unit> at /tmp/X3UocRFlCG line 1␤␤»
moritz m: role A { method A() {}; method !B() { } }; say A.^candidates[0].^private_methods()
camelia rakudo-moar 3259ba: OUTPUT«Method 'private_methods' not found for invocant of class 'Perl6::Metamodel::ParametricRoleHOW'␤ in block <unit> at /tmp/kfy25A_Gro line 1␤␤»
moritz m: role A { method A() {}; method !B() { } }; say A.^candidates[0].^private_method_table().keys
camelia rakudo-moar 3259ba: OUTPUT«(B)␤»
moritz ok, that was a tough ride :-) 13:07
\o timotimo
pierre-vigier hum, i'm confused 13:08
moritz don't worry; for some of us, that's quite normal.
pierre-vigier in core, it seems that role is first applied to a strawman to check for collisions 13:09
and after, that "dummy" class is introspected
m: role A { method A() {}; method !B() { } }; say A.^candidates 13:11
camelia rakudo-moar 3259ba: OUTPUT«((A))␤»
pierre-vigier m: role A { method A() {}; method !B() { } }; say A.^candidates[0]
camelia rakudo-moar 3259ba: OUTPUT«(A)␤»
RabidGravy .tell jnthn I don't believe you intended for rt.perl.org/Ticket/Display.html?id=127297 to happen :-\ 13:12
yoleaux RabidGravy: I'll pass your message to jnthn.
pierre-vigier m: role A { method A() {}; method !B() { } }; say A.^candidates[0].HOW 13:16
camelia rakudo-moar 3259ba: OUTPUT«Perl6::Metamodel::ParametricRoleHOW.new␤»
pierre-vigier m: role A { method A() {}; method !B() { } }; say A.HOW
camelia rakudo-moar 3259ba: OUTPUT«Perl6::Metamodel::ParametricRoleGroupHOW.new␤»
pierre-vigier that explains 13:17
m: role A { method A() {}; method !B() { } }; say A.new.^private_method_table 13:18
camelia rakudo-moar 3259ba: OUTPUT«B => B␤»
pierre-vigier m: role A { method A() {}; method !B() { } }; say A.new.^private_method_table.keys
camelia rakudo-moar 3259ba: OUTPUT«(B)␤»
pmqs Is DESTROY for a class always invoked? 13:20
m:class c { method DESTROY() { say "destroy"; } }; { my $x = c.new ; }
m: class c { method DESTROY() { say "destroy"; } }; { my $x = c.new ; }
camelia ( no output )
pmqs I see it invoked sometimes, but mostly not
Am I missing something obvious? 13:21
RabidGravy it is called when the garbage collector gets to the object 13:21
so if the program is exiting anyway then it may not be
pmqs any way to reliably tidy up on object destruction? 13:22
if DESTROY doesn't seem to get called all the time 13:23
nine pmqs: LEAVE or END phasers, depending on what you want to do during destruction
end _when_ you need it done obviously 13:24
pmqs nine, really want it when the object goes out of scope 13:24
nine then LEAVE is what you need
pmqs nine, ta. Will have a play with that 13:25
nine { my $obj = Obj.new; LEAVE $obj.cleanup; }
arnsholt pmqs: In case you're wondering *why* destructors aren't called reliably, it's because guaranteeing reliable destructors (as well as the order they're called in) more or less forces you to do some kind of refcounting GC 13:26
Skarsnik Hello
hey pmqs, why no read support in your zip module? x) 13:27
dalek line-Perl5: d64121b | (Stefan Seifert)++ | META.info:
Fix warning about the leading "v" in Perl 6 version in META.info
line-Perl5: b71be5a | (Stefan Seifert)++ | lib/Inline/Perl5.pm6:
Replace "native" sub by standard "is native" traits

Now that the whole mechanism for finding the bundled native library is provided by NativeCall and Perl 6, we can use a plain constant for simplifying the code.
line-Perl5: 9bd89e4 | (Stefan Seifert)++ | lib/Inline/Perl5.pm6:
Replace baroque OpaquePointer by just Pointer

Now that we require Perl 6.c, we can be sure it supports the shorter "Pointer".
pmqs Skarsnik, there's already a module that does that File::Zip (I think) 13:29
arnsholt, aah yes. remember reading that
Skarsnik Yes, but I don't want to use 2 modules with different interface for the the "same" thing
pmqs Skarsnik, I hear you :-) 13:30
gfldex m: sub f(::T) { class :: is T {} }; f(class {}); 13:41
camelia rakudo-moar 3259ba: OUTPUT«Unhandled exception: Method 'item' not found for invocant of class 'T'␤ at <unknown>:1 (/home/camelia/rakudo-m-inst-1/share/perl6/runtime/CORE.setting.moarvm:print_exception:4294967295)␤ from gen/moar/m-CORE.setting:20403 (/home/camelia/rakudo-m-in…»
RabidGravy yeah, I saw that one the other day, can't remember what I was trying to do 13:42
gfldex i got a complete (i think) list of things that do work with EXPORT and type captures 13:42
RabidGravy gfldex++ 13:43
gfldex gist.github.com/gfldex/e0c398175941d094958a 13:46
if you happen to another one that works, please let me know
i want to propaganda this
s/to/to know/
jnthn RabidGravy: Certainly a bug; thanks for reporting 13:47
yoleaux 13:12Z <RabidGravy> jnthn: I don't believe you intended for rt.perl.org/Ticket/Display.html?id=127297 to happen :-\
RabidGravy had me tearing my (metaphorical) hair out, I was postulating all sorts of weird interactions with the target supply before I golfed it :) 13:48
dalek kudo/nom: 770d109 | jnthn++ | src/core/Supply.pm:
Fix scoping bug in Supply.grep.
13:51
jnthn RabidGravy: ^^
And yes, please add a test to S17-supply/grep.t 13:52
RabidGravy will do, just re-testing 13:53
nine jnthn: so I _was_ on the right track there :) 13:54
jnthn :) 13:58
My first Rakudo commit of 2016 \o/
RabidGravy and the first one by anyone since Wednesday apparently 14:00
jnthn++
nine .seen lizmat
yoleaux I saw lizmat 13 Jan 2016 21:26Z in #perl6: <lizmat> mspo: no pb
pierre-vigier Thank to all the help i had here on Metamodel, Trait and Role, i finally have something "showable" for AttrX::PrivateAccessor 14:10
github.com/pierre-vigier/Perl6-Att...teAccessor
I love Perl6 :)
masak lol, I blogged! strangelyconsistent.org/blog/macros...q-are-they 14:17
mspo masak: a lot of formatting issues 14:29
masak oh :/ 14:30
masak looks
mspo the first few questions, anyway
they go to the next line
masak yes 14:31
will fix immediately
mspo markdown?
ditto Q: Ok, final question: is there something that you've omitted from the 14:32
masak fix'd
should be able to F5 now and see the fix'd version
apologies for the inconvenience
and yes, markdown
I do know that ATX headers can't break lines 14:33
but somehow I forgot and overeagerly formatted them in vim when converting from a gist :)
mspo markdown without live preview is hard :)
mspo I haven't found a good drop-in js live-preview widget either 14:34
masak I've seen plenty of libraries for it 14:35
dunno about widgets
but you're right -- I would like something like that for editing my posts
mspo most of the libs I've seen are part of larger systems 14:37
mspo so if your edit page isn't structured just so.. 14:37
average blog.garage-coding.com/2016/01/17/a...teams.html 14:42
does anyone here understand this blogpost ?
dalek ast: 696d50a | RabidGravy++ | S17-supply/grep.t:
Check subsequent grep only gets the results of the first

Per rt.perl.org/Ticket/Display.html?id=127297
14:43
RabidGravy I'm wondering looking at that whether the Test::Tap merits being given a life in the ecosystem 14:54
orbus good morning sixers 14:59
got another puzzle to figure out, if anyone's around
orbus so say I want to loop on polling a channel, and stop as soon as no more values are available 15:02
m: my $c=Channel.new; for 1..3 {$c.send($_)}; while $c.poll -> $x { put $x }
camelia rakudo-moar 770d10: OUTPUT«1␤2␤3␤»
orbus but while $c.poll -> $x actually apparently test the value of $x
m: my $c=Channel.new; for 0..3 {$c.send($_)}; while $c.poll -> $x { put $x } 15:03
camelia ( no output )
orbus if there's a 0 on the channel, the loop ends prematurely
poll returns Nil if it fails to get a value, but I can't figure out a good way to test for that
if I assign the result of poll to a variable and then test it, Nil evaporates on assignment 15:04
RabidGravy m: my $c=Channel.new; for 0..3 {$c.send($_)}; $c.close; for $c.list -> $x { put $x } 15:05
camelia rakudo-moar 770d10: OUTPUT«0␤1␤2␤3␤»
orbus no, don't want to do that 15:06
orbus that will only work on one thread 15:06
RabidGravy well, you have to signal the end of the channel
orbus I don't think I want to do that either :p
orbus m: my $c=Channel.new; for 0..3 {$c.send($_)}; loop { my $x = $c.poll; if defined $x { put $x } else { last } } 15:07
camelia rakudo-moar 770d10: OUTPUT«0␤1␤2␤3␤»
orbus that seems to work
thought I tried that before
jnthn You generally don't want to loop on .poll
Because it's busy waiting.
orbus well, not really if I stop and go do something else as soon as I don't get a value back 15:08
jnthn Ah, OK. So there's a bit more to it than your example showed :)
orbus yes - it was a naive example
orbus also I'm trying to figure out how Nil works 15:08
jnthn If you didn't already know, you can use whenever with a Channel also.
orbus hmmm 15:09
haven't looked at whenever yet
jnthn Nil, when assigned to a Scalar, resets it to its default value
Which is Any for an untyped Scalar.
orbus yeah, I was trying to figure out how to reliably test for that
I guess defined 15:10
or ! defined
i.e. first I tried $x === Nil but that was no good
jnthn with $c.poll -> $x { put $x } # maybe neater
Right, after the assignment the Nil is gone.
orbus as I discovered :)
more generally, it seems like it would be nice if there were a "while defined" loop 15:12
that also allowed assignment
m: my $c=Channel.new; for 0..3 {$c.send($_)}; loop { with $c.poll -> $x { say $x } else { last }} 15:15
camelia rakudo-moar 770d10: OUTPUT«0␤1␤2␤3␤»
orbus yeah, that works and is slightly neater - thanks
I've just been messing around with concurrency stuff a lot over the last week or two 15:17
still haven't totally wrapped my head around all the things you can do with Supply
jnthn Me either :D 15:18
orbus haha
actually the other day I was trying to implement atomic compare and swap
didn't go so well
and then I tried to make a bounded channel that would block if you tried to put more than $limit elements into it until slots freed up 15:19
also didn't go so well
apparently I'm worse at concurrency than I believed
funrep "my $conn = IO::Socket::INET.new(listen => $server, localport => $port);" this just crashes without any error message or anything, any ideas? 15:21
RabidGravy "crashes" ? 15:22
orbus $server and $port aren't declared...
try putting my on them
runs fine for me if I do that...
jnthn orbus: Yeah, I'm kinda pondering whether there'd be a market for a Perl 6 concurrency cookbook at some point :)
But want to work lots of polishing up the implementation first :) 15:23
*lots on
orbus definitely
pochi does 'listen' take server?
RabidGravy no it doesn't
orbus jnthn: actually I've been meaning to ask you if you've done a writeup anywhere on exactly what is and is not atomic 15:24
like
scalar assignment seems to be
usually
orbus unless you're assigning like an object constructor - object construction definitely seems not to be 15:24
jnthn orbus: No, that plus a "memory model" doc is really needed.
RabidGravy funrep, please examine the example in doc.perl6.org/type/IO::Socket::INET
moritz please use https:// URLs to doc.perl6.org :-) 15:25
orbus mostly just trying to figure out where the mines are so I don't step on them
jnthn: okay, that's kind of what I figured
jnthn Hm, looks like I'd better go for my afternoon stroll now if I want it before dark falls. :) 15:26
bbl :)
orbus enjoy
RabidGravy already nearly dark here
orbus it's morning here
time for breakfast actually 15:27
bbl
jvcakg what does bbl mean? 15:33
nine be back later 15:34
jvcakg ty
psyke =P
RabidGravy Well, it appears that Net::AMQP is nearly working again 15:45
tadzik Computer, messages 15:55
yoleaux 11:58Z <azawawi> tadzik: Shell::Command is now failing to install on windows after the which command was added. Please consider using File::Which
tadzik ... There's a which command now?
lucasb
.oO( which command are you talking about? )
nine tadzik: do you know the feeling, when you wake up and don't know your software anymore? ;) 15:56
tadzik Yes! :)
But I wake up and don't know who writes my software :P 15:57
Skarsnik yay the first type I define my own operator in a perl 6 program x)
*time
RabidGravy If anyone's bored you can take a poke at github.com/retupmoca/P6-Net-AMQP one thing left broken now 16:02
funrep RabidGravy: oh i never closed it, may that have to do with it? i forgot to say i have a loop { } after 16:10
lucs Can I make something like this work?: "Foo::Bar".new
That is, instantiate a class given its name in a string.
RabidGravy lucs, :("Foo::Bar").new
er ::() rather 16:11
lucs I wish I knew how to find that stuff in the docs :)
Thanks
RabidGravy funrep, no. listen is a Bool
DrForr The docs are still in flux :) 16:12
lucs That too :)
funrep RabidGravy: im writing a client 16:12
RabidGravy right 16:13
funrep oh shit
hah, thanks!
okey, now i get this error "Socket is already bound or connected" 16:14
RabidGravy yeah, you just need to close it 16:15
but see doc.perl6.org/type/IO::Socket::INET
you don't use listen for a client
funrep yes doing that now 16:16
but how can i close a connection from a closed program? xd 16:17
pochi you have to wait till the kernel releases the socket I think 16:18
funrep okey
Skarsnik interesting I managed to have a sigseg on the compile x)
AlexDaniel Skarsnik: out of curiosity, which character did you pick and what is it for?
pochi or maybe you can turn on SO_REUSE or something
RabidGravy It doesn't matter with a client 16:19
Skarsnik I used the string 'type-eq' to compare C Type in gptrixie, to avoid writing stuff like $type ~~ PointerType and $type.ref-type ~~ FundamentalType and $type.ref-type.name eq 'char'; I write $type type-eq <Ptr char>; 16:20
mspo for NativeCode should I just use int32 for uint32_t ? 16:21
RabidGravy uint32 16:22
mspo not mentioned doc.perl6.org/language/nativecall ? 16:23
Skarsnik uint32_t does not exist x)
mspo oh they have an example with it, but it's missing from the little table 16:24
Skarsnik: ?
Skarsnik nvm I read or instead of for 16:25
damn I get a sigseg that I can't gold 16:26
*golf
unsigned int type should probably be added in this table yes x) 16:32
colomon does Proc.run actually work in current Rakudo? 16:35
my simple experiment hung in OS X and core dumped in Linux 16:36
nine colomon: if it didn't work, loading modules would crash as precompilation is "run" 16:37
autarch colomon: :merge causes a core dump, but it otherwise works, I think
colomon oh, well I used :merge
autarch there's a bug filed for that
colomon indeed, removing :merge fixes everything 16:38
Skarsnik Ok I am confused. I try to run a perl6 script and it sigsev before doing anything (it was not doing that some time ago and even putting a say in a BEGIN block do nothing); I tried a perl6 -e and use the stuff it included that does not sigsev 16:40
colomon autarch++ 16:41
Skarsnik whelp 16:42
root@testperl6:~/piko/gptrixie# perl6 --stagestats -I lib/ bin/gptrixie
Stage start : 0.000
Stage parse : Erreur de segmentation
colomon oooo, this is officially brilliant for my purposes. turns out including :out just makes it silly noisy anyway
nine Skarsnik: I guess your installation is somehow screwed up 16:45
Skarsnik perl6 -e run stuff x) 16:45
nine First step of packing for vacation: my better half - evening dress, me - charging all battery powered devices 16:47
Zero_Dogg Can MAIN be made to handle "--key value" in addition to "--key=value" ? 16:50
nine Zero_Dogg: it does already 16:50
Zero_Dogg nine: it does? How did I miss that
nine Zero_Dogg: you just have to give the parameter a non-Bool data type
sub MAIN(Str :$key) 16:51
Zero_Dogg nine: it doesn't here, it outputs the help message 16:52
perl6 -e 'sub MAIN(:$key!) { say "key=$key" }' --key test # doesn't work, --key=test works 16:53
RabidGravy nine. absolutely, I'm always left in charge of making sure we have all the chargers and adaptors and Mrs Gravy packs the clothes ;-) 16:54
Skarsnik x) 17:00
nine Zero_Dogg: indeed...it's missing from src/core/Main sub process-cmd-args 17:01
Skarsnik not in spec test? x) 17:02
Zero_Dogg nine: need me to file a bug? 17:04
ugexe Zero_Dogg: rt.perl.org/Public/Bug/Display.html?id=124664 17:21
MadcapJake Would you ever have a :: in a sub or method declaration? 17:25
Skarsnik ::? 17:27
Zero_Dogg ugexe: thanks 17:29
MadcapJake Skarsnik: like would you ever have «sub Foo::Bar($baz) { ... }» 17:31
mst MadcapJake: subs are basically lexical so that doesn't make a lot of sense to me 17:32
Skarsnik m: sub Foo::bar() {say "heelo"}; Foo::bar();
camelia rakudo-moar 770d10: OUTPUT«Could not find symbol '&bar'␤ in block <unit> at /tmp/Q4jcoRCVFS line 1␤␤Actually thrown at:␤ in block <unit> at /tmp/Q4jcoRCVFS line 1␤␤»
MadcapJake ok I just needed to make sure that it could never be the case that a `::` would appear in a sub/method declaration 17:33
Skarsnik m: module Foo {sub Foo::bar() {say "heelo"} }; Foo::bar();
camelia rakudo-moar 770d10: OUTPUT«Could not find symbol '&bar'␤ in block <unit> at /tmp/N9LRJ_CD9D line 1␤␤Actually thrown at:␤ in block <unit> at /tmp/N9LRJ_CD9D line 1␤␤»
MadcapJake m: module Foo {sub Foo::bar() {say "heelo"} }; Foo::Foo::bar();
camelia rakudo-moar 770d10: OUTPUT«Could not find symbol '&bar'␤ in block <unit> at /tmp/gy54DuwdcJ line 1␤␤Actually thrown at:␤ in block <unit> at /tmp/gy54DuwdcJ line 1␤␤»
Skarsnik m: module Foo {our sub Foo::bar() {say "heelo"} }; Foo::bar(); 17:34
camelia rakudo-moar 770d10: OUTPUT«Could not find symbol '&bar'␤ in block <unit> at /tmp/F2clBsui0m line 1␤␤Actually thrown at:␤ in block <unit> at /tmp/F2clBsui0m line 1␤␤»
ugexe m: class Foo { method foo::bar () { say 665; }; }; Foo.new."foo::bar"(); 17:36
camelia rakudo-moar 770d10: OUTPUT«665␤»
MadcapJake ugexe: lol alrighty then! 17:37
ugexe: so is that because any character is acceptable for a name though you'll have to use quotes to access it? 17:38
RabidGravy okay if I have a slurpy positional how do I pass an empty hash as one positional?
m: sub foo(*@foo) { say @foo }; foo("a","b",{}); # doesn't 17:39
camelia rakudo-moar 770d10: OUTPUT«[a b]␤»
MadcapJake m: class Foo { method foo«bar () { say 665; }; }; Foo.new."foo«bar"();
camelia rakudo-moar 770d10: OUTPUT«5===SORRY!5=== Error while compiling /tmp/Dbfup3bjnG␤Missing block␤at /tmp/Dbfup3bjnG:1␤------> 3class Foo { method foo7⏏5«bar () { say 665; }; }; Foo.new."foo«ba␤»
MadcapJake m: class Foo { method foo*bar () { say 665; }; }; Foo.new."foo*bar"(); 17:40
camelia rakudo-moar 770d10: OUTPUT«5===SORRY!5=== Error while compiling /tmp/hmRE4RBMsm␤Missing block␤at /tmp/hmRE4RBMsm:1␤------> 3class Foo { method foo7⏏5*bar () { say 665; }; }; Foo.new."foo*ba␤»
MadcapJake ok i guess just the `::` get special priviledges :P 17:40
funrep are there tuples in perl6? 17:41
MadcapJake is there even a good reason to use a `::` in a method/sub decl? I don't see how that would be anything other than confusing :P 17:42
funrep: do you mean like an immutable list? 17:43
funrep yeah kinda, maybe tuples are reduntant immutable lists :) 17:44
ugexe not ::, :. so foo:bar and foo:::bar also work 17:45
MadcapJake well containers are mutable, so `my @tuple = 1, 2, 3;` will allow you to mutate. But `my \tuple = (1, 2, 3) gives you an immutable list 17:46
ugexe: what's the point of being able to do that?
funrep: doc.perl6.org/language/list#Immutability 17:47
ugexe well, whats the point of not? 17:49
MadcapJake because it's confusing, it looks like package syntax but it isn't and you have to use quotes to access it.
MadcapJake you can't even use it on bare names, it has to be nested in a module/class 17:51
ugexe should it not be allowed to be done at all because its confusing for normal use then? 17:54
lucasb IMO, method foo::bar should be a syntax error 17:56
MadcapJake I'm just reading S02 names, and the `::` is a package sigil. If it's used just as a regular character in a sub/method declaration, that is terribly confusing 17:57
not only would you instantly think, "oh that preceding bit is a package" (which it's not) but you'd then try to access it as such and find a strange error that *doesn't* say "to use this method you need to enclose it in quotes" 17:58
MadcapJake what actual purpose does it serve? No where in S02 names does it say "in method names you can use `::` and it doesn't have any syntactic meaning" 18:00
mspo sub mysql_affectied_rows( .. ) returns int32 is native(LIB) 18:02
sub mysql_affectied_rows( .. ) returns int32 is native(LIB) 18:03
does LIB mean something?
Skarsnik Not reall, are you playing with gptrixie? x) 18:03
It's just 'common' to have a constant LIB = ('foo', v1) or other stuff; 18:07
RabidGravy KISS MY HAIRY GIBBON AMQP!
Skarsnik I don't even know what amqp is, but have fun x) 18:09
MadcapJake I've created an issue for colons in method names: github.com/perl6/specs/issues/106 18:10
mspo MadcapJake: there's the Foo::Bar.method() call? 18:12
Skarsnik There is some Core::.keys and weird stuff like that with :: 18:15
MadcapJake mspo: how does that work? 18:17
Skarsnik: ahh ok 18:18
funrep does perl6 have enum? cant find any in perl6intro or docs 18:19
mst Skarsnik: it's the protocol via which one hates things like RabbitMQ
lucasb funrep: the syntax is 'enum Foo <A B C>' 18:20
funrep awesome, thanks!
MadcapJake funrep: design.perl6.org/S12.html#Enumerations
funrep oh nice (y)
RabidGravy right that's Net::AMQP working properly for the first time since September :) 18:27
dalek ast: 4b689b3 | RabidGravy++ | S17-supply/grep.t:
Make the test more explicit

Slight modification to 696d50a932328d9e0e69185c0f900a0b2588f86b
18:36
ugexe m: package foo { our sub bar is export { 1; }; }; sub foo::bar () { 2 }; say &foo::bar(); say ::<&foo::bar>() 18:41
camelia rakudo-moar 770d10: OUTPUT«1␤2␤»
ugexe i wont claim to know if thats good or bad 18:43
nine it's good 18:46
AlexDaniel m: sub foo::bar() { say ‘hello’ } # how can I call this?
camelia ( no output )
[Tux] is there a timeframe for utf8-c8 fixes? (just curious) 18:47
AlexDaniel [Tux]: Hmm… somehow it feels like it depends on how soon you'll do it :) 18:51
[Tux] AlexDaniel, if that was within my reach I might have taken a stab, but I know it is waaaaaaaay beyond what I am capable of 18:52
AlexDaniel [Tux]: common misconception :)
[Tux]: I believe in you
[Tux] even if lizmat says it is beyong her knowledge? 18:53
beyond
nine [Tux]: seems like you could use a little more hubris :) 18:55
[Tux] <gulp /> 18:56
AlexDaniel [Tux]: well, the thing about contributing to free software projects is that it's not about being geniuses in all questions but about contributing your time and focus into some small specific issue that you care about. With enough effort anyone could do it
[Tux] :) I think I score rather well in that area 18:57
[Tux] goes watch the news
AlexDaniel :D 18:58
abaugher [Tux], thanks for making that META.info change for Text::CSV. panda still complains, so I think it must have it cached already or something, because I can see you changed it. But I commented out that line in panda, so the install proceeds successfully. 18:59
nine abaugher: takes a while for the ecosystem to pick up changes to META files. Then you still need to do panda update to get the changes from the ecosystem 19:00
abaugher nine, yeah, I figured it was something like that. It says "fetching Text::CSV", but clearly it's not fetching a fresh copy of everything from github. No big deal. 19:01
abaugher 'panda update' does eliminate it, so I'll have to keep that in mind, that that updates META.info files. Makes sense, now that I think about it, since those contain info about sources. 19:04
DrForr Wow. Don't invoke Perl6 core rules from inside your role. 19:08
masak no? 19:09
DrForr Practically locks up my VM.
ugexe m: sub foo::bar () { 2 }; say ::<&foo::bar>() # AlexDaniel 19:12
camelia rakudo-moar 770d10: OUTPUT«2␤»
AlexDaniel ugexe: in other words colons are also allowed in sub names? 19:15
geekosaur aren't they somewhat special, though? infix:, trait_mod:, etc.
AlexDaniel m: sub foo::bar { 2 }; say ::<&foo::bar>.name 19:16
camelia rakudo-moar 770d10: OUTPUT«foo::bar␤»
ely-se why is Promise.then not called map? 19:29
like Supply.map
moritz because it is only ever executed once
it's more like if/then or given/when than for/map 19:30
mst ely-se: because that would be a completely inaccurate name?
ely-se mst: no, it wouldn't 19:31
mst ely-se: map maps a list. a Promise is equivalent to a scalar.
mst it would be sensible to call .map(then => ...) on a stream of promises, or whatever 19:32
mst does that quite a lot in perl5, although Future is what ours are called
ely-se I don't see why the name map is only suitable for list-like structures 19:34
ely-se and not any structure-preserving operation (which includes Promise.then), like in Haskell 19:35
moritz ely-se: in Perl, we care about singular vs. plural
as we do in many human languages, English among them
also, Perl has the philosophy of using a name only for one operation 19:36
and .map is a synchronous operation
MadcapJake moritz: that explains why `.chars` and `.elems` aren't just called `.length`. I've been wondering that!
ely-se "length" on strings is too ambiguous 19:37
mst MadcapJake: after the number of times I've seen people call .length on the wrong sort of object in other languages and get really confused, I -so- like that decision
MadcapJake I definitely like that they are different, but it's one of those go-to methods in JS that you get really used to using 19:38
mst not being able to immediately tell whether you're getting number-of-chars-in-string or number-of-elements-in-array is just sadface making
MadcapJake for sure, but it definitely is a strong JS idiom nonetheless X) 19:41
MadcapJake Definitely something to add to the JS-to-P6 pod when that exists. 19:48
mst oh, I'm aware. also a strong python idiom. but we're still allowed to do better than them :)
masak I guess that decision in JS comes from Java originally
though in Java it's .length() for String and .length for Array 19:49
mst also java wasn't an influence on the JS design process really
MadcapJake masak: lovely xP
masak because brain damage, apparently
mst: oh, I think it was
mst: all the wrapper types were basically lifted directly from Java
mst wrapper types?
masak object types holding methods for native types 19:50
Java has int and Integer
JavaScript has native numbers and Number
MadcapJake JavaScript Origin Story: www.computer.org/csdl/mags/co/2012/...20007.html 19:52
mst ISTR it was primarily based on scheme and self
except m-expressions
MadcapJake Smalltalk, C[++], and LISP apparently 19:53
masak Scheme and Self were the "hidden" influences
Java was the explicit influence, syntax-wise and with some of the semantics
MadcapJake But he was under marketing orders to make it look like Java also 19:54
masak the infix:<+> operator doing both string concat and math -- that decision is from Java. doesn't make as much sense in a loosely typed language, though. :/
mst aha
mst stands corrected
masak Perl was an influence, too. regular expressions.
Modula/Python was another influence, but I forget what for. 19:55
er, Modula/Pascal...
leont regular expressions weren't in Javascript 1.0
masak that rings a bell, yes 19:56
MadcapJake «Eich built a simplified object model that combined structs from the C language, patterns from SmallTalk, and the symmetry between data and code offered by LISP. The Hypercard event model inspired the pattern for adding events to the HTML document. Object-oriented patterns were possible but via runtime semantics with prototypes (as in Self) instead of compiler-supported class syntax (as in Java and C++).» 19:57
ugexe my $chain = @promises.reduce: {$^a.then($^b)} 20:03
mspo okay mdb is a little too advanced for a fist try at nativecall ;) 20:25
RabidGravy mdb?
mspo MDB_env is a struct with like 50 members, most of which are other structs/unions
sorry- lmdb
symas.com/mdb/ 20:26
RabidGravy where's your spirit of adventure ;-)
mspo RabidGravy: indeed 20:27
bartolin .tell [Coke] looks like you have about 100 processes (some of them a few days old) running on hack. no real problem so far, just got some notifications (we're monitoring the number of procs on hack)
yoleaux bartolin: I'll pass your message to [Coke].
Skarsnik mspo, gptrixie does not manage to get them? 20:35
mspo Skarsnik: didn't try it 20:36
dalek ecs/meta-v1: 73ff494 | (Anthony Parsons)++ | S22-package-format.pod:
META doesn't need an entire glossary to itself

There's a document-level one right above it. Merged the two.
mspo Skarsnik: let's try 20:37
Skarsnik: I saw you talking about it yesterday but thought you were talking to someone else :) 20:38
mspo wow panda actually installed something 20:44
musiKk hello! i have a small question: what does "Int(Cool)" mean in a signature? why would the extra "(Cool)" be necessary?
RabidGravy it constrains the coercion to those types that inherit from Cool 20:46
RabidGravy so: 20:46
m: class F { method Int() { 1; }}; sub foo(Int(Cool) $a) { say $a }; foo(F.new); 20:47
camelia rakudo-moar 770d10: OUTPUT«Type check failed in binding $a; expected Cool but got F␤ in sub foo at /tmp/Ebn4d1XhUu line 1␤ in block <unit> at /tmp/Ebn4d1XhUu line 1␤␤»
RabidGravy m: class F { method Int() { 1; }}; sub foo(Int() $a) { say $a }; foo(F.new); #without the cool 20:48
camelia rakudo-moar 770d10: OUTPUT«1␤»
RabidGravy or alternatively 20:49
b2gills 「sub example ( Int(Cool) $a ) {...}」 can be thought of as being short for two subs 「multi example ( Int $a ) {...}; multi example ( Cool $a ) { samewith $a.Int }」
RabidGravy m: class F is Cool { method Int() { 1; }}; sub foo(Int(Cool) $a) { say $a }; foo(F.new);
camelia rakudo-moar 770d10: OUTPUT«1␤»
RabidGravy b2gills++ nice explaining ;-) 20:50
musiKk very helpful, thanks. now i try to under stand why. 20:50
musiKk for example IO::Socket's read() method does this. why would it care that the number of bytes given is Cool? isn't Int enough? 20:51
ugexe can Int contain Inf?
RabidGravy well it could be a string
RabidGravy m: say "10".Int 20:51
camelia rakudo-moar 770d10: OUTPUT«10␤»
RabidGravy Cool guarantees an Int method that can be called for the coercion, it may blow up if the conversion isn't possible but it will always be there 20:52
AlexDaniel ugexe: not yet 20:53
ugexe: and possibly it will never be so
RabidGravy Cool basically defines an interface that all the builtin simple types share
ugexe yes, it was rhetorical
musiKk RabidGravy: so i only need to require it in a signature if i intend to call one of the many methods or subs defined by Cool? 20:56
don't know if that questions makes sense. i'm well versed in perl5 but super new to perl6. :) 20:58
RabidGravy yeah basically, a (Foo() $a) in a signature is a coercion, if the argument isn't already a Foo then it will try to call the Foo method on it, so specifying Int(Cool) there guaranteed there will be a an Int method on an object that inherits from Cool
so e.g
RabidGravy m: class Foo {}; sub bar(Foo() $a) { say "foo" }; foo("bar"); 20:59
camelia rakudo-moar 770d10: OUTPUT«5===SORRY!5=== Error while compiling /tmp/qHkGOa6LSr␤Undeclared routine:␤ foo used at line 1␤␤»
RabidGravy m: class Foo {}; sub bar(Foo() $a) { say "foo" }; bar("bar");
camelia rakudo-moar 770d10: OUTPUT«Method 'Foo' not found for invocant of class 'Str'␤ in sub bar at /tmp/3uWF3C9a0R line 1␤ in block <unit> at /tmp/3uWF3C9a0R line 1␤␤»
RabidGravy specifying a constraint for the coercion prevents that sort of thing happening (though it may die for other reasons) 21:01
musiKk oh, i just noticed i did not know that "Foo()" is a coercion in the first place. i always thought it has something to do with lists. 21:01
RabidGravy ah
flussence signatures are a weird sub-language
musiKk i still don't get it completely but you sure helped a lot. 21:04
unfortunately i can't try stuff out right now b/c i did something and now rakudo does nothing but core dump due to "illegal instruction". lol
RabidGravy oops 21:05
masak oh, right. forgot about the Hypercard influence for the event model. MadcapJake++
musiKk psa: don't do "sub rec() { rec() } rec()" :(
lucs Else you will curse! And recurse! 21:06
musiKk it's super cool that rakudo has tail recursion but somehow this filled all my swap in two seconds and now the core dump thing does not go away.
masak musiKk: did you meant tail recursion *optimization*? and are you sure Rakudo has it? 21:07
marmay_ Is there a way to provide a named parameter to a sub just in case it accepts it? I try to pass a parameter $request to a sub that does not take any parameters and I get an error: "Unexpected named parameter 'request' passed in sub"
RabidGravy yes 21:08
RabidGravy or for methods that just works 21:08
sjn \o
sjn wonders if there's a JSON formatted list of a the modules at modules.perl6.org somewhere 21:09
RabidGravy m: class F { method bar() { say %_ } }; Foo.new.bar(bumble => "goat");
camelia rakudo-moar 770d10: OUTPUT«5===SORRY!5=== Error while compiling /tmp/iQSY6oyf5a␤Undeclared name:␤ Foo used at line 1␤␤»
RabidGravy m: class F { method bar() { say %_ } }; F.new.bar(bumble => "goat");
camelia rakudo-moar 770d10: OUTPUT«bumble => goat␤»
musiKk masak: now that you ask, i'm not positive anymore due to the problems i mentioned. i'll reboot and see if that fixes something. otherwise it's back to compiling rakudo. 21:10
RabidGravy sjn, yes, the project.json is at ecosystem-api.p6c.org/projects.json
nine Rakudo doesn't have tail recursion optimization. 21:12
marmay_ RabidGravy: Ah, that's interesting. But is there a way to make subs behave more like methods in this case? 21:15
flussence m: sub foo(*%) { 'bar' }; say foo(:whatever(999)) 21:16
camelia rakudo-moar 770d10: OUTPUT«bar␤»
ely-se can I do exec without fork? 21:17
RabidGravy marmay_, but for subroutines it doesn't have a defaiult '*%_' in the signature so you would have to specify it explicitly 21:18
where '*%_' means any other named parameters that haven't been specified
RabidGravy you can't make someone else's sub behave like it though 21:19
flussence ely-se: that's called &runinstead in perl 6 21:19
marmay_ Ok, thank you.
flussence (or at least, it was in the specs. doesn't look implemented) 21:20
ely-se flussence: aha! obscure :)
musiKk masak: it seems rakudo does not limit the stack or something. i cannot provoke a stack overflow. 21:21
ely-se runinstead is not implemented in rakudo though
masak 'night, #perl6 21:26
ely-se goodbye masak 21:30
ely-se m: for (1, 2) Z ('a', 'b') -> $n, $a { } 21:48
camelia ( no output )
ely-se hmm
ely-se m: for (1, 2) Z ('a', 'b') -> $n, $a { say "$n $a" } 21:48
camelia rakudo-moar 770d10: OUTPUT«1 a 2 b␤»
RabidGravy ah there you all are 21:50
ely-se on my machine it says too few positionals are passed
geekosaur [17 21:29] * RabidGravy has quit (*.net *.split)
fwiw 21:51
moritz ely-se: -> ($n, $a) fixes it
RabidGravy yeah I saw but I was left with a version of the channel with 14 people
moritz m: for (1, 2) Z ('a', 'b') -> ($n, $a) { say "$n $a" }
camelia rakudo-moar 770d10: OUTPUT«1 a␤2 b␤»
ely-se moritz: why does it work for this example though?
moritz ely-se: which one?
ely-se m: for (1, 2) Z ('a', 'b') -> $n, $a { say "$n $a" } 21:51
camelia rakudo-moar 770d10: OUTPUT«1 a 2 b␤»
ely-se hey there is only one newline 21:52
geekosaur yeh, that happens when the server is still up but its connection with the collective is lost. sometimes called "split brain" 21:53
RabidGravy yeah if you change it you'll see what is happening
m: for (1, 2) Z ("a", "b") -> $n, $a { say "$n -> $a" }'
camelia rakudo-moar 770d10: OUTPUT«5===SORRY!5=== Error while compiling /tmp/1jwlCUoIDn␤Strange text after block (missing semicolon or comma?)␤at /tmp/1jwlCUoIDn:1␤------> 3 ("a", "b") -> $n, $a { say "$n -> $a" }7⏏5'␤»
RabidGravy m: for (1, 2) Z ("a", "b") -> $n, $a { say "$n -> $a" }
camelia rakudo-moar 770d10: OUTPUT«1 a -> 2 b␤»
moritz ely-se: it produces two elements which are sublists 21:54
ely-se: so it only "works"
ely-se ooh
I see
RabidGravy or you can do it one the other side with:
m: for ((1, 2) Z ("a", "b")).flat -> $n, $a { say "$n -> $a" }
camelia rakudo-moar 770d10: OUTPUT«1 -> a␤2 -> b␤»
yurivish_ hi everyone! quick question – is docs.parrot.org/parrot/latest/html/...s.pod.html an accurate description of how rakudo's current string implementation works, or is Parrot's approach different? 22:28
I'm interested specifically in the way unicode is handled. The Julia programming language is currently working out an improved approach towards string and character handling, and I pointed them towards Perl 6's approach to use as possible inspiration: github.com/JuliaLang/julia/pull/14383 22:29
flussence that sounds vaguely like how MoarVM implements it, yes 22:31
geekosaur I think that support was contributed to them back when rakudo-parrot development was active? 22:33
geekosaur I vaguely recall some of it got rethought afterward though 22:33
whoops
helps to reply when they're in the channel >.>
yurivish_ (sorry, disconnected. caught up on the irc logs :)
diakopter pdd28 was always aspirational 22:34
yurivish_: your link to jnthn's talk is much more appropriate; good job 22:35
yurivish_ :)
diakopter simonbyrne's link should be removed
the one to the parrot doc 22:36
AlexDaniel m: sub infix:<\> { $^b / $^a }; say 5 \ 35
camelia rakudo-moar 770d10: OUTPUT«5===SORRY!5=== Error while compiling /tmp/jDjUMJEep5␤Unable to parse expression in quote words; couldn't find final '>'␤ ␤at /tmp/jDjUMJEep5:1␤------> 3sub infix:<\> { $^b / $^a }; say 5 \ 357⏏5<EOL>␤ expecting any of:␤ …»
AlexDaniel m: sub infix:<\\> { $^b / $^a }; say 5 \\ 35 22:36
camelia rakudo-moar 770d10: OUTPUT«7␤»
yurivish_ diakopter: I can leave a comment to that effect, or you might be able to provide a bit more clarity than I can on the current situation
diakopter I commented 22:37
azawawi hi 23:33
Skarsnik Hello 23:34
azawawi just woke up :) 23:35
Skarsnik work on my pg array! 23:36
azawawi :) 23:38
azawawi is reading doc.perl6.org/language/modules#EXPORT
azawawi so what's the advantage of versioning a module if panda/zef is not going to install the newer version? 23:49
Skarsnik it's look corporate? 23:50
ni idea
azawawi :) 23:51
orbus maybe it eventually will 23:52
or panda will be replaced with something that does handle versions - cpan6 or whatever 23:53
not sure what the plan is, but I assume versioning will be useful at some point 23:54
azawawi oh well, time will only tell :)
orbus is working on a module right now 23:55
suppose I'd better version it
actually 23:57
here's a question
Skarsnik I think the plan is to wait for a tool that handle version for you, aka fix a github release and upload on cpan x)
orbus yeah, I'm assuming there will be either cpan integration or cpan6 at some point
orbus so here's a question 23:58
I'm writing a class
that inherits from another class
the parent class has a method foo
and I'm adding a method in my class called bar
which I want to do some stuff and then call back to foo in the parent class 23:59
in java I guess that would just be like super.foo
so far the only way I see to do it in perl6 is with WALK
which works but is a bit cumbersome
wondering if there's any easier way