»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'p6: say 3;' or rakudo:, or /msg camelia p6: ... | irclog: irc.perl6.org or colabti.org/irclogger/irclogger_logs/perl6 | UTF-8 is our friend!
Set by moritz on 22 December 2015.
00:01 musiKk_ left 00:02 pnu joined, solarbunny joined, richi235 joined, ponbiki joined, clkao left 00:04 rntz joined, clkao joined 00:07 bakedb joined 00:08 Praise joined 00:14 ribasushi joined 00:18 dalek left 00:19 dalek joined, ChanServ sets mode: +v dalek 00:21 tadzik joined 00:23 kjs_ joined, secwang joined 00:27 susmus joined 00:28 sftp joined 00:29 yoleaux joined, ChanServ sets mode: +v yoleaux 00:32 abaugher joined, iloveunix joined 00:35 iloveunix left 00:37 iloveunix joined 00:38 BenGoldberg joined 00:39 iloveunix left, cdg left, nebuchadnezzar joined 00:46 secwang left 00:48 johndau joined 00:51 pierrot joined 00:52 pierrot is now known as Guest1589 01:06 khw left 01:12 kjs_ left 01:18 MilkmanDan joined 01:22 bpmedley joined 01:29 agentzh joined
SmokeMachine____ hi there! I'm trying to find a documentation showing how to make a class that extends the Hash... do any one here know where can I find it? 01:32
01:36 BenGoldberg left
kid51 What, specificially, do you mean by "extends"? 01:37
kid51 notes that the string 'extend' is not found in either doc.perl6.org/type/Hash or doc.perl6.org/language/classtut 01:38
SmokeMachine____ "class Bla is Hash"
kid51 At the second of the two links above, search for subhead "Multiple inheritance" 01:39
01:41 khagan joined
timotimo you don't need multiple inheritance 01:43
sortiz SmokeMachine____, There are dozens of classes in Perl 6, I doubt there is specific documentation for any particular, If you need to create a hash like new class, I recommend you to read doc.perl6.org/language/subscripts#Custom_types 01:44
kid51 Also: perl6intro.com/#_multiple_inheritance
01:44 BenGoldberg joined
ugexe just use monkey typing for everything 01:45
augment all the classes 01:46
timotimo the custom types part of the subscripts document is excellent for what you need, SmokeMachine____
who wrote that? :)
01:51 BenGoldberg left 01:52 BenGoldberg joined
sortiz SmokeMachine____, So if you need a hash like class, instead of inherit from Hash, you should implement the Associative role: "class Foo does Associative { ... }" 01:54
01:54 BenGoldberg left 01:55 BenGoldberg joined
sortiz \o #perl6 01:55
timotimo that's probably a better idea, true 01:56
otherwise, you can have a class that "has %.storage handles <AT-KEY EXISTS-KEY DELETE-KEY BIND-KEY>" 01:57
sortiz That is a trivial example, yes. 01:58
02:00 salv0 joined 02:02 abaugher left
SmokeMachine____ thank you all 02:02
02:02 silug joined 02:07 sno joined, mtj_ joined 02:09 khw joined 02:14 labster joined 02:16 TEttinger left 02:20 Ben_Goldberg joined 02:21 abaugher joined, BenGoldberg left 02:23 notostraca joined 02:36 chansen_ left 02:38 chansen_ joined 02:45 vendethiel joined 02:46 agentzh left, MilkmanDan left 02:47 Ben_Goldberg left, salv0 left 02:50 labster1 joined 02:52 silug_ joined 02:54 labster left 02:55 nebuchad` joined 02:56 johndau left 02:57 johndau joined 03:00 nebuchadnezzar left, silug left, salv0 joined 03:02 notostraca left 03:03 clkao left 03:04 clkao joined 03:05 notostraca joined, Sgeo left 03:06 Guest1589 left 03:07 rodarmor left 03:08 Spot__ left, rodarmor joined, vendethiel left 03:09 BenGoldberg joined 03:10 sftp left, adu joined 03:11 rodarmor left, Spot__ joined, BenGoldberg_ joined 03:12 rodarmor joined
BenGoldberg_ m: my @a; my $x = 1; @a[0] := $x; ++$x; dd @a; 03:13
camelia rakudo-moar fb74ab: OUTPUT«Array @a = [2]␤»
03:15 rodarmor left 03:16 Spot__ left, rodarmor joined 03:17 Spot__ joined, parisba left 03:18 parisba joined, parisba is now known as Guest31991, telex left
BenGoldberg m: my @a; @a[*] = 'i like'; @a[*] = 'pie'; dd @a; 03:19
camelia rakudo-moar fb74ab: OUTPUT«Array @a = []␤»
BenGoldberg m: my @a; @a[*+0] = 'i like'; @a[*+0] = 'pie'; dd @a;
camelia rakudo-moar fb74ab: OUTPUT«Array @a = ["i like", "pie"]␤»
03:19 rodarmor left 03:20 rodarmor joined 03:22 bakedb left 03:23 bakedb joined, rodarmor left 03:26 rodarmor joined 03:27 rodarmor left 03:28 rodarmor joined 03:29 Spot__ left 03:30 Spot__ joined 03:33 telex joined 03:38 labster1 left, kaare_ joined, kaare_ left 03:39 Herby__ joined
Herby__ Evening, everyone! 03:39
03:40 cdg joined
Herby__ \o 03:40
03:45 cdg left 03:47 Sgeo joined, kaare_ joined 03:50 kaare_ left 03:53 bjz joined 03:55 kid51 left 03:56 kaare_ joined, noganex_ joined, kaare_ left 03:57 zpmorgan joined, BenGoldberg left, kaare_ joined 03:59 BenGoldberg joined 04:00 skids joined 04:01 kaare_ left, BenGoldberg left 04:04 [Tux] joined 04:06 kaare_ joined 04:08 kaare_ left 04:12 jnap left, ggherdov left, dustinm` left 04:13 xnrand left, jsimonet1 left, riatre left 04:14 jnap joined, kaare_ joined, kaare_ left 04:15 dustinm` joined 04:16 Spot__ left, kaare__ joined, BenGoldberg_ left, xnrand joined 04:17 riatre joined, Spot__ joined, Spot__ left, Spot__ joined, ggherdov joined, dustinm` left, sQuEE joined 04:18 Herby__ left, dustinm` joined 04:19 jnap left 04:20 jnap joined, kaare__ left 04:21 dalek left, kent\n joined 04:22 dalek joined, ChanServ sets mode: +v dalek, clkao_ joined, clkao left, clkao_ is now known as clkao 04:25 kaare__ joined, vytas left, kaare__ left 04:26 rodarmor left 04:27 rodarmor joined 04:28 rodarmor left, kaare__ joined, rodarmor joined 04:29 jsimonet1 joined, bitmap joined, susmus left, jnap left 04:31 jnap joined, SmokeMachine____ left, rodarmor left 04:32 rodarmor joined, polyfloyd left, clkao left 04:34 ggherdov left, polyfloyd joined, kaare_ joined 04:35 rodarmor left, kaare__ left 04:36 clkao joined, rodarmor joined 04:37 ggherdov joined, SmokeMachine____ joined 04:38 zpmorgan left 04:40 zpmorgan joined 04:52 rodarmor left, ggherdov left
dalek Iish: 2a36f59 | (Salvador Ortiz)++ | lib/DBDish/mysql/ (3 files):
mysql: Post oracle merge repairs
04:54
04:57 labster joined, ggherdov joined 04:58 polyfloyd left 05:01 Spot__ left 05:02 rodarmor joined 05:04 polyfloyd joined 05:05 Spot__ joined 05:06 vytas joined, ggherdov left 05:12 ggherdov joined 05:15 telex left 05:16 telex joined 05:22 hoelzro joined 05:28 ggoebel17 joined 05:31 pierrot joined, pierrot is now known as Guest40236, rodarmor left 05:33 rodarmor joined 05:34 rodarmor left 05:35 rodarmor joined 05:36 dalek left, dalek joined, ChanServ sets mode: +v dalek 05:37 ggherdov left 05:41 tmch joined 05:42 ggherdov joined 05:50 Cabanossi joined 05:51 Spot__ left 05:52 Spot__ joined 05:54 ggoebel17 left 05:56 labster left 05:57 khw left, ggoebel17 joined 06:00 ggherdov left 06:15 laz78 joined 06:16 ggherdov joined 06:24 aindilis joined 06:30 rodarmor left 06:31 rodarmor joined 06:32 rodarmor left, rodarmor joined 06:34 jnap left, jnap joined 06:36 Spot__ left 06:38 Spot__ joined, Spot__ left, Spot__ joined 06:40 Guest31991 is now known as parisba_ 06:51 polyfloyd left 06:52 jnap left, molaf joined 06:54 polyfloyd joined 06:56 jnap joined 06:59 CIAvash joined 07:04 boegel joined, ka joined 07:06 kent\n left 07:07 kent\n joined, kent\n left, kent\n joined 07:24 cxreg left 07:25 darutoko joined, cxreg joined 07:29 cxreg left 07:30 clkao left, clkao joined 07:31 Spot__ left 07:32 Spot__ joined, Spot__ left, Spot__ joined 07:35 BuildTheRobots joined, BuildTheRobots left, BuildTheRobots joined 07:37 nebuchad` is now known as nebuchadnezzar 07:42 cxreg joined 07:45 zpmorgan left 07:49 BuildTheRobots left 07:50 BuildTheRobots joined 07:59 rodarmor left 08:02 skids left 08:04 rodarmor joined 08:09 kent\n left 08:14 kent\n joined 08:28 adu left 08:38 CIAvash left 08:45 clkao left 08:47 clkao joined 08:51 khagan left, khagan joined 08:52 labster joined 08:53 johndau` joined 08:55 johndau left 09:00 johndau` left, wamba joined 09:07 dalek left 09:08 neilb joined, dalek joined, ChanServ sets mode: +v dalek 09:12 rodarmor left, rodarmor joined 09:15 tmch left 09:16 ggherdov left 09:21 rindolf joined 09:22 ggherdov joined 09:24 pmurias joined, hoelzro left, hoelzro joined
pmurias if I want to start creating a p6tidy what's the best way to get hold of the Perl 6 grammar? 09:24
09:25 k-man joined 09:27 RabidGravy joined, DarthGandalf joined 09:29 parisba_ left 09:30 parisba_ joined 09:32 Vitrifur left, llfourn_ joined, DrForr joined 09:33 Timbus joined, diakopter joined
dalek osystem: e2a5cd2 | okaoka++ | META.list:
Add Algorithm::TernarySearchTree

See github.com/okaoka/p6-Algorithm-Ter...SearchTree
09:35
osystem: 87157e1 | RabidGravy++ | META.list:
Merge pull request #161 from okaoka/add-ternary

