Zoffix | AlexDaniel: haha, that looks super uncomforttable | 00:48 | |
AlexDaniel | Zoffix: better than staring outside :) | 00:49 | |
Zoffix: but yes, it is way more comfortable if you manage to find a seat | |||
timotimo | ugh, using syncthing on a git repository but ignoring the .git is also super bad :\ | 00:50 | |
Zoffix | wtf that `with` there was just to check for Failures, so it can be rewritten as nqp::istype(..., Failure) | 00:55 | |
s/wtf/FWIW/ | |||
timotimo | hm, but changing it to .defined is no functional change ... maybe it's fine to do the failure thing, though | ||
when we let undefined values through, we'll get an error from ==, though? | 00:56 | ||
m: Numeric == 1e5 | |||
camelia | WARNINGS for <tmp>: Useless use of "==" in expression "Numeric == 1e5" in sink context (line 1) Use of uninitialized value of type Numeric in numeric context in block <unit> at <tmp> line 1 |
||
AlexDaniel | “s/wtf/FWIW/” XD | ||
timotimo | not error, of course | ||
MasterDuke_ | does anyone have an opinion whether github.com/rakudo/rakudo/blob/nom/...#L705-L708 looks better than just `IntStr.new((my int $mode = nqp::stat($!abspath, nqp::const::STAT_PLATFORM_MODE) +& 0o7777), sprintf(q|%04o|, $mode))` | 00:58 | |
timotimo: `a` is already defined according to the signature. could `a.Numeric` ever be undefined? | 01:00 | ||
timotimo | sure | 01:03 | |
m: say "hello".Numeric | |||
camelia | Cannot convert string to number: base-10 number must begin with valid digits or '.' in '3⏏5hello' (indicated by ⏏) in block <unit> at <tmp> line 1 Actually thrown at: in block <unit> at <tmp> line 1 |
||
Zoffix | m: say defined "hello".Numeric | 01:04 | |
camelia | False | ||
Zoffix | m: say defined class { method Numeric { Int } }.Numeric | 01:05 | |
camelia | False | ||
MasterDuke_ | ugh, let's pretend i never asked that | ||
Zoffix | :D | ||
AlexDaniel: do you program Perl 6 on that laptop? | 01:06 | ||
MasterDuke_ | AlexDaniel: yeah, i was wondering if you were trying to start the next trend like planking. will it go viral, "the most awkward Perl6 programming situation challenge"? | 01:08 | |
timotimo | be like the dude who's gaffer-taped to the ceiling | 01:09 | |
AlexDaniel | Zoffix: yes | 01:13 | |
Zoffix | \o/ | 01:14 | |
AlexDaniel | MasterDuke_: that sounds pretty cool | 01:22 | |
BenGoldberg | I've got a silly question. I know in C, one can provide optimization hints with things like __builtin_expect(). Is there, or will there be, a way for perl6 users to provide optimization hints? | 01:38 | |
Not necessarily that specific hint, but in general... | |||
Zoffix | You already can with `is pure`; it means a sub can be constant-folded at compile time | 01:39 | |
And all the autothreaded stuff is a hint the compiler may use more then one thread to execute stuff (though ATM it's unimplemented) | 01:40 | ||
MasterDuke_ | is cached for memoization | 01:41 | |
AlexDaniel | m: sub foo($a) is pure { rand }; say foo(42); say foo(42) | 01:46 | |
camelia | 0.213078763462177 0.592591903192249 |
||
AlexDaniel | that's probably misuse :) | ||
Zoffix | m: sub foo($a) is pure { rand }; for ^3 { say foo(42) } | ||
camelia | 0.792531094789826 0.792531094789826 0.792531094789826 |
||
BenGoldberg | How valuable would it be for rakudo to be able to automatically transform something like this: multi sub foo(Bool $b) { if( SPECIALIZE($B) ) { return stuffiftrue() } else { return stuffiffalse() } } into multi sub foo(True) { stuffiftrue() }; multi sub foo(False) { stuffiffalse() } | ||
AlexDaniel | Zoffix: right, that's what it means | ||
right, right | |||
geekosaur thinsk more helpful would be boxing analysis.. which he would someday like to tackle | |||
BenGoldberg | m: sub foo($a) is pure { rand }; for ^3 { say foo(42) }; for ^3 { say foo(42) } | ||
camelia | 0.784828960315073 0.784828960315073 0.784828960315073 0.922750986110419 0.922750986110419 0.922750986110419 |
||
geekosaur scans back and wonders what Ashenzari has to do with anything :p | |||
I mean, currently I think you could do it for, say, a loop, but not over an entire sub | 01:50 | ||
MasterDuke_ | i think jnthn and timotimo have commented that (un)boxing had a lot of optimization potential | ||
geekosaur | it does, yes, which is why I'm interested. my two worries are the one I mentioned, and that I suspect brrt will have a heart attack >.> | 01:54 | |
(currently things generate code in place, which would need to change because later code might flip something that looks like an unboxing win into a lose) | 01:55 | ||
MasterDuke_ | geekosaur: i know nothing about boxing analysis, have you done it before? | 02:00 | |
geekosaur | not actively but in this case that's not much of a problem. I understand it reasonably well though | 02:01 | |
as long as we're not getting too jiggy with it e.g. there are cases where you might win from having both boxed and unboxed versions of something sitting around, trading space and update performance for read performance, but that gets rather more complicated | 02:02 | ||
MasterDuke_ | would it be added to spesh, the jit, or its own thing? | 02:03 | |
geekosaur | seems to me it works best as part of code gen, which si why my earlier comment | 02:04 | |
MasterDuke_ | ah, right | ||
geekosaur | rewriting the generated code after the fact like spesh would be possible, but loses optimization opportunities: if you do it at a higher level, you can unbox over most of a program | 02:05 | |
I think that's pretty impossible with the way code gen currently works thougjh | |||
so maybe the first version would go with spesh and be effectively peephole optimization | 02:06 | ||
MasterDuke_ | i'd take that | 02:10 | |
Zoffix | damn | 03:29 | |
perl6 -e "dd 'bar.txt'.IO.open(:w).lock(0x10 + 1)" throws on Linux, but not on Windows :/ | |||
Zoffix rewrites the tests to use suckier exceptions | 03:33 | ||
Seems X::IO::CannotLock + X::IO::Locked was too ambitious | 03:34 | ||
mst | hm? | ||
Zoffix | Well, I wanted to throw X::IO::CannotLock when the user asked for shared lock on fh opened in write, or exclusive for fh opened in read, but apparently on Windows that doesn't throw | 03:36 | |
(code for the nqp::lockfh op on MoarVM: github.com/MoarVM/MoarVM/blob/a844...#L303-L358 ) | |||
And X::IO::Locked for when asked for non-blocking lock and we couldn't get it | 03:37 | ||
mst | ok, but surely you could change it so win32 does throw? | 03:45 | |
Zoffix | Probably. | 03:46 | |
.... | 03:52 | ||
and .unlock on a non-locked handle doesn't throw on Linux but does throw on Windows -_- | 03:53 | ||
ZofBot: day of opposites | |||
ZofBot | Zoffix, } sub cmp-ok(Mu $got, $op, Mu $expected, $desc?) is export { | ||
Zoffix | Unlocking seeks stuff? Or is it just a copy-pastaed text in error: github.com/MoarVM/MoarVM/blob/a844...ile.c#L371 | ||
Zoffix assumes the latter | 03:54 | ||
mst | maybe github.com/baudehlo/node-fs-ext/bl.../fs-ext.cc is helpful? | 03:56 | |
Zoffix | I think so. | 04:04 | |
I don't know C tho :} | |||
mst | I only sort of know C | ||
Zoffix | huggable: locking :is: github.com/baudehlo/node-fs-ext/bl.../fs-ext.cc | ||
huggable | Zoffix, Added locking as github.com/baudehlo/node-fs-ext/bl.../fs-ext.cc | ||
mst | like, I can make things that compile and *then* segfault | ||
Zoffix | :) | ||
mst | whereas I'm actually good at perl, which is why I can write pure perl code that segfaults *while* compiling | 04:05 | |
Zoffix | heh | ||
"P6opaque: must compose X::Comp::AdHoc before allocating" ugghh what's its problem? gist.github.com/zoffixznet/3f01831...c58c6f226e | 04:13 | ||
BenGoldberg | X::Comp::AdHoc.^compose, maybe? | 04:18 | |
Zoffix | ? | ||
ah, OK. I forgot to change the .lock calls in core | 04:20 | ||
nope, not it | 04:24 | ||
god dammit | |||
Geth | nqp/uncurse: 211b0f2ba3 | (Pawel Murias)++ | src/vm/moar/profiler/template.html Fix bitrot in moarvm profiler |
04:31 | |
nqp/uncurse: 30a965887f | (Pawel Murias)++ | src/vm/js/Compiler.nqp [js] Stuff to fix nqp::p6initied |
|||
nqp/uncurse: 9063d0ec3f | TimToady++ | 2 files Merge branch 'master' into uncurse |
|||
rakudo/uncurse: 6 commits pushed by (Elizabeth Mattijsen)++, (Timo Paulssen)++, TimToady++ | 04:32 | ||
Zoffix | it was due to has $.os-error; in the class; which is also present in the inherited-from X::IO | 04:50 | |
TimToady | Zoffix: lemme know when you're in a state that I can merge uncurse, cuz I'm now thinking it would better to get it into this release so we don't risk divergent nqp bootstraps (and to get the 1-2% performance boost) | 04:53 | |
and it does seem fairly stable | 04:54 | ||
and it doesn't seem to be interfering with where you're working so far | |||
Zoffix | TimToady: merge away :) | 04:55 | |
TimToady | ookay | ||
Geth | nqp/master: 17 commits pushed by TimToady++, (Jonathan Worthington)++ review: github.com/perl6/nqp/compare/30a96...9063d0ec3f |
04:58 | |
rakudo/nom: 20 commits pushed by TimToady++ review: github.com/rakudo/rakudo/compare/e...b7c036c082 |
|||
¦ rakudo/nom: version bump brought these changes: github.com/perl6/nqp/compare/2017....1-g9063d0e | |||
TimToady | done | 04:59 | |
I just had visions of someone using the next Rakudo Star 3 months from now and depending on old Cursor/Match stuff... | 05:00 | ||
plus, lets me un-todo a test :) | 05:02 | ||
Zoffix | \o/ | ||
m: dd Q:b:s|\$fh| | 05:06 | ||
camelia | 5===SORRY!5=== Error while compiling <tmp> Variable '$fh' is not declared at <tmp>:1 ------> 3dd Q:b:s|\7⏏5$fh| |
||
Zoffix | :b doesn't enable backslashing of stuff like that? | ||
TimToady | nope, just the usual suspects | ||
though arguably adding :s should add a backslasher for $ | 05:07 | ||
m: say Cursor.WHAT | 05:10 | ||
camelia | (Cursor) | ||
TimToady | m: say Cursor.WHAT | ||
camelia | (Match) | ||
TimToady | Cursor is now just an alias to Match | 05:11 | |
Zoffix | m: my $fh = 42; put q:s|$fh| | 05:13 | |
camelia | 42 | ||
Zoffix | m: my $fh = 42; put q:s|\$fh| | ||
camelia | \$fh | ||
Geth | roast: 6db316eaae | TimToady++ | S05-match/perl.t now pass two Match.perl roundtripping tests |
05:16 | |
roast: 4194755c19 | (Zoffix Znet)++ | S32-io/lock.t [io grant] Test IO::Handle.lock/.unlock |
05:39 | ||
rakudo/nom: 214198bfb2 | (Zoffix Znet)++ | 5 files [io grant] Implement proper args for IO::Handle.lock |
|||
chatter29 | hey guys | 05:50 | |
allah is doing | |||
sun is not doing allah is doing | |||
to accept Islam say that i bear witness that there is no deity worthy of worship except Allah and Muhammad peace be upon him is his slave and messenger | |||
Zoffix | No way! The Flying Spaghetti Monster is our true saviour! | 05:52 | |
Zoffix starts a holy war | |||
Yey! I won. | 05:58 | ||
ZOFFLOP: t/spec/S17-promise/nonblocking-await.t | 06:00 | ||
Geth | rakudo/nom: 9a2446c94f | (Zoffix Znet)++ | src/core/IO/Path.pm [io grant] Move Bool return value to signature As I recall a recentish commit doing the same elsehwere went it, with the reasoning that the signature return is a bit faster. |
06:01 | |
Zoffix | ZOFVM: Files=1241, Tests=133735, 111 wallclock secs (22.32 usr 3.29 sys + 2308.44 cusr 144.68 csys = 2478.73 CPU) | 06:20 | |
m: 'foo' ~~ /(.)/; say so $0 | 06:31 | ||
camelia | 1 | ||
Zoffix | bisect: 'foo' ~~ /(.)/; say so $0 | ||
bisectable6 | Zoffix, Bisecting by output (old=2015.12 new=9a2446c) because on both starting points the exit code is 0 | ||
Zoffix | bisect: 'foo' ~~ /(.)/; say $0.^name | 06:32 | |
bisectable6 | Zoffix, bisect log: gist.github.com/88d99014caf30866f5...704aff2cf8 | ||
Zoffix, There are 20 candidates for the first “new” revision. See the log for more details | |||
Zoffix, On both starting points (old=2015.12 new=9a2446c) the exit code is 0 and the output is identical as well | |||
Zoffix, Output on both points: «Match» | |||
Zoffix | m: 'foo' ~~ /(.)/; say $0.^name | ||
camelia | Match | ||
Zoffix | s: do { 'foo' ~~ /(.)/; $0 }, 'Bool', \() | ||
SourceBaby | Zoffix, Something's wrong: ERR: No such method 'cando' for invocant of type 'NQPRoutine' in block at /home/zoffix/services/lib/CoreHackers-Sourcery/lib/CoreHackers/Sourcery.pm6 (CoreHackers::Sourcery) line 26 in sub sourcery at /home/zoffix/services/lib/CoreHackers-Sourcery/lib/CoreHackers/Sourcery.pm6 (CoreHackers::Sourcery) line 29 in block <unit> at -e line 6 | ||
Zoffix | s: Match.new, ' | 06:33 | |
SourceBaby | Zoffix, Something's wrong: ERR: ===SORRY!=== Error while compiling -eUnable to parse expression in single quotes; couldn't find final "'" at -e:7------> <BOL><HERE><EOL> expecting any of: single quotes term | ||
[Tux] | This is Rakudo version 2017.03-285-g9a2446c94 built on MoarVM version 2017.03-138-g40881cdb | ||
csv-ip5xs 3.048 | |||
test 12.503 | |||
test-t 5.120 - 5.144 | |||
csv-parser 13.154 | |||
Zoffix | s: Match.new, 'Bool', \() | ||
SourceBaby | Zoffix, Something's wrong: ERR: No such method 'cando' for invocant of type 'NQPRoutine' in block at /home/zoffix/services/lib/CoreHackers-Sourcery/lib/CoreHackers/Sourcery.pm6 (CoreHackers::Sourcery) line 26 in sub sourcery at /home/zoffix/services/lib/CoreHackers-Sourcery/lib/CoreHackers/Sourcery.pm6 (CoreHackers::Sourcery) line 29 in block <unit> at -e line 6 | ||
Zoffix | m: Match.new.Bool.say | 06:34 | |
camelia | 1 | ||
Zoffix | wonder where NQPMatchRole is at | 06:39 | |
Ah, just needed to pull nqp | |||
k, got a fix lined up | 06:40 | ||
Geth | rakudo/nom: 88140bbedf | (Zoffix Znet)++ | src/core/Match.pm Fix Match.Bool Return a proper Bool instead of an Int |
06:53 | |
roast: 35402f654d | (Zoffix Znet)++ | S05-match/capturing-contexts.t Test return value of Match.Bool |
|||
Zoffix | That fixes Pod::To::HTML test breakage | ||
lizmat | Files=1191, Tests=56732, 197 wallclock secs (11.95 usr 4.68 sys + 1167.88 cusr 113.64 csys = 1298.15 CPU) | 07:38 | |
timotimo | geekosaur: not sure how much it'd be worth to do boxing/unboxing analysis at code gen time, because we don't inline very much at that stage | 10:06 | |
geekosaur: spesh already has a thing where every version of every local has a "writer" set on it, that you can follow back to find the source of a value, which can for example be a boxing call | 10:07 | ||
Zoffix | Thinking of keeping IO::Path.child as is. Tons of ecosystem usage. Forcing it to resolve is both much slower and potentally throwy if code was written not expecting the path to be resolvable when child is called. Also, the "secure" aspect of it is kinda weak, if you consider the code can be executed by older perl6 and silently become unsecure. Adding an arg to force securiness also isn't a great option, | 10:31 | |
since on older compilers it'll be again, silently ignored. So feels like using a new method name and putting `.child` through some deprecation cycle (deprecate in 6.d, remove in 6.e) is the best cource of action. Too bad its name is pretty perfect. | |||
timotimo | in 6.f we will then deprecate the new name, reinstate the old name ... | 10:32 | |
Zoffix | :) | ||
"/user/files/".IO.contain($user-input) | 10:33 | ||
Decent enough name, but is 1-char away from a bug since IO::Path is Cool | |||
timotimo | uuh | ||
Zoffix goes for a nap, to sleep on it | |||
timotimo | have a good one! | 10:34 | |
Zoffix | Well, dispite me joking about it in the upgrade notice, I'm gonna go with .child-secure | 13:30 | |
timotimo | Zoffix: do you recall the other pastebin services that let you eval perl6 code? besides glot.io? | ||
Zoffix | In all the other path methods we don't really resolve the bits (well, other than .resolve, but even then you need to give it an arg) | 13:31 | |
huggable: glot.io | |||
huggable | Zoffix, Run Perl 6 in your browser: tio.run/nexus/perl6 or glot.io | ||
timotimo | yeah, that's the one i remember | ||
oh, tio.run, that's new to me | |||
Zoffix | And the -secure in the name will let the reader pay more attention to the code and not modify it to something insecure willi-nilly | 13:32 | |
timotimo | github.com/hankache/perl6intro/issues/146 - this is why i ask | ||
Zoffix | So we'll have: .child, .child-secure that's like child, but fully resolves the path and ensures it is indeed the child, and .concat-with that's like .child but lets the "child" be a parent path. In rakudo, .concat-with and .child are basically aliases, but as far as the language goes, giving parent paths to .child is undefined behaviour and giving them to .child-secure will make it fail | 13:33 | |
Or I guess .concat-with and .child will indeed be even specced as aliases. Otherwise, it'll be not recommended to use .child, unless you 100% know it's a child path, which is LTA. | 13:39 | ||
Why aliases and not just .child? Because .child("../foo") reads stupid | |||
nine | Why not $path.sub('foo')? | 13:57 | |
Zoffix | Feel a bit confusing, since we have `sub` as a term that means subroutines. But why not for which of the three? .child? | 14:00 | |
timotimo | rt.perl.org/Ticket/Display.html?id=129779 - i just closed this bug; it was the performance bug that we tested yesterday | 14:01 | |
thanks to all of y'all for the help with it | |||
Zoffix | 'cause .child's ship has sailed, I think. There's like 185 uses in ecosystem alone. Removing it for sake of renaming is too much breakage and IMO the name's pretty good ( .sub("../foo") reads weird to me just as child... though even more so, 'cause my brain switches to "subroutines here" thinking when hearing sub) | 14:03 | |
.concat-with is a bit long to type | 14:04 | ||
.oO( .with ) |
|||
timotimo | there's a python module that repurposes the / operator for path concat | ||
Zoffix | :o | ||
timotimo | so why not .slash :) | 14:05 | |
Zoffix | entirely meaningless name | 14:06 | |
m: say '.concat-with'.chars - '.slash'.chars | 14:07 | ||
camelia | 6 | ||
Zoffix | "foo".IO.with("../bar") | ||
$stuff.IO.with($moar-stuff) | 14:08 | ||
m: say '.concat-with'.chars - '.with'.chars | |||
camelia | 7 | ||
timotimo | just "with" is already something else | ||
Zoffix | OK | 14:09 | |
nine | add? | 14:25 | |
.append() would probably be as descriptive and accurate as you can get | 14:26 | ||
OTOH "appending" is exactly what the current .child does :/ | 14:28 | ||
Zoffix | I like .add | 14:31 | |
m: say "foo".IO.append: "../bar" | |||
camelia | Cannot resolve caller append(IO::Path: Str); none of these signatures match: (Any:U \SELF: |values is raw) in block <unit> at <tmp> line 1 |
||
Zoffix | So.... rename .concat-with to .add. Yey or nah | 14:32 | |
yey from me :) | |||
nine | yey | ||
(I know, surprise, surprise) | 14:33 | ||
Geth | rakudo/cat-handle: 031aa33225 | (Zoffix Znet)++ | 4 files [io grant] Start sketching out IO::CatHandle Stashing this to finish post-release. Looking closer at IO::ArgFiles impl, IO::CatHandle will need a lot more polish than just renaming IO::ArgFiles and a lot more tests too. No point in including a rushed and poorly tested work in release. |
14:53 | |
Zoffix | ^ mostly 'cause I want IO::CatHandle to be mostly-usable with code that uses IO::Handle and IO::ArgFiles is far from being that. | 14:54 | |
nine | Zoffix: I don't understand the rush to get your IO work into this release anyway. | 14:55 | |
Zoffix | nine: I guess it's a carry over mentality from my promising to finish my grant by end of March and being totally late with that. Plus, end users won't see stuff that doesn't make it into this release for the next three months. | 14:57 | |
nine | They have lived with the current state of IO for years. | 14:58 | |
Zoffix | ¯\_(ツ)_/¯ | ||
nine | Also if you get all the goodies in now, we'll have fewer to show off in the next release :) | ||
Zoffix | heh | ||
nine | Oh my...WHAT? The object pulling in CompUnit::Repository::Staging's SC during serialize_repossessions appears to be an NQPRoutine called 'security'. | 15:30 | |
There's only one routine with that name in all of our code base. That's the part of Perl6::Grammar responsible for throwing an X::SecurityPolicy::Eval unless MONKEY-SEE-NO-EVAL is active | 15:31 | ||
What I also know is that there's not some reference to the repo, but one or more references to the serialization context where the Staging repo is in. | 15:46 | ||
I just realized: there's probably a valid workaround for this issue. The Staging repo is for when you want to precompile modules with an unpriviledged user in a staging area that is different from where the resulting files will be installed into. | 16:15 | ||
Because the unpriviledged user won't be allowed to write to /usr/share/perl6 directly. | |||
In other words: it's for when we create packages for distributions. Distributions however will do their own dependency tracking. They will compile the modules in depth first order of the dependency tree. | 16:16 | ||
geekosaur | you hope | 16:17 | |
nine | This means that we can be reasonably sure that the dist we are currently packaging won't contain modules that replace one of its dependencies' dependencies (by providing a newer version). | ||
Thus we can skip the dependency re-resolving on detecting a change in the repo chain (including the offending EVAL). | |||
geekosaur: they have to for all other languages. I'd say it's reasonable to assume they will use the same mechanism for Perl 6 packages. | 16:18 | ||
Anyway this workaround can be a strictly opt-in thing. The alternative being just biting the bullet and including the dependency on the Staging repo in the precomp file. This can be controlled by the same switch. | 16:21 | ||
timotimo | perl6 is quite nice to work with | 16:23 | |
nine | timotimo: noticed that, huh? :) | ||
timotimo | i don't use perl6 for stuff often enough :) | 16:24 | |
i work on internals most of the time instead :) | 16:25 | ||
nine | Yeah, I too have worked on Perl 6 much more than with Perl 6. Very much enjoyed the times when I was just a user :) | 16:26 | |
Zoffix | timotimo: what's your opinion on .concat-with being renamed to .add ? | 16:28 | |
timotimo | i think it's acceptable | ||
Zoffix | k | 16:29 | |
ugexe | too bad .subdir doesn't cover all its uses | 16:32 | |
nine | That's why I suggested .sub. But that may really be just too confusing. | 16:35 | |
ugexe | or we can draw on this old (unused) code/name github.com/rakudo/rakudo/blob/7556...try.pm#L24 (absolutify... absolutifies... ?) | 16:42 | |
although I guess the new functionality is only absolutifying it in spirit... it returns an IO::Path so it might be in relative form. doh | 16:43 | ||
geekosaur | tbh I think haskell's </> operator makes a bit more sense :) | 16:49 | |
ugexe | github.com/rakudo/rakudo/pull/465 # that was already shut down | 16:51 | |
timotimo | hm, do we have a good idiom for transposing a list of lists? | 16:52 | |
currently i wrote it all wordly-like as [@lol>>.[0], @lol>>.[1], ...] | 16:53 | ||
Zoffix | m: my @lol = (1, 2), (3, 4), (5, 6); dd [ @lol»[0], @lol»[1], ]; dd [Z] @lol | 16:55 | |
camelia | [(1, 3, 5), (2, 4, 6)] ((1, 3, 5), (2, 4, 6)).Seq |
||
timotimo | neat. | ||
Zoffix | m: my @lol = (1, 2), (3, 4), (5, 6); dd [ @lol»[0], @lol»[1], ]; dd roundrobin @lol».List | ||
camelia | [(1, 3, 5), (2, 4, 6)] ((1, 3, 5), (2, 4, 6)).Seq |
||
timotimo | i kind of wish i had more datapoints for building this graphing script | 17:21 | |
right now i have 2 | |||
oh, i have 4 actually | 17:22 | ||
or is that the 4 kinds | 17:24 | ||
.... ?!? | 17:26 | ||
i don't recognize this data at all m) | |||
Zoffix | m: constant %foo = foo => 2; dd %foo<foo> = 42; dd %foo | 17:39 | |
camelia | Cannot modify an immutable Int in block <unit> at <tmp> line 1 |
||
Zoffix | Immutable; good | ||
m: constant %foo = %(foo => 2); dd %foo<foo> = 42; dd %foo | |||
camelia | Int % = 42 Hash % = {:foo(42)} |
||
Zoffix | Not immutable; eh | ||
m: constant %foo = 'foo', 2; dd %foo<foo> = 42; dd %foo | |||
camelia | 5===SORRY!5=== Error while compiling <tmp> Type check failed in constant declaration of %foo; expected Associative but got List (List) at <tmp>:1 ------> 3constant %foo = 'foo', 27⏏5; dd %foo<foo> = 42; dd %foo |
||
Zoffix | don't work like that | ||
m: constant %foo = ('foo', 2).Hash; dd %foo<foo> = 42; dd %foo | |||
camelia | Int % = 42 Hash % = {:foo(42)} |
||
Zoffix | Seems no easy way to make a constant hash without specifying pairs instead of a list of stuff? | 17:40 | |
m: ('foo', 2).pairs.map({ dd .value = .value }) | 17:44 | ||
camelia | Cannot modify an immutable Str in block <unit> at <tmp> line 1 |
||
Zoffix | Immutable Str?? | ||
Oh nevermind, wrong use of pairs | |||
Ah, there is | 17:46 | ||
m: constant %foo = Map.new: 'foo', 2; dd %foo<foo> = 42; dd %foo | |||
camelia | Cannot modify an immutable Int in block <unit> at <tmp> line 1 |
||
Zoffix | m: constant %foo = Map.new: 'foo', 2; dd %foo | ||
camelia | Map.new((:foo(2))) | ||
Zoffix | uh | 17:52 | |
m: constant %foo = Map.new: <foo 2>; dd %foo<foo> = 42; dd %foo | |||
camelia | Int <element> = 42 Map.new((:foo(42))) |
||
Zoffix | But not in this form :S wtf | ||
s: Map, 'new', \(<foo bar>) | 17:54 | ||
SourceBaby | Zoffix, Sauce is at github.com/rakudo/rakudo/blob/8814...Map.pm#L11 | ||
Zoffix | s: Map, 'new', \(|<foo bar>) | ||
SourceBaby | Zoffix, Sauce is at github.com/rakudo/rakudo/blob/8814...Map.pm#L11 | ||
Zoffix | m: dd Map.new(<foo bar>)<foo> = 42 | ||
camelia | Int <element> = 42 | ||
Zoffix | m: dd Map.new(|<foo bar>)<foo> = 42 | 17:55 | |
camelia | Cannot modify an immutable Str in block <unit> at <tmp> line 1 |
||
Zoffix | Seems to do with how slurpies are made | 17:56 | |
m: sub foo (*@foo) { dd @foo[1] = 42 }; foo <foo bar>; foo |<foo bar>; | |||
camelia | 42 Cannot modify an immutable Str in sub foo at <tmp> line 1 in block <unit> at <tmp> line 1 |
||
Zoffix | Seems to be part of rt.perl.org/Ticket/Display.html?id...et-history | ||
timotimo | fantastic. i get 4 datapoints for every kind X file ... and only three have non-constant values in 'em | 17:58 | |
Zoffix | Added the Map thing in a comment: rt.perl.org/Ticket/Display.html?id...xn-1456934 | 17:59 | |
Geth | rakudo/nom: 51e462925a | (Zoffix Znet)++ | src/core/IO/Path.pm [io grant] Amend rules for last part in IO::Path.resolve Allow last part of path to not exist when using .resolve: :completely; The resolution is still successful, and this lets us .resolve(:completely) paths that we're about to create. |
18:52 | |
roast: a716962791 | (Zoffix Znet)++ | S32-io/io-path.t [io grant] Amend rules for last part in IO::Path.resolve Allow last part of path to not exist when using .resolve: :completely; The resolution is still successful, and this lets us .resolve(:completely) paths that we're about to create. |
|||
rakudo/nom: b8458d34ae | (Zoffix Znet)++ | src/core/IO/Path.pm [io grant] Reword `method child` for cleaner code |
18:56 | ||
rakudo/nom: 1887114dd8 | (Zoffix Znet)++ | 2 files [io grant] Implement IO::Path.child-secure The original plan to make .child() resolve and check for secureness was changed to leave .child() as is and implement .child-secure instead There is a lot of ecosystem usage of .child(), and there's no real path for changing it, since the proposed .concat-with() is not available ... (10 more lines) |
19:01 | ||
Zoffix | More eyes on securiness of .child-secure's code welcome :) | 19:02 | |
Geth | roast: f3c5dae288 | (Zoffix Znet)++ | 2 files [io grant] Test IO::Path.child-secure Also add a nul byte test to IO::Path.child. |
19:03 | |
pmurias | has nqp-j been correctly rebootstrapped after the adding of constant support in the uncurse branch? | 19:26 | |
lizmat | m: my @a = [1,1],[2,2],[3,3]; dd @a; @a.splice: 0, 2, $[4,4]; dd @a # feels like a bug that the containerization of [4,4] is being ignored | 19:42 | |
camelia | Array @a = [[1, 1], [2, 2], [3, 3]] Array @a = [4, 4, [3, 3]] |
||
pmurias | hmm, how do I update the stage0 for the jvm backend? | 19:45 | |
timotimo | "make bootstrap-files-j" i think? | ||
jnthn | lizmat: Yeah, it's because there's a candidate with @new at the end that it binds to, decontainerizing it in the process. | 19:49 | |
So it's not actually hitting the slurpy at all | |||
lizmat | so you agree it's wrong atm | ||
jnthn | The slurpy is **@foo | ||
So in fact if it *was* hitting the slurpy it would be behaving right :) | |||
Yeah, it's wrong to discard the itemization | 19:50 | ||
lizmat | ok, so we are in agreement | ||
jnthn | I wonder if it was untested and then accidentally regressed when splice was optimized by breaking it out into a bunch of candidates | ||
lizmat | will file a rakudobug | ||
jnthn | Since I seem to recall splice getting at least something of a look during the GLR | ||
And I can't imagine we settled on "it ignores itemization" :) | 19:51 | ||
lizmat | commitable: my @a = [1,1],[2,2],[3,3]; @a.splice: 0, 2, $[4,4]; dd @a | ||
committable6 | lizmat, ¦my: «Cannot find this revision (did you mean “all”?)» | ||
jnthn | bisectable6: my @a = [1,1],[2,2],[3,3]; @a.splice: 0, 2, $[4,4]; dd @a | ||
bisectable6 | jnthn, On both starting points (old=2015.12 new=1887114) the exit code is 0 and the output is identical as well | ||
jnthn, Output on both points: «Array @a = [4, 4, [3, 3]]» | |||
lizmat | ah | ||
jnthn | Hm, nope | ||
It's been like that since Christmas | |||
lizmat | ok, doesn't make it right, though :-) | ||
jnthn | Indeed | ||
lizmat | but will wait for the release to look at fixing it | 19:52 | |
jnthn | *nod* | ||
Zoffix | jnthn: FWIW, I think it's safe to release MoarVM. I'll be doing the nqp::stat thing after release. | 19:56 | |
And I'm pretty much done with pre-release stuff for rakudo. Just need to fix this resolve stuff with combiners issue and pretty much that is it | |||
lizmat | reported as RT #131162 | 19:57 | |
synopsebot6 | Link: rt.perl.org/rt3/Public/Bug/Display...?id=131162 | ||
lizmat | Zoffix: at this point we should probably settle for correct :-) | 20:02 | |
oops, wrongchan | 20:03 | ||
Zoffix | ZOFFLOP: t/spec/S17-promise/nonblocking-await.t | 20:52 | |
Geth | rakudo/nom: f6387a8459 | (Pawel Murias)++ | src/Perl6/Actions.nqp Stop using the no longer needed nqp::p6invokehandler Now that parrot is no longer supported we can just use the call op instead. |
20:55 | |
pmurias | (make spectest passed so hopefully this commit won't cause any trouble :) | 20:56 | |
Zoffix | ZOFVM: Files=1241, Tests=133747, 112 wallclock secs (22.25 usr 2.95 sys + 2329.40 cusr 129.38 csys = 2483.98 CPU) | 20:58 | |
Geth | rakudo/nom: 9d8e391f3b | (Zoffix Znet)++ | 3 files [io grant] Fix IO::Path.resolve with combiners; timotimo++ Stuff like "/\x[308]" is interpreted as a path separtor and a filename named as a combiner, when we try to create files. A naive split on '/' doesn't catch these separators however, so we implement heavier logic where we work with bytes, swap all the dir separators to nul bytes (that can't be in paths) and then split on nul bytes. This also fixes the issue in IO::Path.child-secure, where the path with a combiner is assumed to be a child, even when it isn't. |
21:01 | |
roast: 92217f75ce | (Zoffix Znet)++ | S32-io/io-path.t [io grant] Test IO::Path.child-secure with combiners |
|||
timotimo | \o/ | ||
jnthn | Zoffix: OK...I'll do it tomorrow, if that's OK? Bit tired for it today | 21:21 | |
Zoffix | jnthn: sure :) | ||
Geth | rakudo/nom: 0b5a41ba87 | (Zoffix Znet)++ | 9 files [io grant] Rename IO::Path.concat-with to .add Per discussion[^1], make the name shorter, so people are more willing to use it as an alias for .child when the path ain't a child path. [1] irclog.perlgeek.de/perl6-dev/2017-...i_14436165 |
21:26 | |
roast: 39677c4059 | (Zoffix Znet)++ | S32-io/io-path.t [io grant] IO::Path.concat-with got renamed to .add Rakudo impl: github.com/rakudo/rakudo/commit/0b5a41ba87 |
|||
Zoffix calls it a day as well :) | 21:27 | ||
\o | 21:28 | ||
timotimo | nite Zoffix! | 21:38 | |
MasterDuke_ | timotimo: if you're aren't completly busy making pretty coverage graphs, any more thoughts on sql profile output? i just pushed a commit to my branch that renames the `allocators` table to `types` and the `allocations.id` field to `allocations.type_id` | 22:17 | |
timotimo | ah, i like that | ||
i'm not sure i know where that branch lives | 22:18 | ||
MasterDuke_ | github.com/MasterDuke17/nqp/tree/m...put_better | 22:19 | |
timotimo | haha! i was looking for moarvm branches | ||
that doesn't make any sense, of course | |||
okay, so | 22:20 | ||
callees, right? | |||
it has a caller_id and an id | |||
i expect callees.caller_id to refer to callees.id | 22:21 | ||
but then how do i get from callees to the corresponding routine? | |||
also, allocations are also per-callees-entry, so we need a connection there, too | |||
MasterDuke_ | callees.(caller_)id = routines.id | 22:22 | |
yeah, i just saw that allocation <-> callee relationship in the newly-working-again regular profile | 22:24 | ||
timotimo | oh | ||
if both id fields in callees refer to routines, that's Bad | |||
or at least weird | 22:25 | ||
consider subs A and B both call X, and X calls Y | |||
er ... | 22:26 | ||
ah, yeah | |||
now Y exists twice at rec_depth 2, X exists twice at rec_depth 1, and Y just has X as its caller_id | 22:27 | ||
but imagine A and B pass an integer through X to Y and Y sleeps for that long | |||
how do we figure out which Y record belongs to A (sleeps for 10s) and which Y record belongs to B (sleeps for 1s) | |||
does that make sense? | 22:29 | ||
MasterDuke_ | yeah. i'm just pulling the info right from the same data structure the json output is without manipulating it. but it maybe it does need some manipulation or other stuff added to make sense as db rows | 22:31 | |
i guess it's losing some of the tree structure | 22:33 | ||
this would be to replicate the call graph section of the regular profile, right? | 22:37 | ||
timotimo | well, yeah | 22:45 | |
exactly | |||
the tree structure got flattened away because we didn't explicitly introduce a new "parent_id" field or something | 22:46 | ||
and i'd love for a new profiler data explorer to also be able to tell "this routine took 5s when called by A, but 10s when called by B" | |||
and much more importantly | |||
"bind_one_parameter" was called this often by those routines: A, B, C | 22:47 | ||
MasterDuke_ | yes, that would be nice | ||
timotimo | yes oh god yes | ||
MasterDuke_ | ugh, not thinking very fast today. need to add a unique id every time we see a caller id? | 22:52 | |
timotimo | hm, a caller_id? | ||
we're walking the tree, right? we should have a new unique ID every time we reach one call graph node, and every node we discover from there (i.e. in the children list or whatever we have) will have the id we just made up set for its "parent" | 22:53 | ||
MasterDuke_ | right. then the existing caller_id is just so we can look up its name in the routines table | 22:54 | |
timotimo | right | ||
MasterDuke_ | caller_id for new unique id, caller_name_id for what caller_id is now? | 22:57 | |
timotimo | well, we don't really need the id from the caller any more | 22:59 | |
so we'd get down to one field that references into the routines table | |||
MasterDuke_ | hm, guess so | 23:01 | |
timotimo | the last time i tried to put something like a unique id and a parent id in, the code absolutely wrecked my brain | ||
i'm really glad you're doing it for me :) | 23:02 | ||
Zoffix | good grief, htmlify.p6's code is a fucking mess | 23:05 | |
timotimo | hey, weren't you going to bed? ;) | ||
MasterDuke_ | heh. it | ||
timotimo | imgur.com/a/DKzJj - Zoffix, how do you like my graphs? | ||
Zoffix | Was trying to make it replace $COLON$COLON with :: in URLs for the past half hour.... | ||
MasterDuke_ | 's not like it doesn't take me lots of thinking and staring at the data over and over | ||
Zoffix | timotimo: pretty | 23:06 | |
timotimo | <3 | ||
MasterDuke_: yeah, the data is really not glancable | |||
geekosaur | Zoffix, that's actually a bad idea, the actual list of special chars permitted in a URL is fairly limited | 23:09 | |
Zoffix | m: dd ':'.ord.base: 16 | 23:13 | |
camelia | "3A" | ||
Zoffix | geekosaur: fine, replaced with %3A%3A | ||
timotimo | i think the reason why we have $COLON is because of filesystems? | ||
Zoffix | But looks like there are a dozen places that each call different routines and hunting them all down is a PITA | ||
timotimo | so maybe have a switch for served vs local docs? | 23:14 | |
Zoffix | timotimo: yes, and we have rewrite that makes docs.perl6.org/type/IO::Path URLs work, so there's no reason for our URLs to look idiotic with all the $COLON stuff in them | ||
timotimo | OK | 23:15 | |
Zoffix gives up | 23:18 | ||
samcv | well Zoffix i can fix the $COLON thing. but | 23:31 | |
we have to change the servers htacccess file | |||
because it redirects actual colons to $COLON | 23:32 | ||
so if we fix the build then it'll break the site cause it'll redirect to $COLON | |||
Zoffix | samcv: my idea was to keep the files with $COLON; this way the build will still work on Windows. But just change all the URLs in the html files to use :: instead of $COLONs | 23:36 | |
samcv: also, it shouldn't be redirecting but just rewriting... where are you seeing the redirects? | |||
I get only one requerst in Firefox | 23:37 | ||
And yes, there's a way to redirect $COLON urls to :: urls, but that's extra load on the server and extra useless request for suers | 23:38 | ||
*users | |||
samcv | uh maybe it rewrites it | 23:39 | |
it probably rewrites it tbh | |||
also we could always just uhm. only use $COLON on windows | |||
then the links in the files will be the same links that the files *actually* are named | 23:40 | ||
instead of requiring rewriting to even use the html files | |||
Zoffix | samcv++ good iead | ||
Zoffix does that | |||
samcv | we tried that before | 23:41 | |
but it had to be reverted | |||
should be a commit in the history if i look | |||
Zoffix | huh.. wonder why it was reverted | 23:42 | |
samcv | just gotta make sure the website tries to access :: files not $COLON$COLON | ||
Zoffix | Ah. OK. Yeah, that's just one line | ||
samcv | because when you access webpage::blah.html | ||
the server tries to give it the file at $COLEN$COLEN | |||
which does't exist! | |||
so reverted it | |||
github.com/perl6/doc/commit/331472...33b197c1b6 | 23:43 | ||
and this github.com/perl6/doc/commit/93db5f...0e0589ed26 | |||
timotimo | Qw⟅ ⟆; | 23:44 | |
that's baggy | |||
samcv | it quotes! | ||
they are allowed delimiters! | |||
timotimo | i know | ||
it looks very much like a bag | |||
is what i mean | |||
samcv | yeah they are S shaped bag delimiters | 23:46 | |
if we wanted to go crazy we could enable ⟅ ⟆ quoting to do bag( ) | |||
hahaha | |||
timotimo | make it a slang | 23:47 | |
samcv | Zoffix, you gonna add this too github.com/perl6/doc/commit/93db5f...0e0589ed26 | 23:49 | |
also note here that unix does have some badchars github.com/perl6/doc/commit/331472...5fdcb05R17 | |||
which is the '/' | |||
so you will need to make those changes i made to htmlifgy.p6 | |||
err lib/Pod/Htmlify.pm6 | 23:50 | ||
geekosaur | is there a way to switch it on/off regardless of system? I could see someone trying to do this on a unix into a mounted cifs... | ||
samcv | and the only reason it's not in htmlify.p6 is because it falsely triggers | ||
geekosaur | or ntfs fuse mount, etc. | ||
samcv | because directory names have a forward slash in them on linux | ||
but they need to be added into lib/Pod/Htmlify.pm6 | 23:51 | ||
or it won't change '/' into $SOLIDUS or whatever it does | 23:52 | ||
so hopefully you don't explode anything trying to write slashes to filenames | 23:53 | ||
:O | |||
cause that is not allowed | |||
it'll break | |||
i'll do it hold on | 23:54 |