Perl 6 - the future is here, just unevenly distributed

IRC log for #perl6, 2016-05-12

Perl 6 | Reference Documentation | Rakudo

| Channels | #perl6 index | Today | | Search | Google Search | Plain-Text | summary

All times shown according to UTC.

Time Nick Message
00:00 psch timotimo: which loop?  and, "Did you mean energy(@bodies)"?
00:01 timotimo yes
00:01 timotimo the main loop at the end
00:02 timotimo running it for 500_000 iterations takes 1:40m on my machine; compared to the other languages in the benchmark game, that's still a gigantic way away
00:02 timotimo since it's missing two zeroes
00:03 psch well, first there is probably native types for the Body attributes that can use them
00:03 psch +step
00:03 timotimo oh, the body attributes! i haven't checked there
00:03 * psch has to build r-m before looking closer
00:04 psch well, i mean i can look, but... :)
00:04 timotimo and also energies is completely un-optimized
00:04 timotimo but it only runs 2 times, not 500_000 times
00:05 timotimo (or 50_000_000 times as the final requirements would be)
00:05 jamesnek1 joined #perl6
00:06 timotimo cool, it's -8 seconds faster ... well, slower :\
00:06 * timotimo flips table slightly
00:06 psch offset_momentum still promotes
00:06 psch the $i in there is also not native
00:07 psch ...actually, i don't see any $i that's native
00:07 psch oh, no, in advance it is
00:07 timotimo not important, though
00:07 timotimo i mean offset_momentum
00:07 timotimo it runs even less often than energies does
00:08 psch true
00:08 psch my thinking was that it promotes the int attrs of Body to Int
00:08 psch but that probably doesn't happen, as the attr itself is typed..
00:08 psch well, assuming you adjusted that :)
00:09 psch also, against intention, it doesn't run without an arg on the cli
00:09 timotimo only hack and jruby use more ram than rakudo-m does in this :(
00:09 timotimo ah
00:09 psch real    0m2.526s
00:09 psch is what i get here..?
00:09 timotimo there is no int attribute in Body
00:09 psch changed line 138 to
00:09 psch my int $n = @*ARGS[0] // 10_000;
00:10 grondilu joined #perl6
00:10 timotimo oh, because of IntStr that'll actually work, right?
00:10 psch oh, right, they probably want to be num?
00:10 timotimo uh, no
00:10 timotimo yes, they do
00:10 timotimo gimme a sec, i'll give you my code
00:11 japhb .ask lizmat I see a few of your recent commits have had a laundry list of micro-optimization types applied during that commit.  Do you have a master list somewhere of micro-optimizations that you've found generally work well?  If so, where?  If not, can we pretty please have one?  :-)
00:11 yoleaux japhb: I'll pass your message to lizmat.
00:11 timotimo there we go, pull again
00:11 timotimo oh hey japhb
00:11 japhb oh hey timotimo
00:11 psch real    0m2.628s
00:12 skids joined #perl6
00:12 psch timotimo: ^^^ that's running it argless, i.e. "./perl6-m nbody.pl6"
00:12 BenGoldberg joined #perl6
00:12 timotimo yeah, well, i run either 50_000 or 500_000 :)
00:12 psch timotimo: maybe 50_000 would be a better default then? ;)
00:13 psch 10m takes longer than i'm willing to wait for right now, fwiw
00:13 timotimo if only i knew what god-damn piece of crap calls find_best_dispatchee 250064 times
00:13 timotimo :)
00:13 psch obviously you should throw a closure that calls callframe into find_best_dispatchee vOv
00:14 psch well, and print the result of course, and break out the Big Data tools too :)
00:14 timotimo infix:<-> and infix:<,>(????) are all non-jitted
00:14 timotimo oh, that's the my (foo, bar, baz) stuff
00:16 timotimo pushed
00:18 timotimo OK, 500_000 now only takes 1:16m
00:19 timotimo though i bet there's some thermal throttling or something going on in there at some point
00:19 timotimo because both my sensors measure just above 72 degrees C
00:21 BenGoldberg joined #perl6
00:22 timotimo i can build a version that uses nqp:: ops for all arithmetics. that'll likely give ridiculously improved timings
00:22 timotimo like it did with my particle system toy
00:25 psch well, it probably works, but i don't think it quite in the spirit of the competion... :)
00:25 psch like, if you're going that far just submit an nqp solution
00:25 timotimo of course it isn't
00:25 timotimo i just want to know how good rakudo could be if we had a few problems solved in this space :)
00:25 timotimo suddenly only 1 minute
00:25 timotimo and i've only just started
00:27 ShimmerFairy timotimo: hey, rakudo's gotta go fast, so examples of rakudo failing at that are always good :P
00:27 timotimo yes, very
00:28 timotimo it's just annoying to see such simple code even with "num" sprinkled all over is still so object-allocation-heavy
00:28 timotimo and the simple infix ops not getting inlined properly, or even jitted in this case
00:28 timotimo 56s
00:28 pierre_ joined #perl6
00:28 ShimmerFairy timotimo: I get the feeling that's just a case of native support still not 100%. Incidentally, does 'num' choose the smallest float type, or the "most efficient"?
00:29 timotimo no, it'll choose 64bit nums every time
00:29 timotimo but there's num32, too
00:29 timotimo Num is 32bit, however
00:30 ShimmerFairy oh, I didn't know num had numbered version like int
00:30 ShimmerFairy but yeah, I was just curious if rakudo chooses unqualified native 'num' to be the most efficient or something, and how that might affect timing.
00:31 sortiz timotimo, wondering if moving some calculations to methods in Body, can avoid the accessors overhead.
00:31 psch huh
00:31 timotimo ah, 30s
00:32 molaf joined #perl6
00:32 psch well, my one opt idea brought me from 1m10s to 2m30s :P
00:32 timotimo sortiz: the accessors take practically 0 time
00:32 psch clearly i'm bad at optimization :)
00:32 ShimmerFairy timotimo: write in C and use NativeCall, that'll show 'em! :P
00:32 timotimo there is now a "use_nqp" branch
00:34 ShimmerFairy as in, 'use' NQP modules?
00:34 timotimo no, just "use nqp"
00:34 timotimo and then a bunch of nqp:: ops
00:35 timotimo incidentally, 57s without nqp:: ops
00:35 timotimo pushed
00:37 profan joined #perl6
00:37 ShimmerFairy I thought 'use nqp' was a thing for a while already
00:38 timotimo yeah, it's a thing
00:38 timotimo we also have use :from<nqp>
00:39 ShimmerFairy yeah, I'm just confused by a "use_nqp" branch if it's been around for a while in nom
00:40 timotimo oh
00:40 timotimo sorry, that's a branch in the gist :)
00:40 timotimo https://gist.github.com/timo/7babb36055768fe04eeb
00:40 timotimo when you clone that
00:40 ShimmerFairy ah, I had a feeling it maybe wasn't a rakudo branch :P
00:41 timotimo :)
00:45 cbk joined #perl6
00:46 skink m: my $fh = open('/dev/null'); for ^1000 { $fh.read(1); }; $fh.close; say now - INIT now;
00:46 camelia rakudo-moar bffc3a: OUTPUT«open is disallowed in restricted setting␤  in sub restricted at src/RESTRICTED.setting line 1␤  in sub open at src/RESTRICTED.setting line 9␤  in block <unit> at /tmp/300HD3Bm3Q line 1␤␤»
00:47 BenGoldberg joined #perl6
00:47 skink Well, I suppose that makes sense
00:47 timotimo joined #perl6
00:47 timotimo huh, postcircumfix:<[ ]> is using 10.81% of the whole time with the use_nqp branch
00:51 skink > my $fh = open('/dev/urandom'); for (^50_000).race { die if $fh.read(1).elems != 1; }; $fh.close;
00:51 skink Died
00:52 skink What's the thread-safe way of doing this that isn't super slow?
00:52 skink i.e. not having an open/close per call
00:52 psch skink: push into Channel from a lot of promises... oh
00:52 psch yeah, no, that should work
00:53 psch ...no, probably not.  i think the .read is what gets this is in a tangle
00:53 timotimo i think it's trying to read from a different thread than the open comes from
00:54 skink First time I tested this was with 10,000 iterations, and 9974 reads succeeded
00:54 timotimo hm. did it actually fan out multiple threads?
00:54 skink And then ofc, it became unreproducible for anything less than 50,000 iterations
00:55 skink I can make an unlimited number of calls without .race
00:55 BenGoldberg Does it act the same if you use /dev/zero instead of /dev/urandom?
00:56 psch yeah, .race being somewhat flaky currently maked me think that you could do that with start { } instead
00:56 timotimo how about having one file handle per worker and read stuff from there?
00:56 * psch .oO( "maked" makes me think i should go to bed )
00:56 skids does the 50000 number change if there is something else in there to slow it down?
00:57 timotimo i should also go to bed
00:57 psch i think i'll do that, ta o/
00:57 timotimo gnite psch
00:58 wbill joined #perl6
00:59 skink > my $fh = open('/dev/zero'); for ^25_000 { die if ($fh.read(1).elems != 1 ); }; $fh.close; say now - INIT now;
00:59 skink 0.297447
00:59 skink > my $fh = open('/dev/zero'); for (^25_000).race { die if ($fh.read(1).elems != 1 ); }; $fh.close; say now - INIT now;
00:59 skink Died ... 1.39391199
00:59 skink BenGoldberg, ^
01:00 BenGoldberg timotimo, find_best_dispatchee is called from Perl6::Metamodel::Parametr​icRoleGroupHOW.specialize, and from Perl6::Metamodel::MultiDispatcher.vivify_for
01:00 ugexe skink: if you want to see something odd, try installing OpenSSL and *then* IO::Socket::SSL on windows. For some reason this will fail, but if you install IO::Socket::SSL which pulls in OpenSSL as a dependency it works
01:00 timotimo BenGoldberg: i know, but that's not what calls it in this case, i don't think.
01:01 timotimo the thing is, for some reason it doesn't show up properly in the profiler's call graph
01:01 ugexe i wonder if it has something to do with it getting tested with the original names (ssleay.dll) and then once installed the file names are changed to their sha1
01:01 skink > for ^25_000 { my $fh = open('/dev/null'); $fh.read(1); $fh.close; }; say now - INIT now;
01:01 skink 65.5502376
01:01 skink Repeated open/close has a surprising amount of overhead
01:02 timotimo no doubt
01:02 ugexe it'll say NativeCall fails to open $path-to-sha1-dll-that-does-exists because it doesnt exist
01:02 skink In my original tests it was two orders of magnitude slower for 10,000 iterations
01:03 skink ugexe, ... What.
01:03 * BenGoldberg considers suggesting replacing the default find_best_dispatchee with one that has an Int state variable, and works normally the first few thousand times, and then throws an exception.
01:03 ugexe skink: i dunno, i hoped you knew. i checked before your commits and it still happened then
01:03 skink ugexe, Oh, another oddity I noticed as well
01:04 skink OpenSSL::Socket and IO::SockeT::SSL do not work in a repl
01:04 skink Only as files
01:05 ugexe all i can think of is precomp
01:05 skink In a repl I tried connecting to a good-ssl site and a bad-ssl site, got -1 for both $ssl.connect's
01:05 skink As a script, the former got pos 1, and the latter threw my exception
01:05 ugexe deleting precomps doesnt help, but it complains about a file not existing that does in fact exist. but what you describe (needing the file) seems to corraborate that
01:07 MasterDuke joined #perl6
01:10 ugexe i wonder if %?RESOURCES should be providing a mechanism to say "dont rename these files"
01:12 MasterDuke a day or two ago i was asking about how to profile the rakudo build
01:12 MasterDuke and i successfully did so, after several attempts and a fight with the oom killer
01:13 MasterDuke the build took about 4 times as long, and then writing out the profile took ~1.5h
01:13 mr-foobar joined #perl6
01:14 MasterDuke and produced a 900mb profile
01:14 skink m: my uint64 $x; say $x;
01:14 camelia rakudo-moar bffc3a: OUTPUT«0␤»
01:14 MasterDuke however, even the QT-based profile viewer can't read that, QJsonDocument has a 135mb limit
01:15 skink Odd. Hey sortiz:
01:15 skink > my uint64 $x;
01:15 skink 0
01:15 skink > $x
01:15 skink Unknown lexical type encountered while building context iterator
01:16 MasterDuke i don't know the profile format well, if i just lop off the first ~100mb of the 900mb file (and fix the json), would i get any useful information?
01:21 timotimo i should be going to bed
01:21 timotimo MasterDuke: yeah, it's super annoying. someone would have to rewrite the code to use a less broken json library
01:24 MasterDuke ugh, i hate C/C++, but i want to see my profile
01:28 huggable joined #perl6
01:30 BenGoldberg joined #perl6
01:31 aries_liuxueyang joined #perl6
01:32 geraud joined #perl6
01:34 sortiz skink, hi!
01:36 skink You ever seen that issue before?
01:36 skink the lexical type thing
01:36 sortiz skink, Yep, that is a know problem in REPL.
01:37 skink Ah, alright
01:38 timotimo MasterDuke: the biggest contributor to the json format is call graph complexity; maybe you can chop your program into two distinct pieces, a "first" one and a "second" one?
01:39 vendethiel joined #perl6
01:40 timotimo the "use_nqp" version takes 11:24m for 10_000_000 iterations on my desktop
01:40 timotimo :\
01:41 skids timotimo: I think MasterDuke
01:41 skids 's "program" is "the rakudo build"
01:42 timotimo oh, wow, that's ambitious
01:46 timotimo did you try --optimize=off to chop the optimize part off?
01:46 timotimo you can even --target=parse, that'll not do code gen
01:46 pierre_ joined #perl6
01:47 pierre_ joined #perl6
01:49 MasterDuke ahh, i didn't do any of those things, i'll give them a try and see if that changes anything for the better/easier
01:51 timotimo also, at some point we want to have an alternative setting that does away with a few classes. for example, all Set/Mix/Bag/..., all concurrency stuff, stuff like that
01:53 timotimo to have a better idea of how adding/removing classes/code impacts the size of the setting, and ram usage and all that
01:53 timotimo and that's good information for our future optimizations
01:56 zakharyas joined #perl6
01:57 BenGoldberg Maybe we should find a way to lazily load them?
01:58 timotimo we already lazily load stuff from the core setting
01:59 timotimo "lazy deserialization" is the keyword here
02:00 timotimo that applies for all our classes
02:00 timotimo and we also lazily decode strings from the string heap
02:07 avalenn joined #perl6
02:08 BenGoldberg So if Set/etc doesn't get loaded/deserialized until it's used, then what would be the benefit of having a setting without it?
02:08 MasterDuke now i also want to profile the profiler, the build finished in 165s, but writing the profile is taking forever
02:08 molaf joined #perl6
02:09 noganex_ joined #perl6
02:11 timotimo MasterDuke: you can find that in the nqp repo, i believe. under src/vm/moar/HLL/Compiler.nqp
02:12 MasterDuke thanks, i'll take a look
02:14 AlexDaniel MasterDuke: I'd say that it will be easier if you do it yourself :)
02:14 timotimo .tell BenGoldberg we'd find out if our lazy deserialization is good enough if removing classes from the setting doesn't change the resident set size beyond the .moarvm file shrinking
02:14 yoleaux timotimo: I'll pass your message to BenGoldberg.
02:15 pierre_ joined #perl6
02:17 hotel joined #perl6
02:18 hotel good evening #perl6
02:18 timotimo hey hotel
02:25 ZoffixWin \o
02:26 BenGoldberg joined #perl6
02:28 MasterDuke AlexDaniel: you may have been wrong about that...
02:29 AlexDaniel MasterDuke: O_O
02:29 timotimo wrong about what?
02:29 timotimo the what now?
02:30 AlexDaniel MasterDuke: how did you even do that
02:35 MasterDuke AlexDaniel: if i knew i probably wouldn't have
02:36 MasterDuke AlexDaniel: git complained that i needed to pull when i pushed the fix
02:36 AlexDaniel MasterDuke: well, there's no problem, you can have as much fun as you'd like, as long as it is in your own branch :)
02:37 grassass joined #perl6
02:37 MasterDuke AlexDaniel: maybe i didn't --rebase or something like that
02:38 MasterDuke AlexDaniel: i'll have a go at cleaning that up
02:38 mr-foobar joined #perl6
02:38 AlexDaniel MasterDuke: just don't lose your commits please
02:39 pierre_ joined #perl6
02:40 timotimo http://t.h8.lv/nqp_loop_graph.svg  -  if anybody wants to have a look at internals, bytecode, optimization opportunities ... :P
02:40 MasterDuke timotimo: i *may* have made a PR to p6doc look a lot uglier than it should have, but i take no personal responsibility
02:41 timotimo oh
02:44 hotel timotimo, not sure if it's just my internet connection, but that svg didn't seem to load
02:44 Ben_Goldberg joined #perl6
02:44 timotimo hotel: it's white on the top left
02:44 timotimo it's also gigantic
02:45 hotel ah, had to zoom out a lot
02:45 hotel too complicated for me kek
02:46 timotimo i'm surprised, this code could actually work well with attrref optimization
02:48 timotimo i was pessimistic enough to think that wouldn't actually end up being inlined
02:49 timotimo it's also fantastic how there's a box_n, it goes through a few "set" ops and through a few BBs, and then it lands in an unbox_n >_>
02:50 timotimo but yeah, there's stuff i've been intending to teach spesh. now i have a good benchmark to run these optimizations against
02:52 hotel it's all greek to me
02:53 timotimo hehe, fair enough
02:53 grassass joined #perl6
02:53 AlexDaniel timotimo: these graphs deserve a blog post
02:53 hotel one day I'll take a class in compilers or whatever
02:53 BenGoldberg , o O (the dragon book)
02:53 yoleaux 22:14 EDT <timotimo> BenGoldberg: we'd find out if our lazy deserialization is good enough if removing classes from the setting doesn't change the resident set size beyond the .moarvm file shrinking
02:54 zhmylove joined #perl6
02:57 timotimo huh, we don't even seem to optimize guards when we could
03:04 mr-foobar joined #perl6
03:20 mr-foobar joined #perl6
03:23 Actualeyes joined #perl6
03:24 skids .oO(one could just add a bunch of renamed copies of existing classes to a test setting and check if .moarvm grew)
03:24 timotimo that's not all there is to it :)
03:24 timotimo classes are referenced from signatures and stuff, for example
03:24 timotimo so that can in theory trigger lazy deserialization purely by being mentioned
03:28 MasterDuke timotimo: --optimize=off and --target=parse resulted in a profile ~210mb less (700mb). which is nice, but i've still got a ways to go
03:29 timotimo if yuo have --target=parse, you don't need --optimize=off
03:30 MasterDuke right, that would make sense
03:40 AlexDaniel MadcapJake: it still looks like you want to merge 16 commits
03:40 AlexDaniel oops
03:40 AlexDaniel MasterDuke: ↑
03:44 MasterDuke AlexDaniel: my bad, i see that now. i'm off to bed, but i'll fix that tomorrow evening
03:45 AlexDaniel sure
03:47 MasterDuke when i look at the PR i only see my nine, but i guess the one that's a merge pulls in those others
03:48 MasterDuke i should be able to get rid of it
03:54 wamba joined #perl6
03:59 pierre_ joined #perl6
04:03 BenGoldberg If we had some sort of deserialization phazer, then it would be possible to detect if classes are being loaded just by being mentioned in a signature.
04:05 prevost joined #perl6
04:06 prevost joined #perl6
04:32 _28_ria joined #perl6
04:35 Celelibi joined #perl6
04:39 itaipu joined #perl6
04:45 wbill joined #perl6
04:48 CIAvash joined #perl6
04:55 Cabanossi joined #perl6
04:56 ssotka joined #perl6
04:57 Xliff joined #perl6
05:28 huggable joined #perl6
05:30 ufobat joined #perl6
05:44 sno joined #perl6
05:52 jack_rabbit joined #perl6
05:52 mr-foobar joined #perl6
05:55 pierre_ joined #perl6
05:56 domidumont joined #perl6
05:56 wbill_ joined #perl6
05:58 vendethiel- joined #perl6
06:00 domidumont joined #perl6
06:04 xinming joined #perl6
06:16 llfourn joined #perl6
06:18 pierre_ joined #perl6
06:27 firstdayonthejob joined #perl6
06:29 pRiVi joined #perl6
06:39 mr-foobar joined #perl6
06:43 pyrimidine joined #perl6
06:44 sQuEE` joined #perl6
06:52 domidumont joined #perl6
06:54 _mg_ joined #perl6
06:56 darutoko joined #perl6
06:57 mspo joined #perl6
07:00 wamba joined #perl6
07:02 araujo_ joined #perl6
07:02 zacts joined #perl6
07:03 sQuEE joined #perl6
07:04 mspo joined #perl6
07:04 nine hotel: you can skip that compiler class. Compilers are actually not that difficult. You just have to know "compilers are all about trees". You parse source into a tree, transform the tree as much as you need and serialize it again in the end. Just learn some assembly language (any) to know what the output would be like and think it through :)
07:06 RabidGravy joined #perl6
07:06 remmie joined #perl6
07:06 DrForr joined #perl6
07:08 dalek Heuristic branch merge: pushed 17 commits to doc by jonathanstowe
07:09 hjst joined #perl6
07:14 masak morning, #perl6
07:14 moritz \o masak, nine, dalek, *
07:14 pierrot joined #perl6
07:15 RabidGravy marnin
07:15 masak nine: when you say "you can skip that compiler class" -- did you take one? was it really bad?
07:16 moritz compilers seem to have a stigma of being complicated and hard to get into
07:16 nine masak: no I didn't :) And it would probably be interesting. I just don't think it's necessary for working on compilers.
07:17 masak that much I agree with, I think
07:18 masak I mean, I hope you're right ;)
07:24 DrForr Yeah, it had the same stigma at my college. (The compiler class)
07:27 ShimmerFairy it's kinda weird how I've never needed college to learn programming :P
07:27 DrForr I didn't either, I was programming well before college.
07:29 ShimmerFairy me too, since about 10 years old IIRC (first using *shudder* VB)
07:29 * moritz used University to learn about formal languages, automaton theory, complexity, computability and all that good stuff
07:29 moritz and physics, as it happens :-)
07:30 ShimmerFairy Whenever I imagine learning computer science stuff at a college, I can't help but think "but why?"; I think I'm too used to be able to learn on my own at this point :)
07:31 nine ShimmerFairy: I have a suspicion on why rakudo is trying to write to the site repository. If I'm right, it's gonna be fixed by the precomp-store-redesign branch that's soon to land.
07:32 masak ShimmerFairy: I also did VB in my early, formative years :>
07:32 ShimmerFairy nine: cool :) . Is that part of the toolchain thing I've heard about? I for some reason feel a sudden slight interest in the world of package managing (cf. looking at the gentoo devmanual yesterday)
07:33 ShimmerFairy masak: I remember using a VB6 for dummies book and a copy of VB3 on the computer :P . I kinda liked VB3 better since it let me use MS-paint drawings of buttons as their own buttons, which VB6 couldn't do.
07:33 masak haha
07:34 masak yeah, I was on VB3 too
07:34 masak lost track of it somewhere around VB5
07:34 ShimmerFairy masak: also, I stopped using it when VB.NET came out, and five minutes of trying old COM code and it obviously not working :P
07:35 masak yeah, I also haven't been paying attention to the VB.NET bits
07:36 jast around that time I think I was using Borland's Delphi 3
07:38 RabidGravy I did a fair amount of VB6 about ten years ago for a while,  the vague OO thing was somewhat of an improvement but it still had the things that annoyed me
07:38 masak o rly
07:42 brrt joined #perl6
07:45 RabidGravy but I did have a moment of revelation about the Make Noise Maths yesterday, I've had the module for a couple of years and never quite got it until then
07:48 nine ShimmerFairy: the main goal of the branch was getting module load times down in the common case of repositories not having changed since the last time. But I ended up redesigning concurrency handling so we don't need a lock for reading precomp files anymore.
07:49 nine ShimmerFairy: this lock that we will no longer use is probably why it wants to write to the precomp directory.
07:49 ShimmerFairy oh, that's interesting. Without knowing much, I think it'd be cool if something that would normally require a lockfile doesn't :)
07:51 nine I've always hated having to lock the precomp store just for reading. But it took quite a bit of work to create a lockless solution that works cross plattform
07:52 ShimmerFairy for some reason I'm reminded of how having atime enabled in your linux effectively requires a write for every read (to write the access time, of course).
07:56 moritz ... or people writing their web application's access log into the normal working database :-)
07:57 masak RabidGravy: "'ve had the module" -- you mean you deliver that module to students? now I'm interested.
07:57 rindolf joined #perl6
07:57 masak RabidGravy: what was the revelation?
07:58 espadrine_ joined #perl6
07:59 grondilu joined #perl6
07:59 RabidGravy haha, no no it's an analogue function generator for modular synthesis ;-) I just had the light bulb moment
08:01 masak aha, http://www.makenoisemusic.com/modules/maths
08:01 RabidGravy yeah that's the puppy
08:01 masak now I'm slightly disappointed there's not actually such a class somewhere
08:01 g4 joined #perl6
08:02 RabidGravy There should be more analogue computers
08:04 masak now I want one of those
08:06 pierre_ joined #perl6
08:07 DrForr There's now a synthesizer that fits in a MIDI jack, can't find it on the site I thought it was on.
08:11 RabidGravy https://mitxela.com/projects/smallest_midi_synth
08:11 RabidGravy there
08:12 DrForr Yep, that's the one.
08:13 RabidGravy I've actually got all the parts to make that within a few feet
08:16 RabidGravy the attiny parts are great but I could go one with way more memory
08:17 wbill joined #perl6
08:22 aries_liuxueyang joined #perl6
08:28 ufobat morning :)
08:28 RabidGravy marnin
08:29 masak good mo'hn, ufobat
08:31 [particle] joined #perl6
08:32 aindilis` joined #perl6
08:41 avenj joined #perl6
08:48 Ulti something between yesterday morning and today has increased my test runs from 2.04s to 2.64s
08:48 Ulti this is after running a few times and warming up the OS caching
08:50 Ulti the two recent commits around speeding up kv and hash push append are likely since the tests mostly create and destroy hashes over and over
08:51 cpage joined #perl6
08:53 Ulti http://mattoates.co.uk/files/perl​6/bioinfo_profile_2016-05-12.html  there is also http://mattoates.co.uk/files/perl​6/bioinfo_profile_2016-05-04.html for some comparisson
09:17 nine lizmat: may interest you ^^^
09:27 espadrine_ joined #perl6
09:28 huggable joined #perl6
09:32 espadrine joined #perl6
09:33 RabidGravy off to the seaside to escape pollen!
10:21 mscha joined #perl6
10:21 mscha p6: my @ll = (1,2; 3,4); say @ll.map(*.Slip); say @ll».Slip;
10:21 camelia rakudo-moar 1e5df4: OUTPUT«(1 2 3 4)␤((1 2) (3 4))␤»
10:21 mscha Is this a bug?
10:22 timotimo hyper operators are specifically engineered to retain structure, if i'm not mistaken
10:22 timotimo at least the unary ones and the method call ones surely are
10:22 timotimo well, as surely as in "if i recall correctly"
10:23 timotimo i've stumbled over this at least once before
10:32 darutoko- joined #perl6
10:33 itaipu joined #perl6
10:34 kid51 joined #perl6
10:37 brrt joined #perl6
10:38 lizmat Ulti: could you golf this down to a benchmark that I could test ?
10:38 yoleaux 00:11Z <japhb> lizmat: I see a few of your recent commits have had a laundry list of micro-optimization types applied during that commit.  Do you have a master list somewhere of micro-optimizations that you've found generally work well?  If so, where?  If not, can we pretty please have one?  :-)
10:39 Ulti lizmat not easily
10:39 lizmat ok, I'll see what I can gather from the profiles
10:39 Ulti yeah really me golfing it would be doing the profiling slowly and badly... if there is nothing in the profiles that looks relevant it could be something to do with my local environment changing or something
10:40 Ulti though I have been thinking about have a suite of benchmark tests where you know if something is a perf regression from a previous release
10:41 Ulti the issue is what takes 1s for me will be different for you
10:41 Ulti so they perhaps all need to be relative to the time taken for some simple operation
10:42 nine We do have a benchmark suite
10:42 Ulti sure but the benchmarks aren't written as tests
10:43 lizmat Ulti: what strikes me is that the top routines exclusive time is significantly more, but percentage wise the same
10:43 lizmat more or less
10:44 Ulti then perhaps its all GC time?
10:44 Ulti but that hasnt changed in this time frame
10:44 Ulti I have plenty of RAM free atm too
10:44 lizmat GC time has increase by the same amount, and is roughly the same percentage
10:45 lizmat the number of GC runs is the same, but the nursery collection time is like 1.5x more
10:46 lizmat number of jit compiled frames is actually more in the slower version
10:47 lizmat number of de-opts is the same
10:48 Ulti which is also surprising given there haven't been massive changes there either in the last week and its literally the same code running, in fact moar hasn't been bumped so its probably the same jit code?
10:48 lizmat hmmm... fewer frames got inlined
10:51 lizmat looking at the methods called, I don't think I've changed any of them in the past days
10:53 lizmat ok, on 5 May I changed the default push-exactly to use prefix ++
10:53 lizmat and that's after your old profile
10:57 lizmat Ulti: could it be that the slowdown happened earlier?  or more gradual?
10:58 lizmat perhaps the prefix ++i is as fast as i = i + 1 meme is not universally applicable yet
11:00 dvinciguerra joined #perl6
11:13 pierre_ joined #perl6
11:31 pmurias joined #perl6
11:31 pmurias captures are immutable in nqp?
11:33 jnthn Captures are immutable in general, no?
11:36 * masak .oO( captures are immutable on a plane, captures are immutable on a train... )
11:37 pmurias at least in the nqp backend there is a savedCC that gets reused and modified
11:37 jnthn 'win 33
11:37 jnthn oops
11:37 pmurias I don't do that so I was wondering if there are other reasons not to just return the same one on clone
11:38 lizmat pmurias jnthn: there's some cheating with Captures in Junction
11:38 jnthn lizmat: Ah, with Perl 6 level ones, though, I think?
11:39 lizmat yes
11:39 jnthn Not VM-level ones you get from usecapture/savecapture
11:39 lizmat nope
11:40 jnthn I think pmurias is probably talking about the VM-level ones, and I don't think there's a way to mutate them
11:41 pmurias jnthn: yes, I'm asking about VM-level ones
11:41 * teatime waves.
11:42 * pmurias waves back
11:44 nicqbot joined #perl6
11:45 nicqbot hello
11:45 masak hi, nicqbot
11:46 lizmat afk&
11:48 araujo joined #perl6
11:55 Ulti lizmat not sure, but in general recently things have been getting slower rather than faster
11:55 Ulti its been hovering at or near 2s but went from where it is today to a lot nearer exactly 2s during the end of April
11:56 Ulti this is all on OSX
11:56 zzzzzzzzz joined #perl6
11:58 nine Ulti: does it load modules?
12:19 MadcapJake joined #perl6
12:24 pierre_ joined #perl6
12:27 |2701 joined #perl6
12:35 Ulti yup
12:35 Ulti it does essentially everything
12:36 Ulti which is why I run it all the time
12:40 Ulti hmm has next LABEL had some changes?
12:40 masak how do you mean?
12:40 Ulti im getting errors on this primes benchmark I havent run in a while "labeled next without loop construct"
12:41 masak m: NUMBER: for ^10 { next NUMBER if 4 ff 7; .say }
12:41 camelia rakudo-moar 1e5df4: OUTPUT«0␤1␤2␤3␤8␤9␤»
12:41 masak Ulti: care to golf that code and show it here?
12:43 Ulti m: my $int = 0; NUMBER: loop { ++$int; next NUMBER if $int == 4 ff 7; $int.say; }
12:43 camelia rakudo-moar 1e5df4: OUTPUT«(timeout)Use of uninitialized value of type Any in numeric context  in block  at /tmp/R01JHaT8my line 1␤1␤Use of uninitialized value of type Any in numeric context  in block  at /tmp/R01JHaT8my line 1␤2␤Use of uninitialized value of type Any in num…»
12:43 Ulti wah
12:43 Ulti *shrug* either way its a loop rather than a for
12:45 Ulti oh wait loop is the one more like the C for durr
12:50 brrt joined #perl6
12:52 wamba joined #perl6
12:53 MadcapJake I'm trying to solve DP266-intermediate and I think my implementation is O(n!) or something :P
12:53 MadcapJake https://gist.github.com/MadcapJake​/efbcb2400c061c30fc9cb713a263c7c7
12:55 pierre_ joined #perl6
12:57 masak m: enum Color <red green blue>; say green; for Color.enums -> $c { say $c.key.perl }
12:57 camelia rakudo-moar 1e5df4: OUTPUT«green␤"red"␤"green"␤"blue"␤»
12:58 masak I can't quite put my finger on it, but... Perl 6 enums currently feel like they half want to be string-based, and half object-based
12:58 masak above, there's the nice rich `green` enum object
12:58 masak but when I loop over all my Color.enums, I only get Str values back
12:59 masak to recover the nice rich objects, I have to do something like `Color::{$c.key}`
12:59 jnthn m: enum Color <red green blue>; say green; for Color.enums -> $c { say $c.value.perl }
12:59 camelia rakudo-moar 1e5df4: OUTPUT«green␤0␤1␤2␤»
12:59 masak m: enum Color <red green blue>; for Color.enums -> $c { say Color::{$c.key} }
12:59 camelia rakudo-moar 1e5df4: OUTPUT«red␤green␤blue␤»
13:00 hotel_california joined #perl6
13:00 masak I opened an RT ticket a while ago where I argued that .enums want to return Enum => value pairs, not Str => value pairs -- that it'd be better in every way imaginable
13:00 masak nothing much has happened since :) TimToady said he was mulling about it
13:01 MadcapJake what's the usefulness of the value anyways?
13:01 masak MadcapJake: you mean the 0 1 2 above?
13:01 MadcapJake yeah
13:01 jnthn m: enum Color <red green blue>; say green; for Color.^enum_value_list -> $c { say $c.perl }
13:01 camelia rakudo-moar 1e5df4: OUTPUT«green␤Color::red␤Color::green␤Color::blue␤»
13:01 masak I dunno. named constants? ordering?
13:01 jnthn There's one workaround :)
13:02 jnthn m: enum Color <red green blue>; say green; for Color.pick(*) -> $c { say $c.perl }
13:02 camelia rakudo-moar 1e5df4: OUTPUT«green␤Color::green␤Color::blue␤Color::red␤»
13:02 masak jnthn: ooh, didn't know about that one :)
13:02 jnthn There's another :)
13:02 masak jnthn: but I actually had a use case where I needed both the keys (enum objects) *and* the values
13:02 masak so those workarounds are nice but don't work for me
13:02 MadcapJake m: <red green blue>.antipairs.perl.say
13:02 camelia rakudo-moar 1e5df4: OUTPUT«(:red(0), :green(1), :blue(2)).Seq␤»
13:02 masak fwiw, I wanted to produce the inverse mapping from my enumeration
13:02 masak from values to enums
13:03 masak MadcapJake: if your point is that there's more than one way... well, yeah ;)
13:03 MadcapJake masak: ^^ you can get the numbers easily, it just seems weird that something named enums returns antipairs
13:04 masak if you ask me, it feels weird to name anything "antipairs" :P
13:04 masak unless your programming language runs on a quantum computer
13:05 MadcapJake well debatable :P but still "enums" returns a Seq of pairs where the key is a string and the value is a positional index?! o_O
13:05 MadcapJake just seems a bizarre thing to return for that particular method name.
13:06 * MadcapJake .oO( Not to mention how weird it is that an Enum has a method "enums" )
13:06 llfourn m: enum Color <red green blue>; say Color::{"green"}.Int # you can do this but dunno if that's what you mean
13:06 camelia rakudo-moar 1e5df4: OUTPUT«1␤»
13:06 masak in Perl 6 terminology, the big declaration-y thing is an "enumeration"
13:07 masak and the little member thingies are called "enums"
13:07 MadcapJake huh, well that clears up my thought bubble :P
13:08 dogbert17 joined #perl6
13:09 * perlpilot checks S99 to see if it talks about a "big declaration-y thing" anywhere
13:09 kaare_ joined #perl6
13:10 masak in `enum A <foo bar>`, "A" is the enumeration, and "foo" is an enum
13:10 masak notice that the *enumeration* is declared with the keyword `enum`
13:10 masak (a bit like sub*types* are declared with the keyword `subset`, and *switch statements* are spelled `given`)
13:14 MadcapJake ok makes some sense :) but I agree with you masak that at the very least it should return the enum values rather than a string (and I would argue that why not just return a list of enums rather than pairs of enum => pos)
13:15 masak the last I think because we got .enums partly so that we could .invert things
13:17 skids joined #perl6
13:18 MadcapJake m: <red green blue>.pairs.say # masak, but why invert when you could just do pairs
13:18 camelia rakudo-moar 1e5df4: OUTPUT«(0 => red 1 => green 2 => blue)␤»
13:18 MadcapJake my point is, there's already list methods that perform everything that enums/invert does specially, why not converge for clarity?
13:19 masak hmmm
13:19 masak I'll need to try that out in code
13:19 masak but you may have a point
13:20 masak I think I might miss my enums, adopting string literals instead
13:21 hotel joined #perl6
13:22 masak and I still think I might have a point on principle, that enums ought to be able to handle this. they sort of almost do.
13:26 MadcapJake I just realized why the value is there, it's not positional it's the actual value of that enum xD
13:26 jnthn I think the method enums may be a relic, name wise, of when we had an immutable Hash being called EnumMap instead of just Map like today, and the immutable Pair was called an Enum.
13:26 masak in my code, the values are Str, not the default Int
13:26 MadcapJake ahhh interesting!
13:27 masak I'm looking to idiomatically generate the inverse mapping, from those Str values to the enums
13:27 MadcapJake the docs example (pretty much the only thing about enums in there...) http://doc.perl6.org/routine/enums shows a Mass enum
13:27 masak shortest way to do what I want at present is `(my %color-of-symbol){.values} = Stone::{.keys} given Stone.enums;`
13:28 masak I'd like to be able to write something more like `my %color-of-symbol = Stone.invert;` :)
13:29 masak jnthn: I think S12 still think of little enumeration members as "enums"
13:29 masak thinks*
13:30 cdg joined #perl6
13:33 finanalyst joined #perl6
13:37 dogbert17 afternoon #perl6
13:39 llfourn there is .reverse
13:39 prammer joined #perl6
13:39 llfourn m: enum Color <red green blue>; say Color.enums.kv.reverse.Hash;
13:39 camelia rakudo-moar 1e5df4: OUTPUT«{0 => red, 1 => green, 2 => blue}␤»
13:39 dogbert17 there are a few Exceptions that does not seem to be documented, e.g. X::IO::Symlink. Should I write some pod docs for them?
13:40 llfourn oh .invert is a thing. Cool. #nvm
13:46 masak yes, .invert is a little bit hash-friendly
13:46 masak m: say { :foo(1), :bar(1), :baz(42) }.invert.perl
13:46 camelia rakudo-moar 1e5df4: OUTPUT«(1 => "bar", 42 => "baz", 1 => "foo").Seq␤»
13:46 masak m: say { :foo(1), :bar(1), :baz(42) }.invert.hash.perl
13:46 camelia rakudo-moar 1e5df4: OUTPUT«{"1" => "foo", "42" => "baz"}␤»
13:46 masak hmm
13:47 masak m: say (my %).push({ :foo(1), :bar(1), :baz(42) }.invert).perl
13:47 camelia rakudo-moar 1e5df4: OUTPUT«{"1" => $["bar", "foo"], "42" => "baz"}␤»
13:47 masak there you go.
13:47 dalek joined #perl6
13:47 llfourn that's pretty cool
13:47 masak ...it's OK, I guess
13:48 masak :P
13:48 llfourn better than doing it myself!
13:48 MadcapJake m: say (my %).push: {:1foo, :1bar, :3baz}.antipairs
13:48 camelia rakudo-moar 1e5df4: OUTPUT«{1 => [bar foo], 3 => baz}␤»
13:49 MadcapJake m: say ((my %).push: {:1foo, :1bar, :3baz}.antipairs).perl
13:49 camelia rakudo-moar 1e5df4: OUTPUT«{"1" => $["bar", "foo"], "3" => "baz"}␤»
13:50 masak I'm not sure what .antipairs brings exactly over .invert :/
13:50 llfourn is that $[ ] vs [ ] meaningful?
13:51 MadcapJake llfourn: I think $[ ] might flatten differently (if it all)
13:51 llfourn oh just .gist vs .perl?
13:51 masak if I ever write up a critique over the "community's rewrite of the community" way of developing a language, it's that there's no real counterforce against sprawl/feature bloat
13:52 llfourn m: my %h = :foo([<bar baz>]); say %h.perl,%h.gist;
13:52 camelia rakudo-moar 1e5df4: OUTPUT«{:foo($["bar", "baz"])}{foo => [bar baz]}␤»
13:52 masak s/it's that there's no/it'll be about the lack of a/
13:53 llfourn you don't like feature bloat?
13:53 masak oh, I'm all for feature bloat! bring it on.
13:53 masak just not in Perl 6 core :/
13:53 llfourn oh ok great me too!
13:53 llfourn oh.
13:54 llfourn :P
13:54 vendethiel joined #perl6
13:54 * llfourn goes back to antipairing things
13:54 masak part of this is me looking at Python 3 and seeing that they manage better with keeping the core small and consistent
13:54 masak sometimes pathologically so, but still. there are advantages to that style.
13:56 MadcapJake masak: I think this is kind of what a Linus figure is for in a community, hard-as-nails, can turn people away, but they keep the project from bloating
13:57 masak I'm sorry, I don't think the "can turn people away" is a strength of Linus
13:57 masak I think it's toxic, and needs changing
13:57 MadcapJake masak: definitely not saying it's a strength, but I'm saying that often the job of saying "no" is not very well liked
13:58 MadcapJake perhaps a bad example :P
13:58 gfldex it's actually quite a good example because there is a story behind Linus' behaviour
13:58 llfourn turn features away not people :)
13:58 masak what makes the "community's rewrite of the language" approach unique is that the community can override $Larry and @Larry when it comes to language design, just as $Larry and @Larry can override the community
13:59 gfldex quite some years ago a young fellow wanted to get some stuff into the mainline and Linus didn't say clearly "no"
13:59 masak or, put differently, there are two "root" components in the design process: $Larry/@Larry, and the community
13:59 _mg_ joined #perl6
13:59 gfldex he provided feedback why he didn't like the patches instead
13:59 masak if either component is shown to misbehave or stall in some way, the other component can go in and tiebreak
13:59 MadcapJake masak: sounds kind of like a republic :)
14:00 pmurias can I run nqp with perl6 ops registered?
14:00 masak MadcapJake: yes, there are certainly similarities
14:01 gfldex two years later the same young fellow showed up the with same idea, but with the fixes to the stuff Linus didn't like. Linus still rejected to feature. Another two days laters a common friend of the two told him that the young fellow came close to end his life.
14:01 gfldex being told that an idea is shit can be healthy
14:01 Sgeo joined #perl6
14:01 Actualeyes joined #perl6
14:02 masak that's a non sequitur if I ever saw one
14:02 masak "[he] came close to end his life" => "[abrasive feedback] can be healthy"
14:03 gfldex if you want to simplify it like that. I prefere not to when it comes to the human (quite fragile) mind.
14:04 MadcapJake masak: I think part of it is that Linus' personality is certainly grating but another part that often gets masked by his personality is that it *is* important to have a filter into a project and often times (especially in larger projects) this is tough as the voice of many is even harder to say "no" to than one person.
14:04 profan gfldex: that's quite possibly the worst example you could have used
14:04 masak gfldex: ok, let me put it like this: I have no idea what you want to say
14:04 jast it's not a non-sequitur, just tricky logic, at least that's what I think this is about: the idea being that it's better to brusquely reject something than to let someone spend two years of their lives implementing it if you didn't want to accept it in the first place
14:04 jast of course there's no reason to not just reject it politely the first time
14:05 gfldex a young man wasted 2 years of his life, working on some kernel patches, because Linus was nice. If he would have been clear about the shitty idea, a lot of problems could have been prevented.
14:05 jast being nice is orthogonal to fundamentally rejecting an idea
14:05 masak I don't think there's any rational or compassionate defense of Linus's being a jerk to people online
14:05 pmurias masak: isn't a lot of the abrasiveness of Linus directed at people who he is close at when they are trying to do horrible things (i.e. break everything)
14:05 profan this has nothing to do with being nice or not, it's about being clear
14:05 masak worse, I think Linus is setting a bad example as a leader
14:05 profan Linux when he rejects things is just a plain butt most of the time
14:06 profan uh, linus*
14:06 sufrostico joined #perl6
14:06 gfldex that's a rather big "if", i grant you, but I like to know where ppl stand. And when you are polite, you are also easy to be misunderstood because humans hear mostly what they want to hear.
14:06 jast btw from what I can tell, in *most* cases Linus only does that to people who have been around for a while and are familar with him
14:06 masak you can be clear and reject patches without being an abrasive alpha male jerk
14:07 MadcapJake Geez I feel like the purveyor of hot button issues :P (transpiler the other day, linus today)
14:07 masak oh, I missed the transpiler hot button discussion :)
14:07 jast gfldex: "the consequences of X, Y and Z in your proposal need to be thought out more clearly before I will ever consider merging this." very clear, hard to misunderstand, not aggressive
14:07 masak a lot of communities manage to set things up so that feedback is polite, clear, and actionable
14:07 MadcapJake jast: I think this is true, I've read some of his responses/rejections and they don't all involve over-the-top insults
14:08 profan like, this one for example, i've rarely seen a discussion turn rude just because something was rejected
14:08 hotel_california joined #perl6
14:08 profan and people still understand
14:09 jast I totally prefer Linus's style over some other big folks' who shall remain unnamed, who are very brusque and offer precisely nothing in reasons why they reject proposals
14:10 itaipu joined #perl6
14:10 jast favourite quote: "Stop reopening the bug. If you want explanations pay somebody."
14:11 [Coke] m: say "abcde" ~~ / | @(<a b bc cde>)+»/
14:11 camelia rakudo-moar 1e5df4: OUTPUT«「cde」␤»
14:15 MadcapJake I think that, (thinking of the republic comparison) just like governments, maintaining projects is hard and there are pro's and con's to each method.  Linus's method while brash and heartless, has built a world-spanning project. Some choose to give equal say to all contributors, some have benevolent dictators, others use voting systems.  It's quite
14:15 MadcapJake fascinating how political and human-influenced programming can be.
14:16 RabidGravy seeing that it involves people not that surprising though
14:17 dalek doc: e982126 | (Jan-Olof Hendig)++ | doc/Type/X/IO/Symlink.pod:
14:17 dalek doc: Wrote some docs for X::IO::Symlink
14:17 dalek doc: review: https://github.com/perl6/doc/commit/e982126444
14:17 MadcapJake Code exists in three worlds at once: machine instructions, human interpretations, *and* group relations
14:18 pyrimidine MadcapJake: reminds me of that ol' esr essay "The Cathedral and the Bazaar".  Though esr isn't w/o controversy either
14:19 MadcapJake how does the code instruct the computer? how does the programmer relay those instructions, how does the team administer those relations?
14:19 lrep5 joined #perl6
14:20 perlpilot "effectively", "badly", "tenuously"
14:21 MadcapJake too true :)
14:21 MadcapJake pyrimidine: never read it but seems interesting!
14:28 m0ltar joined #perl6
14:29 tony-o jast: who said that?
14:30 tony-o “Stop reopening the bug. If you want explanations pay somebody.”
14:31 sortiz joined #perl6
14:37 sortiz \o #perl6
14:41 gfldex tony-o: https://sourceware.org/bugzi​lla/show_bug.cgi?id=4980#c10
14:43 buharin joined #perl6
14:43 buharin hello my friends
14:44 jast tony-o: as I said, I shall not name anyone... but Google knows :)
14:45 tony-o oh dear
14:45 mspo people continue to accept abuse by gnu projects and just eat it up
14:51 gfldex mspo: maybe because of: "He that is without sin among you, let him first cast a stone at her."
14:51 pmurias ok, figured out how to run nqp::p6invokeunder from nqp code
14:54 gfldex m: say IO::FileChanged;
14:54 camelia rakudo-moar 1e5df4: OUTPUT«Could not find symbol '&FileChanged'␤  in block <unit> at /tmp/emwt8LFG13 line 1␤␤Actually thrown at:␤  in block <unit> at /tmp/emwt8LFG13 line 1␤␤»
14:54 gfldex m: say IO::Notification::FileChanged;
14:54 camelia rakudo-moar 1e5df4: OUTPUT«Could not find symbol '&FileChanged'␤  in block <unit> at /tmp/qMK_YNk2oE line 1␤␤Actually thrown at:␤  in block <unit> at /tmp/qMK_YNk2oE line 1␤␤»
14:55 gfldex how do i get hold of the enum defined in: https://github.com/rakudo/rakudo/bl​ob/nom/src/core/IO/Notification.pm ?
14:56 tony-o m: FileChangeEvent::FileChanged.value.say;
14:56 camelia rakudo-moar 1e5df4: OUTPUT«1␤»
14:57 tony-o m: FileChangeEvent::FileRenamed.value.say;
14:57 camelia rakudo-moar 1e5df4: OUTPUT«2␤»
14:57 tony-o m: say "renamed" if 2 ~~ FileChangeEvent::FileRenamed;
14:57 camelia rakudo-moar 1e5df4: OUTPUT«renamed␤»
14:58 sortiz m: FileChangeEvent::.values.say;
14:58 camelia rakudo-moar 1e5df4: OUTPUT«(FileChanged FileRenamed)␤»
14:58 tony-o gfldex: in conclusion; just use FileChangeEvent :-)
14:58 tony-o not use in a perl way, it's just available
14:59 sortiz m: .say for +FileChanged, ~FileChanged;
14:59 camelia rakudo-moar 1e5df4: OUTPUT«1␤FileChanged␤»
14:59 gfldex i don't want to use it, I want to doc it.
14:59 tony-o what do you mean by "Get hold of", then?
14:59 gfldex get the type object
15:00 tony-o ok
15:00 gfldex besides, it feels inconsistent not to be called IO::FileChangeEvent.
15:00 tony-o m: FileChangeEvent.WHAT.say;
15:00 camelia rakudo-moar 1e5df4: OUTPUT«(FileChangeEvent)␤»
15:05 khw joined #perl6
15:22 dalek doc: 8266af9 | (Wenzel P. P. Peppmeyer)++ | doc/Type/IO/Notification.pod:
15:22 dalek doc: get IO::Notification::Change into the index
15:22 dalek doc: review: https://github.com/perl6/doc/commit/8266af94c9
15:22 dalek doc: b0964d6 | (Wenzel P. P. Peppmeyer)++ | doc/Type/IO/Notification.pod:
15:22 dalek doc: add useage of enum FileChangeEvent to the example
15:22 dalek doc: review: https://github.com/perl6/doc/commit/b0964d6c6e
15:27 aries_liuxueyang joined #perl6
15:29 dalek doc: 6222b5f | (Jan-Olof Hendig)++ | doc/Type/X/IO/Move.pod:
15:29 dalek doc: Added some docs for X::IO::Move
15:29 dalek doc: review: https://github.com/perl6/doc/commit/6222b5f789
15:31 pmurias jnthn: what does p6invokeunder do?
15:34 mohae joined #perl6
15:37 jnthn pmurias: Ummm...I *think* it's used to make sure things like where blocks get the correct scope even when invoked by the signature binder
15:37 sortiz m: enum Foo <a b>; Foo.enums.WHAT.say; # Why Hash and not Map?
15:37 camelia rakudo-moar 1e5df4: OUTPUT«(Hash)␤»
15:39 gfldex m: enum Foo <a b>; Foo.enums<c> = 2; dd Foo.enums;
15:39 camelia rakudo-moar 1e5df4: OUTPUT«{:a(0), :b(1), :c(2)}␤»
15:39 pmurias jnthn: I try to compile it to a normal call and see what breaks
15:39 jnthn :)
15:40 gfldex m: enum Foo <a b>; Foo.enums<c> = 2; dd Foo.enums; say Foo::a; say Foo::c;
15:40 camelia rakudo-moar 1e5df4: OUTPUT«{:a(0), :b(1), :c(2)}␤a␤Could not find symbol '&c'␤  in block <unit> at /tmp/l6HF74YgT0 line 1␤␤Actually thrown at:␤  in block <unit> at /tmp/l6HF74YgT0 line 1␤␤»
15:40 gfldex m: enum Foo <a b>; Foo.enums<c> = 2; dd Foo.enums; say Foo::a;
15:40 camelia rakudo-moar 1e5df4: OUTPUT«{:a(0), :b(1), :c(2)}␤a␤»
15:40 gfldex sortiz: because of a lack of rakudobug it seams
15:41 sortiz jnthn, Do you agree that Map is a better option?
15:47 jnthn sortiz: I'd say so...
15:48 pecastro joined #perl6
16:06 buharin joined #perl6
16:11 ssotka joined #perl6
16:13 pmurias jnthn: p6invokeunder seems to be used to get a context from a not invoke sub that's used as a throw away "scratchpad" so that we can check if a signature binds
16:14 jnthn pmurias: Ah...that'd also make sense. :)
16:14 * jnthn really can't remember :)
16:14 jnthn I know it does terrible evil :)
16:19 sno joined #perl6
16:28 tinita joined #perl6
16:30 dogbert17 there is something fishy with the link method or the handling of X::IO::Link
16:31 dogbert17 according to the docs the following syntax is correct, i.e.    link('mynewlink', 'existingfile);
16:32 dogbert17 if run this and 'existingfile' does no exist :) I get the following error message
16:32 geekosaur dogbert17, sounds like someone got that backwards
16:32 geekosaur the syscall is link(existingfile, newname)
16:32 geekosaur (likewise for symlinks)
16:32 dogbert17 aha
16:33 geekosaur ...swapping those is rather common, I'm afraid
16:33 dogbert17 the error message is backwards
16:33 dogbert17 Failed to create link called 'existingfile' on target '/home/dogbert/pwdlink': Failed to link file: no such file or directory
16:33 geekosaur (I'm not sure why; to me it makes sense as "just like copy or move")
16:33 pecastro joined #perl6
16:34 * geekosaur going into standup...
16:34 dogbert17 according to 5to6-perlfunc we have
16:34 dogbert17 "In Perl 6, part of the IO::Path class. The only difference between Perl 5 and Perl 6 is that the argument order has changed. It's now link($original, $linked_file)."
16:35 geekosaur link OLDFILE,NEWFILE
16:35 geekosaur from perldoc -f link
16:35 geekosaur which is same as the syscall
16:35 dogbert17 so, we should change the doc for link then?
16:36 diakopter $linked_file is confusing anyway
16:36 domidumont joined #perl6
16:37 ilmari src/core/io_operators.pm: sub link($target, $name, …)
16:37 mst naming around symlinks is almost always confusing
16:37 * mst was about to say 'soft links' due to falling into the everything2 vortex briefly yesterday
16:40 dogbert17 this works on my machine:  say link("newlink", "existingfile"); # True
16:43 dogbert17 if I try the same on a nonexisting file I get: Failed to create link called 'nonexistingfile' on target '/home/dogbert/newlink2': Failed to link file: no such file or directory
16:44 dogbert17 there must be a bug lurking somewhere
16:47 ilmari perl6 is backwards of C and perl5, but why?
16:48 orafu joined #perl6
16:49 geekosaur probably for the reason I said already: people always think it's the other way around
16:49 geekosaur so in p6 it is
16:52 teatime hrm... jnthn has a perl6 course??  this is on the internet, I hope…
16:54 TimToady I don't recall that any explicit decision was made on link; maybe it was an accident
16:56 mst maybe because it means you can end up doing path_object.link($to) ?
16:57 kjk joined #perl6
16:57 molaf joined #perl6
16:57 diakopter mst: I think you mean $from
16:58 mst I don't, because you're making the path a link -to- the other path
16:58 mst (this is why it's so frelling confusing, of course)
16:59 diakopter yeah but then you can't do the 2nd-arg optional thing where it uses the same filename for the current directory if it's linking to something in another directory
17:00 diakopter I've used that at least once
17:01 mst I would do that in shell but not in code, I don't think
17:01 mst matter of taste of course
17:02 kjk I see that when I 'use' a module, things that are 'is export' are made available to me, but I'm worry about 'use'-ing multiple modules that might, for example, export subs with the same name, is this a problem?
17:03 prammer joined #perl6
17:04 tinita joined #perl6
17:06 kjk is there a way for a module user to explicitly specify what to import from a module? say, i know module A exports sub1 sub2, but I only want sub1
17:07 mst kjk: use ModuleA qw(sub1);
17:07 mst kjk: use ModuleA; # means give me the defaults
17:07 mst kjk: use ModuleA qw(one two); # give me only one and two
17:07 pmurias joined #perl6
17:07 mst kjk: use ModuleA (); # don't import anything
17:07 cpage_ joined #perl6
17:07 RabidGravy joined #perl6
17:07 mst kjk: see http://p3rl.org/use
17:07 huf isnt that for perl5?
17:08 kjk mst: awesome, thanks. I didn't even know perl5
17:08 mst AUGH AUGH AUGH WRONG CHANNEL I SUCK
17:08 * mst facepalms
17:08 huf :D
17:08 mst kjk: ignore me
17:08 MadcapJake lol
17:08 huf no no, it was excellent advice, just for the other foot
17:08 mst though the perl6 version is presumably similar ... 'use ModuleA <sub1>' or something?
17:09 MadcapJake kjk: if you use a module that has a sub declared in a previously imported module it will fail, iirc
17:09 teatime .tell jnthn I saw in my logs someone mention your 'perl6 course' (or maybe it was 'introductory class' or something)... is that online??  sounds like it would be awesome.
17:09 yoleaux teatime: I'll pass your message to jnthn.
17:09 mst sorry, that's such a common #perl question ... :/
17:10 MadcapJake but you can do `require MyModule <&foo>` to only get the sub you want
17:10 MadcapJake kjk: ^^
17:10 MadcapJake here's the Perl 6 version of module docs: http://doc.perl6.org/language/modules
17:11 mst kjk: just listen to everybody who isn't me :D
17:12 teatime mst: it's pretty much the same.  perl6 has a :MANDATORY tag, which I think will get exported even when the user says ``use MyModule ()``
17:12 kjk lol np, thanks a lot guys, I'll give it a try @madcapjake, though it didin't fail when I 'use' another module that exports a sub with the same name..., it seems to replace the earlier sub
17:13 MadcapJake can you really provide a list to `use`?
17:13 MadcapJake hmm, didn't think it replaced
17:14 MadcapJake m: sub ok($foo) { $foo.say }; use Test; ok('hello!')
17:14 camelia rakudo-moar 1e5df4: OUTPUT«5===SORRY!5=== Error while compiling /tmp/LeNHjPxkos␤Cannot import symbol &ok from Test, because it already exists in this lexical scope␤at /tmp/LeNHjPxkos:1␤------> 3sub ok($foo) { $foo.say }; use Test7⏏5; ok('hello!')␤»
17:14 teatime well... you can definitely specify multiple tags with use, but that's not what you're asking :)
17:15 MadcapJake kjk: ^^ there's the error
17:16 MadcapJake m: module foo { package BAR { sub baz { 'quux'.say } } } use foo :BAR; baz()
17:16 camelia rakudo-moar 1e5df4: OUTPUT«5===SORRY!5=== Error while compiling /tmp/yLp77GACgP␤Strange text after block (missing semicolon or comma?)␤at /tmp/yLp77GACgP:1␤------> 3package BAR { sub baz { 'quux'.say } } }7⏏5 use foo :BAR; baz()␤    expecting any of:␤        infi…»
17:16 MadcapJake m: module foo { package BAR { sub baz { 'quux'.say } } }; use foo :BAR; baz()
17:16 camelia rakudo-moar 1e5df4: OUTPUT«===SORRY!===␤Could not find foo at line 1 in:␤    /home/camelia/.perl6␤    /home/camelia/rakudo-m-inst-2/share/perl6/site␤    /home/camelia/rakudo-m-inst-2/share/perl6/vendor␤    /home/camelia/rakudo-m-inst-2/share/perl6␤    CompUnit::Repositor…»
17:17 MadcapJake huh, I thought you could do that in a one-liner
17:17 teatime so.  What does a union type look like in Perl6?
17:17 geekosaur it's already in scope, don't you want import?
17:17 geekosaur s/in scope/loaded/ I guess
17:17 MadcapJake geekosaur: oops! yep that's it!
17:19 MadcapJake still doesn't work though :\ and still besides the point cus I was trying to see if `use` could take lists
17:19 kjk MadcapJake: I have two files(one.pm6 and another.pm6) both contain a sub named 'xxx', then from the REPL, I do:   use one; use another;
17:19 MadcapJake teatime: I thought that use only accepted package pairs
17:19 kjk and it didn't give me an error.
17:20 MadcapJake what happens when you call the sub?
17:20 kjk it calls the sub that's imported later
17:21 MadcapJake weird, maybe it replaces when they are both in modules whereas fails when one of the subs is in the current scope
17:21 kjk actually, i take that back..., it always calls the same sub, hmm...
17:21 teatime MadcapJake: you mean like:  use MyModule (:group1 :group2 :DEFAULT)  ?
17:22 MadcapJake teatime: no I thought you *couldn't* do `use MyModule <&baz>`
17:22 iH2O joined #perl6
17:22 MadcapJake m: use Test <&ok>; ok(1 == +'1')
17:22 camelia rakudo-moar 1e5df4: OUTPUT«5===SORRY!5=== Error while compiling /tmp/9q5BV4SMqT␤Error while importing from 'Test':␤no EXPORT sub, but you provided positional argument in the 'use' statement␤at /tmp/9q5BV4SMqT:1␤------> 3use Test <&ok>7⏏5; ok(1 == +'1')␤»
17:22 kjk ok forget what i just said... :(   i forgot to make 'is export'  one of the sub...., ignore me
17:23 teatime there must be a pastebin or something I missed
17:23 MadcapJake kjk: ahh! well glad you figured it out, better than strange module import behavior :)
17:23 kjk yeah... sorry about that lol
17:23 MadcapJake kjk: no problem! Keep the questions coming!
17:23 iH2O lets all /ignore kjk
17:24 MadcapJake lol wow harsh O_o
17:24 kjk no~~~ i've got more questions! :)
17:24 mst kjk: sometimes making a fool of yourself on IRC is the fastest way to find your mistake :D
17:24 iH2O :)
17:24 mst we've all done it
17:24 kjk indeed..
17:24 MadcapJake and mst's advice works for both #perl and #perl6 :P
17:25 teatime so.. union type.. inspiration?  anyone?  trying to figure out how a class should be structured that 'has' either an X or a Y but never both.
17:25 mst MadcapJake: this time :D
17:26 MadcapJake lol
17:26 MadcapJake teatime: X|Y ?
17:26 MadcapJake or you mean xor
17:26 iH2O left #perl6
17:26 teatime maybe.   I was thinking maybe 'where' + junction?
17:27 teatime MadcapJake: so, let me think of an example... at least one less esoteric than my actual one...
17:27 sortiz kjk, in the REPL you can import multiple lexical symbols with the same name because every line use a new lexical nested scope.
17:28 huggable joined #perl6
17:28 moritz class A { has ($.x, $.y); submethod BUILD(:$!x, :$!y) { unlexx $!x xor $!y { die "Can only set x XOR y" } };
17:28 moritz would be my approach to a union type
17:28 MadcapJake unlexx?
17:28 moritz unless
17:29 teatime MadcapJake: synonym for Grammar.parse.inverse()
17:29 kjk so, is there a way to "explore" what's available in my current namespace after I 'use' a module? or maybe to see what symbols are 'is export' in the module?
17:29 MadcapJake moritz: oh duh! :P seemed like something else at first glance
17:29 geekosaur heh
17:30 sortiz m: use Test; MY::.keys.say; # kjk
17:30 camelia rakudo-moar 1e5df4: OUTPUT«(&isnt $=pod &does-ok &flunk &cmp-ok &pass &plan !UNIT_MARKER &unlike &subtest EXPORT $_ $! &use-ok &like &throws-like &is-deeply &eval-dies-ok &skip-rest &todo ::?PACKAGE GLOBALish $¢ &done-testing &diag &is &ok $=finish &eval-lives-ok &lives-ok &dies-ok…»
17:31 teatime MadcapJake: I guess this is a (kindof bad) example:  class Circle has EITHER (Point $center, Length $radius) OR (Point $circum-point-1, Point $circum-point-2) OR (Line $tan-1, Line $tan-2, Length $radius).
17:31 MadcapJake sortiz: how do you get the subs that Test imports?
17:31 teatime bah that's a terrible example that will just invite non-union solutions, heh
17:32 sortiz m: need Test; Test::EXPORT::ALL::.keys.say; # without import
17:32 camelia rakudo-moar 1e5df4: OUTPUT«(&isnt &plan &pass &cmp-ok &flunk &does-ok &subtest &unlike &like &use-ok &todo &skip-rest &eval-dies-ok &is-deeply &throws-like &ok &is &diag &done-testing &is-approx &skip &dies-ok &lives-ok &eval-lives-ok &MONKEY-SEE-NO-EVAL &nok &is_approx &isa-ok &can…»
17:32 MadcapJake ahh there we go, I was trying Test::Export::DEFAULT::.keys and nothing was coming up
17:32 kjk nice, thanks sortiz
17:33 MadcapJake teatime: yeah that I would solve via two different `new` methods
17:33 MadcapJake (or three)
17:33 sortiz m: need Test; Test::EXPORT::DEFAULT::.keys.say; # DEFAULT works too.
17:33 camelia rakudo-moar 1e5df4: OUTPUT«(&isnt &plan &pass &cmp-ok &flunk &does-ok &subtest &unlike &like &use-ok &todo &skip-rest &eval-dies-ok &is-deeply &throws-like &ok &is &diag &done-testing &is-approx &skip &dies-ok &lives-ok &eval-lives-ok &MONKEY-SEE-NO-EVAL &nok &is_approx &isa-ok &can…»
17:33 MadcapJake sortiz: huh, maybe it was a case of the REPL thing you stated earlier
17:34 sortiz MadcapJake, Yep, can be.
17:34 MadcapJake yep, now that I do it in one line, it works
17:34 sortiz :)
17:34 MadcapJake sortiz++ # so many helpful tips!
17:35 sortiz kjk, yw
17:36 iH2O joined #perl6
17:36 * MadcapJake should really move his lunch away from the keyboard or risk needing yet another one
17:36 sortiz Another lunch? :-)
17:37 MadcapJake lol!
17:37 mst given the LotR themes of TimToady's recent talks ... presumably second lunch, to go with second breakfast
17:38 MadcapJake I'm a strong believer in second breakfast :) favorite meal of the day!
17:41 itaipu joined #perl6
17:42 sortiz MadcapJake, And yes, 'use Foo ...' take a list, but only named args are handled automatically, as tags mapped to subpackages of EXPORT::, but other args need an EXPORT sub in the exporter unit.
17:43 MadcapJake ok so `use Test <&ok>` won't work, right?
17:45 sortiz Unless Test declares a 'sub EXPORT() { ... }' to handle that.
17:46 MadcapJake i see, could you do `use Test DEFAULT<&ok>`?
17:46 MadcapJake oops forgot the colon
17:46 teatime MadcapJake: lol, I still can't think of a good example.  that's perhaps telling in itself.  and moritz provides one perfectly workable solution.  the more I think about it, it seems like unions might be kindof a feature to address short-comings of earlier and forcibly-statically-typed languages, and mostly irrelevant in the world of Perl6.  afterall, a variable can hold any type, and you can query it to see
17:46 teatime what kind of thing it is.  (or have a separate enum param to indicate, if your different types aren't actually different types.)
17:46 MadcapJake m: use Test :DEFAULT<&ok>; ok(1 == +'1')
17:46 camelia rakudo-moar 1e5df4: OUTPUT«ok 1 - ␤»
17:46 teatime so maybe I was just overthinking it.
17:46 iH2O left #perl6
17:48 MadcapJake teatime: I would agree, there are things on the fringes of dynamic/static languages that don't transfer well
17:48 MadcapJake I think junctions, subsets, where constraints, should let you accomplish what you need
17:49 sortiz lunch time&
17:53 teatime oh, and I forgot to mention also, you could also do it as an inheritence hierarchy, à la Cool
17:53 MadcapJake yeah there ya go! That's a great idea.
17:54 MadcapJake Can I ask what your specific situation is that makes you want to reach for union types?
17:54 iH2O joined #perl6
17:56 iH2O activity folks!
17:57 iH2O z....
17:57 teatime MadcapJake: strong typing makes me feel warm and fuzzy inside.  I feel safer if I explicitly specify the types of arguments, return values, and attributes.
17:58 nine +1
17:58 iH2O +9
18:02 teatime oh hey.. this was easy:  sub foo($x where Int|Str) { say $x }; foo 10; foo "bar"; foo 3.42;
18:03 teatime can also do:  sub foo ($x where Int:D|Str:D)
18:03 MadcapJake yeah that's what I was trying to tell you :P
18:03 MadcapJake I should'a given an example, I s'pose
18:03 teatime yeah I realized it early on but I didn't realize the syntax could be that clean.
18:04 teatime then I re-read about smartmatching
18:04 nine Public service announcement: I'm gonna merge the precomp-store-redesign branch soon
18:04 iH2O good to know
18:05 MadcapJake i'll rebase my custom CUR work after that and try and find some time this weekend to finish it! My son's birthday is this weekend so I might be too busy
18:05 iH2O is it fathers day already this weekend?
18:05 * MadcapJake notices that his fork is already way out of date
18:05 nine MadcapJake: rebase regularily. Makes it much easier :)
18:06 MadcapJake nine: thanks good tip, I thought I should just wait it works xD
18:06 MadcapJake s/it/till it/
18:07 teatime and naturally, this also works:  class A { has $.x where Str|Int };  <--  moritz, how do you feel about this compared to manually checking in e.g. BUILD
18:07 teatime or anyone, of course.
18:08 nine teatime: whatever you can do declaratively, do it
18:08 iH2O why?
18:08 iH2O perl6 isnt prolog
18:09 iH2O :-?
18:09 perlpilot prolog is perl6 though  (a slang anyway  ;)
18:09 iH2O :-P
18:09 teatime :)
18:10 mst iH2O: declarative > functional > mutable
18:10 mst in terms of not wanting to kill yourself while debugging
18:10 iH2O i stand corrected
18:10 teatime nine: that is my feeling as well, at least whenever it's clearer.  which it usually is, which is why I lean that way to begin with.
18:10 mst iH2O: then again, I also like prolog so :)
18:11 iH2O once the japanese had an ambitious AI project based on PROLOG
18:11 iH2O 20 years ago
18:11 iH2O dunno what happened with it
18:11 iH2O no one talks about it anymore :(
18:12 iH2O people seems to have given up figuring the "hard problem of AI"
18:12 iH2O seem
18:12 mst not everybody gave up
18:12 iH2O never give up!
18:12 mst if you don't believe me, idle in ##prolog for a bit
18:12 tony-o MadcapJake: the dates on modules are being fixed now too - submitted = first commit to repo and updated = date of latest commit to repo
18:12 MadcapJake or maybe it's so powerful that it has become indistinguishable from people... O_O
18:12 MadcapJake tony-o: sweet! that's awesome!
18:13 MadcapJake tony-o++ # http://modules.zef.pm
18:14 * MadcapJake is off to the laundromat &
18:14 iH2O beware bedbugs crawling around
18:20 simcop2387 joined #perl6
18:20 brrt joined #perl6
18:23 sufrostico joined #perl6
18:27 iH2O i like perl6 for its awesome regex. but since theyre still a bit slow i usually do some grep/sed front-end preprocessing
18:27 iH2O that speeds things up quite a bit like 5x
18:28 timotimo yeah, speed improvements are on the menu for this year
18:28 timotimo all the speed improvements
18:31 buharin hi
18:31 buharin :)
18:32 iH2O hi perl6er
18:32 buharin I want to speak with Perl Guru
18:32 iH2O perl guru or perl6 guru?
18:32 iH2O both?
18:32 buharin both
18:32 iH2O im sorry its not me
18:33 [Coke] If you have a perl 6 question, you can ask it here.
18:33 tadzik fire it up, we'll see if we can find someone who's guru enough :)
18:33 [Coke] perl 5, you probably want #perl on irc.perl.org
18:34 mst no!
18:34 mst [Coke]: don't send him to a SOCIAL channel!
18:34 iH2O tsk tsk
18:34 mst for perl5, you want #perl on *freenode* or #perl-help on irc.perl.org
18:34 iH2O :)
18:34 [Coke] mst++
18:35 mst remember that #perl was a social channel years before magnet was irc.perl.org
18:35 iH2O perl5 predates IRC
18:35 mst (this would all have been simpler if the people running perl.org DNS had actually bothered asking anybody before they pointed the CNAME at us :)
18:36 [Coke] mst: can't remember what I don't know. thanks for clearing up the confusion, though.
18:37 buharin I want to speak only with guru
18:37 buharin gentle conversation
18:37 mst buharin: if you want free help, you will go the places I have suggested and ask nicely.
18:37 iH2O [Coke] is a guru
18:38 mst [Coke]: if you don't know, don't send people to random channels on other people's networks then :P
18:38 buharin [Coke], are you guru?
18:39 mst buharin: please if you have a perl6 question, ask it in this channel.
18:39 mst buharin: if you have a perl5 question, join #perl and ask it there
18:39 mst the 'guru' thing is silly and will not get you help
18:40 buharin okay
18:40 buharin so
18:40 ZoffixW joined #perl6
18:40 buharin I want to ask Perl Guru
18:40 iH2O troll alert!
18:40 mst stop with the guru rubbish. ask the question.
18:40 iH2O rush to the bunkers!
18:40 ZoffixW buharin, ask away.
18:40 ZoffixW buharin, I'm a guru in everything.
18:40 buharin why there not something like perlgame equivalent to pygame
18:41 ZoffixW buharin, no one was interested enough in writing it.
18:42 mst buharin: http://sdl.perl.org/
18:42 ZoffixW buharin, we do have SDL bindings in P6 and I'm sure there's a bunch of stuff in Perl 5 too. So there's some stuff, it's just not a "collection of game writing modules"
18:42 buharin ya I know
18:42 timotimo 2011, fantastic :D
18:42 buharin but Python is more friendly anyway
18:42 buharin however Perl is magic
18:42 timotimo the SDL2 bindings could seriously benefit from people telling me what they are missing, or showing off stuff they are doing with it
18:43 ZoffixW timotimo, that'll come soon. I'm planning on writing Tetris (as a learning exercise)
18:43 timotimo great!
18:43 buharin timotimo, I send pull request to sdl2 perl6
18:43 buharin and it was ignored
18:43 buharin :(
18:43 ZoffixW buharin, yes, that's why we have so many languages. Different people like different things.
18:44 iH2O poor buharin
18:44 * iH2O hugs buharin
18:44 timotimo oh, are you Freezerburn?
18:44 buharin yep
18:44 timotimo damn, sorry about that
18:44 timotimo i remember that
18:45 timotimo it doesn't apply cleanly any more. i'll have to re-do it myself in order to get it in
18:45 timotimo for now i have to be AFK, sorry
18:45 AlexDaniel joined #perl6
18:45 ZoffixW buharin, oh, actually I see there *is* a PerlGameDev group. Though judging by the dates on those repos, it's full of bitrot: PerlGameDevhttps://github.com/PerlGameDev
18:45 ZoffixW https://github.com/PerlGameDev
18:46 buharin ZoffixW thank you my friend
18:46 ZoffixW No, problem. Glad to be the guru for guruing needs!
18:46 iH2O lol
18:46 ufobat lol
18:47 * [Coke] feels like he and mst are on the same side, and still feels like mst is grumpy.
18:47 * [Coke] hugs mst.
18:47 mohae_ joined #perl6
18:48 ZoffixW huggable, hug mst
18:48 * huggable hugs mst
18:49 moritz huggable: hug yourself
18:49 * huggable hugs yourself
18:49 moritz huggable: hug huggable
18:49 * huggable hugs huggable
18:49 huf grammar...
18:50 dalek joined #perl6
18:50 ZoffixW huf, patches welcome: https://github.com/zoffixznet/huggable/blo​b/master/lib/IRC/Client/Plugin/Hug.pm6#L9
18:53 AlexDaniel RabidGravy: ouch, you merged it!
18:54 RabidGravy what?
18:54 mst huggable hugs huggably huggably on the sea shore
18:54 AlexDaniel RabidGravy: not a big actually, but just so that you know
18:54 AlexDaniel RabidGravy: there was a little problem with https://github.com/perl6/doc/pull/489
18:55 AlexDaniel RabidGravy: mainly if you look at the list of commits, every commit is doubled
18:55 AlexDaniel not a big issue*
18:56 AlexDaniel RabidGravy: :) http://irclog.perlgeek.de/p​erl6/2016-05-12#i_12467443
18:57 RabidGravy well I was well asleep by then :)
18:57 AlexDaniel huggable: hug hugs
18:57 * huggable hugs hugs
18:57 MadcapJake await start { Laundry.new(:3loads) }; self.rejoice;
18:58 MadcapJake More like: self.fold(:all)
18:58 moritz but is it a left fold or a right fold? :-)
18:59 MadcapJake Lol, is there a middle fold?
19:01 jast it's called centerfold
19:02 psch i heard the center cannot fold..?
19:02 moritz if the center folds, the whole front is lost!
19:03 * moritz wonders if centipedes centerfold
19:03 jast no, they centifold
19:04 moritz and "fold" stands for "f-ing old", right?
19:04 huf so if centipedes have 100 legs, do kilopedes have 0.001 legs?
19:04 jast what? no!
19:05 jast kilopedes have 1000000 legs
19:05 moritz that would have been my intuition as well
19:05 AlexDaniel but then centipedes should have 10 legs, no?
19:05 jast the beast with a million legs
19:05 moritz one zero off
19:05 jast whoops
19:05 jast feel free to sue me
19:06 huf i think it's flipped for pedes
19:06 AlexDaniel right, no…
19:06 huf because centimeter is 1/100th a meter
19:06 huf but it's supposed to be a hundred legs? so this scale is clearly 1/
19:06 moritz the centpede has 100 legs, so a pede has 10_000 legs
19:06 huf oh that's silly.
19:06 huf a monopede has one leg. a biped has half a leg
19:07 moritz and the kilopede has 10M, the millipede 10
19:07 huf though arguably half a leg is the same thing as one leg
19:07 jast you brought up kilo and thus we assumed SI, not greek
19:07 AlexDaniel huggable: dunno
19:07 huggable AlexDaniel, ¯\_(ツ)_/¯
19:07 moritz .oO( SI is all greek to me )
19:08 JustinHitla joined #perl6
19:08 huf i thought it was some kind of norwegian thing
19:08 JustinHitla myip () { lwp-request -o text checkip.dyndns.org | awk '{ print $NF }' }
19:08 moritz I'm glad the French have the habit of switching the order of words in their sentences or names, otherwise we'd be stuck with IS
19:08 JustinHitla how to make it into oneliner ?
19:08 JustinHitla so I can run it from console without creating file.pl
19:08 moritz JustinHitla: I believe you are in the wrong channel
19:09 JustinHitla no its perl
19:09 jast why wouldn't you be able to run this from console?
19:09 filippos_ joined #perl6
19:09 mst JustinHitla: that is a bash function
19:09 AlexDaniel JustinHitla: what part of that is Perl 6?
19:09 JustinHitla moritz: so because of little bit of awk its not worth asking here ?
19:09 moritz JustinHitla: it looks more like shell programming to me, and certainly not Perl 6
19:09 AlexDaniel or even just perl…
19:09 mst JustinHitla: that is a bash function
19:09 mst JustinHitla: it is not perl at all
19:09 mst JustinHitla: it is bash
19:09 iH2O the French puts the adjective after the noun which is more natural in that you dont have to store the adjective before applying it to the noun
19:09 jast it happens to be using a tool written in Perl
19:10 AlexDaniel mst: calm down :))
19:10 jast still I don't really understand the problem
19:10 mst AlexDaniel: dude, please don't ever say that to me.
19:10 mr-foobar joined #perl6
19:10 moritz JustinHitla: we tolerate a bit (or a lot) of off-topic questions from regulars, but are a bit off-put when people join and start with off-topic questions
19:10 jast mst: don't calm down! :}
19:10 moritz pump up!
19:10 mst jast: I WILL CALM DOWN IF I WANT TO YOU'RE NOT MY MOM
19:10 iH2O tsk tsk
19:10 jast how do you know?
19:11 AlexDaniel huggable: hug mst
19:11 * huggable hugs mst
19:11 mst jast: I gave the eulogy at her funeral. The corpse was a clue.
19:11 jast oh, well that makes sense...
19:11 huf i wish calm down were closer to "rest in peace" like it is in a grown up language :)
19:11 MadcapJake huggable: hug no one and cries softly
19:11 * huggable hugs no one and cries softly
19:11 filippos_ lovely to see this kind of conversations :)
19:12 ufobat while running my bailador tests i just had a "zeroed target thread ID in work pass", which is not reproducible
19:13 * moritz has written a ~6k chars blog post, and now for the live of him can't think of a conclusion or outro ro something like that
19:14 moritz ufobat: iirc moarvm has some instrumentation that allows you detect cross-thread writes; maybe try to turn that on for the test suite?
19:14 jast let's have a look. for seven fantasy dollars I'll make one up for you!
19:14 moritz sorry, my memory is very vague on this one; hopefully somebody else here or in #MoarVM can provide details
19:15 ufobat okay...
19:15 diakopter ufobat: that's an internal GC error
19:15 moritz JustinHitla: https://gist.github.com/moritz/6​2a3b69164e670b2c55eea28499bec60
19:16 yqt joined #perl6
19:16 diakopter (doesn't mean there's a GC bug; it usually means something wasn't rooted properly)
19:16 moritz sorry, meant jast
19:16 moritz j<tab> simply isn't discriminatory enough
19:16 jast I get that a lot
19:16 ufobat what does "wasn't rooted properly" mean?
19:16 spider-mario joined #perl6
19:17 diakopter oh, not your fault; it's a bug in the VM's C code
19:17 JustinHitla moritz: what is it ?
19:17 jast moritz: right, I can see how that's a bit tricky
19:17 moritz JustinHitla: sorry, it was meant for JustinHitla
19:18 moritz JustinHitla: argl, pleaes ignore me
19:18 moritz JustinHitla: it was meant for jast
19:18 geekosaur ufobat, rooting has to do with registering memory allocations with the garbage collector so that when gc moves something around, things that point to or within that thing get updated
19:18 * moritz should clearly just go to sleep, and try again tomorrow
19:18 jast if you add an intro you can double back to it as the conclusion
19:18 diakopter ufobat: if you can't reproduce it after a bunch of tries, best to just wait until next version of MoarVM is released (with next Rakudo) since there are some fixes which might fix what you see
19:18 jast e.g. tell a story about that time you saved the world using the approach you're describing
19:18 ufobat allright :)
19:18 ufobat thats easy
19:18 ufobat thanks
19:19 jast and then the conclusion is you becoming filthy rich and ruling the world, "and the same could happen to you if you do this stuff" or something
19:20 moritz jast: story telling is a good idea. I usually don't even consider it when talking about technical topics
19:20 jast checks all the boxes for marketing, too. bring up a dilemma the audience can identify with. make them empathize with you. introduce your magic potion. conclude with all the benefits and call the reader to action (do this yourself now). tada!
19:22 timotimo oh, and: only fools point out the potential drawbacks of their praised-of-the-day
19:22 jast only point out the *challenges* in such a way that the reader is subtly encouraged to buy your consulting services, too
19:22 moritz jast: heh, when I'm done with my stuff, I should nudge you go over my website and sales pitch :-)
19:23 moritz jast: oh, I don't actually want to sell consulting services, just a book
19:23 jast same difference
19:23 moritz right :-)
19:23 jast now, about those seven fantasy dollars...
19:24 jast I want them in blue coins!
19:24 moritz m: say 'jast +7'
19:24 camelia rakudo-moar 1e5df4: OUTPUT«jast +7␤»
19:24 jast I guess that will work
19:24 moritz m: my $jast; ++$jast for ^7; say $jast
19:24 camelia rakudo-moar 1e5df4: OUTPUT«7␤»
19:25 moritz there, I even paid you twice!
19:25 jast what? nooo! you don't own me!
19:26 iH2O jast is incorruptible
19:26 iH2O jast for President!
19:26 jast now, let's not be hasty
19:26 jast I may not be... completely incorruptible
19:26 jast if you get my meaning
19:26 moritz right, the first step is jast for presidential candidate!
19:32 MadcapJake Anyone want to take a look at my poor man's dykstra algorithm? I can't seem to get it to stop running xD https://gist.github.com/MadcapJake​/efbcb2400c061c30fc9cb713a263c7c7
19:35 MadcapJake I should probably assemble all possible paths and then save them to reduce calculations, but I need a working algorithm first 😵
19:35 dalek joined #perl6
19:36 jast repr is a connection matrix, right?
19:36 jast adjacency matrix, technically speaking
19:36 MadcapJake Yeah
19:38 jast yeah, I think a dynamic programming type approach is both easier to implement and loads more efficient
19:38 MadcapJake Any good resource you know of for learning that?
19:39 jast I can try and describe what I'd be doing here
19:39 MadcapJake Sure!
19:40 jast the main thing is you're doing the same things over and over again by iterating in ecc
19:40 jast a bottom-up approach might work like this:
19:41 mst 0
19:41 jast let's say we have N nodes. create an array[N] and initialize with magic/empty value (not 0)
19:41 jast maintain a set of nodes you've looked at (empty initially) and a set of nodes you haven't looked at (all minus your input $v, initially)
19:43 jast actually let's simplify a bit further. put *all* nodes in the set of unvisited (not looked at), but put $v first
19:44 jast basically you sort the set of unvisited nodes by its value in the array I mentioned. this array is the cost array where you're determining the minimum cost to reach that node from $v.
19:45 jast the cost value for $v itself is 0, of course, so the $v node comes first in the unvisited set
19:45 MadcapJake I read something like that last night, but how do I establish cost when each node is equidistant?
19:46 jast if you don't have weights, the cost of every edge is 1
19:46 jast if you never have specific weights we can simplify a little
19:48 jast the loop goes like this: shift value from unvisited set. let's call that node $x. get $x's successors in the graph. for each successor $y, update its cost: cost[$y] := min($cost[y], $cost[x] + 1)
19:49 jast I'm gathering you want to know the actual path to take to each destination node, so we can extend this step a little
19:49 jast define an array of paths initially, with the path to each node initialized to empty
19:49 jast now, when updating the cost for $y, if $cost[x] + 1 is smaller than the previous tentative cost, we've found a new shorter path to $y
19:49 MadcapJake How do I get the successors?
19:50 timotimo you store them
19:50 jast from your adjacency matrix
19:50 jast you're already doing that
19:50 MadcapJake OK got it
19:50 jast so now you can update the tentative path to $y: it's path[$x] (concat) $y
19:51 wamba joined #perl6
19:51 jast once you're done for all $y, you add $x to the visited set (and you skip over all nodes already visited), and that concludes the loop
19:51 jast in the end you have the real cost/distance to each node, and the shortest path to each node
19:51 jast questions? :)
19:52 jast (if you do all this for just one destination node, you can terminate the loop the moment you're moving that node to the visited set)
19:53 teatime .u U+2216
19:53 yoleaux U+2216 SET MINUS [Sm] (∖)
19:54 jast if, at any time after the first go through the loop, all the cost values for the nodes in the unvisited set are magic/empty, you can terminate, too, because you've found that the remaining nodes are not reachable at all
19:54 teatime hypothetical:  If you could not use that ^^ one, which Unicode character would you use to indicate Set Subtraction / Set Remove ?
19:55 jast backslash
19:55 teatime ok, what unicode character with codepoint > 127, then.
19:56 MadcapJake OK let me (try to) take this all in 🤔
19:57 timotimo i wrote a nice dijkstra for the masakism workshop, but i can't find it right now
19:57 cdg joined #perl6
19:57 timotimo it even draws a grid on the terminal when you ask it to build grid-like graphs
19:58 teatime MadcapJake:  {A B C D} ∖ {A C} → {B D}  if that helps.  and >127 just means non-ASCII.
19:58 jast .u U+2572
19:58 yoleaux U+2572 BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT [So] (╲)
19:58 jast maybe
19:58 jast it's a bit big but the idea is there
19:59 iH2O left #perl6
20:00 ugexe .u U+2296 ?
20:00 yoleaux U+0020 SPACE [Zs] ( )
20:00 yoleaux U+002B PLUS SIGN [Sm] (+)
20:00 yoleaux U+0032 DIGIT TWO [Nd] (2)
20:02 jast I guess people would understand that, too
20:02 jast in the context of sets there's only so much it could possibly mean :)
20:02 ugexe m: say set(<a b c d>) (^) set(<a c>); # (^) is the texas variant of existing set operator U+2296
20:02 camelia rakudo-moar 366ddf: OUTPUT«set(b, d)␤»
20:03 psch m: say set(<a b c d>) (-) set(<a c>); # we have two of that?
20:03 camelia rakudo-moar 366ddf: OUTPUT«set(b, d)␤»
20:04 psch or am i confused 'cause U+2296 doesn't render here? :)
20:04 MadcapJake jast: thanks I think I follow, still doing laundry but I'll give it a try later tonight!
20:04 ugexe ah (^) is symetric difference
20:05 jast MadcapJake: good luck with both :)
20:05 jast I believe laundry is one of the great evils of old
20:05 masak yes, it's set difference versus symmetric difference
20:05 masak I kind of enjoy doing laundry, actually
20:06 teatime aka relative complement, aka set-theoretic difference
20:06 masak it feels like a very well-delimited, ritualized act
20:06 masak laundry, that is. not set difference
20:06 * teatime is also doing laundry.  *lots* of laundry :≀
20:09 teatime er, U+2216 is aka ^^, not U+2296, which, yes is already a different Perl6 set operator :)
20:09 jast yeah, I'm kidding. I don't mind laundry. ironing is the real great evil.
20:12 masak oh the ironing
20:13 firstdayonthejob joined #perl6
20:27 perlpilot joined #perl6
20:29 MadcapJake Lol laundry isn't so bad if you have laundry machines, I really hate going to laundromats...
20:29 _dolmen_ joined #perl6
20:29 jast I do have one
20:30 jast never used a laundromat
20:30 mst I have never owned an iron.
20:41 masak m: for ^5 -> $n { sub foo { next if $n == 3 }; foo(); say $n }
20:41 camelia rakudo-moar 366ddf: OUTPUT«0␤1␤2␤4␤»
20:41 masak TIL the corresponding code is outlawed in Python
20:42 mst perl5 would warn() unless you specifically tell it not to, I think
20:42 masak "SyntaxError: 'continue' not properly in loop" -- meh :)
20:42 masak in Perl 6 it's just naturally fine
20:45 mst I think perl5 warns because 'next' is dynamic and you often didn't mean to exit a subroutine that way
20:45 mst certainly I don't find occasionally disabling that warning onerous, and it's found bugs for me before
20:46 mst OTOH I suspect perl6 would correctly complain about the equivalent bug as well
20:50 masak m: my $g; for ^3 { $g = { next } }; $g()
20:50 camelia rakudo-moar 366ddf: OUTPUT«next without loop construct␤  in block <unit> at /tmp/uUn3San2uX line 1␤␤»
20:50 masak mst: ^^ that one?
20:51 mst I was thinking of declaring 'sub foo' outside the loop
20:53 AlexDaniel m: sub foo { next if $^n == 3 }; for ^5 -> $n { foo($n); say $n }
20:53 camelia rakudo-moar 366ddf: OUTPUT«0␤1␤2␤4␤»
20:53 masak m: sub foo { next }; for ^3 { foo() if $_ == 1; .say }
20:53 camelia rakudo-moar 366ddf: OUTPUT«0␤2␤»
20:53 masak works fine in Perl 6. no warning.
20:54 masak Python would shoot soda out its nose at that one.
20:54 mst it works the same in perl5, but the warning has saved me pain before now
20:55 AlexDaniel m: sub foo { LAST { say ‘hi’ } }; for ^5 -> $n { foo; say $n }
20:55 camelia rakudo-moar 366ddf: OUTPUT«0␤1␤2␤3␤4␤»
20:55 AlexDaniel m: sub foo { FIRST { say ‘hi’ } }; for ^5 -> $n { foo; say $n }
20:55 camelia rakudo-moar 366ddf: OUTPUT«0␤1␤2␤3␤4␤»
20:57 AlexDaniel what do you guys think about these ones ↑ ?
20:57 AlexDaniel should it throw a warning?
20:57 masak yeah; not surprised those two don't find the loop
20:57 masak probably
20:57 masak maybe even an error
20:57 AlexDaniel m: LAST { say ‘hi’ }
20:57 camelia rakudo-moar 366ddf: ( no output )
20:57 jnthn m: sub foo { FIRST { say 'hi' } }; (1,2,3).map(&foo)
20:57 yoleaux 17:09Z <teatime> jnthn: I saw in my logs someone mention your 'perl6 course' (or maybe it was 'introductory class' or something)... is that online??  sounds like it would be awesome.
20:57 camelia rakudo-moar 366ddf: OUTPUT«Too many positionals passed; expected 0 arguments but got 1␤  in sub foo at /tmp/UCPZxtWpcO line 1␤  in block <unit> at /tmp/UCPZxtWpcO line 1␤␤»
20:58 jnthn m: sub foo($) { FIRST { say 'hi' } }; (1,2,3).map(&foo)
20:58 camelia rakudo-moar 366ddf: OUTPUT«hi␤»
20:58 jnthn A sub with a FIRST is not automatically wrong, 'cus you could be passing it to map or some other higher-order looper
20:59 jnthn The LAST in the mainline is detectable, as it would be in any other immediate block.
20:59 Skarsnik joined #perl6
21:00 jnthn teatime: It's the Perl 6 course linked from http://jnthn.net/articles.shtml
21:00 masak waitwait, FIRST works with .map, but LAST doesn't?
21:00 jnthn m: sub foo($) { LAST { say 'hi' } }; (1,2,3).map(&foo)
21:00 camelia rakudo-moar 366ddf: OUTPUT«hi␤»
21:00 jnthn Looks working to me
21:01 jnthn m: sub foo($_) { .say; LAST { say 'hi' } }; (1,2,3).map(&foo)
21:01 camelia rakudo-moar 366ddf: OUTPUT«1␤2␤3␤hi␤»
21:02 pmurias_ joined #perl6
21:09 ZoffixWin whoa!
21:09 ZoffixWin jnthn, it's like a treasure chest of goodies!
21:10 masak jnthn: ah. I misunderstood what you were saying.
21:11 masak in a sub, either FIRST or LAST are OK, because its caller is potentially late-bound and *could* be a loop (or a .map, or similar)
21:12 TEttinger joined #perl6
21:14 teatime jnthn++
21:14 jnthn masak: Yeah, a sub or a block. The "immediate block" bit was "a block that's executed immediately rather than a closure" :)
21:14 jnthn masak: So in the block of an `if` statement it'd not make sense, for example.
21:15 jnthn BTW, this is nice in so far as it lets you call those phasers if you make your own looping constructs too.
21:15 jnthn Thus why whenever loops could also easily use them. :)
21:19 masak that is nice :)
21:20 masak though creating something like a `whenever` block is still an extralingual activity
21:20 masak someone should put in place, I dunno, a kind of system for extending the syntax and semantics of the language from within Perl 6 itself
21:20 masak :P
21:22 teatime Survey... can you see this character, or not?  (i.e., is it in your configured IRC font(s))
21:22 teatime .u U+27CD
21:22 yoleaux U+27CD MATHEMATICAL FALLING DIAGONAL [Sm] (⟍)
21:23 * sortiz can see.
21:23 ZoffixWin No, I see a box with numbers in it
21:23 jnthn masak: Well yeah, it's interesting to note that both for and whenever desugar to function/method calls :)
21:23 * jnthn quickly dodges the falling diagonal
21:24 teatime it was added in Unicode 6.1, so it's relatively a baby still.
21:24 * zostay sees
21:27 * jnthn doesn't see it, fwiw
21:28 jnthn Hm, I can't see it in Chrome either.
21:28 teatime it surprises me how many Unicode 1.1–3.2 characters are not in my preferred font(s), which do actually have and aim for pretty good coverage (of the math/arrows/etc. stuff that I care about, not various scripts)... I need to tweak my terminal fontstack a bit, for sure.
21:30 _28_ria joined #perl6
21:34 AlexDaniel teatime: I can see it without any problems
21:35 AlexDaniel teatime: in fact, it's not even unifont that renders it on my machine
21:35 cognominal joined #perl6
21:36 cpage_ joined #perl6
21:36 Mona joined #perl6
21:37 teatime it's definitely in STIX on my machine, so it shows up in-general.  STIX isn't in my current list of fonts to use in the terminal, though.  and, I haven't yet found a good way (or really, any way) to ask my system, "Which of my installed fonts cover $codepoint / @codepoints" nor "What codepoints does this font cover?"
21:37 teatime the latter is probably fairly easy, though.
21:50 teatime for anyone curious about my earlier set-difference question, I am currently thinking about these:  U+244A "OCR DOUBLE BACKSLASH" «⑊» (appeared in Unicode ver. 1.1 / 1993),  U+27C8 "REVERSE SOLIDUS PRECEDING SUBSET" «⟈» (5.0 / 2006),  U+FE68 "SMALL REVERSE SOLIDUS" «﹨» (1.1 / 1993),  U+FF3C "FULLWIDTH REVERSE SOLIDUS" «\» (1.1 / 1993)
21:50 teatime I figure U+27C8 has a different established meaning in math.  but maybe I am about to get lucky!
21:58 masak 'night, #perl6
22:01 sortiz masak o/
22:02 _28_ria joined #perl6
22:09 diakopter falling diagonal is so LTR-centric
22:09 diakopter bias alert
22:10 ZoffixWin joined #perl6
22:28 mr-foobar joined #perl6
22:45 teatime hmm...  and a 2nd good cantidate emerges:  ⧷ U+29F7 REVERSE SOLIDUS WITH HORIZONTAL STROKE (3.2 / 2002) ... it's both a backslash, and a minus sign, but can't be confused with either :)
22:48 JustinHitla left #perl6
22:51 hotel joined #perl6
22:56 ZoffixWin joined #perl6
23:02 dalek doc: acbd6ec | (Tom Browder)++ | doc/Language/about.pod:
23:02 dalek doc: correct description
23:02 dalek doc: review: https://github.com/perl6/doc/commit/acbd6ec4de
23:02 dalek doc: 9984701 | (Zoffix Znet)++ | doc/Language/about.pod:
23:02 dalek doc: Merge pull request #511 from tbrowder/misc-doc-fixes
23:02 dalek doc:
23:02 dalek doc: correct description of N in =headN
23:02 dalek doc: review: https://github.com/perl6/doc/commit/9984701bd9
23:05 kid51 joined #perl6
23:17 bitmap joined #perl6
23:21 itcharlie joined #perl6
23:22 brabo joined #perl6
23:25 cpage_ joined #perl6
23:25 sunnavy joined #perl6
23:26 petercommand joined #perl6
23:31 pierre_ joined #perl6
23:34 grondilu joined #perl6
23:39 TEttinger teatime: for coverage of codepoints I use cmaptofile, which is a tricky to find utility
23:40 TEttinger it might be good to find the source so it could be made more cross-platform...
23:51 BenGoldberg joined #perl6

| Channels | #perl6 index | Today | | Search | Google Search | Plain-Text | summary

Perl 6 | Reference Documentation | Rakudo