Add Algorithm::TernarySearchTree
09:36 BuildTheRobots left 09:37 rdleon joined, parisba_ left, ggherdov left
lizmat good *, #perl6! 09:37
09:37 BuildTheRobots joined 09:39 parisba_ joined, ggherdov joined, brrt joined 09:41 zostay joined 09:46 laz78 left 09:48 BuildTheRobots left, Vitrifur joined, SmokeMachine____ left 09:49 SmokeMachine____ joined, SmokeMachine____ left, SmokeMachine____ joined, BuildTheRobots joined 09:51 crasm joined 09:52 laz78 joined, parisba_ left 09:53 parisba_ joined, laz78 left 09:55 laz78 joined 09:58 ely-se joined 10:00 ggherdov left 10:07 dalek left, brrt left 10:08 ggherdov joined, brrt joined, dalek joined, ChanServ sets mode: +v dalek
brrt ehm, has anybody taken a shot already at reencoding the FOSDEM videos 10:08
lizmat good question: sometimes I think I've given up on FOSDEM recording anything altogether :-( 10:09
brrt i can actually reencode them, but i'll need to know their approximate lengths 10:10
and a place to upload them 10:11
lizmat talks were max 50 minutes, I seem to recall
brrt hmmm
let me check if i can make something work
lizmat but isn't this really a case of garbage in garbage out? 10:12
brrt no
nine_ brrt: I can provide the webspace. But I'd give the FOSDEM people a bit more time before investing a lot of time myself.
lizmat I mean, wouldn't you need access to the raw sources?
brrt videos are OK
its the headers that are bad
10:15 parisba_ left, BuildTheRobots left 10:16 parisba_ joined 10:22 BuildTheRobots joined 10:23 ggherdov left 10:26 ggherdov joined 10:31 DrForr left, DrForr joined
pmurias do we have a recommended code formatting guide? 10:32
llfourn_ not that I've seen 10:33
10:33 llfourn_ is now known as llfourn
brrt somehow after a while the videos keep on looping. if i can figure out where that is, i can cut off the video before, and get a well-formed file 10:36
also, i can crop the video to the exact position of the video stream
10:43 ka left, ggherdov left
dalek kudo/nom: c70a18e | lizmat++ | src/core/native_array.pm:
Make int @a.append(1) 1800x faster

by not making it take the long, slurpy array -> flattening route
10:44
kudo/nom: ced5fbf | lizmat++ | src/core/native_array.pm:
Make int @a.append(int @b) 6x faster

by not making it take the long, slurpy array -> flattening route
lizmat and there's more where that came from ^^^ 10:45
brrt \o/ 10:46
lizmat .tell jnthn there's something strange with reading a 2.5MB file with slurp: with nqp::readallfh it takes about 80ms, with nqp::readfh with the size of the file as a buffer, it takes 350 msec (like 4x as long) 10:49
yoleaux lizmat: I'll pass your message to jnthn.
lizmat .tell jnthn I would expect the unicode handling to make things *slower*, but instead it's 4x faster than binary ?
yoleaux lizmat: I'll pass your message to jnthn.
nine_ I now have a working version, where use NativeCall; will use the precomp files created during installation :) Including it's dependencies :) 10:51
10:51 ggherdov joined 10:52 laz78 left
brrt nine_++ 10:53
lizmat nine_ ++
10:54 MilkmanDan joined
RabidGravy nine_++ # I don't know what that implies but it sounds like it deserves appreciation 10:55
llfourn nine_++
lizmat takes a few secs of each spectest run for me
10:56 notostraca left 11:00 BuildTheRobots left, MilkmanDan left 11:01 Spot__ left, BuildTheRobots joined, Spot__ joined, labster left 11:03 labster joined
dalek kudo/nom: d740258 | lizmat++ | src/core/Buf.pm:
Rename private method to something more appropriate

Also, lose the start position parameter, because we're not going to use it in the foreseeable future.
11:07
brrt .tell moritz seems the logging bot doesn't work in #moarvm 11:09
brrt lunch &
11:09 brrt left
yoleaux brrt: I'll pass your message to moritz. 11:10
11:10 kjs_ joined 11:12 parisba_ left 11:14 parisba_ joined
ely-se p: say ((0, 1) Xlcm (0, 1)) eqv ((0, 1) X&& (0, 1)) 11:14
11:14 BuildTheRobots left
ely-se p6: say ((0, 1) Xlcm (0, 1)) eqv ((0, 1) X&& (0, 1)) 11:14
camelia rakudo-moar d74025: OUTPUT«True␤» 11:15
11:15 ilbot3 joined
moritz restarts ilbot 11:15
yoleaux 11:09Z <brrt> moritz: seems the logging bot doesn't work in #moarvm
ely-se p6: say ((0, 1) Xgcd (0, 1)) eqv ((0, 1) X|| (0, 1))
camelia rakudo-moar d74025: OUTPUT«True␤»
ely-se :)
lcm is && and gcd is ||
moritz .tell brrt ilbot fixed
yoleaux moritz: I'll pass your message to brrt.
nine_ RabidGravy: it means that users will no longer have to wait for precompilation on first run after installing a module. And that we will store much fewer files in ~/.perl6 or scattered around .precomp directories 11:18
11:19 BuildTheRobots joined 11:25 labster left 11:29 FROGGS joined, BuildTheRobots left 11:30 BuildTheRobots joined
FROGGS o/ 11:30
lizmat FROGGS \o 11:31
psch \o 11:34
11:36 SmokeMachine____ left 11:38 ilbot3 left
lizmat theperlfisher.blogspot.nl/2016/02/f...pt_28.html # DrForr++ 11:38
11:38 SmokeMachine____ joined 11:39 ilbot3 joined
RabidGravy nine_, that is cool yes :) 11:43
11:43 Ven joined
dalek kudo/nom: 50f2aaf | lizmat++ | src/core/Buf.pm:
Make Buf.EXISTS-POS(1) 7x faster

By letting rakudo take care of the unboxing itself, and not creating a variable: this probably allows it to be inlined better, even though the unboxing is now happening twice on the "in range" code path.
11:45
11:48 andrewalker joined 11:49 ilbot3 left 11:50 ilbot3 joined, Ven left 11:51 [Tux] left
RabidGravy Perl6++ # so there I was in the shower and I suddenly had the horrible realisation that I couldn't deal with subsets, and it's so easy that it's already sorted 11:51
11:52 [Tux] joined
RabidGravy I do think however "subset Foo of Int; Foo("10") ' should be made to work if the refinee can do that kind of coercion 11:53
there's probably a whole bunch of things I haven't considered but I'd say it wouldn't be that difficult to do 11:54
11:55 polyfloyd left, polyfloyd joined
dalek kudo/jvminterop: 7e45d6b | peschwa++ | t/03-jvm/01-interop.t:
Correct two tests for multi candidate interop.

Between the original creation of this test and now something changed wrt iteration over utf8 object in Perl 6. The updated tests reflect this different behavior.
11:56
kudo/jvminterop: 7799dbf | peschwa++ | src/vm/jvm/runtime/org/perl6/rakudo/RakudoJavaInterop.java:
Make name => CodeRef pairs show up in the Metamodel.
kudo/jvminterop: d4b71b7 | peschwa++ | src/vm/jvm/CompUnit/Repository/Java.pm:
Remove unused function.
kudo/jvminterop: 45c205a | peschwa++ | src/vm/jvm/runtime/org/perl6/rakudo/RakudoJavaInterop.java:
Clean up and correct JavaHOW field assignments.

This adds Java class wrapper methods to .^methods and .^method_table while leaving out generated helpers like e.g.
  "method/mmd+update/([Ljava/lang/Object;)Ljava/lang/Object;".
