Perl 6 language and compiler development | Logs at colabti.org/irclogger/irclogger_log/perl6-dev | For toolchain/installation stuff see #perl6-toolchain | For MoarVM see #moarvm
Set by Zoffix on 27 July 2018.
00:12 shabius7 joined 00:13 p6bannerbot sets mode: +v shabius7, shabius7 left 00:18 ZzZombo left 00:29 vertigo joined, vertigo left 00:32 Sthebig8 joined 00:33 p6bannerbot sets mode: +v Sthebig8 00:34 Sthebig8 left
TimToady obviously the new marketing name should be Pysson, with a filename extension of .py :) 00:51
timotimo are we py's son or what? 00:53
00:56 Ewout7 joined, p6bannerbot sets mode: +v Ewout7 00:57 Ewout7 left
TimToady no, no, it's not pronounced "pie" there 00:57
00:59 ZzZombo joined, p6bannerbot sets mode: +v ZzZombo
Zoffix hehe 01:09
01:22 asdfguy20 joined, p6bannerbot sets mode: +v asdfguy20 01:24 asdfguy20 left
Geth nqp: b33470cb7b | (Zoffix Znet)++ | tools/build/MOAR_REVISION
[MoarVM Bump] Brings 6 commits

MoarVM bump brought: github.com/MoarVM/MoarVM/compare/2...8-g67f85dc 67f85dc optimize_prof_allocated shouldn't try to mess with writers. 5161060 Correct "should we log parameters" check 3ea4a81 Fix poor inlining due to wrong plan sorting 597ccb0 Pass on type tuple when inlining unspecialized 1500090 Optimize ifnonnull branches out a5dd765 [threadcontext] Remove per-thread libuv loop object
01:26
¦ nqp: version bump brought these changes: github.com/MoarVM/MoarVM/compare/2...8-g67f85dc
rakudo: 2840a2960a | (Zoffix Znet)++ | tools/build/NQP_REVISION
[NQP Bump] b33470c [MoarVM Bump] Brings 6 commits

NQP bump brought: github.com/perl6/nqp/compare/2018....0-gb33470c
MoarVM bump brought: github.com/MoarVM/MoarVM/compare/2...8-g67f85dc 67f85dc optimize_prof_allocated shouldn't try to mess with writers. 5161060 Correct "should we log parameters" check 3ea4a81 Fix poor inlining due to wrong plan sorting 597ccb0 Pass on type tuple when inlining unspecialized 1500090 Optimize ifnonnull branches out a5dd765 [threadcontext] Remove per-thread libuv loop object
rakudo: version bump brought these changes: github.com/perl6/nqp/compare/2018....0-gb33470c
5ff64514fb | (Zoffix Znet)++ | t/02-rakudo/99-misc.t