kudo/jvminterop: 6524d45 | peschwa++ | src/vm/jvm/Perl6/Metamodel/JavaHOW.nqp:
Provide JavaHOW.parents(), just so nothing complains.
psch RabidGravy: subsets as coercers..? 11:57
psch doesn't understand the intent
lizmat RabidGravy: doesn't really go towards a .COERCE method., like we have .ACCEPTS ? 11:58
so Foo(bar) would call Foo.COERCE(bar) 11:59
RabidGravy Well if one has some kind of parser that winds up with something like "sub parse-atom(Str $val, Real $type) { $type($val) }" then that will blow up if infact $type is a coercion 12:00
so you would have that and then "multi sub parse-atom(Str $val, $type where *.HOW ~~ Metamodel::SubsetHow) { parse-atom($val, $type.^refinee }" 12:01
modulo the missing brackets 12:02
12:02 Spot__ left, dalek left
RabidGravy it would be easy-ish to make the latter step happen under the hood rather than blowing up with the useless "cannot invoke this object" 12:03
12:03 Spot__ joined, dalek joined, ChanServ sets mode: +v dalek 12:04 rodarmor left
RabidGravy s/$type is a coercion/$type is a subset/ above 12:04
psch how would that deal with coercing values outside of the subset to the refinee?
RabidGravy sorry I'm not quite sure what you mean 12:05
ah, it would just blow up when it hits the subsetted target
12:05 rodarmor joined
RabidGravy as it would do anyway 12:05
12:06 Ven joined
psch ah, so something like < my Foo $x = parse-atom("10", Foo) > dying in the assignment, and not in parse-atom 12:06
RabidGravy yea
12:06 Ven left
RabidGravy one could of course check the refinment in the sub but that's un-neccessary 12:07
psch hm, feels too late to me, fwiw. as in, < Int("foo") > dies on it's own already, but < Foo("10") > wouldn't 12:08
but i guess that's mostly in how Subsets work in general
they do kind of work like where constraints on containers, don't they 12:09
which means coercion to something that should fit can only complain when it doesn't, and not when it can't be coerced..
well, it's consistent enough with my understanding at least vOv
12:10 kjs_ left
RabidGravy yeah that would happen anyway with "subset Foo of Int where * < 99; my Foo $a = Int("foo");" 12:10
psch right, that blows up in Int(), but replacing "foo" with "100" blows up in the assignment
RabidGravy right, so "my Foo $a = Foo("100")" would blow up in the assignment too (rather than "cannot invoke this object") 12:14
12:15 BuildTheRobots left
psch yeah, i think i like that. it frees up module users from knowing the subset refinee (or jumping through the MOP) to coerce 12:15
RabidGravy which (for what I'm doing right now,) seems like the right thing
12:18 BuildTheRobots joined
RabidGravy anyhoo, this came to me when I *thought* I had finished this module and was just making the documentation 12:20
this seems to be a recurring thing with this particular thing
12:24 musiKk_ joined
dalek kudo/nom: 85c18aa | lizmat++ | src/core/Buf.pm:
Make Buf.Numeric|Int a few percent faster

By removing an additional layer of indirection
12:25
12:26 Actualeyes joined
Woodi hi #perl6 :) 12:26
dalek kudo/nom: 1e33bc5 | lizmat++ | src/core/Buf.pm:
Make Buf.bytes about 13x faster

By calculating the number of bytes per element at compose time, rather than every time we call .bytes
12:27
Woodi m: Real.max.rand; Int.max.rand; # not usefull
camelia ( no output )
Woodi m: say Real.max.rand; say Int.max.rand; # not usefull and visible
camelia rakudo-moar 50f2aa: OUTPUT«-Inf␤-Inf␤»
12:27 parisba_ left
psch m: 5.rand.say 12:27
camelia rakudo-moar 50f2aa: OUTPUT«0.180473400462497␤»
lizmat Woodi: isn't that a matter of GIGO ?
Woodi lizmat: GIGO ?
lizmat m: dd int32.max.rand 12:28
camelia rakudo-moar 50f2aa: OUTPUT«-Inf␤»
lizmat now *that* is strange
psch m: say Real.max
camelia rakudo-moar 50f2aa: OUTPUT«-Inf␤»
psch that seems kinda wrong-ish..? :P
lizmat psch: no, that's correct
sjn \o
12:28 parisba_ joined
lizmat (been discussed at length before) 12:28
Woodi: Garbage In Garbage Out 12:29
psch lizmat: oh, right, .max is not MAX_VALUE, is it
?
Woodi but .rand should find something in the range...
psch m: say (0..-Inf).elems
camelia rakudo-moar 50f2aa: OUTPUT«0␤»
lizmat m: dd int32.Range.max.rand # must make it a range
camelia rakudo-moar 50f2aa: OUTPUT«928070625.042826e0␤»
lizmat m: dd int8.Range.max.rand # must make it a range
camelia rakudo-moar 50f2aa: OUTPUT«20.7272851815008e0␤»
lizmat m: dd int8.Range.pick 12:30
camelia rakudo-moar 50f2aa: OUTPUT«-37␤»
lizmat m: dd int8.Range.pick
camelia rakudo-moar 50f2aa: OUTPUT«125␤»
lizmat m: dd uint8.Range.pick
camelia rakudo-moar 50f2aa: OUTPUT«217␤»
lizmat m: dd uint8.Range.pick
camelia rakudo-moar 50f2aa: OUTPUT«213␤»
Woodi ok, use Range... 12:31
lizmat which won't work for Int/Real, because they range from -Inf..Inf
m: Int.Range.rand
camelia rakudo-moar 50f2aa: OUTPUT«Cannot modify an immutable Bool␤ in block <unit> at /tmp/Lt49YFHhCm line 1␤␤»
lizmat m: dd Int.Range.rand
camelia rakudo-moar 50f2aa: OUTPUT«Cannot modify an immutable Bool␤ in block <unit> at /tmp/ONwLXBqOU0 line 1␤␤»
lizmat hmmm... LTA error
please someone RT that
lizmat goes outside for a few hours...
Woodi how I can get long long int ? :) 12:32
psch that's int128?
Woodi possible...
thanx lizmat, psch
psch ah, wikipedia says long long int is at least 64 bits 12:34
so int64 12:35
which is probably better, 'cause we don't have int128 :)
Woodi not in one piece :)
12:36 parisba_ left 12:37 keix joined 12:38 rindolf left 12:39 parisba_ joined 12:40 pmurias left, rodarmor left 12:42 rodarmor joined 12:47 ely-se left
moritz not yet 12:49
12:51 lizmat_ joined, baest_ joined
RabidGravy lizmat, looks like I'm going to have to benchmark some of the Audio::* modules before and after these changes - there is a lot of Buf -> Array -> CArray shuffling (in vaious orders) going on :) 12:51
12:53 autarch left, Amnez777 left, gregf__ left, mathw left, pederindi left, orbus left, frew left 12:54 lizmat left 12:55 lnx joined, Woodi joined, domidumont joined, garu joined, mathw joined, tadzik left, ashleydev joined, rudi_s joined, gtodd joined, f3ew joined 12:56 ruoso joined, arnsholt joined, SHODAN joined, cdg joined 12:57 jnap left 12:58 sjohnsen joined 12:59 espadrine joined 13:00 domidumont left, Fleurety joined, domidumont joined, kid51 joined, rvchangue joined 13:01 jnap joined 13:05 BuildTheRobots left, Amnez777 joined, espadrine left 13:06 anshin joined 13:07 frew joined, musiKk_ left 13:08 pederindi joined, orbus joined 13:09 gypsydave5 joined, xxpor joined, gregf__ joined
sortiz I'm going to push a somewhat massive cleanup in DBIish, but the only user visible change is that now the FooDriver.Version method returns a Version, not a Rat. Internally I remove the 'Role' word from the long-names of the roles. 13:09
13:10 BuildTheRobots joined, dalek left, Spot__ left 13:11 rodarmor left, parisba_ left, jnap left 13:12 mindos left, daxim joined, boegel left, polyfloyd left 13:13 autarch joined, cdg left, lsm-desktop left 13:14 cdg joined, [Tux] left, hoelzro left 13:15 SmokeMachine____ left 13:16 polyfloyd joined, [Tux] joined, jnap joined, dalek joined, ChanServ sets mode: +v dalek, lsm-desktop joined, rodarmor joined 13:17 BuildTheRobots left 13:18 SmokeMachine____ joined 13:19 boegel joined, Amnez777 left
RabidGravy sortiz++ # sounds great, and loving your enthusiasm for cleaning up DBIish :) 13:19
13:19 mindos joined, BuildTheRobots joined 13:20 Spot__ joined
sortiz RabidGravy, Pushed now, but dalek was dead, I'm waiting for travis-ci results. :) 13:21
13:22 hoelzro joined, Amnez777 joined 13:25 Amnez777 left, Amnez777 joined, Amnez777 left, Amnez777 joined 13:26 tadzik joined, parisba_ joined 13:28 domidumont left 13:31 Actualeyes left 13:33 timrs2991 joined
dalek rl6-most-wanted: 43a7d09 | (Tom Browder)++ | most-wanted/modules.md:
add new module; correct WIP location of Geo::Ellipsoid
13:36
rl6-most-wanted: f6686bb | tbrowder++ | most-wanted/modules.md:
Merge remote-tracking branch 'upstream/master'

Conflicts: most-wanted/modules.md
rl6-most-wanted: 7a74d61 | tbrowder++ | / (5 files):
Merge remote-tracking branch 'upstream/master'
rl6-most-wanted: dd6ff6c | tbrowder++ | most-wanted/modules.md:
add memoize wanted for core like Perl 5
rl6-most-wanted: 0ce5428 | (Tom Browder)++ | most-wanted/modules.md:
Merge pull request #20 from tbrowder/master

Add memoize as most wanted (for core)
timotimo o/ 13:37
sortiz \o timotimo
13:38 Actualeyes joined 13:39 Skarsnik joined
lucs m: class Foo { has $!n; method N { $!n }; }; my $foo = Foo.new(42); say $foo.N; # How do the 「new」 and/or 「BUILD」 methods need to be written for this to work? 13:40
camelia rakudo-moar 1e33bc: OUTPUT«Default constructor for 'Foo' only takes named arguments␤ in block <unit> at /tmp/nDbehF3wjV line 1␤␤»
13:45 tmch joined 13:47 burnersk joined 13:51 Psyche^_ joined
sortiz m: class Foo { has $!n; multi method new(Int $n) { self.new(:$n) }; submethod BUILD(:$!n) { }; method N { $!n }; }; my $foo = Foo.new(42); say $foo.N 13:52
camelia rakudo-moar 1e33bc: OUTPUT«42␤»
sortiz lucs, ^^^ 13:53
timotimo lucs: you could also use github.com/LLFourn/p6-AttrX-InitArg
ugexe memoize like core? isnt that `cached` trait? 13:54
lucs timotimo: Oh, neat. Thanks! 13:55
timotimo the cached trait is experimental, because we couldn't find a design that doesn't suck :)
psch doc.perl6.org/language/objects#Obje...nstruction is the docs, which looks pretty good from here
lucs psch: I wasn't able to figure it out from reading that :/ 13:56
psch oh right, your specific case is missing there...
it only says "please don't use the bless shortcut"
13:57 dalek left, dalek joined, ChanServ sets mode: +v dalek
lucs sortiz: Er, thanks too! (misread who had supplied the first solution) 13:58
timotimo "don't use the bless shortcut", eh?
psch timotimo: well, paraphrase... :)
13:58 cfedde joined
psch as in, < self.bless(:$x, :$y) > is shorter than writing new with pos params and BUILD instead 13:59
timotimo ah
13:59 cdg left
timotimo for subclassability 13:59
psch but that is documented to screw with... right
14:02 sftp joined, squain joined 14:04 xinming left 14:05 sftp left, musiKk_ joined
psch ttps://gist.github.com/anonymous/8a57e90a0499511f1ea8 14:06
hrm, no "h" :/
gist.github.com/anonymous/8a57e90a0499511f1ea8 # for the extra lazy vOv
timotimo i am extra lazy 14:07
psch that doesn't explain the need for BUILD with private Attributes though
i'll check if that's mentioned somewhere else...
14:10 sftp joined
psch well, no idea if that diff is actually factual. as in, i don't know if redispatching to Any.new is actually *not* considered poor practice 14:10
timotimo well, redispatching to self.new is nice, because you also get "newer" new methods that way
14:12 brrt joined
brrt moritz: thanks :-) 14:12
yoleaux 11:15Z <moritz> brrt: ilbot fixed
14:12 xinming joined
psch docs are hard, lets write jvm bytecode /o\ 14:14
14:15 buharin joined
brrt has recoded 3/11 FOSDEM videos 14:16
interestingly, making them much smaller
14:17 xinming left
buharin hey 14:18
I want to see video
but it appears to be broken
video.fosdem.org/2016/h2214/
timotimo yeah, it is :( 14:20
14:22 xinming joined 14:23 araujo joined
buharin greate 14:23
;s
timotimo this year we have an additional source for video recordings
i.e. we brought our own recording equipment in addition
14:25 Ven joined 14:26 musiKk_ left, sortiz joined
Skarsnik hm, there is no POSIX stuff in the core? 14:27
nine_ nope
14:27 BuildTheRobots left
buharin DrForr, hey are you here? 14:27
timotimo that'd be ... kind of bad :)
Skarsnik so I need a module to translate this: strftime "%A, %B %d at %H:%M", localtime($chapter{time});
?
timotimo strftime isn't posix, is it? as in, other OSes ship that in their libc, too? 14:28
DrForr buharin: Yeah.
buharin DrForr, could you fix your blog?
RabidGravy it is part of the POSIX spec however
DrForr What's broken about it?
RabidGravy but yes you would need a module, I think there is one
14:29 crasm left
RabidGravy but it would be relatively easy to make if there isn't 14:29
buharin DrForr, you should separate your code
14:29 BuildTheRobots joined
buharin it is unreadable 14:29
Skarsnik I mean, there is no equivalent in perl6 core with datetime?
14:30 cdg joined
RabidGravy isn't that what formatters are for? 14:30
buharin Skarsnik, hey
timotimo we really need that prancer blog thing :) 14:31
RabidGravy github.com/supernovus/perl6-datetime-format
timotimo it'll be the first blog software to do things the right way. finally!
Skarsnik ah thx
The localised month/week day name is important ^^ 14:32
DrForr buharin: Do you have a plugin you can recommend? I tried a few but none seemed to work well.
buharin DrForr, no sorry
DrForr Also I added <code/> around the blocks but it didn't seem to do anything worthwhile. 14:33
RabidGravy does the old "stick it in github gist and use the embed" thing work in whatever you are using? 14:34
DrForr timotimo: Yeah, what I'm probably going to do once I get the core to work properly is refactor the h*ll ot of PearlBee and use that.
timotimo refactor pearlbee into perl6? ;) 14:35
DrForr RabidGravy: I've got a helluva lot of snippets, but I can try. 14:36
RabidGravy DrForr, before I forget I have two questions regarding prancer, a) is there scope for dispatch based on other than request path? (e.g. based on some authorisation?)
14:36 cdg left
Skarsnik buharin, hello 14:37
RabidGravy and b) I'd like to plug in the websocket thingy, should that just work?
DrForr RabidGravy: Not at the moment, right now I need to work around some OO issues, once that's solved I do intend to tackle those issues. 14:38
Skarsnik did you write an async webscoket client RabidGravy ? x)
timotimo we have a websocket client and server in the ecosystem, btw 14:39
Skarsnik it's not async
timotimo OK
buharin Skarsnik, hi
RabidGravy the server is
Skarsnik hm, I can't have 2 whenever block in a react one? 14:40
timotimo of course
you can, i mean
RabidGravy yeah you can have as many as you want 14:42
DrForr OKay, found a formatter I'm happy with. 14:43
ugexe whats a suitable internal name for a an IO abstraction layer that works with IO::Paths, http urls, git urls, etc that does both write (.spurt, POST, push) and read? i just used `Fetch` before, but that doesnt work now that i want to add writes
timotimo virtual file system?
ugexe ah thats better
timotimo that's what gnome/glib calls it
ugexe that'll work. i didnt want to give the name to give the impression it followed the IO:: interfaces 14:44
timotimo mhm
RabidGravy m: react { whenever Supply.interval(1) { say "one second"; if $_ == 5 { done; }}; whenever Supply.interval(2) { say "two second" }} 14:45
camelia rakudo-moar 1e33bc: OUTPUT«one second␤two second␤one second␤two second␤one second␤one second␤two second␤one second␤one second␤»
14:46 rindolf joined
Skarsnik Oh, nvm it's an error somewhere else 14:47
DrForr goes through the last of his Kriek. 14:50
14:51 Gruber joined, Cabanossi left, Woodi left, yoleaux left, cfloare left 14:52 tmch left, Grrrr left, musca left 14:53 daxim left, Praise left
RabidGravy Mmm Kriek 14:53
14:53 Praise joined, daxim joined, psch joined, sergot joined 14:54 Woodi joined, ranguard joined, cfloare joined
rudi_s Hi. Is this expected? 14:54
m: "test".split("x", :bla);
camelia ( no output ) 14:55
rudi_s I'd expect an error because :bla is not a valid parameter.
(In my case I tried :split_empty which should've been :split-empty.)
14:55 Sgeo left
psch rudi_s: design.perl6.org/S12.html#Interface_Consistency 14:56
14:56 Cabanossi joined, Sgeo joined
rudi_s That sounds awful. 14:57
It makes calling methods totally unsafe with no safeguard against typos.
14:58 musca joined, huf joined
ugexe thats one reason why BUILD is promoted over new id imagine 14:59
but ive seen the typo thing happen in rakudo itself
15:00 gensym joined
rudi_s What makes it even worse IMHO is that for subs the check is performed which is inconsistent and causes false expectations. 15:00
But I guess it's too late to fix that.
ugexe it probably enables all sorts of other goodies though 15:01
15:01 Ven left
DrForr RabidGravy: Only picked up two bottles on the way back from FOSDEM. Wanted to find Frambois actually but this is close enough. 15:02
rudi_s Well, the check works for subs.
timotimo aye, because subs don't have anything like subclassing going on 15:03
RabidGravy there are ways to check if you really are that worried about it, but as it has been re-hashed several times I'll leave it as an exercis 15:04
psch m: class A { method foo(:$h) { say ":h handled" } }; class B is A { method foo(:$u) { say ":u handled"; nextsame } }; B.foo(:u, :h) # this breaks without interface consistency
camelia rakudo-moar 1e33bc: OUTPUT«:u handled␤:h handled␤»
15:04 rindolf left
rudi_s Yeah. Still would've been nice to get this additional check. 15:05
DrForr buharin: Updated with the new formatter. Does this work better?
If so I'll go back and do the same with the previous posts.
And then figure out how to translate pod6 markup into that format so I don't have to wear out my fingers editing. 15:06
rudi_s RabidGravy: Was that for me? 15:07
RabidGravy yes
15:07 neilb_ joined
timotimo moritz: when trying to "submit a talk proposal" to GPW2016, i get a raw "Forbidden" error page; is that because i'm too late to submit? 15:07
rudi_s RabidGravy: Could you give me a pointer please. 15:08
15:08 tmch joined
DrForr Could a few of you hit theperlfisher.blogspot.ro/2016/02/f...pt_28.html just to give feedback on the code blocks? 15:09
15:10 neilb left, neilb_ is now known as neilb
rudi_s RabidGravy: perl6advent.wordpress.com/2015/12/...d-methods/ <- this? 15:10
RabidGravy class Foo { method bar(:$f, *%f where *.keys.elems == 0) { say "f" };}; Foo.bar(:f); Foo.bar(:f, :b)
timotimo *punch* 15:11
DrForr: i find it annoying that the website layout is narrow, but the code blocks have horizontal scrolling
i'm in favor of narrow-ish website layouts, though
rudi_s RabidGravy: Thanks.
RabidGravy but that other thing would work fine too with some adjustment to taste 15:12
llfourn DrForr: I think you just try and move the archive from the right to the top so the content can take more space 15:13
(somehow :P)
DrForr Yeah, I hadn't actually tried the layout at a full window on my monitor, and simply (foolishly) assumed that the center column would take the remainder of thespace. 15:14
But I was mainly after the readability of the code blocks, as I've had at least one person comment on the blog about it being unreadable. Is that at least better to look at? 15:15
(I didn't have a problem with how the code looked before, but the readers are the arbiters of taste here, not me.)
llfourn subscribes to DrForr's blog
they are more readable than your previous posts 15:16
but the extra space would make them even better
timotimo well, the code isn't colored, which makes it a bit more strenuous to look at, imo
llfourn yeah, I wonder if there is an easy way to color it 15:17
timotimo on the other hand, there's people who code completely without highlighting
llfourn is there a way to use GH markdown code block rendering on your own blog?
15:18 neilb left
llfourn sleep & 15:18
15:19 vendethiel joined
DrForr Dunno. I'm going to reformat the rest of the postings this way and worry later, this appears to be an improvement. Little steps... 15:19
Skarsnik hm, what is the oposite of push for Array? 15:22
DrForr If it's not intuitively obvious I'm something of a novice at this.
pop()
Skarsnik I mean, that put at the head, not the tail 15:23
RabidGravy unshift
Skarsnik Oh, thx
RabidGravy or prepend
Skarsnik Na prepend is not the same than push
if you do @tab.prepend(%hash) it flat the hash 15:24
RabidGravy yes, like append
lucs What's the P6 equivalent of P5's s/.../.../r ? 15:27
RabidGravy what does /r do? 15:28
15:28 QORRiE joined
geekosaur instead of modifying the string in place, the modified string is the return value of the s///r 15:28
RabidGravy yeah, got it 15:29
m: say do given "hshshshs" { S:g/h/g/ } 15:31
camelia rakudo-moar 1e33bc: OUTPUT«gsgsgsgs␤»
lucs Oh, capital S, eh. Nice. 15:32
RabidGravy or 15:33
m: my $a = "hshshshs"; say $a.subst(/h/, "g", :g); say $a
lucs Thanks.
camelia rakudo-moar 1e33bc: OUTPUT«gsgsgsgs␤hshshshs␤»
RabidGravy S/// only works on $_ though 15:34
lucs Ah, okay.
15:39 zakharyas joined 15:43 espadrine joined
DrForr Updated blog. 15:44
15:46 brrt left 15:59 kjs_ joined 16:00 araujo left 16:09 MilkmanDan joined 16:17 agentzh joined 16:18 Guest40236 left 16:21 sno left 16:22 espadrine left, espadrine_ joined, pierrot joined 16:23 pierrot is now known as Guest89071
buharin DrForr, work 16:23
DrForr Uh, how about tomorrow? :) Or, do you mean that works? 16:26
buharin DrForr, its working!!! 16:27
DrForr Aha, great.
16:29 _dolmen_ joined 16:39 khw joined
moritz timotimo: dunno; I'll have to ask the others 16:39
16:39 sno joined
moritz timotimo: have you signed up as a participant already? 16:40
timotimo moritz: is the submission deadline already over?
maybe i've missed the time for that, too? i can't find a button for that
moritz timotimo: yes, signup period is over 16:41
timotimo >_<
moritz and the venue is full
"Registration is possible until February 17th 2016" is what the front page says
timotimo urgh 16:42
why do i procrastinate stuff so often? >_<
moritz :(
timotimo can i sneak in during the hackathon, though? :P
ugexe m: my $buf = Buf.new(1..5); my @arr = $buf.contents; say @arr[0..*-3]; say $buf.subbuf(0..2); say $buf.subbuf(0..*-3); 16:43
camelia rakudo-moar 1e33bc: OUTPUT«(1 2 3)␤Buf:0x<01 02 03>␤This type cannot unbox to a native integer␤ in block <unit> at /tmp/yv2cH96U7O line 1␤␤»
moritz timotimo: yes
timotimo cool! :) 16:44
i'll definitely do that, then
moritz \o/
16:45 espadrine_ left
dalek kudo/nom: 95069c8 | lizmat++ | src/core/Buf.pm:
Buf.push|unshift shouldn't take lists

Because it doesn't work with int @arrays either, as should not be flattened, and they cannot be stored unflattened. Please use
  .append (for push) or .prepend (for unshift) instead.
16:47
tadzik timotimo: I managed to register and sneak in just 3-4 days ago, try :)
there's a note somewhere to email the organizers and ask for a spot
16:47 neilb joined
tadzik procrastination's not that bad! :) 16:48
dalek c: 0f11a13 | (Simon Ruderich)++ | doc/Language/subscripts.pod:
Language/subscripts: add "or" as alternative in :exists example
c: 9f71be2 | (Simon Ruderich)++ | doc/Type/DateTime.pod:
DateTime: mention "epoch" in .posix
timotimo what, really?
tadzik yep
timotimo you didn't happen to get a 2-person-room by accident? :P
tadzik I did, but not by accident :)
timotimo ah, you're already sharing, eh?
tadzik yea 16:49
timotimo OK, let's see ...
tadzik with sergot, who's also coming
timotimo cool!
16:49 kurahaupo joined, kurahaupo left
sjn hey, cool that you're coming, tadzik :) 16:49
tadzik yep :)
sjn has finished reading the course material he borrowed from tadzik 16:50
tadzik haven't seen y'all Perl people a while
16:50 pmurias joined
sjn tadzik: how's the job situation? anything signed yet? :) 16:50
pmurias is there still a way to make <.foo> capture? 16:51
tadzik sjn: yep, stuff got signed recently :)
sjn tadzik: cool! grats! :D
pmurias tadzik: what event are you attending?
tadzik pmurias: GPW
in Nurmberg
timotimo pmurias: you can <bar=.foo>
sjn is in Nürnberg now, actually 16:52
it's a really nice city
tadzik hah, still living nearby upcoming Perl events? :)
sjn yeah :)
pmurias timotimo: there used to be a way to turn of capturing without changing the regex
sjn well, I'm missing quite a few too :-P
pmurias timotimo: AFAIR using a modifier 16:53
timotimo i don't remember that, sadly
sjn has a small appartment just down the street from the GPW venue
16:54 zakharyas left 16:55 _dolmen_ left
sjn should invite for some drinks here during GPW... hmmm 16:56
tadzik hmmm
sjn is off to find a cafe in the city to work on his presentation
dalek ast: 0e4496a | lizmat++ | S03-operators/buf.t:
Fix tests wrt 95069c8480466ff25fbc78
16:59
TreyHarr1 Need a doc pointer... I see a couple very complicated ways to go about it, but is there a straightforward way to to interrogate a compilation unit for its definitions? In other words, point at a p6 file and get back a list of module foo, class bar, sub MAIN? 17:01
17:02 frew left
Skarsnik hm 17:02
kjs_ good afternoon #perl6. So I’m doing data analysis on ~10,000 records, stored in JSON files, parsing them and storign them into an SQLite database. This works fine mostly, but after having processed about half of them, my script slows down significantly, and my only guess is that this is due to pressure on the memory allocation. Is this a known issue? 17:04
timotimo when you load the compunit, you get back the stashes that make up its symbols
that's the EXPORT:: business and such
TreyHarr1 I'm just writing a bunch of boilerplate for tests, and it would be nifty to refactor it so I don't repeat myself, but I need to write a scanner instead. If I can easily ask, "for each .pm file in dir, does it have a class matching this criteria? If so, run these tests against it"
timotimo: yup, that was the first way I found that looked complicated.
timotimo it's not so bad
TreyHarr1 the other was using the phasers
timotimo: k, i'll give it a shot. thanks. 17:05
Skarsnik kjs_, maybe, try to trace the memory print of the process? 17:08
17:08 rindolf joined
rudi_s I have a function which takes an array (sub foo (@x)) and I want to pass the combination of two arrays (e.g my @a = .., my @b = ...; my @c = |@a, |@b; foo(@c)). What is the idiomatic way to do that in perl6? 17:08
(Without a third variable.)
TreyHarr1 hmm... running 'perl6' with no arguments is the way to start the REPL, right? It used to work, certainly since I installed this rakudo, but now it hangs forever. (Not even responsive to typing some code and EOF'ing, have to ^C to get out.) 17:09
Skarsnik foo((|@a, |@b)) does not work?
timotimo TreyHarr1: you may have a perl6 process in the background that potentially has the CompUnitRepo locked, so it can't try to load Linenoise or Readline?
just a guess
TreyHarr1 timotimo: a good one. lol, yes, a 'panda look' that I'd forgotten was a panda look and was treating as a normal shell :) 17:11
i was trying to run it inside itself, in fact.
rudi_s Skarsnik: It does, thanks. I was just curious in which ways this could be done and which is the shorted/best/recommended. 17:12
(I didn't think about (..) and would've used foo([|@a, |@b]).)
kjs_ Skarsnik: ok. I suppose one would do that with valgrind? I’ve got 2 types of data: the first set is about 100 files each with 100 entries, and the second is 10000 files each with one entry. The second one seems to be easier to process than the 100 files with 100 entries each. But maybe that’s due to my perl scripts. 17:15
Skarsnik just look like at top 17:16
17:16 llfourn left
Skarsnik or with ps 17:16
17:16 llfourn joined, frew joined
lizmat_ m: Buf.new; say now - INIT now # wow, the first time we create a Buf is *very* expensive! 17:19
camelia rakudo-moar 95069c: OUTPUT«0.3498912␤»
Skarsnik duh
it's not just a 'simple' malloc? 17:20
timotimo m: say now - INIT now
camelia rakudo-moar 95069c: OUTPUT«0.0016866␤»
timotimo o_O
lizmat_ no, it isn't
17:20 lizmat_ is now known as lizmat
lizmat it's punning the role into a class 17:20
after that, it's ok
timotimo oh
lizmat feels to me, this punning should probably be done during the setting already
timotimo what happens if we just ... yeah
lizmat *compiling the setting
lizmat tries 17:21
Skarsnik m: role R {}; R.new; say now - INIT now 17:22
camelia rakudo-moar 95069c: OUTPUT«0.0023991␤»
lizmat Buf and Blob are no small roles 17:23
17:23 domidumont joined
timotimo i wonder what part actually takes all that time 17:24
Skarsnik why are they role and not class?
timotimo because Blob and Buf are parametric 17:25
japhb Skarsnik: Because they can parameterize on element size
Skarsnik: e.g. buf8
lizmat timotimo: is there some punning method in the MOP that I could use ??
timotimo i think make_pun exists 17:26
17:29 TreyHarris joined
lizmat m: Buf.^make_pun; say now - INIT now # the expensive part 17:30
camelia rakudo-moar 95069c: OUTPUT«0.3362993␤»
17:31 skids joined
timotimo i wonder how many parts that has 17:33
lizmat well, adding it to the mainline of the setting, makes compilation die in pretty mysterious ways 17:34
timotimo ohgen/moar/m-Metamodel.nqp:2586 17:35
hm. a profile of that shows it's spending about half-half in "specialize" and "apply", gen/moar/m-Metamodel.nqp:2586
^- that's specialize
gen/moar/m-Metamodel.nqp:2734 - this is apply
and most of compare_multi_sigs is actually spent inside "gistperl" 17:36
gen/moar/m-CORE.setting:19074 - gistperl
lizmat what's being gisted ???
timotimo when we make a pun, do we actually have to be comparison of multi functions?
lizmat timotimo: no idea... 17:37
my question is really: why isn't this done during core setting, so that we have ready to use punned roles after startup ?
timotimo you mean only for roles that have default values for all their parameters? 17:38
lizmat I can't imagine a punned role taking so much more space that it will slow down bare startup
well, I would argue all of the possibilities should probably be punned
but at least Buf or Blob 17:39
timotimo hunts through the call graph
lizmat *and*
timotimo the eqv operator on Signature uses gistperl 17:41
lizmat this would at least shave 33 x .34 = 10 CPU seconds off the spectest
timotimo it may be a good idea in general to improve the eqv operator on Signature 17:42
lizmat timotimo: ok, will take that on first
17:43 vendethiel left, vendethiel- joined
timotimo i'm not sure that's really correct, but apparently gistperl takes up 95.7% of the total time of Buf.^make_pun 17:44
it's potentially already easy enough to add a fast-fail for different arities, for example
lizmat yeah, ok
17:47 _dolmen_ joined
timotimo hm, no. 17:47
maybe all the invocations to eqv are actually coming out true
timotimo checks that
17:47 Actualeyes left
lizmat looks like Signature.ACCEPTS(Signature) could use some speedup as well 17:50
timotimo oh my. they all come out False
17:52 colomon joined
timotimo so with a check for .count equality i can get 59 eqv's to abort early, and 127 still do the full check 17:57
17:58 zpmorgan joined
timotimo sadly that only takes the run time on my end from 0.46 to 0.33 17:59
so more work is clearly needed
ugexe however i handled bufs with net::http is nearly twice as slow with HEAD than 2015.12 :x 18:00
skids Coincidentally I was working on a patch for the metamodel signature comparator.
timotimo oh! 18:01
lizmat: ^- skids has something for us!
:P
skids Not for eqv.
The thing below it.
timotimo oh
18:01 guru joined, vendethiel- left
timotimo well, that just uses gistperl + eq + gistperl 18:01
so whatever you had in mind for eqv would likely also apply there 18:02
18:02 guru is now known as Guest20938
lizmat ugexe: are you saying Buf handling slowed down since 2015.12 ? 18:02
skids gist.github.com/skids/b7db42fc7d029e5c0f9e was the first, 6.c-compatible part of that.
18:03 Guest20938 left
timotimo how much faster is that for Buf.^make_pun? 18:03
skids Well, I don't have two rakudos to compare. 18:05
timotimo mhm, fair enough
how fast does Buf.^make_pun run on your machine?
skids eqv should probably do likewise but not use the :where thing
timotimo i find it strange that you have +sa.params over and over again 18:06
skids Yeah I was trying to avoid making that a Routine.
Though, I don't know why.
(Can't use return or last otherwise) 18:07
timotimo routine?
skids Or can't use return. Was also trying to avoid last to avoid control exceptions.
timotimo yeah
but you misunderstand me 18:08
18:08 TreyHarris left
timotimo why is \sap and \sbp in the inner loop and why not +sap or even put the result of +sap into another variable? 18:08
18:09 mst left, mst joined
lizmat so what is exactly the function of set_multi_sig_comparator ? 18:10
is that the code that determines if two signatures are identical ?
timotimo it registers a comparison function that the metamodel can use
yeah, looks like
skids It is newer than most of the metamodel, hasn't been fully promulgated yet.
timotimo using your code makes Buf.^make_pun run in 0.21s 18:11
skids timotimo: yeah I hadn't PR'd that yet because it needed some massaging, just got it working, so probably could use some massage.
lizmat and how does this relate to Signature.ACCEPTS(Signature) ?
18:11 TreyHarris joined, buharin left
skids timotimo: is that better, or worse (just logged in, haven't backlogged much) 18:12
timotimo Parameter.perl is now at 59.96% inclusive time
that's two times better than what we had in the beginning
i.e. takes half as long 18:13
18:14 espadrine_ joined
skids What I've been trying to psych myself up to do is extract the logic from is_narrower/sort_dispatchees_internal into that comparator. But that will be 6.c-breaking. 18:15
timotimo inside Parameter.perl, 25% time is spent inside a/the calls to .map, 11.8% from .sink, 8.72% of time spent inside the curly block following the first # XXX
another 8.6% is spent inside .ACCEPTS of a Regex 18:16
18:16 pmurias left
Skarsnik really eqv just compare the gist? xD 18:16
timotimo the curly block from the else-branch of "if $name" is next at 7.37%
after that is much smaller fish 18:17
lizmat timotimo: did you work on Parameter.perl already ?
skids Skarsnik: yes, which is a bit hacky and causes some issues, but you know, "first ake it work" :-)
timotimo no, just analyzing it so far
18:17 espadrine_ is now known as espadrine
timotimo hm, so the most expensive part is the type captures part 18:18
rebuilding takes quite a little while on my laptop :| 18:19
skids One note is that in sort_dispatchees_internal a hash is built for each sig, mostly because not all the methods from Parameter.pm are available at that point, but it has the effect of caching results for future comparisons.
timotimo but i just guarded that for with a "if nqp::elems($!type_captures)", since type captures are rather rare
ugexe lizmat: in some cases, yes (at least i dont think another change is causing it). looking at --profile it seems to be twice as many allocations. lots of new calls to `perl`, `sink-all`, `new`, `sequential-map`, and `push-exactly`. or should i look at something else? 18:20
18:20 yoleaux joined, ChanServ sets mode: +v yoleaux
timotimo what question was that an answer to? 18:20
lizmat ugexe: ok, that's caused by the punning then: there are many more methods/candidates now for punning
timotimo ah, interesting 18:21
lizmat about the slowdown in net::http since 2015.12
timotimo so we'll be improving the performance of that code with this work right here
lizmat yes 18:22
timotimo i really wonder why the type_captures method boxes an Int for the index of the type captures
it's not like we support more than 2^64 type captures on a single parameter?
just got answer from the GPW admins; i'm too late for GPW this year ;( 18:23
TreyHarris is file glob just gone from Perl 6?
timotimo it's in the ecosystem
TreyHarris timotimo: thanks, didn't see it for some reason 18:24
timotimo :)
18:25 zakharyas joined
timotimo with that for loop guarded by an if, i'm down to 0.18s 18:25
RabidGravy woah, that's epic poddery, nearly half this module is POD now :-\ 18:28
better get it out the door
timotimo i'm not entirely sure why the check for "Callable" looks like $type ~~ / ^^ Callable >> /, but i guarded it with a $type.starts-with
lizmat
.oO( podding along )
timotimo: nqp::istype(,Callable) should be fine ?
timotimo i think the type is probably a string? 18:29
skids timotimo: for Callable[Int] etc I think.
lizmat ah, then starts-with should be ok :)
TreyHarris how about fork/exec? I'm not finding it in ecosystem :)
18:29 dwarring joined
TreyHarris (it's probably there too, I'm just getting the wrong name...) 18:29
timotimo ah
mst TreyHarris: that's non-portable, you can get it from your OS via NativeCall
timotimo i can compare $!nominal_type instead 18:30
mst TreyHarris: however, the first question is, why do you -want- to fork?
perl6 already has concurrency, and it already has process running
Skarsnik Fork does not work great x)
18:30 vendethiel joined
TreyHarris mst: completeness. i'm trying to port one of my cpan modules and get it testing correctly before making it more p6-y 18:30
Skarsnik mst, I needed fork to run code that leak
timotimo m: "Callable[Foo]".index("[").say
camelia rakudo-moar 95069c: OUTPUT«8␤»
timotimo m: "CallableFoo".index("[").say
camelia rakudo-moar 95069c: OUTPUT«Nil␤»
mst I fully expect we'll end up with an exec() eventually, because that exists on win32 as well 18:31
but fork() is *n?x specific, so using NativeCall to get it from the OS is, if anything, more elegant design-wise than having it supported directly as such
TreyHarris mst: sorry, exec is what I need, I just said "fork/exec" because that's like one word to an old Unix hack like me :)
Skarsnik I mean what are the other way to start another process?
mst TreyHarris: what do you need exec for?
Skarsnik not just a thread
TreyHarris mst: "Perl, stop execution immediately and replace yourself with this other program" 18:32
mst TreyHarris: so, basically, at this point you do the moral equivalent of 'exit system(...)'
skids TreyHarris: maybe use NativeCall?
mst or try and NativeCall in exec(), which I'm probably going to end up doing at some point myself
18:32 _dolmen_ left
TreyHarris mst: no, exec() is a specific thing, because it frees all resources the prior process is using. doing a system() postpones releasing those resources until the system() finishes, even if it's the last thing in the program. 18:33
mst TreyHarris: please don't treat me like an idiot when I'm trying to help you. 18:34
timotimo making the thing inside the check for [Foo] faster didn't matter at all, seems like.
mst I know what exec does. that's why I gave you both options.
skids
.oO(exec might be kinda fugly from an evalserver-like setup)
18:35
mst skids: yes. but in the long run we need it anyway, because leaving an unnecessary extra process lying around is pretty gross
OTOH for the moment it *does* work, basically
18:36 buharin joined
timotimo skids: do you think we can figure out a nice fast-fail condition for the equivalence of parameters in our signature comparator? 18:36
TreyHarris mst: i'm sorry, i wasn't trying to, i've done enough coding interviews of supposed "system programmers" to know that the fork/exec process is surprisingly esoteric even to non-idiots. my apologies for misunderstanding and for implying you didn't understand. 18:37
timotimo skids: actually, Parameter has an ACCEPTS, is that potentially right for our use case?
skids timotimo: Both will be a bit tediuous, but harder for 6.c copatibility than not. Haven't considered ACCEPTS. 18:38
timotimo hm
18:38 espadrine left
mst TreyHarris: yeah, so, NativeCall will totally let you get at the systemcall 18:38
skids For 6.c you basically have to go by what gistperl does.
timotimo anyway, anything that makes this faster would be helpful :)
lizmat Set($other.named_names) (<=) Set($.named_names) # pretty bad, because it first builds to entire Sets 18:39
mst TreyHarris: while I was resisting the urge to try and set you on fire with my mind, I also came up with an alternative, which is to do an 'exit system()' of a program that forks, execs your real thing in the child, and exits the parent, but of course then you lose the exit code and have the usual other problems
timotimo perhaps we have to look at this from a higher vantage point. like, what exactly does the metamodel expect the comparator to consider equivalent and what not? does that have to be 1:1 the same as eqv on two Signature objects?
mst TreyHarris: also, sorry, I assumed since you had perl5 code you'd probably already know I tend to work on fairly low level stuff - I mean, I did do most of the design for e.g. p3rl.org/Daemon::Control - but I do understand that lots of people don't get it. saying "yes, but I want the exec() resource freeing behaviour" is what I'd do, then the people that know will go "yeah, I know" like I did, and if you get a blank look, ... 18:41
... *then* you explain
timotimo lizmat: good point; also the eqv we've had so far wouldn't be just subsets, it'd require both to exactly match
ugexe fwiw its in the s29 design doc as `runinstead`
mst bah. I'm doing the "debug your communications protocol as well as your problem" thing again. hope it's clear I mean it constructively :D
skids timotimo: unless we want eqv to be True for tiebreakables, the two will have to be different.
TreyHarris mst: Yes, it is. Again, I really do apologize. To put it in context, I'd say that at Google, folks we brought in for onsite SRE interviews had a 50% hit rate on being able to explain fork/exec, and at that point 99% of applicants had already been weeded out. (I've learned that pretty much anything you'd think is a litmus test for a good system programmer, a bunch o good system programmers can't pass.)
skids timotimo: What needs to happen eventually is in sort_dispatchees_internal, obscured a bit by that fact it is bootstrap code. 18:43
(and sort_dispatchees_internal could probably use some improvements as well)
timotimo skids: tbh i don't feel up to wrangling the metamodel right now ... i'm trying to work up the courage to improve spesh by finding out what makes it not analyze my "white noise" example code properly
TreyHarris mst: Yes. Sorry, I didn't /whois you until now and I'm terrible with remembering initials. We were both in the kilt squad at YAPC CMU '09 and had several meals together. 18:44
mst I thought it was you, that was part of why I was so confused :P
skids timotimo: if I can manage to get my head clear enough today I'll try to PR something, no guarantees, I've been feeling down all week. 18:45
mst TreyHarris: anyway. those are your options for the moment. note that if you do get exec via NativeCall going I'd love to see the resulting code, because I'm going to be wanting to do that sometime soon myself
timotimo no worries, i appreciate any effort! :)
otherwise, you can let lizmat work on it instead/in addition 18:46
mst because currently the shim scripts that are used to invoke installed scripts via modules suffer from exactly the suckage you describe because they're doing 'exit system(...)'
so the path forwards seems to me to be 'get a cross-platform NC exec, use it in those for a bit to shake it out, then petition to add it for 6.d'
TreyHarris mst: i'll let you know but since it was a marginal feature to start with I only brought it up now because I was surprised I couldn't find an implementation. It just happened to be the next thing in the test file I was porting. 18:47
jnthn m: use NativeCall; sub execv(Str $path, CArray[Str] $args) is native returns int { * }; execv('/usr/bin/uname', CArray[Str].new('foo', Str)); say 'not here';
yoleaux 10:49Z <lizmat> jnthn: there's something strange with reading a 2.5MB file with slurp: with nqp::readallfh it takes about 80ms, with nqp::readfh with the size of the file as a buffer, it takes 350 msec (like 4x as long)
camelia rakudo-moar 95069c: OUTPUT«Linux␤»
yoleaux 10:49Z <lizmat> jnthn: I would expect the unicode handling to make things *slower*, but instead it's 4x faster than binary ?
jnthn That's how to call exec with NativeCall, btw
lizmat jnthn: I think we found out what that was: Buf.^make_pun
jnthn lizmat: OK. I'm headachey and sick today, so don't know I'll be figuring out much... :( 18:48
lizmat jnthn: we're figuring out many a things atm...
any suggestions would be welcome...
jnthn lizmat: Does the binary path copy all it gets into another buffer though?
lizmat jnthn: yeah, but the delay is in the first occurrence of Buf in a run 18:49
mst TreyHarris: well, sure, which is why I suggested you did 'exit system(...)'
TreyHarris: because I figured it was probably a marginal feature
lizmat m: Buf.^make_pun; say now - INIT now # that's a lot of CPU there
camelia rakudo-moar 95069c: OUTPUT«0.3490704␤»
lizmat jnthn: ^^^
mst TreyHarris: I assumed the exec 101 lecture meant it was important :P
jnthn Sure, but it's amortized
timotimo ohey jnthn :)
jnthn m: Buf.^make_pun for ^10; say now - INIT now
camelia rakudo-moar 95069c: OUTPUT«2.9059790␤»
jnthn Uh...it should be, at least. 18:50
timotimo hah
well, .^make_pun probably doesn't cache the result
jnthn m: Buf[].^make_pun for ^10; say now - INIT now
camelia rakudo-moar 95069c: OUTPUT«2.89013790␤»
timotimo whereas whatever uses .^make_pun probably does
jnthn Oh, wait...
m: Buf[].^pun for ^10; say now - INIT now
camelia rakudo-moar 95069c: OUTPUT«0.334182␤»
jnthn Right :-)
That's the one that should be used :)
mst TreyHarris: also, damnit, I suppose that means I'll actually have to write the code myself at some point ;) 18:51
18:51 yoleaux left
dalek kudo/nom: 2098186 | lizmat++ | src/core/Buf.pm:
Make Blob.AT-POS a few percent faster