Closes github.com/MoarVM/MoarVM/issues/971 R#971
01:30 kpuc28 joined, p6bannerbot sets mode: +v kpuc28 01:34 kpuc28 left
synopsebot R#971 [closed]: github.com/rakudo/rakudo/pull/971 uniprop: set ISO_Comment as Str type
Zoffix .tell lizmat the profiler crash you mentioned is fixed now colabti.org/irclogger/irclogger_log...09-27#l934 01:54
yoleaux Zoffix: I'll pass your message to lizmat.
02:01 major23 joined 02:02 p6bannerbot sets mode: +v major23, major23 left
MasterDuke re changing the profile filename options, what about --profile-stage=<stage> and --profile-compile=<kind>? right now they default to the usual name/output type, but you can change that with --profile-filename 02:18
should we keep --profile-filename around forever for them? or just assume that you would use --profile=<filename> and --profile-(stage|compile) would override it to do the specific kind of profiling? 02:20
02:26 liuyq- joined, liuyq- left
Zoffix FWIW, I withdraw all my previous comments on the subject. I misunderstood how the options worked. 02:34
Zoffix beds
02:34 Zoffix left 02:46 Napsterbater20 joined 02:47 p6bannerbot sets mode: +v Napsterbater20, FastJack18 joined, Napsterbater20 left, p6bannerbot sets mode: +v FastJack18 02:51 FastJack18 left 03:35 efee229ddfk joined, p6bannerbot sets mode: +v efee229ddfk 03:40 efee229ddfk left 03:58 MasterDuke left 04:03 Ven` joined 04:04 p6bannerbot sets mode: +v Ven` 04:07 Ven` left 05:14 fake_space_whale left 05:18 siix18 joined 05:19 p6bannerbot sets mode: +v siix18 05:21 siix18 left
nige f 05:40
05:41 dv_9 joined 05:42 p6bannerbot sets mode: +v dv_9 05:43 dv_9 left 05:58 RamJett joined, RamJett left 06:01 john_doe_jr4 joined 06:02 p6bannerbot sets mode: +v john_doe_jr4 06:04 john_doe_jr4 left 06:26 SimJoSt4 joined, AlexDaniel left, p6bannerbot sets mode: +v SimJoSt4 06:27 SimJoSt4 left 06:33 robertle joined 06:34 p6bannerbot sets mode: +v robertle 06:37 [TuxCM] left 07:22 BullHorn8 joined 07:23 p6bannerbot sets mode: +v BullHorn8 07:25 BullHorn8 left 07:36 lrvick15 joined, p6bannerbot sets mode: +v lrvick15 07:39 lrvick15 left 07:44 lizmat left
Geth nqp/nqp-mbc: 590134fdb3 | (Stefan Seifert)++ | src/vm/moar/QAST/QASTCompilerMAST.nqp
Merge MoarVM::Frame with MAST::Frame

Saves the allocations and is the base for writing bytecode during the QAST to MAST phase.
07:57
08:02 lizmat joined, p6bannerbot sets mode: +v lizmat 08:04 robertle left 08:06 robertle joined 08:07 p6bannerbot sets mode: +v robertle 08:10 [TuxCM] joined, adam3us17 joined 08:11 p6bannerbot sets mode: +v [TuxCM], p6bannerbot sets mode: +v adam3us17 08:13 adam3us17 left, robertle left 08:16 robertle joined 08:17 p6bannerbot sets mode: +v robertle 08:30 digitalcircuit20 joined 08:31 p6bannerbot sets mode: +v digitalcircuit20 08:33 digitalcircuit20 left 08:43 moetunes joined 08:44 p6bannerbot sets mode: +v moetunes 08:47 big_t joined 08:48 moetunes left, p6bannerbot sets mode: +v big_t 08:50 big_t left 09:15 ZzZombo left 09:20 Flameeyes3 joined 09:21 p6bannerbot sets mode: +v Flameeyes3, Flameeyes3 left 09:31 [TuxCM] left 09:34 MarkOtaris1 joined 09:35 p6bannerbot sets mode: +v MarkOtaris1
|Tux| not happy 09:35
compiling in an ssh session:
compiling src/jit/x64/emit.o
compiling src/jit/x64/arch.o
/pro/bin/perl5.28.0 build/mk-moar-pc.pl pkgconfig/moar.pc 09:36
09:36 MarkOtaris1 left
|Tux| and as of that moment, the box seem irresponsive 09:36
09:52 [Tux] joined, p6bannerbot sets mode: +v [Tux]
|Tux| it just got further. So that last single step took a whopping * 9 minutes * !!! 09:55
09:56 lizmat left
|Tux| I think it misinterpreted the number of available CPU's. I have 8. looking at the log it looks like it spawned a multiplication of that 09:56
ENOTFUNNY!
11:57:04 up 4 days 23:31, 0 users, load average: 3.80, 120.47, 201.62 09:57
09:58 lizmat joined, p6bannerbot sets mode: +v lizmat
|Tux| That was the bad news 10:03
But here is the good news: 10:04
Rakudo version 2018.09-55-g5ff64514f - MoarVM version 2018.09-98-g67f85dc71
csv-ip5xs0.899 - 0.962
csv-ip5xs-207.442 - 7.519
csv-parser21.105 - 21.550
csv-test-xs-200.457 - 0.468
test8.168 - 8.642
test-t1.662 - 1.745
test-t --race0.796 - 0.881
test-t-2029.165 - 29.356
test-t-20 --race10.398 - 10.890
Geth roast: 4fe5b7d71a | (Zoffix Znet)++ | S32-io/io-handle.t
[v6.d REVIEW] No need for a variable in spurt test

Orig: github.com/perl6/roast/commit/5f7605d09
lizmat [Tux]: whee! :-) 10:06
yoleaux 01:54Z <Zoffix> lizmat: the profiler crash you mentioned is fixed now colabti.org/irclogger/irclogger_log...09-27#l934
|Tux| 11:57:04 up 4 days 23:31, 0 users, load average: 3.80, 120.47, 201.62
lizmat yeah, that is weird...
|Tux| 201 is BAD news
lizmat yeah...
it's up in my top 10, but the highest I've ever seen was 2000+ (just before the box became unresponsive :-) 10:07
|Tux| shall I include perl5:text-csv_pp in the list now that test-t is approching it? Just to set a target line? 10:08
it might have bee 2000+, but I was unable to tell from over here 10:09
Geth roast: 473e73ee1f | (Zoffix Znet)++ | S05-capture/match-object.t
[v6.d REVIEW] Don't stringify $/.Int in test

Orig: github.com/perl6/roast/commit/b75fca996
|Tux| tux.nl/Files/20180928120935.png ← :/
each yello line is load + 1 10:10
lizmat [Tux]: so this happened when compiling moar ? 10:12
10:12 pmurias joined, p6bannerbot sets mode: +v pmurias 10:15 niemeyer23 joined 10:16 p6bannerbot sets mode: +v niemeyer23
|Tux| This: "/pro/bin/perl5.28.0 build/mk-moar-pc.pl pkgconfig/moar.pc" took 9 minutes 10:17
while making the box inaccessible 10:18
10:19 niemeyer23 left
|Tux| jnthn, was this what you had in mind? :) :) :) jnthn++ 10:24
perl6 9.44 0.26 1.0000
perl5.8.8 19.44 0.02 2.0062
perl5.10.1 17.57 0.01 1.8124
perl5.12.2 15.19 0.01 1.5670
perl5.14.1 14.99 0.00 1.5454
perl5.16.2 16.48 0.03 1.7021
perl5.18.2 13.72 0.00 1.4144
perl5.20.0 13.74 0.02 1.4186
perl5.22.0 12.24 0.02 1.2639
perl5.24.1 10.94 0.01 1.1289
perl5.26.2 10.22 0.00 1.0536
perl5.28.0 10.87 0.02 1.1227
lizmat, still *not* using native ints! 10:25
lizmat what was this benchmark again ? 10:26
and: way cool! :-) 10:27
Geth roast: f349244f57 | (Zoffix Znet)++ | S17-supply/watch-path.t
[v6.d REVIEW] Loosen IO::Notification spec

It's kinda janky that we get a "FileRenamed" changed for deleted and created files. Perhaps that's all we can get from the OS, but since IO::Notification spec appears to work only on macOS, I'm loosening it in these respects, in case we need to modify them to be something else when IO::Notification works right on all OSes.
R#2329 github.com/rakudo/rakudo/issues/2329 Orig: github.com/perl6/roast/commit/25c27f065
synopsebot R#2329 [open]: github.com/rakudo/rakudo/issues/2329 [NYI] IO::Notification is not fully implemented
|Tux| o.pl and o.pl6 (object creation and addition of attributes)
tux.nl/Files/o.tgz 10:28
10:35 ZzZombo joined, p6bannerbot sets mode: +v ZzZombo 10:37 wolv15 joined 10:38 p6bannerbot sets mode: +v wolv15 10:41 wolv15 left 10:44 Biohazard5 joined 10:45 p6bannerbot sets mode: +v Biohazard5 10:46 Biohazard5 left
nine That feels like a great title for a lightning talk: "How Perl 5.26 almost cought up to Perl 6 performance!" 10:53
lizmat [Tux]: I just tested with native ints: it doesn't make a difference anymore on that benchmark 10:54
10:55 Sceinox24 joined, p6bannerbot sets mode: +v Sceinox24 10:58 Sceinox24 left
lizmat m: dd [Nil,Nil,3] # do we consider this correct behaviour, or should it be [Any,Any,3] ? 11:04
camelia Array element = [Any, Any, 3]
lizmat *should it be [Nil,Nil,3]
jnthn It's correct; the array composer assigns each incoming value into a Scalar container, so you get normal assignment semantics. 11:05
lizmat hmmm... trying to optimize [@a] 11:06
and it produces [Nil]
jnthn That'd be a wrongtimization :)
11:06 Shadowmm28 joined
lizmat nqp::bindattr(scalar,Scalar,'$!value', nqp::decont(nqp::atpos(params,$i))), 11:06
so that can not be used ? 11:07
11:07 p6bannerbot sets mode: +v Shadowmm28
lizmat with the descriptor being default_cont_spec 11:07
11:08 Shadowmm28 left
jnthn Nope 11:08
Because you're missing out on the Nil semantics
Did you try the nqp::p6scalarwithvalue op?
lizmat no 11:09
ok, will look that up
jnthn I added that to try and efficiently make a Scalar with a descriptor and put a value into it honoring the Nil semantics 11:12
11:13 patrickb joined 11:14 p6bannerbot sets mode: +v patrickb
lizmat hmmm... using that makes my opt go from 1.8x faster to 1.5x :-( 11:18
jnthn It's not an opt if it's wrong :P 11:20
lizmat true 11:21
dogbert2 what 1.662 for test-t! another day another record :-) 11:22
lizmat yeah... and that's even before jnthn's escape analysis work 11:23
dogbert2 are we running out of 'easy' opts now? 11:27
jnthn Depends how you define "easy", but from the spesh perspective I think most of what goes on there wouldn't fall within most people's definition of "easy". :) 11:28
But in terms of "are there easy things left that we can do in spesh", the answer is maybe, but I suspect the next rounds of bigger wins will need decidedly non-easy things. 11:29
PEA being one of them
We could also do with loop invariant code motion
dogbert2 so no more 'busted stats' 11:30
jnthn Both of those are especially interesting around loops. However, OSR means we can move into an optimized version of a loop while the loop is running
So things hoisted out of the loop can get "interesting". 11:31
So yeah, there's some headaches ahead there.
I'll probably find more things like I have during the last week where we can better tune the things we have or fix shortcomings that lead to missed opportunities
dogbert2 what about the 'two hot loops in a row' thingy 11:32
11:32 M4GNV520 joined
jnthn I think we can perhaps deal with that by spotting than the OSR point in the second loop as never hit yet and speshing it into an unconditional deopt 11:32
And then perhaps making OSR specializations be keyed on the OSR point at which we entered them 11:33
11:33 p6bannerbot sets mode: +v M4GNV520
jnthn Or "additionally keyed" 11:33
*spotting that, a few messages back
So effectively we'd re-specialize it once we have data about the second loop 11:34
dogbert2 would it gain much you think?
jnthn For programs that have that structure... 11:36
dogbert2 you made an analysis here: github.com/rakudo/rakudo/issues/2210 but since that piece of code now runs much faster I guess that you've managed to fix a couple of the points that you mention 11:37
11:37 M4GNV520 left
tbrowder__ hi, folks, i just asked a question about roast contributions on #perl6 but meant to ask it here. basically how should i handle a test generator script? 11:41
i think there is a clever way to get the test harness to use that script but i don’t want to be ad hoc here. 11:43
never mind, i think i see some examples 11:47
Geth rakudo: e430813fb0 | (Elizabeth Mattijsen)++ | 2 files
Make [@a] and [1,2,3] about 1.4x faster

By using the new nqp::p6 ops for setting up scalars.
11:54
11:55 pmurias left, cognominal-p6 left 12:02 pmurias joined, p6bannerbot sets mode: +v pmurias
jnthn lizmat++ # nice :) 12:03
tbrowder__ ok, ref roast: it looks like samcv does the same kind of thing: i add my test generator to the appropriate dir (S26) as a manually executed file and version controlled. i execute it to generate the test file which is also version controlled. then all is static until something needs to be changed later.
i will follow that path unless there are objections 12:04
dogbert2 m: for ^10000 { 1.match(/1/) }; say now - INIT now 12:14
camelia 1.03046523
dogbert2 m: for ^10000 { "1".match(/1/) }; say now - INIT now
camelia 0.11576961
lizmat m: for ^10000 { 1.Str.match(/1/) }; say now - INIT now 12:16
camelia 0.1096311
nine finds it odd that we only have IO::Notification spec tests on macos when IO::Notification works just fine on Linux
lizmat nine: simple reason is that I've been the only one writing tests, and I'm on MacOS
nobody else has been writing tests 12:17
nine ah, that explains it of course :)
Geth rakudo: 88e6de226e | (Elizabeth Mattijsen)++ | src/core/array_operators.pm6
Ensure correct semantics for [Nil]
12:36
12:38 MasterDuke joined, p6bannerbot sets mode: +v MasterDuke
Geth roast: 0ace718b4a | (Elizabeth Mattijsen)++ | integration/advent2011-day23.t
Make sure result of test is not dependent on Nil

The resulting Array should contain Any as the first elements, not Nil. This worked because the Nil would be converted in the Array creation logic of circumfix:<[ ]> , but it shouldn't depend on that.
12:39
12:39 MasterDuke left, MasterDuke joined, herbert.freenode.net sets mode: +v MasterDuke, p6bannerbot sets mode: +v MasterDuke
Geth roast/6.c-errata: 2fa2ad50df | (Elizabeth Mattijsen)++ | integration/advent2011-day23.t
Make sure result of test is not dependent on Nil

The resulting Array should contain Any as the first elements, not Nil. This worked because the Nil would be converted in the Array creation logic of circumfix:<[ ]> , but it shouldn't depend on that.
12:40
12:44 Zoffix joined, p6bannerbot sets mode: +v Zoffix
Zoffix nine: does it work "just fine" tho? I recall trying to write a spec for it on Linux during IO grant and it was mostly broken. 12:44
nine Zoffix: have been using it in production for over a year now 12:45
Zoffix And I recall trying to use my notification-based restarter script on Windows without luck too (though I don't remember if it was notifications that were the problem or something else). 12:47
Some files are notified twice for a single change, on Linux.
lizmat Zoffix: that also happens on MacOS, fwiw 12:48
nine Zoffix: some details of what exactly we use: niner.name/blog/house_cleaning_with...index.html
Anyway it's good that you reminded me of that block post which has been sitting there for half a year now waiting to be published :/
Zoffix nine: even that tiny code contains an LTAness, from language design standpoint. Why is `.path` from notification is (apparently) a string rather than IO::Path 12:49
dogbert2 lizmat: the loop example above came from RT #131805 12:50
synopsebot RT#131805 [open]: rt.perl.org/Ticket/Display.html?id=131805 [REGRESSION] [PERF] .grep-ing Ints with a code block is now almost twice slower ( .grep({/foo/}) )
nine Zoffix: very true!
Zoffix This emits no notifications for me on Linux. Am I using it wrong? `perl6 -e 'start react whenever "foo".IO.watch { .say }; "foo".IO.open(:w); sleep 1'` 12:52
nine Can you try watching a directory? 12:53
Zoffix No output from this: perl6 -e 'start react whenever ".".IO.watch { .say }; "foo".IO.spurt: "42"; sleep 2'
lizmat fwiw, that doesn't do anything on MacOS either 12:54
nine From inotify(7): 12:55
Inotify monitoring is inode-based: when monitoring a file (but not when monitoring the directory containing a file), an event can be generated for activity on any link to the file (in the same or a different directory).
lizmat Zoffix: you're watching the file
but you change the dir with the open
MasterDuke m: sub f(Int $n) { return $n <= 1 ?? 1 !! f($n - 1) + f($n - 2); }; say f(35)
camelia 14930352 12:56
MasterDuke m: sub f(Int $n) { return $n <= 1 ?? 1 !! f($n - 1) + f($n - 2); }; say f(35); say now - INIT now
Zoffix With `react whenever "foo".IO.watch { .say };` running and in another terminal deleting an existing `foo` genned 3 notifications: FileChanged, FileRenamed, FileRenamed. Creating it again generated no notifications. Deleting again generated no notifications.
camelia 14930352
10.4532881
lizmat m: start react whenever ".".IO.watch { .say }; my $a = "zoffix".IO.open(:w); sleep 1 # FileRenamed
camelia ( no output )
MasterDuke m: sub f(Int $n) { $n <= 1 ?? 1 !! f($n - 1) + f($n - 2); }; say f(35); say now - INIT now
camelia 14930352
4.82992287
lizmat Zoffix: if you watch the dir, I *do* get nnotifications 12:57
MasterDuke ^^^ i didn't realize return was quite that expensive
Zoffix lizmat: this gens no notifications even tho I'm modifying file's contents: perl6 -e 'start react whenever "foo".IO.watch { .say }; "foo".IO.spurt: rand; sleep 2'
lizmat: this gives me no notifications: perl6 -e 'start react whenever ".".IO.watch { .say }; my $a = "zoffix".IO.open(:w); sleep 1'
Running inside a temp dir /tmp/tmp.h13QT28V4h
lizmat it does generate a FileRenamed for me on MacOS
nine Zoffix: since inotify is inode-based, watching a non-existing file cannot generate any events 12:58
It doesn't watch the path, it watches a file or directory pointed to by that path. Which one is determined when the watch is set
Zoffix nine: it exists the second time I run that code, but I still get no notifications
jnthn Zoffix: Doesn't a *different* (new) file exist, rather than the one that was being watched? 12:59
(Since it'd have a new inode number)
Zoffix jnthn: I dunno, does spurt delete the file?
$ perl6 -e 'start react whenever "foo".IO.watch { .say }; "foo".IO.spurt: rand, :append; sleep 2' 13:00
no output and in append mode.
jnthn Oh
If nothing else, that code is a race condition
Zoffix I also tried running the spurt in another program (without `start` on react in the first) 13:01
lizmat perhaps sleep a bit *before* spurting I guess :-)
jnthn But still, I think you'd need to watch the enclosing directory to see file creations. May be wrong, but that's my recollection of how this works.
Zoffix $ perl6 -e 'start react whenever "foo".IO.watch { .say }; sleep 1; "foo".IO.spurt: rand, :append; sleep 2' 13:02
/tmp/tmp.UoGxvUFDFi/foo: FileChanged
Well, I'll believe it works when I'll see a passing spec :)
lizmat fwiw, delivery of these notifications seems very dependent on load on the machine 13:03
so running it inside a spec test is probably the worst place to do it
Zoffix That was an error; was running spurt in wrong dir: <Zoffix> │ I also tried running the spurt in another program (without `start` on react in the first)
Also, is FileChanged/FileDeleted the only thing we can tell? Like, there's no FileCreated or anything? 13:05
Oh, there's like a gazillion events listed in `man inotify`
jnthn Zoffix: We're exposing what libuv provided at the time this was put in (some years ago), and nobody has worked on it since. I suspect it's maybe exposing a portable subset? When I looked at the area a bit, it all seemed pretty fraught and non-portable. 13:08
(If anyone has worked on it since, then sorry, I missed that. :))
13:10 AlexDaniel joined, p6bannerbot sets mode: +v AlexDaniel
Zoffix (for context of that question; last night I reverted some of the IO::Notification spec to not spec that file creation gives FileRenamed, etc event github.com/perl6/roast/commit/f349...d76eb4beca ) 13:10
jnthn hah, yes, git log of it shows that the only notable thing that happened since it was added was making it use UTF8-C8 encoding and a bug fix, and the rest was just keeping it up to date with overall MoarVM changes
I think docs.libuv.org/en/v1.x/fs_event.htm...v_fs_event is latest docs and the enum there still only has change and rename 13:12
13:18 Zoffix left
dogbert2 "All modern operating systems provide APIs to put watches on individual files or directories and be informed when the files are modified. libuv wraps common file change notification libraries [1]. This is one of the more inconsistent parts of libuv. File change notification systems are themselves extremely varied across platforms so getting everything working everywhere is difficult." 13:24
from nikhilm.github.io/uvbook/filesyste...l#fsnotify 13:25
Geth rakudo: 3d405e89d5 | (Elizabeth Mattijsen)++ | src/core/List.pm6
Make List.Array coercion about 1.5x as fast

By mostly removing code and use the new Array.from-list method that was created for [@a]. This removes the last use of nqp::assign from the core setting.
13:37
13:40 cognominal-p6 joined, p6bannerbot sets mode: +v cognominal-p6
MasterDuke is 'is cached' going away? 13:45
13:54 cognominal-p6 left, cognominal-p6 joined
lizmat MasterDuke: I would guess, yes 13:55
13:55 p6bannerbot sets mode: +v cognominal-p6
lizmat MasterDuke: now that we have at least one alternative in module space: modules.perl6.org/dist/Sub::Memoized 13:55
MasterDuke i thought i remembered something going on with it recently. but i don't remember why it's going away? 13:57
lizmat because we couldn't decide on the exact semantics, I think 13:58
MasterDuke hm, that's too bad. i remember thinking from very early on how nice it was having memoization built in to the language itself 13:59
jnthn I think a substantially overhauled form of it might live on 14:01
lizmat well, then you should fight for getting rid of the "experimental" tag
14:01 zohnex18 joined
jnthn experimental is right about the current implementation 14:02
But I think `is cached` on methods should store the memoization on the instance
14:02 p6bannerbot sets mode: +v zohnex18
jnthn Then you can write `method foo() is cached { ...expensive computation... }` for example 14:02
diakopter that's cool
14:03 zohnex18 left 14:25 MasterDuke left 14:33 MasterDuke joined, p6bannerbot sets mode: +v MasterDuke 14:34 MasterDuke left, MasterDuke joined, herbert.freenode.net sets mode: +v MasterDuke, p6bannerbot sets mode: +v MasterDuke 14:50 fake_space_whale joined 14:51 p6bannerbot sets mode: +v fake_space_whale
[Tux] So, the time-to-beat is 0.836: perl5.28.0 + Text::CSV_PP 15:05
m: say 1.662 / 0.836 15:06
camelia 1.988038
AlexDaniel uhhh that's a long way to go 15:07
but in like a year or two maybe? 15:08
timotimo perhaps we're just one good optimization of "next" away from reaching parity
15:35 robertle left
MasterDuke '<+Zoffix> Don't immediatelly see any logic in the optimizer for telling "this is a routine body and not a block/thunk body" so giving up on return elision right now [...]', anybody have an idea? 15:37
timotimo m: class test { method foo(|c) { say c.perl } }; test.new.foo(1, 2, 3) 15:44
camelia \(1, 2, 3)
timotimo if the capture also had the self in it, i'd totally suggest giving "is cached" an API like "is cached(*.Str)" for the simple case where stringifying the capture is enough 15:45
but the self would have to be put in there some other way
nine Now that I've got the structure in place, things become interesting. I need to compile all QAST nodes in order. But for some like QAST::Block we only gather the required information while compiling their children. 15:55
So either I introduce an information gathering pass, or I keep the current structure and compile the children first to a temporary bytecode buffer and append it later. 16:00
I'm leaning towards the latter for now as it ought to give me working code sooner. The changes are pretty intrusive already... 16:02
jnthn nine: Yeah, the traversal is a lot of late-bound dispatch, so I think one pass probably will win on performance also 16:18
16:27 adherzog16 joined 16:28 p6bannerbot sets mode: +v adherzog16 16:32 adherzog16 left 17:16 MasterDuke left 17:19 MasterDuke joined, p6bannerbot sets mode: +v MasterDuke, MasterDuke left, MasterDuke joined, herbert.freenode.net sets mode: +v MasterDuke, p6bannerbot sets mode: +v MasterDuke 17:28 wolfshappen12 joined 17:29 p6bannerbot sets mode: +v wolfshappen12 17:31 wolfshappen12 left 17:49 CoilDomain24 joined 17:50 p6bannerbot sets mode: +v CoilDomain24 17:56 CoilDomain24 left
Geth nqp: patzim++ created pull request #504:
Remove dead code.
18:48
18:58 dalek left, dalek joined, ChanServ sets mode: +v dalek 18:59 p6bannerbot sets mode: +v dalek
stmuk_ nige: new suggestion emailed! 19:00
19:03 ExtraCrispy joined, AlexDaniel left, AlexDaniel joined, p6bannerbot sets mode: +v AlexDaniel, p6bannerbot sets mode: +v ExtraCrispy 19:07 fake_space_whale left 19:17 UTAN_dev17 joined, p6bannerbot sets mode: +v UTAN_dev17 19:23 UTAN_dev17 left 19:46 hfp joined 19:49 hfp left
Geth rakudo: samcv++ created pull request #2330:
Add a BOM on open for utf16 filehandles
19:49
19:53 whfsdude26 joined 19:54 p6bannerbot sets mode: +v whfsdude26, whfsdude26 left
lizmat m: use Test; role A { }; isa-ok A.new, A # that seems wrong to me ? 20:01
camelia not ok 1 - The object is-a 'A'
# Failed test 'The object is-a 'A''
# at <tmp> line 1
# Actual type: A
lizmat surely a punned role should match ?
20:02 popeycore joined
lizmat m: role A { }; dd A.new.isa(A # underlying issue 20:03
camelia 5===SORRY!5=== Error while compiling <tmp>
Unable to parse expression in argument list; couldn't find final ')' (corresponding starter was at line 1)
at <tmp>:1
------> 3{ }; dd A.new.isa(A # underlying issue7⏏5<EOL>
lizmat m: role A { }; dd A.new.isa(A) # underlying issue
camelia Bool::False
20:08 popeycore left 20:09 Zoffix joined, p6bannerbot sets mode: +v Zoffix
Zoffix lizmat: yeah, that bit me once too. There's actually a separate `does-ok` test for testing roles 20:09
m: use Test; role A { }; does-ok A.new, A 20:10
camelia ok 1 - The object does role 'A'
20:10 pmurias left 20:11 AlexDaniel left, AlexDaniel joined, p6bannerbot sets mode: +v AlexDaniel, Zoffix left 20:12 AlexDaniel left, AlexDaniel joined, p6bannerbot sets mode: +v AlexDaniel
TimToady lizmat: you might be interested in playing with nopaste.linux-dev.org/?1185215 20:15
it's a .sum method that runs about twice as fast on Rats with limited precision (such as money) 20:16
lizmat TimToady: how would we recognize a List of Rats ? 20:18
Geth roast: 78df882612 | (Zoffix Znet)++ | S06-currying/assuming-and-mmd.t
[v6.d REVIEW] Test assuming args get passed in right order

Orig: github.com/perl6/roast/commit/cd4b22608
roast: e646ac88ff | (Zoffix Znet)++ | S06-currying/positional.t
[v6.d REVIEW] Remove pointless item coercers
20:19
TimToady lizmat: it doesn't, it just tests each one 20:21
an official list of Rats could omit the individual test
this one's written for a potentially mixed list
lizmat aaah... ok, get it now
TimToady and it still runs twice as fast if they actually are all money rats 20:22
it will probably run a hair slower for Nus
Nums
but maybe if we start seeing Num types we should just bomb out anyway to a pure Num loop
anyway, it's just a prototype, but I thought you might be interested in productizing it :) 20:23
lizmat oh, I'll productize it if you want me to :-)
TimToady I'd like that, so I can get back to thinking about parsers :) 20:24
Geth roast: cab940619e | (Zoffix Znet)++ | S02-names/is_default.t
[v6.d REVIEW] Throw out `undefine` tests on defaults

This routine is now deprecated.
Orig: github.com/perl6/roast/commit/ce1a5a2e6
patrickb Should this: `perl6 --output=foo.moarvm --target=mbc foo.p6 && moar --libpath=the-stuff-in-the-perl6-startup-script foo.moarvm` in principle work? 20:26
lizmat TimToady: I'll find time for it this Sunday, most likely 20:27
20:46 pmurias joined, p6bannerbot sets mode: +v pmurias, pmurias left
MasterDuke patrickb: i would have thought so 20:47
20:49 sontek5 joined, sontek5 left 20:51 pmurias joined, p6bannerbot sets mode: +v pmurias 20:52 pmurias left 20:56 pmurias joined, p6bannerbot sets mode: +v pmurias
patrickb I'm still thinking about relocatability. I think there must be some code at run time to determine the rakudo installation folder (and set config<prefix> and config<libdir>). Where should such code go when it's possible to run compiled user code directly? Is there some pre usercode region where stuff can be injected? 20:57
timotimo did people get timings for the fib benchmark? i'd expect we're noticeably worse than for example perl, since deep recursions are definitely not our strong suite.
20:59 damnlie_ joined
lizmat timotimo: what I've understood is that the base version achieves parity with Perl 5 for N = 35 21:00
so I guess it's worse for Perl 5 ?
21:00 p6bannerbot sets mode: +v damnlie_
timotimo the "base version"? 21:00
21:01 MasterDuke_ joined 21:02 KenOokamiHoro0 joined, aalm11 joined
lizmat sub fib($n) { $n <= 1 ?? 1 !! ... } 21:02
21:02 p6bannerbot sets mode: +v MasterDuke_, p6bannerbot sets mode: +v KenOokamiHoro0, p6bannerbot sets mode: +v aalm11
MasterDuke_ timotimo: Perl6 without return ran fib(45) in about 6s, with return in about 14s, perl 5 did it in about 8s (all on my system) 21:03
timotimo so perl6 is faster than perl5 in this? 21:04
lizmat yes 21:05
21:05 damnlie_ left, aalm11 left
MasterDuke_ whoops, fib(35) 21:05
timotimo but it's surely slower than the other languages in that set?
patrickb I think I need to read up on how the start up phase of perl6 works... is there some documentation about that? Some hint where to look first in the code? 21:06
timotimo i'd start in nqp's src/HLL/Compiler.nqp
21:06 KenOokamiHoro0 left
timotimo and also src/vm/moar/HLL/Backend.nqp 21:06
there's also a Perl6/Compiler.nqp inside rakudo's repository, which derives the HLL::Compiler class 21:07
21:07 ggoebel joined
MasterDuke_ timotimo: I haven’t timed it with fib(45) yet. of course I also don’t have an identical system 21:07
timotimo if you'd like a firehose of information on "where to look", you can set MVM_COVERAGE_LOG=/tmp/foo.txt and that will give you every line that has been hit in the order they were hit in - usually a single line will not be reported twice 21:08
21:08 p6bannerbot sets mode: +v ggoebel
MasterDuke_ I think now it does report them multiple times 21:09
ggoebel ...wondering if TimToady has another Programming Perl(6) book left in him? 21:12
21:12 pmurias left
patrickb timotimo: Thanks! I'll dig in... 21:13
timotimo oh, and there are, or at least used to be, some example compilers in nqp's repository, too 21:14
21:15 MasterDuke_ left 21:16 MasterDuke_ joined 21:17 p6bannerbot sets mode: +v MasterDuke_ 21:18 MasterDuke_ left 21:19 pmurias joined, p6bannerbot sets mode: +v pmurias 21:20 pmurias left 21:22 xaba joined 21:23 p6bannerbot sets mode: +v xaba 21:24 pmurias joined, p6bannerbot sets mode: +v pmurias 21:26 pmurias left 21:32 xaba left
Geth rakudo: 5f3579eb03 | (Elizabeth Mattijsen)++ | src/core/Mu.pm6
Fix false positives of role punning.isa(role)

Because the Str candidate would check names, it would create false positives. Fix this by converting the name to a type and then use the normal type check.
21:57
22:02 Caelum4 joined 22:03 p6bannerbot sets mode: +v Caelum4
lizmat sleep& 22:06
22:09 Caelum4 left 22:17 Kaiepi joined, p6bannerbot sets mode: +v Kaiepi
Geth roast: f1db285571 | (Nick Logan)++ | 9 files
Decrease search scope for some module lookups

Using `use "$roast-dir/foo"` instead of `use "$roast-dir"` saves a lot of useless directory recursion. This is important because we slurp/sha1 every file under a lib, which can become costly if there are many files/folders (especially if they have nothing to do with the module itself).
23:00
MasterDuke timotimo: fib(46) took 1290s on my machine for the no-return perl 6 version
Geth rakudo/cur-candidates: 643 commits pushed by 30 authors
review: github.com/rakudo/rakudo/compare/c...99d753c3d7
23:02
23:08 patrickb left 23:09 Guest48303 joined 23:10 p6bannerbot sets mode: +v Guest48303 23:11 Guest48303 left
Geth ¦ rakudo: tbrowder self-assigned allow some formatting in pod declarator blocks github.com/rakudo/rakudo/issues/2332 23:12
timotimo MasterDuke: did you run any of the other versions? 23:19
i mean from other languages
23:54 NinjaTrappeur16 joined
MasterDuke timotimo: perl 5 took 1737s 23:57
23:58 NinjaTrappeur16 left