And hopefully better inlineable
18:52
kudo/nom: 4fbedcc | lizmat++ | src/core/Range.pm:
Fix typo

Found when doing Int.Range.rand. Instead of generating an LTA error, this now hangs because it is building the infinite list. This probably needs some extra attention :-)
18:53 espadrine joined
TreyHarris mst: like I said, I was porting feature-for-feature, and I got to the one that used exec(). So it was important insofar as doing something other than exec() would no longer be porting feature-for-feature. 18:53
18:53 vendethiel left 18:54 cdg joined 18:55 cdg left, cdg joined
timotimo should we optimize .map on ().list ? 18:56
as in: special-case?
jnthn Don't think the code to do it is worth the bloat or, worse, slowing every other case down for.
18:57 tmch left
timotimo 'k 18:57
18:57 chrstphrhrt joined
timotimo in this case, which is Parameter.perl, it's probably worth looking at nqp::elems() of $!type_captures 18:58
flussence was runinstead() removed from the spec? not sure why we need to wait for 6.d to fix it.
19:02 roryrjb joined, zakharyas left
TreyHarris jnthn: thanks, that works. a stringifiable list-to-CArray[Str] wrapper is easy enough, but is the idiomatic way to do it by putting coercion logic in the sub exec (Str $path, *@args) which calls execv? 19:02
sorry, *conversion* logic. not *coercion*
thinko
b/c a coercion milti could work as well, no? 19:03
jnthn TreyHarris: If you stick it in a module then yeah, you could write a sub that does the coercion, named it exec, and export *that* rather than the native sub itself.
mst that was roughly what I was expecting to be the sensible approach
19:04 _dolmen_ joined
mst given perl6 being perl6 couldn't you put the 'sub execv is native' inside the 'sub exec' and not need a module? 19:04
jnthn mst: Yes
mst: But also subs are lexical anyway
mst: So hiding the native one from the outside world is as simple as not exporting it.
mst you're thinking the wrong way round 19:05
jnthn Oh, if you don't want a module at all, just to stick it in a script
mst I was thinking that I wouldn't want to have to wrap a block around the outside of the 'sub exec' definition to avoid leaking the execv out into the script
jnthn Yes, then it makes sense.
mst exactly. the words 'and not need a module' were a clue :P
jnthn What, I'm meant to read??? 19:06
TreyHarris jnthn: but mst is right that I probably should just eliminate the feature, as I don't want to port a pure perl 5 module into an impure perl6 module.
mst TreyHarris: given the way NativeCall works, I would argue it isn't really impure as such 19:07
this is not like Inline::C or XS
TreyHarris mst: guess I need to look at exec's p5 implementation. i'm guessing it's not portable just by doing jnthn's incantation alone. 19:08
jnthn May not quite work out on Windows without a tweak
dalek osystem: 67735d7 | RabidGravy++ | META.list:
Add XML::Class

see github.com/jonathanstowe/XML-Class
19:10
jnthn grmbl, headache returns...bbl, or tomorrow
RabidGravy there, that took longer than anticipated but what larks
Skarsnik ah nice module 19:11
RabidGravy I wouldn't say it's perfect but it should get some tire kicking 19:12
dalek kudo/nom: bc0070f | lizmat++ | src/core/Mu.pm:
Make BUILDALL/BUILD_LEAST_DERIVED about 10% faster

Benchmarked on a class with 3 public attributes not being initialized
19:20
TreyHarris whee... looking at p5. exec is defined separately for each OS. so i guess unless you already have an OS dependency, defining it inline would be a bad idea.
japhb lizmat: Do you have any of your benchmark code (that you used to time all these changes you've been making over the past weeks) laying around? It would be nice to get them into perl6-bench ... 19:22
lizmat japhb: I basically used one liners, run them at least 3 times with 10 second intervals, run one "empty" loop for a baseline, and do the math 19:23
japhb: so, no, I don't really have code as such :-(
will keep that in mind in the future, though 19:24
$ 6 'class A { has $.a; has $.b; has $.c }; for ^10000 { my $a = A.new }
$ 6 'say (285 - 132) / (299 - 132)' 19:25
0.916168
mst lizmat: turning that into a small shell script (or whatever) called 6bench would likely be pretty trivial 19:27
19:27 espadrine left
mst I mean, FVO trivial, but still 19:27
19:27 espadrine joined 19:28 vendethiel joined 19:30 vike joined 19:31 espadrine_ joined 19:32 espadrine left 19:33 kent\n left 19:42 vike left, _dolmen_ left 19:45 azawawi joined
azawawi hi 19:45
19:45 rindolf left
RabidGravy rarr! 19:46
azawawi regarding "is cached" trait doc.perl6.org/routine/is%20cached , does it have a cache eviction strategy?
moritz nope
japhb lizmat: perl6-bench has a *lot* of one-liners, and handles empty loops, and can do any subset of the tests in the run, and does the "run N times" work, and ... :-)
19:47 roryrjb left
mst it's actually 'is memoized', but with a stupid name. 19:47
japhb mst: github.com/japhb/perl6-bench
mst but 'cached' is more familiar to people so
19:47 vike joined
azawawi moritz: we can override it right? 19:47
lizmat japhb: point taken :-)
azawawi mst: yup en.wikipedia.org/wiki/Memoization
19:48 laz78 joined
lizmat azawawi: it's experimental as it is, anyways :-) 19:48
mst azawawi: you can write your own trait with an eviction strategy, yes 19:49
azawawi mst: thanks
19:49 vendethiel left
mst lizmat: actually, I sort of wonder if 'is cached' should take (a) an args mangler, the way memoize does, (b) a cache constructor 19:49
then it would both fit it's name and be configurable
lizmat mst: I implemented it as it was vaguely specced 19:50
azawawi lizmat: could you please link its design spec?
lizmat S06:2081 19:51
azawawi thinks it will give him something to do it this evening :)
19:51 geraud joined 19:53 colomon left, kid51 left, kid51 joined, autogen joined
azawawi lizmat: thanks ... design.perl6.org/S06.html#is_cached 19:54
mst lizmat: right. I've been tending to regard the synopses as "it must do the things they say, but there's no reason you can't do a few extra bits as well"
that's going to be completely necessary for CUR over time, certainly 19:55
but then again, in general I don't really write code where an unbounded cache is useful, and I can see a bunch of scripty uses where it would be
lizmat mst: the extra bits are what gives me the top position in most reverted :-)
20:01 kjs_ left 20:02 kjs__ joined 20:04 tharkun left, tharkun joined, domidumont left 20:06 darutoko left 20:07 nowan joined
japhb lizmat: Just shows you're taking a proper amount of risk taking ... and also that roast is a bit thin still. :-) 20:08
*you're doing
20:09 raiph joined
japhb left his tea in the freezer to cool a little too long. Yipes that's cold. 20:09
lizmat just has a fresh cuppa (hot) 20:14
Hotkeys Just leave it in a bit longer and have a teasicle 20:15
20:16 vendethiel joined 20:18 [Sno] joined, zakharyas joined 20:19 sno left, notostraca joined
japhb Hotkeys: not entirely a bad idea ... except the part about needing the caffeine now. :-) 20:21
20:21 kjs__ left 20:22 musiKk_ joined 20:27 MadcapJake joined
lizmat japhb: I seem to have misplaced the benchmark repo... what was it again? 20:33
mst 19:47 < japhb> mst: github.com/japhb/perl6-bench 20:35
lizmat mst++
20:37 TreyHarr1 joined 20:38 vendethiel left 20:39 TreyHarris left, tmch joined
lizmat japhb: so, if I only have a P6 benchmark, I could just leave the perl5 tag empty ? 20:40
japhb lizmat: Yeah, exactly
The perl5 and nqp entries are only there for when you want to do cross-language comparisons. 20:41
lizmat what does the "scale" parameter mean
?
moritz lizmat: the harness tries to run each benchmark with a number the determines the amount of work to be done 20:42
lizmat: that is, number of iterations, length of strings to be regexed, stuff like that
lizmat: that's the scale 20:43
japhb lizmat: Just checked, you already have a commitbit, btw
moritz so that stuff like quadratic string concatenation becomes obvious
lizmat so 1<<7 means number of iterations to be done ?
japhb lizmat: That's the starting value. 20:44
It will automatically ratchet it up until the runtime of the test is long enough to get out of the noise
(plus a bit more to see the scaling effects)
And I tended to do it in binary, because the default ratcheting behavior is to double the scale each run. 20:45
dalek kudo/nom: add25c7 | lizmat++ | src/core/Parameter.pm:
Make Parameter.sigil about 20x faster
japhb But there's nothing intrinsically correct about that scaling factor; it just seemed like it would be a good default.
20:46 raiph left
lizmat so, the benchmark for this was: $ 6 'sub a(\) {}; my $p = &a.signature.params[0]; for ^100000 { my $a = $p.sigil }' 20:46
japhb (There's also a linear scaling mode for tests like man-or-boy or ackerman that have their own super-linear scaling based on an opaque parameter.)
20:47 vendethiel joined
lizmat japhb: how would you put that in microbenchmarks.pl ? 20:47
japhb hold on, lemme pull that
up
20:47 FROGGS left 20:48 raiph joined 20:49 azawawi left
japhb lizmat: something like gist.github.com/japhb/f15b1a9779d8e89ddf4c perhaps 20:52
RabidGravy gah, one more module and I will have made 40 - I may have to pause for a while before it gets embarassing 20:53
japhb I wonder if we should add tags for test authors so that people can see how much a particular person's favorite test cases were improving 20:54
RabidGravy: s/embarassing/awesome/ 20:55
lizmat japhb: are the tags that we don't use (like perl5 and nqp in this case) really necessary ? 20:56
japhb They were mostly there as a subtle reminder to people to make cross-language testing possible wherever it made sense.
20:56 telex left
japhb ISTR I fixed the bug where it would be unhappy if the key wasn't even there, but I'm not 100% positive. 20:57
lizmat perhaps it would make more sense if there were a separate file for perl6 benchmarks only ?
20:58 telex joined
japhb There is a set of autogenerated tags for tests, so you can choose tests via e.g. --tests-tagged=has-lang:perl6 21:00
lizmat: For tests that are not one-liners, there are separate directories for each language.
21:01 yoleaux joined, ChanServ sets mode: +v yoleaux
japhb I collected these in one big file largely because I didn't want to repeat all the meta data, and because I wanted to reduce the chance of a refactoring making different language implementations no longer comparable. 21:01
these == microbenchmarks
lizmat still not seeing how I would indicate the empty loop case 21:04
japhb To be clear, you may never see a case of `perl6 => undef,` in microbenchmarks.pl, because then what's the point? There shouldn't be anything you can express in NQP that you can't just as easily express in Perl 6, and for Perl 5 only tests ... well, write a Perl 6 version. :-)
lizmat in my example: $ 6 'sub a(\) {}; my $p = &a.signature.params[0]; for ^100000 { my $a }'
japhb test "empty" 21:05
21:05 chrstphrhrt left
japhb The compile and constant overhead times of your test will be checked with a special run of SCALE = 0. 21:05
There's also a for_empty, IIRC
yep 21:06
Which is specifically an empty for loop
lizmat well, but in the above example, if the empty loop case takes 400 msecs, and the one with a payload does 450 msecs
and before my change, with payload did 500 msecs 21:07
japhb lizmat: After subtracting startup, compile time, and constant overhead?
lizmat you would see only a 20% improvement, rather than 2x
well, the amount it would take to do everything except the very thing you're benchmarking
japhb I'm saying, how much time does this take: 'sub a(\) {}; my $p = &a.signature.params[0]; for ^0 { my $a }' 21:08
21:08 Shozan joined, nowan_ joined
lizmat so you would include the overhead of the loop in the benchmark ? 21:09
japhb lizmat: So if (say) that took 200 ms, then perl6-bench would by default compare (400-200) = 200 versus (450-200) = 250ms
But yes, that's why there are variants of tests as while, for, etc.
21:09 xxpor left, nowan left, SHODAN left
japhb Because whether for ^N {...} is super-optimized changes between Rakudo versions 21:09
21:09 xxpor joined
japhb At one point, it was wicked fast. 21:10
(I haven't checked recently if it still was.)
But I *do* see your point.
lizmat it is again, afaik
japhb The biggest remaining feature unimplemented in perl6-bench is being able to compare e.g. for_empty and for_foo_bar directly.
I ran out of tuits to do that comparison (which would go in analyze, with options to enable it available in bench) 21:11
But all the raw data you need should be in the timings files, which are ... verbose.
21:12 BenGoldberg joined
japhb Still, you're right that currently perl6-bench doesn't get allow you to easily claim "operation X is N times faster" but rather "operation X running in a for loop is M times faster" 21:12
lizmat atm I'm simply trying to quickly add more tests, without actually running perl6-bench myself 21:13
if that's ok with you
jnthn There are daily automated runs on perl6-bench at www.moarvm.org/measurements/perl6-bench/ fwiw
*of 21:14
japhb A legacy of it being used to compare the overall performance of compiler builds, rather than improvements to a single Callable in the setting.
lizmat: It's more than OK. I'm ecstatic! :-)
lizmat++
21:15 _dolmen_ joined
jnthn Though for some reason viewing the reports in whatever Chrome I currently have is incredibly slow... 21:16
timotimo jn is back :)
feeling a little better?
jnthn Well, I had some dinner, and the headache receded a bit...
Brane still feels like it's a big heap of mush. 21:17
21:17 rvchangue left
japhb jnthn: The JS code got modified a few times since I last touched it, I think. I haven't gone back and checked that it's being JS-compiler-friendly still. 21:17
dalek rl6-bench: 04d82d3 | lizmat++ | microbenchmarks.pl:
Add micro-benchmark for Parameter:D.sigil
21:17 krunen joined
jnthn At the moment, those daily runs I'm doing spit out a Perl5/NQP/Rakudo comparison 21:17
21:17 Celelibi left
jnthn Any suggestions on a good no-maint-needed thing I can do for comparing Rakudo versions? 21:18
I guess I could run a Christmas release vs. today...
japhb jnthn: history mode?
jnthn japhb: Yeah, I guess that. :) 21:19
21:19 tinita joined, stmuk joined
jnthn japhb: I guess it has no smarts along the lines of "the last month's release"? 21:19
I can calculate that in whatever scripting I do though, I guess. 21:20
japhb Unfortunately, it only knows about things that can `git rev-parse`
jnthn OK
21:20 zakharyas left
japhb You can certainly use a moving tag or something if you like. 21:20
21:21 ChoHag_ is now known as ChoHag
jnthn Well or I can just plot Christmas, HEAD, and 20XX.XX by just talking the current year/month and subtracting one month. 21:21
It'll lag the actual monthly releases a little, but still be useful for comparing things before the next monthly :) 21:22
japhb We might also want to consider tagging a particular set of tests as "version 123 of the perl6-bench test suite", so that if you're watching the overall performance means, it doesn't change as the test list changes.
Yeah, makes sense.
21:22 Celelibi joined 21:23 rvchangue joined
japhb If you use a particular rev of perl6-bench itself over time, then you don't have to rerun old tests, you can just keep checking out a new latest (by date) and creating more timings files for it. 21:24
Analyze can handle a fair number of timings files, but again, don't know how the HTML will handle that much data.
21:24 breinbaas joined 21:27 bjz left 21:29 musiKk_ left
jnthn japhb: Yeah. At the moment I have to manually git pull perl6-bench itself, but the rest is automated 21:29
21:29 guru joined 21:30 guru is now known as Guest98765
japhb goes back to trying to decide whether it's time to just write a clean re-implementation of Evject etc., and if so, what exactly he wants to accomplish with that. 21:32
vendethiel Evject? 21:34
japhb vendethiel: gist.github.com/jnthn/da27ded3fbf06df7c54a
(I have a local hacked up version) 21:35
Guest98765 I'm getting an odd error message from REPL about some code. Will I get flamed if I post the sequence? 21:36
japhb Oh, that reminds me: jnthn, I recently had to stop using OO::Monitors with InMemoryEventStore, because the wrapped methods weren't invokable during domain processing.
21:37 shadowpaste joined
japhb I don't know if you'd ever gone back and tried that old code (with s/use Monitor/use OO::Monitors/ of course) since Christmas. 21:37
Guest98765: use a pastebin or gist.
Guest98765 OK
mst Guest98765: fpaste.scsys.co.uk/perl6 21:38
since shadowpaste just rejoined :D
japhb mst: Is there a way to make it prefill *both* the channel and nick? So people can bookmark a personal variant? 21:39
RabidGravy right, in the interests of science it took 31 minutes to run all the tests of all my modules, now rebuild and see
japhb RabidGravy: You mean, "rebuild Rakudo"? 21:40
RabidGravy yes
mst japhb: I'm not actually sure, but what I'm running is p3rl.org/Bot::PasteBot
japhb metacpan fail
RabidGravy I'm hoping that some of lizmat++s recent changes will improve this
japhb mst: 'Bot::Pastebot' perhaps? 21:41
RabidGravy: That would be awfully nice. :-) 21:42
dalek kudo/nom: b0b2fb0 | lizmat++ | src/core/Parameter.pm:
Optimize Parameter.named_names a bit

Not sure how to benchmark this, but allocating beforehand rather than pushing, should make things faster. I'm not sure why this is actually needed, apparently something somewhere in the stack needs the strings to be boxed, rather than native strings.
Guest98765 Thanks, mst
shadowpaste "Guest98765" at 217.168.150.38 pasted "Odd error message" (17 lines) at fpaste.scsys.co.uk/506406
mst japhb: oh, I *always* miscapitalise it 21:43
jnthn tries to work out the incantation to give bench to get the history plots out of it 21:45
japhb Guest98765: It's because successive lines of REPL are treated as inner scopes, and when you said 'my @list[0]' you declared a new @list with a 0-length first dimension -- and that's what all future lines in that run saw.
jnthn: See line 427 and following of bench 21:46
jnthn japhb: Seems like I just s/compare/history/ in the invocation 21:47
japhb 'bench --format=html_plot history ...
yeah
jnthn Nice
japhb wonders why JSON::Tiny no longer exists in his local Rakudo 21:48
Ah! Because panda now ships JSON::Fast instead of JSON::Tiny 21:50
21:50 breinbaas left, breinbaas joined 21:51 kaare_ left
japhb fixes his update-rakudo script and uses this as an excuse to rebuild with lizmat++'s improvements 21:52
Guest98765 Thanks, japhb; I'm now trying to relate the message to your explanation.
21:52 Ben_Goldberg joined
timotimo dinner time \o/ 21:52
21:53 yoleaux left, yoleaux joined, ChanServ sets mode: +v yoleaux
jnthn timotimo: Enjoy :) 21:53
flussence wonders (as a curious and totally incompetent observer) if it'd be possible to spesh away unnecessary lexical scopes, instead of manually removing them
japhb Guest98765: An N-long dimension has indices 0..(N-1). In the degenerate N=0 case, you get the nonsense you paid for. Mind you, that's LTA.
21:54 Guest98765 left
jnthn flussence: Yes 21:54
(On the todo list)
flussence that'll be fun to have :D
21:55 BenGoldberg left, agent008 joined
jnthn japhb: ooc, is perl6-bench smart enough to not re-build tags? 21:56
I'll probably just cope with the wasted CPU for now if not, though :)
japhb jnthn: The build, time, and analyze phases are separate *specifically* so that you can avoid redoing work. But the expectation is that the driving script does the work of preventing rebuilds -- if bench is told to do a rebuild, it will, because it assumes you had a reason to do that. 22:04
22:05 jameslenz joined
jnthn japhb: That's totally fair enough 22:06
japhb: Given the machine I'm running this on is pretty much idle otherwise at the time, I've little incentive to save some minutes of CPU time, though. ;)
22:07 MadcapJake left
jnthn Anyways, think I'll be able to add history plots to the measurements 22:07
japhb heh
And cool!
jnthn Need to get the NQP leak check valgrinding in there too
22:09 buharin left 22:13 molaf left
dalek kudo/nom: efed541 | lizmat++ | src/core/Parameter.pm:
Round #1 of Parameter optimizations

  - add some more constants for clarity
  - create internal method for p6boxing strings (why is this needed??)
  - use ternaries where possible
  - use nqp:: ops where possible
22:19
22:19 agent008 left
jnthn lizmat: Why indeed o.O 22:20
lizmat doublechecks 22:21
jnthn lizmat: ooc, are you optimizing this because role composition is costly because it compares signatures which is currently implemented by .perl-ing them? :)
lizmat yes, and to get the lay of the land of that code area 22:22
22:22 raiph left
jnthn *nod* 22:23
Then you perhaps already realized this, but there will be faster ways of doing the comparison :)
A short-circuit that checks if the number of things in the signature are different, or just checks nominal types, before doing The Full Thing will rule out lots of non-matches 22:24
lizmat oh, yes, I know
jnthn ok, coo
*cool
lizmat getting to that later...
jnthn :)
lizmat++
lizmat hmmm... apparently it just expects an Array back, rather than a List 22:26
but I guess we want to prevent action at a distance, so I can't just transplant the native attribute into an Array 22:27
RabidGravy I should optimise the order of my "all my modules smoke test" so that it does the ones with the most dependencies earlier 22:30
22:31 QORRiE left
Skarsnik damn getting an error in a react block sucks :( 22:34
Odd number of elements found where hash initializer expected
in block <unit> at Ferrel.p6 line 36
line 36 is react { x) 22:35
RabidGravy yeah, I usually put additional taps on to see which is the offending supply 22:36
japhb sortiz: I'm getting a fail-to-install for DBIish; no such file for .../lib/DBDish/Role/Connection.pm6
dalek kudo/nom: 9dc21a0 | lizmat++ | src/core/Parameter.pm:
Turns out we need an Array only, no need to box
22:37
Skarsnik The issue, it's maybe an error a module
is that LTA or it's just not possible to get the proper line in a react context?
jnthn Skarsnik: I think we should be able to do better
Please file it 22:38
Async error reporting is always a bit "fun"... :)
RabidGravy yeah, when I was fixing up Net::AMQP I think I actually took longer to remove all the debugging instrumentation than actually fixing it 22:40
Skarsnik hm, should $disc.send-message($qnb-channel, ) be catched at compile time?
the missing argument 22:41
22:45 vendethiel left 22:46 btyler joined
RabidGravy so running the tests again as the first time was inconclusive due probably to module recompilations 22:49
22:50 Guest89071 is now known as pierrot
timotimo Skarsnik: we can never catch missing arguments on method calls 22:51
22:51 pierrot is now known as Guest63884
timotimo earlier than runtime, i mean 22:51
Skarsnik I mean, it's not even a parse error here?
or it's see as a List ?
22:52 Guest63884 is now known as pierrot 22:53 pierrot is now known as Guest70064
timotimo final comma is allowed 22:56
if only to make "one argument per line, every line ending in a comma" allowed 22:57
Skarsnik will that be possible to have pragmas that allow perl6 to check method/routine sig at compile time? 22:58
timotimo routine sig checking can and will happen at compile time already
22:59 kid511 joined
Skarsnik I get that the idea it's because with Meta programming it's not easy to be sure, but I am pretty sure in lot of code, there is no added/changed method 22:59
23:00 rburkholder joined, kid51 left
timotimo when we can mark classes as "closed", then we can perhaps do that, but we'll still have to make sure we don't miss any roles being mixed into instances 23:02
in any case, with objects, the receiving object is responsible for deciding how method calls are supposed to be treated
that goes back to the fundamental idea of method calls as "sending signals"
23:03 Ben_Goldberg left
timotimo er 23:05
"sending messages", of course
23:06 _dolmen_ left 23:08 jantore joined
dalek kudo-star-daily: 4f7fef4 | coke++ | log/ (8 files):
today (automated commit)
23:08
kudo-star-daily: d4acb8a | coke++ | log/ (8 files):
today (automated commit)
RabidGravy lizmat++ # totally unscientific this, but the second run of the modules test was 17 minutes 23:10
so more of that please
lizmat ah, so overall almost 2x as fast? cool 23:11
23:11 neilb_ joined
timotimo "modules test", as in rakudo star? 23:11
RabidGravy as in my own modules
timotimo 17 minutes is super long; how many modules was that?
RabidGravy 52 23:12
23:12 cdg left
RabidGravy er no 23:12
44
there are quite a few very I/O intensive ones, some even with sleeps in 23:13
23:13 neilb left, neilb_ is now known as neilb
timotimo hm, ok 23:16
RabidGravy for reference the Audio::Encode::LameMP3 tests take approximately 1.75 minutes
Skarsnik I should h:p:x to see if there is any speed up since 4 months x)
timotimo how much time did it take before those changes?
how did lizmat get to "2x as fast"?
RabidGravy 31 minutes previously 23:17
or thirty something minutes
23:18 Skarsnik left
RabidGravy the LameMP3 test encodes a file completely ten times in different ways readiing it off the disk each time 23:19
so it really does benefit from faster Bufs 23:20
lizmat jnthn: nqp::existskey is documented to return non-0 on existence 23:25
but in practice, I've seen it always only return 0 or 1
could I depend on that behaviour, or do you see that changing at some point in the future ? 23:26
23:32 wwwbukolaycom joined
lizmat sets off a spectest and goes to bed 23:35
good night, #perl5!
sigh
#perl6!
:-)
timotimo gnite lizmat, good work today!
23:36 kjs_ joined
jnthn lizmat: Probably OK to depend on it 23:37
RabidGravy erk 23:40
I should probably try *installing* my modules every once in a while too
timotimo they don't install fine any more? :( 23:45
RabidGravy a couple of dodgy Build.pm in there
timotimo mhm 23:46
dalek osystem: 6267dbf | RabidGravy++ | META.list:
Switch to META6.json while I'm at it
23:47
jnthn Fingers crossed, there'll be a couple of extra files per day in the perl6-bench runs on moarvm.org now. We'll find out if I screwed it up in the morning, I guess... :-) 23:50
'night o/
23:50 firstdayonthejob left
timotimo neato :) 23:51
good night, jnthn!
rest well, get well :)