»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg camelia perl6: ... | irclog: irc.perl6.org/ | UTF-8 is our friend!
Set by moritz on 3 May 2013.
diakopter nwc10: when was Java/Perl Lingo removed from perl? I want to find the most recent release with it 01:04
colomon so many netsplits I've lost all but the last two hours of backlog. :( 01:05
diakopter nm found it
labster flussence: I had given some thought to support path names like ~/.perl6 or ~labster/foo. Not sure what the interface should be, exactly, but I would like to see a working File::Homedir. 01:12
labster In the absence of functions like getpwnam being available, I guess we could just parse /etc/passwd. 01:13
labster But I probably will at least look into adding it to IO::Path. 01:14
diakopter labster: has anyone given you the thumbs-up to use NativeCall? 01:19
in IO::Path, I mean 01:20
labster Nope. The bigger problem is me not knowing how to use NativeCall, or really C at all. 01:40
lue You could maybe use the $HOME variable, at least on linux (esp. if someone decides to make ~ equal /dev/secretlair/ or somesuch) 02:20
sorear getpwnam is not the same as HOME 02:23
getpwnam gives you the initial value of $HOME (and several other fields) for *any* user
$HOME does not help you to expand ~bob/foo 02:24
and you can't just parse /etc/passwd in general. NIS...
TimToady sure, just go to $HOME/../$otherguy :D 02:26
lue Huh. I don't actually *have* getpwnam, it seems
sorear doesn't help if you have /home/l/larry or something like that
TimToady was a joke 02:27
lue like I said, $HOME env-var would be a better bet (unless that's not reliably available either)
flussence I wrote some code for a few p5 Buf formats, if anyone else wants them (I did): gist.github.com/flussence/5562165
colomon sorear: is there anything more involved in prepping the boot/run/Niecza.exe file other than just copying a working run/Niecza.exe there? 02:29
sorear colomon: yes, it's much more complicated than that 02:29
colomon: read the makefile rule "reboot" for the details. :)
oh right I changed this a bit 02:30
run make mknext
I usually do make mknext; cd next; make mknext; cd next; make spectest because I'm paranoid like that 02:31
colomon paranoid is good in this case, I think.
sorear after then make mkpackage, cd package, zip -9r ../niecza.zip *, upload to github, and change FETCH_URL
hi DreamingInCode. 02:32
colomon sorear++ 02:33
dalek c: ce25ff4 | (Ben Tyler)++ | lib/ (30 files):
Typo/spelling fixes, a few small wording changes.
02:36
sorear btyler++ 02:37
btyler glad to help :) 02:39
DreamingInCode Hi sorear ^_^ 02:56
shachaf sorear: If you're doing INTERCAL things maybe you should be in #esoteric! 04:37
Oh, you've been there before. Never mind. 04:44
moritz good morning 05:06
sorear good mornign moritz 05:12
moritz \o sorear 05:13
grondilu rn: say { foo => 'bar' }.classify: *.value 05:48
camelia niecza v24-49-gfa3b5ca: OUTPUT«Unhandled exception: Unable to resolve method classify in type Hash␤ at /tmp/C7AmREazZz line 1 (mainline @ 9) ␤ at /home/p6eval/niecza/lib/CORE.setting line 4327 (ANON @ 3) ␤ at /home/p6eval/niecza/lib/CORE.setting line 4328 (module-CORE @ 582) ␤ at /h…
..rakudo 06eddc: OUTPUT«("bar" => ["foo" => "bar"]).hash␤»
FROGGS flussence++ # unpack 07:36
flussence: do you have a pack sub too? 07:40
dalek kudo/nom: 738531a | (Brent Laabs)++ | src/core/IO/Spec/Unix.pm:
fix jnthn++'s report of infinite recursion in IO::Spec::Unix.rel2abs
07:46
kudo/nom: 2a04f23 | (Brent Laabs)++ | src/core/IO/Spec/Unix.pm:
Merge pull request #137 from labster/nom

fix jnthn++'s report of infinite recursion in IO::Spec::Unix.rel2abs
labster well, I hope it fixes it anyway, since it's only a bug on Windows, and I'm not running it. 07:48
ah, well, morning #perl6 o/ 07:50
sorear o/
FROGGS hi labster, sorear 07:58
labster: have you seen this? github.com/perlpilot/p6-File-Temp/...les#diff-0
labster nope, haven't seen it. 07:59
If they're on rakudo, they should just use $*TMPDIR 08:00
Yeah, I think I'll add that to the spec.
labster actually, sorear, how hard would it be for me to add the filespec code to niecza? It's all Perl 6 code, with only one tiny parrot call (to get the $*OS). 08:01
sorear labster: you might want to look at the stuff that's already there, in particular IO.combine 08:11
n: say IO.combine("foo","bar")
camelia niecza v24-49-gfa3b5ca: OUTPUT«"foo/bar".IO␤»
labster Oh, neat!
sorear does p6 have official filespecs now?
niecza's filespec stuff was added for the compiler's own path-searching benefit, it's surely prespec 08:12
labster Well, it's not entirely official, since I wrote most of it, but I think it's somewhat fairly sane. 08:13
sorear also the niecza stuff is a wrapper over the .NET filespec code
labster The main approach for me was just to import File::Spec because something needed to the do the underlying operations for IO::Path, and it so it got added as IO::Spec. 08:14
Sounds like you're using the .NET stuff. Which might be good and fairly fast. I'd still like to expose the underlying operations, because someone will want them. 08:15
The other inspiration was Path::Class, so I tried to replicate as much of that as possible. Anyway, the basic idea is in S32::IO, if you want to take a look, sorear. It might be useful to have the perspective from another VM. 08:18
lizmat hello #perl6! 10:07
FROGGS hi lizmat 10:08
FROGGS lizmat: btw, if you want to make the adverbs for statement_control:use work, have a look at that: github.com/rakudo-p5/v5/blob/maste...kudo.patch 10:09
most of these changes are for the adverbs in general 10:10
but only :file and :from are handled
:name should be pretty easy though
lizmat hmmm… do you have plans to merge this into nom any time soon? 10:11
jnthn Good afty o/ 10:23
lizmat jnthn!
dagurval r: sub a { return "a", "b"; }; my $c = a(); $c.perl.say; 10:27
camelia rakudo 2a04f2: OUTPUT«$("a", "b")␤»
dagurval I want $c to contain only "a", is this possible?
lizmat r: sub a { return "a", "b"; }; my $c = a.key; $c.perl.say;
camelia rakudo 2a04f2: OUTPUT«No such method 'key' for invocant of type 'Parcel'␤ in block at /tmp/KlAmV0aQoY:1␤␤»
lizmat r: sub a { return "a", "b"; }; my $c = a[0]; $c.perl.say; 10:28
camelia rakudo 2a04f2: OUTPUT«"a"␤»
lizmat r: sub a { return "a", "b"; }; say a.WHAT;
camelia rakudo 2a04f2: OUTPUT«(Parcel)␤»
lizmat dagurval: is that an answer?
dagurval lizmat: not really, I was looking for something more like p5 wantarray 10:29
r: sub a { return "a", "b"; }; my ($c) = a(); $c.perl.say;
camelia rakudo 2a04f2: OUTPUT«"a"␤»
lizmat S08:212 states: "Context deferral is actually the reason why Perl 6 no longer supports the "wantarray" operator, nor does it provide any substitute. The way 10:31
you should implement wantarray-like behavior is by properly overriding the coercion for each context. The Contextual::Return module is an implementation of that concept in Perl 5."
hence, no wantarray in Perl 6
FROGGS: it appears dissect_longname is indeed extracting pairs from "Foo:name<Bar>:auth<cpan:JRANDOM>:ver<1.0>", but not from the shorthand notatation "Foo:<Bar cpan:JRANDOM 1.0>" 10:36
dalek kudo/jvm-support: 37c7620 | (Tobias Leich)++ | src/core/Cursor.pm:
dont't treat array references as arrays in regexes

They will be stringified instead, and must be dereferenced to be arrayish.
jnthn Merge heuristic fail... :) 10:36
tadzik :) 10:37
dalek p/rak-jvm-support: 48e5dfa | (Brent Laabs)++ | src/vm/parrot/QAST/Operations.nqp:
add missing constants STAT_UID, STAT_GID, STAT_ISLNK
10:40
p/rak-jvm-support: cb2aa86 | jonathan++ | src/vm/parrot/QAST/Operations.nqp:
Merge pull request #98 from labster/master

add missing constants STAT_UID, STAT_GID, STAT_ISLNK
p/rak-jvm-support: ba3cdf2 | jnthn++ | src/vm/parrot/QAST/Operations.nqp:
Merge branch 'master' into rak-jvm-support
jnthn There's both of my branches caught up :)
lizmat I guess the shorthand notation can be NYI while the rest gets implemented :-) 10:47
lizmat r: class Foo:auth<JRANDOM> {}; class Foo {} 11:03
camelia rakudo 2a04f2: OUTPUT«===SORRY!===␤Redeclaration of symbol Foo␤at /tmp/dMz7pitoX4:1␤------> class Foo:auth<JRANDOM> {}; class Foo ⏏{}␤ expecting any of:␤ statement list␤ horizontal whitespace␤ postfix␤ statement end␤ …
lizmat I'm assuming that this should *not* cause a redeclaration error, or should it?
because "class Foo {}" is equivalent to "class Foo:auth<(Any)>", right? 11:05
jnthn I think it may be a re-decl error in so far as declaring Foo:auth<JRANDOM> installs an alias Foo so you can talk about it conveniently. 11:06
lizmat but if these classes would be in 2 different files, loaded with "use", they wouldn't clash? 11:07
or would you really have to say "use Bar:name<Foo>" ?
jnthn Good question :) 11:08
jnthn didn't read The Specs recently enough on this stuff. 11:09
Provided they actually have an answer...
lizmat I'm not sure the specs are clear enough on that… will check again
lizmat I guess S11:355 contains the spec 11:22
"Modules posted to CPAN or entered into any standard Perl 6 library are required to declare their full name so that installations can know where to keep them, such that multiple versions by different authors can coexist, all of them available to any installed version of Perl." 11:23
I guess this is not true for current modules in core or in panda 11:24
FROGGS lizmat: about the shorthand version: you are right, one would have to parse that properly, but I think this can wait until the normal pair-syntax works 11:25
the major problem with :auth and :name is how to actually do the ax-/importing 11:26
ex*
lizmat indeed 11:27
:-)
FROGGS if you have an A.pm, which contains class A::B too, then use A:name('A::B') might work well (and would actually make sense)
lizmat well that would be a redeclaration error, I would think 11:28
FROGGS jnthn: (v5) btw, subroutine runtime check seems to work, as well as giving subs an implicit 'is export' trait when a script gets require-d 11:29
now I just have to do the import :/
lizmat: why?
lizmat because I assume A.pm also contains a "class A {}" 11:30
FROGGS use A just locales the file, and will then try to import the symbol A
lizmat right
FROGGS but if you give it another name, it will locale file A.pm and will import the symbols by the given name (A::B)
lizmat and then when you're trying to do the same with class A::B inside A.pm, to be aliased to A, it will class with the A already imported 11:31
FROGGS why aliased to A? 11:32
r: need Test;
camelia rakudo 2a04f2: ( no output )
lizmat that's what "use Foo:name<Bar>" does, alias class Bar to Foo in the current lexical context
FROGGS r: need Test; import Test
camelia rakudo 2a04f2: ( no output )
FROGGS r: need Test; import Test::Something
camelia rakudo 2a04f2: OUTPUT«===SORRY!===␤Could not find module Test::Something to import symbols from␤at /tmp/rYYbyr1HFO:1␤------> need Test; import Test::Something⏏<EOL>␤ expecting any of:␤ statement list␤»
FROGGS hmmm, okay 11:33
looks like I missed that part :o)
FROGGS then I think it is the other way around, it will do 'need Bar' instead of Foo, right? 11:34
but still making the alias...
lizmat checks up on "need"
FROGGS loading without importing 11:35
lizmat indeed: oddly enough no mention of :auth etc. there
I assume that would be needed there as well
r: need Test:auth<cpan:Perl> 11:37
camelia rakudo 2a04f2: OUTPUT«===SORRY!===␤Could not find Test:auth<cpan:Perl> in any of: /home/p6eval/nom-inst/lib/parrot/5.2.0-devel/languages/perl6/site/lib, /home/p6eval/nom-inst/lib/parrot/5.2.0-devel/languages/perl6/vendor/lib, /home/p6eval/nom-inst/lib/parrot/5.2.0-devel/languages/perl6/…
FROGGS maybe we should parts of my patch within the next days if you wanna go ahead 11:38
lizmat *merge I assume? 11:39
perhaps….
FROGGS apply*
lizmat I want to prevent merge conflicts later, I hate merge conflicts
FROGGS I'll prepare a patch today and ask jnthn for his ok then 11:40
nwc10 jnthn++ # parsing 100% of the setting (even if there is some cheating currently) 11:42
lizmat did I miss the 100% announcement? 11:43
jnthn It's not quite 100% parse yet 11:44
The IO bits are missing
I'm gonna #?if parrot ... a bunch of that though
So we get the subs/type declarations so the parser doesn't explode at the end over unexplained mysteries.
nwc10 I saw a number that looked suspiciously like 13000 lines. 11:48
jnthn Well, the real total is a bit over 13,000. But yeah, we parse 12500 or so by now. 11:55
nwc10 blog.headius.com/2013/05/on-languag...d-way.html -- curious that he says "Python has similar structural complexities to Ruby and adds in the additional complexity of an introspectable call stack." ... "PyPy does an admirable job of attacking this problem by rewriting currently-running code and lifting on-stack state to the heap when it is accessed, but this approach prevents dropping unused local state (since you can't predict 11:56
I had thought that Ruby was the most crazy of the lot, but he seems to think that at the limit Python is harder than Ruby.
(he's Charles Nutter, the JRuby guy. So I assume that he has some idea what he's talking about) 11:57
jnthn Yeah, it's an interesting post. 12:01
We are both lucky and unlucky in Perl 6 terms. We may often have the chance to statically know something about the representation an object has (good). However, if it's a P6opaque, it can be mixed in to. 12:02
nwc10 one is also lucky that Larry has at least been designing the language with "how does this compile" in mind 12:07
jnthn Yes, true too :)
masak_ ahoj, #perl6
nwc10 even if he is often "having a laugh" by answering that question with "with difficulty" 12:08
and still putting it in the spec, to see whether anyone can do it :-)
FROGGS hi masak
moritz \o * 12:09
FROGGS hi moritz
I like the "actual lesson", I dont know why everybody thinks you get all these nice features perl 6 has for free... 12:10
masak backlogs
lizmat afk for a few hours 12:19
masak oh btw, people who want to join the next #masakism workshop/party, please sign up early here: github.com/perl6/mu/wiki/perl6-wor...-june-2013 12:28
FROGGS done
masak (datetimes are still provisional, but they get more and more set in stone the more time passes without people complaining about them.) :)
FROGGS :P
masak FR:P
er, FROGGS* 12:29
FROGGS :o)
masak wow, it actually made an actual tab character there.
impressive.
FROGGS hmm, not visible here
masak is on a train, and can apparently type faster than the software can react
FROGGS wow, you should talk about that with einstein if you get the chance 12:30
moritz just write the software in Perl 6, then it's easy to type faster :-)
FROGGS *g*
dalek kudo/jvm-support: 2b041d6 | jnthn++ | src/vm/parrot/guts/container.c:
Remove dead code.
12:34
kudo/jvm-support: 1ff3ec2 | jnthn++ | src/core/ (4 files):
Eliminate on Q:PIR, mark out rest for Parrot only.

For the Range one, it's an optimization, so can fall back on slow path until we implement the fast path again on JVM. The rest just throw an NYI for now.
kudo/jvm-support: c2f2ebb | jnthn++ | src/ (16 files):
Dozens of pir:: -> nqp:: in CORE.

Also, mark a few other pir:: out in #?if parrot sections and die NYI for JVM.
jnthn afk for a bit 12:40
FROGGS r: sub plan(*@t) { }; plan( tests => 7 ) 12:45
camelia rakudo 2a04f2: OUTPUT«Unexpected named parameter 'tests' passed␤ in sub plan at /tmp/0CEa0gFx8_:1␤ in block at /tmp/0CEa0gFx8_:1␤␤»
FROGGS r: sub plan(*%t) { }; plan( tests => 7 ) 12:46
camelia rakudo 2a04f2: ( no output )
FROGGS r: sub plan(*%t) { }; plan( tests, 7 )
camelia rakudo 2a04f2: OUTPUT«===SORRY!===␤Undeclared routine:␤ tests used at line 1␤␤»
FROGGS r: sub plan(*%t) { }; plan( 'tests', 7 )
camelia rakudo 2a04f2: OUTPUT«Too many positional parameters passed; got 2 but expected 0␤ in sub plan at /tmp/U8AyHq427K:1␤ in block at /tmp/U8AyHq427K:1␤␤»
masak kboga++ # pack, unpack 13:46
I wish to get back to that code at some point.
in my copious spare time. 13:47
there's a gist somewhere with a run-thought of all the flags in Perl 5, and how they would (or wouldn't) translate.
FROGGS masak: where is that code?
masak it used to be just in ng. kboga ported it to nom. 13:48
see 7d33ee1c50d9552b0802ebca5f06cc83fc660c8b
FROGGS cool! thanks 13:49
FROGGS (pack/unpack has about 16k tests in the perl5 spectest suite) 13:49
masak yes, I know. 13:49
masak I once started trying to port that code, too. didn't get very far... 13:50
FROGGS masak: how is the sprintf going? :P 13:52
.fmt I mean 13:53
masak no, it's actually sprintf. it's in a public repo: github.com/masak/sprintf 13:54
I can make you a deal: if you write tests, I'll implement them ;)
FROGGS well, I have tests basically... it is just the wrong language
masak sounds like that could simplify things. 13:55
but srsly. pull-request a bunch of tests, and I'll see about providing an implementation.
FROGGS cool, will do (some day)
masak \o/
FROGGS dunno when I come to sprintf
masak gets off the train & 13:56
FROGGS o/ 13:56
nwc10 IIRC sprintf should be more easily initially, as a whole chunk of tests are table driven
dalek : 1d133e9 | (Tobias Leich)++ | lib/Perl5/ (2 files):
handle fatarrow just like comma
14:05
: 3d76de2 | (Tobias Leich)++ | t/test.pl:
provide plan( tests => 1 ) sub for testsuite
14:06
dalek p/rak-jvm-support: e295778 | jnthn++ | src/vm/parrot/QAST/Operations.nqp:
Add nqp::const::CONTROL_*.
14:09
dalek : 1eb2172 | (Tobias Leich)++ | t/test.pl:
remove debug out
14:13
flussence good morni...^Wwhatever 14:15
FROGGS: I guess I could look at pack for those, hadn't thought about that at all. 14:16
nwc10 labster: does the JVM have getpwuid and getpwnam? If not, put in a feature request to Oracle at the same time as you put on in to Parrot :-) 14:22
ie, I think that such features would be better implemented in NQP or Perl 6, using a native call to C 14:23
grondilu rn: sub f($x where $x > $y, $y) { $x - $y }; say f 1, 0 14:49
camelia rakudo 2a04f2: OUTPUT«===SORRY!===␤Variable '$y' is not declared␤at /tmp/WxDUy0f3gr:1␤------> sub f($x where $x > $y⏏, $y) { $x - $y }; say f 1, 0␤ expecting any of:␤ postfix␤»
..niecza v24-49-gfa3b5ca: OUTPUT«===SORRY!===␤␤Variable $y is not predeclared at /tmp/D8io380oBv line 1:␤------> sub f($x where $x > ⏏$y, $y) { $x - $y }; say f 1, 0␤␤Unhandled exception: Check failed␤␤ at /home/p6eval/niecza/boot/lib/CORE.setting lin…
grondilu any chance in the future we could put parameter conditions in any order? 14:50
jnthn Very unlikely to happen. 14:51
Breaks the usual "declare before usage" rule for variables.
dalek kudo/jvm-support: 1eea478 | jnthn++ | src/core/Exception.pm:
Remove a currently dead code-path.

We don't use the exception system for return.
14:55
kudo/jvm-support: 6f98f42 | jnthn++ | src/core/ (2 files):
Replace some pir::const with nqp::const.
kudo/jvm-support: b911004 | jnthn++ | src/core/Exception.pm:
Start updating some exception related code.
FROGGS flussence: I'd like to supply these within Perl5::Terms or maybe another submodule 15:00
it feels good to revert workarounds and run the original tests more and more unmodified 15:03
dalek : a28f2d0 | (Tobias Leich)++ | / (2 files):
treating things before fatarrow as strings
15:07
dalek p/rak-jvm-support: 68aa9b0 | jnthn++ | src/vm/parrot/QAST/Operations.nqp:
Map some math-related ops.
15:17
p/rak-jvm-support: 299d223 | jnthn++ | src/vm/parrot/QAST/Operations.nqp:
nqp::[get|set]extype ops.

Already have nqp::getextype on the JVM.
kudo/jvm-support: 16d96a7 | jnthn++ | src/ (4 files):
Some more pir:: -> nqp::.
15:18
kudo/jvm-support: 8b8aa51 | jnthn++ | src/core/ (2 files):
Update a bit more of the exception code.
grondilu rn: my @a = ^4; say (state@ = @a) xx 2; say @a 15:47
camelia rakudo 2a04f2: OUTPUT«␤0 1 2 3␤»
..niecza v24-49-gfa3b5ca: OUTPUT«0 1 2 3 0 1 2 3␤0 1 2 3␤»
grondilu rn: my @a = ^4; say (state@ = @a).pop xx 2; say @a 15:47
camelia rakudo 2a04f2: OUTPUT«Element popped from empty list␤ in method Str at src/gen/CORE.setting:10021␤ in method Str at src/gen/CORE.setting:876␤ in method Stringy at src/gen/CORE.setting:885␤ in method join at src/gen/CORE.setting:1375␤ in method Str at src/gen/CORE.setting:5969␤ in …
..niecza v24-49-gfa3b5ca: OUTPUT«3 2␤0 1 2 3␤»
masak a lot of things look wrong there. 15:48
adu hi all 15:49
masak hi adu
grondilu niecza is right, though
isn't it?
jnthn The left hand side of xx is thunked iirc 15:50
adu can I use "also" for everything?
adu like class A { also is B; also is C; }? 15:51
jnthn But that still doesn't explain it
jnthn Given it should only run twice... 15:51
grondilu rn: my @a = ^4; say (state@ = @a).pop() xx 2; say @a
masak adu: yes, I think so.
camelia rakudo 2a04f2: OUTPUT«Element popped from empty list␤ in method Str at src/gen/CORE.setting:10021␤ in method Str at src/gen/CORE.setting:876␤ in method Stringy at src/gen/CORE.setting:885␤ in method join at src/gen/CORE.setting:1375␤ in method Str at src/gen/CORE.setting:5969␤ in …
..niecza v24-49-gfa3b5ca: OUTPUT«3 2␤0 1 2 3␤»
jnthn adu: Yeah, it parses any trait_mod after it, iirc 15:52
also does SomeRole; # should also be fine
git diff
oops
adu jnthn: oh, how goes nap?
nqp
jnthn adu: Well, fine, though I'm mostly focused on Rakudo at the moment... :)
adu I guess that's a good sign
grondilu n: my @a = ^3; say (state@ = @a).pop() xx 2; say @a 15:53
camelia niecza v24-49-gfa3b5ca: OUTPUT«2 1␤0 1 2␤»
adu I feel like helping 15:54
jnthn adu: Well, the IO stuff seems to be one place things are weak
grondilu submits rakudobug
adu is that done with nqp opcodes? or a class? 15:56
dalek p/rak-jvm-support: 73e7810 | jnthn++ | src/vm/parrot/QAST/Operations.nqp:
Fix a code-gen thinko in setpayload.
15:57
adu jnthn: are you talking about jvm-specific IO stuff? or IO stuff in general?
jnthn adu: Well, at present we do various method calls on some Parrot IO object.
adu: In many places in Rakudo, anyway.
adu: In NQP those things typically got replaced with op-y things. 15:58
adu: So part of it is updating Rakudo to use those that exist. And another is identifying missing things and maybe adding nqp:: ops for them and doing the JVM implementation. 15:59
adu and so we need to replace pir::whut with nqp::whut if it exists
and implementing in java those things that don't exist 16:00
jnthn adu: Yeah, but sometimes it's not so simple 16:01
Like, nqp::getstderr().print(...) works fine on Parrot but should be nqp::printfh(nqp::getstderr(), ...) to work portably
So it's a bit more involved than a simple pir:: -> nqp::. 16:02
adu got it, I'll take a look
dalek p/rak-jvm-support: a937cc6 | jnthn++ | src/vm/parrot/QAST/Operations.nqp:
Add an nqp::replace op.

Guess we can implement it better than just some substr/concat ops on most platforms, so it's worth an op.
16:40
dalek kudo/jvm-support: 4c3cf33 | jnthn++ | src/core/ (2 files):
More exception stuff; elimiante Q:PIR in THROW.
16:41
kudo/jvm-support: 4aa838a | jnthn++ | src/ (4 files):
Make junction auto-threader setup portable.
kudo/jvm-support: 90b955b | jnthn++ | src/core/ (2 files):
Eliminate pir::replace usages.
kudo/jvm-support: 79531c9 | jnthn++ | src/Perl6/World.nqp:
Eliminate another QAST::VM usage.
lizmat r: use Pod::To::Text 16:45
camelia rakudo 2a04f2: ( no output )
lizmat r: need Test:name<Pod::To::Text> 16:47
camelia rakudo 2a04f2: OUTPUT«===SORRY!===␤Could not find Test:name<Pod::To::Text> in any of: /home/p6eval/nom-inst/lib/parrot/5.2.0-devel/languages/perl6/site/lib, /home/p6eval/nom-inst/lib/parrot/5.2.0-devel/languages/perl6/vendor/lib, /home/p6eval/nom-inst/lib/parrot/5.2.0-devel/languages/pe…
lizmat is looking at S11:243, specifically wrt "import Factorial 'fact'" 16:49
I'm wondering whether the module specified there is the shortname alias (the Foo in "need Foo:name<Some::Very::Long::Module>") 16:50
or indeed the "Some::Very::Long::Module" name.
FROGGS I guess the alias
lizmat if the latter, we will need :name:auth:ver: semantics for import as well
I would also guess the alias 16:51
but the spec is not too clear about it
FROGGS well, it is bad and good at the same time 16:52
good because you just need to implement/propose sane things and this will become spec
bad because we might introduce crap 16:53
lizmat hehe... 16:54
I'm not afraid I might introduce crap
I'm certain I will
:-)
FROGGS *g* 16:56
lizmat during my bike ride I also realized that most likely, that the key with which a module's namespace need to be anchored, will also need to include "from" 16:57
so the key would consist of (from,name,auth,ver) 16:58
so, saying: "class Foo {}"
should create a namespace for the module keyed to "perl6,Foo,(Any),(Any)" 16:59
I guess inslead of "perl6", one should say "current slang"
$*LANG I believe?
jnthn It's %?LANG (or %*LANG inside the compiler), and it's a braid rather than a single value. 17:02
That's a lexical concern, however. 17:03
jnthn Rather than an import/export one. 17:03
At least, that's my first gut feeling on it.
lizmat r: say %?LANG 17:07
camelia rakudo 2a04f2: OUTPUT«===SORRY!===␤Variable '%?LANG' is not declared␤at /tmp/oFgyR0tgtJ:1␤------> say %?LANG⏏<EOL>␤ expecting any of:␤ postfix␤»
jnthn Not sure it's exposed to user-land yet. 17:09
lizmat I guess not :-)
but do you agree that "from" needs to be part of the key of the namespace of the module? 17:10
jnthn Well, what does "namespace" really mean? 17:11
Any kind of package (be it a class, module, whatever) is just an object, and it can be installed somewhere.
FROGGS it is an identifier which lets you distinguish between two modules... like: use Test:from<perl5>; use Test:from<perl6> 17:12
jnthn We could install it under a long name for sure.
It's not an inherent property of the thing itself, though. It's just a matter of where it gets put.
lizmat well, we need to be able to look it up later
to be able to spot collissions
jnthn You'll get the collision at symbol installation time, no? 17:13
lizmat FROGGS example above should give a redeclaration error
jnthn "We can't install this, there's already something wiht that name"
lizmat as they would both alias into Test
jnthn Yes, makes sense.
FROGGS lizmat: yeah, one needs to be installed under a different name 17:14
lizmat assume we have a Foo.pm and a Foo2.pm 17:14
Foo2.pm however contains "class Foo;" 17:15
lizmat saying "use Foo" and "use Foo2" in the same process should give a redeclaration error 17:16
jnthn It'll probably be reported as GLOBAL merging having failed, but yes, that already should be an error today.
lizmat which comes to another thing: according to spec, "auth", "ver" and "from" are inherited 17:17
jnthn "inherited"?
lizmat class Foo:auth<Me> { class Bar { } } # Bar is also :auth<Me> 17:18
jnthn Oh...for for things lexically nested...
OK, I can buy that. :)
I was worried you mean inheritance in the OO since, in which case it woulda felt odd :) 17:19
*meant
*sense
meh, typing
lizmat I wonder whether we shouldn't have something that externally specifies what the default "from", "auth" and "ver" are when doing a load_module()
I mean, if someone has a module on CPAN, do we really want to force them to say "class Foo:auth<cpan:ME>" for all classes? 17:20
or do we want that information to be used as a default from the META.info ?
lizmat is trying to find the gist with labster?s proposal for file storage of modules 17:22
anyway, assuming I have a module Foo 1.0 on CPAN
FROGGS I believe it was tadziks proposal 17:23
lizmat that would e.g. be installed under */perl6/Foo/ELIZABETH/1.0/*
jnthn We've tended to lean towards the source code being the authoritative source of everything.
jnthn With any pre-compilation in the end really being seen as a kind of cache. 17:24
lizmat hmmm...
FROGGS lizmat: I still believe that filesystem storage is not enough, thinking of unicode module names and since the installer (panda) should care about dists, not modules itself 17:26
... even after dists are installed
lizmat so, in that case, */perl6/Foo/ELIZABETH/1.0/Foo.pm" should contain "class Foo:auth<cpan:ELIZABETH>:ver<1.0>"
FROGGS IMO the distribution has a version/auth/... 17:27
lizmat well, how it is installed in the file system, doesn't really matter, as long as we can find stuff
FROGGS true
lizmat the thing is that you would need to force developers to change potentially each "class" statement with each update of a distribution 17:28
FROGGS hmmm, depends 17:29
lizmat I can see people making errors with this quite easily
well, let me put it this way: I can see it work for :ver (as developers are already doing something like that, e.g. with specifying $VERSION) 17:30
FROGGS if you say 'use Foo:auth<github.com/FROGGS>' you want a specific distribution, so after looking up where the files of that dist are installed, you dont need to care about the auth of class definitions
so I'd say these fields are at least optional for the modules of a dist 17:31
but one can argue that if a submodule version is given, it should override the dists version 17:32
lizmat ah, but that's where I think you forget that there is no hard link between "use Foo" and "class Foo"
use Foo only gives you a way to find a file in the installed modules space on disk
but if that file only contains "class Bar", there is nothing that will prevent that 17:33
FROGGS no, 'use Foo' should search for all dists that provide Foo
lizmat aha, so installing a distribution will parse the code to find out which classes it provides?
and store that info in a database to be used by "use" ? 17:34
FROGGS either that or you have to put that in META.info when doing a release
lizmat so, in my above example: if I would say "use Bar", it would load "Foo.pm" ?
FROGGS right
lizmat because it knows that Foo.pm provides class Bar
FROGGS that 'right' was for: <lizmat> and store that info in a database to be used by "use" ? 17:35
lizmat yes, got that :-)
flussence would like a "provides" key in META.info, mainly because I keep typing `panda install URI::Escape` by mistake...
FROGGS but yeah, if the Foo dist provides class Bar somehow (via META.info), it would find it
lizmat from S11:600 : class Dog:<cpan:JRANDOM 1.2.1> 17:36
emulates Dog:auth(DCONWAY|JCONWAY|TCONWAY):ver<1.0+>
excludes Fox:<oreillymedia.com 3.14159>
emulates Wolf:from<C# 0.8..^1.0>;
FROGGS that is a bit extreeme 17:37
lizmat I assume all of that information would then need to live either in META.info, or in the modules database of an installation
FROGGS in both places I'd say
lizmat I know it is, but it wouldn't be strange for this to happen (says the original author of "forks.pm" which emulates "threads.pm") :-)
FROGGS *g* 17:38
dalek kudo/jvm-support: 18e87c7 | jnthn++ | src/core/ (10 files):
Try to mark out remaining Parrot-specific bits.
17:40
kudo/jvm-support: c72613f | jnthn++ | tools/build/Makefile-JVM.in:
Add remaining setting files to JVM build.
masak flussence: that "provides" idea sounds worthwhile. 17:52
flussence: maybe open a panda issue?
FROGGS should be "provides" : { "Foo::Bar" : "Foo/Bar.pm" } IMO 17:53
in case the module name is unicode and the filename is 8.3 or so 17:54
flussence the whole idea doesn't feel very DRY, I was thinking something like «"provides": ["Foo::*"]» as a sort of indexing hint while all the authoratitive stuff stays in the module itself. 17:59
lizmat FROGGS: how the file gets installed, is an installation issue: I don't think the developer needs to know or care about that 18:02
the distribution provides a logical file name, the installer will make sure that the files will get installed somewhere on the local filesystem 18:03
and can be found later
so the META.info need not care whether the filename is 8.3 or not
lizmat tadzik: is there any kind of hackathon / other activities planned after the PLPW ? 18:09
tadzik lizmat: I don't know. Is there interest :) 18:38
?
there was a plan to do hackathon time after the last talk
'til the evening
til night do us part
lizmat that sounds like a plan then
tadzik ok, I'll schedule it
lue hello world o/
lizmat I would want to pick your brains about quite a few things by then, I think
:-) 18:39
tadzik okay :)
lizmat we will travel back on Monday, so that we can prepare our travel to YAPC::NA
I assume this goes for jnthn and masak as well :-) 18:40
masak will travel back on Sunday. 18:41
teaching on the Monday :/
tadzik officially scheduled now
sergot hi ! o/
lizmat argh, and jnthn?
hi sergot!
tadzik jnthn leaves with masak iirc 18:42
masak aye.
lizmat so what time will you be leaving, masak?
masak Sunday afternoon.
think plane leaves at 18:00, but will have to leave for airport some hours before that... 18:43
lizmat ok, then I would suggest moving tadzik's last presentation *before* the lunch break 18:44
lizmat and have the lunch break ease into hackathon for those interested 18:45
tadzik masak: it's about 0.5 hours from the venue to the airport
lizmat: we can do that
lizmat keeping people's attention after a long lunch break is difficult as it is :-) 18:46
masak sounds good.
tadzik we'll do some more thinking on the Board Meeting this tue
lizmat cool! 18:47
masak .oO( attention all: thinking has been postponed until Tuesday ) :P 18:53
moritz good idea
and when I stop thinking, I can proceed straight to bed :-) 18:54
lizmat unthinks 18:57
masak unthinkable! 19:04
lizmat om
flussence nom? 19:05
lizmat om
masak .oO( sorry to disturb you; we were unsure whether that was meditating or masticating ) 19:06
lizmat om 19:07
masak ;)
lizmat en.wikipedia.org/wiki/Om for the uninitiated 19:08
I guess it's a bit like Mu 19:09
flussence
.oO( we're still unsure )
masak ooh, Tamil script is so adorable! 19:11
hoelzro looks
sorear good * #perl6 19:17
lizmat sorear!
masak sorear! \o/
sorear: I now (sorta kinda) understand functors, natural transformations, and universality. 19:18
sorear hey, how did you know I read 'category theory for scientists' last night
FROGGS lizmat: but since you can have more than one to-provide module within a file, it is n:1, so still: "provides" : { "Foo::Bar" : "Foo/Bar.pm" } 19:19
dalek kudo/jvm-support: 4e7e52b | jnthn++ | src/vm/jvm/ (2 files):
Implement nqp::p6argvmarray.
kudo/jvm-support: 276ace8 | jnthn++ | src/vm/jvm/runtime/org/perl6/rakudo/Ops.java:
nqp::p6list, nqp::p6listiter.
masak sorear: all of it? I'm only just starting in on chapter 4, the juicy parts.
masak sorear: but I'm also reading Saunders Mac Lane (slowly). 19:20
sorear: I've never smoked pot, but my distinct impression is that category theory would go very well with it.
lizmat FROGGS: indeed, and that's another can of worms :-( 19:21
jnthn That's be great. "What led you to start smoking weed?" "Category theory, man..." 19:22
masak (note to irony-impaired: do not try this at home. category theory is strong stuff, and has been known to ruin people's lives.) 19:24
dagurval r: (1, (2, 3))[0][1].say 19:28
camelia rakudo 2a04f2: OUTPUT«Index out of range. Is: 1, should be in 0..0␤ in method gist at src/gen/CORE.setting:10022␤ in method gist at src/gen/CORE.setting:893␤ in sub say at src/gen/CORE.setting:10920␤ in method say at src/gen/CORE.setting:890␤ in method say at src/gen/CORE.setting:8…
dagurval is this incorrect?
oh, it is. should be [1][1] :). 19:29
jnthn No, that thing flattens.
dagurval r: (1, (2, 3))[1;1].say
camelia rakudo 2a04f2: OUTPUT«WARNINGS:␤Useless use of constant integer 1 in sink context (line 1)␤2␤» 19:30
dagurval n: (1, (2, 3))[1][1].say
camelia niecza v24-49-gfa3b5ca: OUTPUT«3␤»
dalek kudo/jvm-support: 2f43abc | jnthn++ | src/ (2 files):
An op stub and tweak to survive optimizer.
19:31
dagurval how do I make it not flatten?
jnthn Writing it (1, [2, 3]) is the easy way :) 19:32
dagurval r: (1, [2, 3])[1;1].say 19:32
camelia rakudo 2a04f2: OUTPUT«WARNINGS:␤Useless use of constant integer 1 in sink context (line 1)␤2 3␤»
sorear masak: I did haskell back in the day so I've got a bit of a head start, especially with functors 19:33
jnthn And we don't do the ; thing yet, so [1][1] was right
dagurval r: (1, [2, 3])[1][1].say
camelia rakudo 2a04f2: OUTPUT«3␤»
dagurval ah, there we go :)
gtodd in perl6 how does one do the python equivalent of .dir or dir() to show the methods associated with a class? 19:34
jnthn r: say Int.^methods 19:35
camelia rakudo 2a04f2: OUTPUT«Int Num Rat FatRat abs Bridge chr sqrt base expmod is-prime floor round ceiling sign conj rand sin asin cos acos tan atan atan2 sec asec cosec acosec cotan acotan sinh asinh cosh acosh tanh atanh sech asech cosech acosech cotanh acotanh unpolar cis Complex log exp …
gtodd right .^methods ... so there is no equivalent in perl5 19:36
or none that is as succinct
masak sorear: ah, yes. I've understood FP's definition of it for a few years, even if I haven't been doing that much Haskell. 19:37
lizmat and there is no way to generate that, as it is really hard to see whether a sub is a public method, a private method or just a sub
or any combination of the above :)
I think I got warnocked on this, or lost responses in a net split 19:38
does this make sense as a short-term goal for me: gist.github.com/lizmat/5557120
masak sorear: when I understood CT's definition of functor, I just filed it away in my brain as "morphism-preserving mapping between categories". 19:39
gtodd jnthn: in Int..^methods is the "^" there a prefix operator? 19:40
masak gtodd: no, it's 'Int.^methods' with one dot 19:41
gtodd: and '.^' is syntactic sugar for a methodcall on Int's metaclass.
method call* 19:42
shachaf masak: "morphism-preserving"? 19:43
gtodd ok looking ta the operators docs it says: TODO: .= .^ .:: .() .[] .{} .<> 19:44
masak: so there's a long way to do it too
masak shachaf: a morphism is an arrow between two objects in a category. 'morphism-preserving' means that if two objects mapped *from* have an arrow between them, then the two objects mapped *to* must have an arrow as well. 19:46
flussence p5eval: say unpack("H*", pack("CCcccc", -0x01, 0x130, -0x02, -0x99, 0x50, 0xFF))
p5eval_ flussence: ff30fe6750ff1
lizmat jnthn: I see in a lot of "if +@foo {}" in e.g. World.nqp. Is there a reason not to just say "if @foo {}" ? (without the "+" ?
masak gtodd: yes.
flussence p5eval: say unpack("H*", pack("CCcccc", -0x01, 0x130, -0x02, -0x99, 0x50, 0xFF)) . "#"
p5eval_ flussence: ff30fe6750ff#1
masak r: say Int.HOW
camelia rakudo 2a04f2: OUTPUT«Perl6::Metamodel::ClassHOW.new()␤»
masak r: say Int.HOW.methods(Int)
camelia rakudo 2a04f2: OUTPUT«Int Num Rat FatRat abs Bridge chr sqrt base expmod is-prime floor round ceiling sign conj rand sin asin cos acos tan atan atan2 sec asec cosec acosec cotan acotan sinh asinh cosh acosh tanh atanh sech asech cosech acosech cotanh acotanh unpolar cis Complex log exp …
masak gtodd: like so. 19:47
flussence perldoc isn't all that clear on how pack clamps values to a type's range
shachaf masak: That's the "type" of the functor, not the "law" part, isn't it? 19:47
shachaf 's words are a bit Haskell-influenced.
jnthn lizmat: No. In fact, if @foo { } is most likely faster
masak shachaf: I'm not sure I understand your question. 19:48
shachaf I.e. you're saying that if k : A -> B, Then F_a(k) : F_o(A) -> F_o(b)?
lizmat jnthn: so should I replace any "if +@foo" with "if @foo" ?
gtodd masak: interesting
flussence p5eval: join(q{}, unpack("H*", pack("CCcccc", -0x01, 0x130, -0x02, -0x99, 0x50, 0xFF)));
p5eval_ flussence: ff30fe6750ff
flussence er
masak sciurius: yeah.
flussence p5eval: join(q{ }, unpack("H*", pack("CCcccc", -0x01, 0x130, -0x02, -0x99, 0x50, 0xFF)));
p5eval_ flussence: ff30fe6750ff
sorear masak: shachaf's "law" refers to the fact that functors preserve composition relationships
masak er, shachaf: yeah.
flussence p5eval: join(q{ }, unpack("(H2)*", pack("CCcccc", -0x01, 0x130, -0x02, -0x99, 0x50, 0xFF))); 19:49
p5eval_ flussence: ff 30 fe 67 50 ff
masak sorear: well, they must, don't they, with that definition? :)
sorear fmap (f . g) = fmap f . fmap g; fmap id = id
lizmat sciurius usually just lurks here :-)
shachaf masak: No.
masak hm.
shachaf masak: The "preserving" part is two laws: 19:50
F_a(id_X) = id_{F_o(X)}
sorear They must in the programming language usage due to parametricity
jnthn lizmat: Yes, it if breaks nothing, which I don't think it will
sorear But in general mathematics it needs to be stated explicitly
shachaf sorear: No, you can write invalid fmap instances with the correct type. :-)
(Or did I misunderstand?)
lizmat starts the +axe
masak shachaf: this is all highly interesting.
flussence r: my int32 $bar = 99999999999999999999; say $bar 19:51
camelia rakudo 2a04f2: OUTPUT«1661992959␤»
shachaf The other law is that if S : X -> Y and T : Y -> Z (and so T . S : X -> Z) then F_a(T . S) = F_a(T) . F_a(S) 19:52
flussence that gives me a completely different result locally and definitely not a 32-bit one.
sorear The "graphs as functors from a fixed small category to Set" thing was very surprising and interesting
shachaf Graphs as in diagrams?
lizmat jnthn: I assume the same applies to "+@($node)", right? 19:53
sorear shachaf: no
masak shachaf: right, identity and associativity. you're basically saying that functors need to preserve them both.
sorear shachaf: let C be the category with two objects E and V, and two nonidentity functors src: E -> V, dst: E -> V 19:54
shachaf sorear: Er, wait. I misread.
sorear shachaf: the category Fun(C,Set) is similar to the category Graph
masak sorear: yes, that bit was cute :)
shachaf sorear: Ah. 19:56
jnthn lizmat: Only in boolean context.
lizmat jnthn: ok, as @foo does not return the number of elements in scalar context? 19:57
jnthn lizmat: Well, there's not a scalar context per se, but that thing in item context itemizes...at least in real Perl 6. In NQP, it doesn't really care about context at all :) 19:59
lizmat well, we're talking about .nqp files here 19:59
anyways, I'm building and do a spectest with Actions.nqp having all its +@ changed to @ :-) 20:00
we'll see what happens :-)
jnthn OK. In boolean context should be fine :)
lizmat jnthn: && +@*MODULES == 0 && 20:01
sorear is still having some conceptual difficulties with sheaves 20:02
lizmat wouldn't && @*MODULES && be better?
lizmat && !@*MODULES && 20:02
jnthn lizmat: Yes, would also be fine, though sometimes == 0 tells the story better. If you're doing == you probably don't need the + 20:03
lue jnthn: wouldn't you need the + to count up number of elements though? 20:04
lizmat with my Perl 5 goggles on, the + seems superfluous in any situation :-)
dagurval r: (1, [2])[3].say 20:05
camelia rakudo 2a04f2: OUTPUT«Nil␤»
dagurval should this not be "out of range" error?
r: (1, 2)[3].say
camelia rakudo 2a04f2: OUTPUT«Nil␤»
dagurval r: (1)[1].say
camelia rakudo 2a04f2: OUTPUT«Index out of range. Is: 1, should be in 0..0␤ in method gist at src/gen/CORE.setting:10022␤ in method gist at src/gen/CORE.setting:893␤ in sub say at src/gen/CORE.setting:10920␤ in method say at src/gen/CORE.setting:890␤ in method say at src/gen/CORE.setting:8…
lue r: say (1).WHAT; say (1,2).WHAT; 20:06
camelia rakudo 2a04f2: OUTPUT«(Int)␤(Parcel)␤»
jnthn lue: == implies numeric context
lue right. 20:07
labster lizmat: I don't think that was my gist you were looking for... I haven't worked on importing at all. Though your gist looks like a nice goal. 20:16
dalek p/rak-jvm-support: 4ba5aa1 | jnthn++ | src/vm/jvm/QAST/Compiler.nqp:
Add STAT_ constants on JVM.
20:17
p/rak-jvm-support: 4658100 | jnthn++ | src/vm/jvm/QAST/Compiler.nqp:
Stub in some missing ops.

Lots of LHF here to implement these.
p/rak-jvm-support: 7f641eb | jnthn++ | src/vm/jvm/ (2 files):
Control exception constants.
lizmat it was more about how to manage installed distributions / modules
Perl 5's packlist as it were, but better 20:18
and supporting all of the Perl 6 features
pmichaud 20:02 <lizmat> && !@*MODULES && 20:25
that form is generally better.
@array == 0 makes @array non-lazy
!@array doesn't.
lizmat does nqp do lazy arrays?
pmichaud oh, in nqp it doesn't matter 20:26
lizmat this was about nqp
pmichaud well, !@array is still probably better, though :)
lizmat and why I saw a lot of +@array in boolean contexts
and jnthn mentioned that without the +, it would be faster probably
testing that now
pmichaud I agree with him.
pmichaud I don't know that it'll be noticeably faster, but it should be at least incrementally faster 20:27
and ?@array or !@array is more Perl6-idiomatic than +@array
jnthn o/ pmichaud 20:31
lizmat $ time nqp -e 'my $times := 1000000; my @array := (1,2,3); while $times-- { my $b:= +@array }' 20:32
shows it is 10..20% faster (as in less CPU usage)
without the + 20:33
dalek p/rak-jvm-support: 029e3ad | jnthn++ | src/vm/jvm/QAST/Compiler.nqp:
A couple more op stubbings.
20:37
p/rak-jvm-support: 7a8142f | jnthn++ | src/vm/jvm/QAST/Compiler.nqp:
Make error betterer.
pmichaud without the + and with a ? 20:38
my $b := @array doesn't impose boolean context.
lizmat eh, no with/without +
with ?, it actually seems slower than without + 20:39
pmichaud right, that's possible.
perhaps shouldn't be that way, but it's possible.
jnthn Well, the real question is between if @foo { } and if +@foo { } 20:40
On the JVM the first will almost certainly be faster.
lizmat indeed… that was what I was after
jnthn swears lots at exceptions...
pmichaud I suspect it can be made to be faster on Parrot, depending on how the boolean circularity saw cuts there
jnthn I can't tell what of this code is doing important stuff and what is working around Parrot.. :/
lizmat hehe… let's not worry about that 20:41
pmichaud I get 1.812s versus 1.644s for + versus ? on nqp-parrot
lizmat thats's user CPU ? 20:42
pmichaud real
user CPU is 1.580s versus 1.528s
so ? is faster on my system.
lizmat well, this is very finiccky, you need to run this quite a few times before you see a trend
pmichaud I did.
(I've done a lot of timings w/rakudo and nqp :) 20:43
lizmat I've actually reduced the body to { @array }, to not have the overhead of the binding to $b
would that fudge the benchmarks? 20:44
pmichaud you're still not testing "boolean context" with that
lizmat so: $ time nqp -e 'my $times := 1000000; my @array := (1,2,3); while $times-- { @array }'
pmichaud use 1 if @array and 1 if +@array
{ @array } just tests the cost of a lexical lookup
gtodd lizmat: so re . perl5 non-equivalent of perl6's .^methods ... in the perl5 debugger if one does "use Mojo;" and then x \%{Mojo} you get a hash of a bunch of things and m \%{Mojo) just gives you object methods like ... UNIVERSAL: isa ... etc. which is nowhere near perl6 introspection 20:45
and never can be ...
lizmat pmichaud: ok
lizmat gtodd: indeed 20:45
gtodd which is why perldoc is so good :-) 20:46
lizmat fwiw, all spectests pass with all s/+@/@/ in Actions.nqp 20:47
pmichaud \o/ 20:50
if nqp-parrot ends up being faster at +@array versus @array in boolean context, I think we'll just fix nqp-parrot :)
lizmat++ # excellent optimization
lizmat will run spectest again to make sure there is a difference viewable in the spectest as well 20:51
lizmat pmichaud: a question that came up earlier today, and was already answered by jnthn (provisionally) 20:54
with "import Foo", I assume that the "Foo" refers to an aliased module 20:56
assuming we did "use Foo:name<Bar>"
if not, then import would also need the whole :from:auth:ver specification 20:57
pmichaud That sounds reasonable to me. 20:59
I'm still fuzzy on the import / use semantics at times. I'll brush up on them before yapc::na, though :)
grondilu what's @a[1..*-1] in P5? 21:07
lizmat @a[ 1… $#a ] ? 21:08
grondilu really?
lizmat @a[ 1… @a ] ?
grondilu I know it works but I thought there was simpler
lizmat @a[ 1 @a ] ?
grrrrr
@a[ 1 .. @a ] ?
do you want all elements except the first ? 21:09
grondilu yeah
@a[ 1 .. @a ] will do I guess
lizmat @a[ 1 .. $#a ] ?
diakopter clone then unshift? 21:10
er shift
lizmat @a will give you the element past the array
dalek kudo/jvm-support: 8297b3d | jnthn++ | src/vm/jvm/runtime/org/perl6/rakudo/Ops.java:
Implement p6setautothreader.
kudo/jvm-support: 1b21172 | jnthn++ | src/ (2 files):
Attempt to start getting exception code updated.
lizmat or not even clone, but shift, then unshoft
unshift
jnthn
.oO( I unshoft it :D )
21:11
lizmat shift/unshift are highly optimized in p5, afaik
jnthn
.oO( now how do I unshaft this code... )
diakopter lizmat: you're right, esp if you call the nqp:: ops directly
[to suggest that method]
well, shift, clone, unshift anyway 21:12
grondilu ah @a[ 1 .. @a ] is wrong (it goes too far). I'll go with @a[ 1 .. $#a ] 21:15
masak er. 21:17
lizmat om? 21:18
masak sorry, I had to backlog to get enough context.
I think if I were doing that more than once in my code, I'd define a 'sub tail' or something. 21:19
dalek kudo/jvm-support: 3b34521 | jnthn++ | src/ (2 files):
Yet more exceptiony stuff.

Heck knows if this'll work. But it probably will; the exception stuff in the NQP on JVM runtime runs handlers in the dynamic scope of the throw by default and already takes care not to let active handlers catch exceptions thrown within them, which it seems is what the dynops we avoid using here do. Caveat: this isn't a solution for LEAVE.
lizmat not sure about the context now
jnthn ah darn, next thing ix xor...
*is 21:20
masak jnthn: why is that "darn"? it's not even short-circuiting! :P 21:21
lizmat: the context of "how to extract all but the first element of an array?" 21:22
jnthn Hm...guess it's not so fiddly to port
masak mmm, port...
jnthn :P
Yeah, I drunk some of that recently...
lizmat from a performance point of view, creating a sub for that would probably not be so wise
depends on how often you would call that sub of course 21:23
(the question was for Perl 5, afaik)
jnthn Well, if you're lucky your compiler will inline the sub... :) 21:23
masak lizmat: yes, sure. 21:24
lizmat: I think I would create the sub if it gained me any advantage from an API/readability perspective.
lizmat: and then maybe inline it again if it showed up as a pain point in profiling.
lizmat fair enough :-) 21:25
ehouse_ ff
masak ehouse_: well, I'd sure like to see a solution that uses infix:<ff>, but surely that can't be the easiest way... 21:28
masak .oO( &second_element ff &end_of_list )
dalek p/rak-jvm-support: d05794c | jnthn++ | src/vm/jvm/QAST/Compiler.nqp:
Add missing handler types.
21:48
p/rak-jvm-support: 7b11022 | jnthn++ | src/vm/jvm/QAST/Compiler.nqp:
xor
masak 'night, #perl6 21:49
tadzik get_attr_str() not implemented in class 'Coroutine' 21:50
current instr.: 'print_exception' pc 111625 (src/gen/CORE.setting.pir:50165) (src/gen/CORE.setting:9744)
dafuq :|
lizmat night masak!
sorear night masak. dream of cogent natural transformations
FROGGS tadzik: what are you doing? 21:52
tadzik FROGGS: panda install Farabi6 on panda2
FROGGS :/
tadzik I bet that if I comment out some CATCH {} I'll get a sensemaking error message 21:53
jnthn tadzik: There's also --ll-exception 21:54
tadzik ah, true
jnthn: otoh, I think I'd prefer --hl-exception ;) 21:58
jnthn ;)
jnthn ooh...think le porting effort just discovered a minor optimizer bug... 22:06
lizmat which will benefit rakudo-parrot as well? 22:07
jnthn Yeah, the optimizer is shared. 22:09
I'm a bit too tired to think of an example to demonstrate the failure it coulda caused...
Hm...actually I'm not sure you can construct an example that fails 'cus it woudln't attempt the opt. 22:10
It's just that it copied a piece of code it didn't need to when inlining blocks.
jnthn Which turned out harmless on Parrot, but the JVM's takedispatcher compilation is a bunch stricter. 22:10
dalek : fa1ff4a | (Tobias Leich)++ | t/test.pl:
added all test subs from p6-Test.pm
22:13
: 895f9f8 | (Tobias Leich)++ | STATUS.md:
today's status udpate
jnthn nqp: say(nqp::const::CCLASS_PRINTING) 22:14
camelia nqp: OUTPUT«64␤»
dalek nda/panda2: 9b8e854 | tadzik++ | lib/Panda/Builder.pm:
Don't read non-perl files when determining the build order

This fixes Farabi6 installation.
22:14
lizmat gnight #perl6! 22:23
tadzik maybe it would be nice to have something like gcc -M for rakudo. At least it will be nice for panda :) 22:26
jnthn What's -M do?
We already have a -M ;)
tadzik Instead of outputting the result of preprocessing, output a rule suitable for make describing the dependencies of the main source file.
so, all the modules loaded with use or require 22:27
jnthn There's an env var you can set which tells you what other modules are loaded.
tadzik "what needs to be precompiled before"
dalek p/rak-jvm-support: 08b9fff | jnthn++ | src/vm/jvm/QAST/Compiler.nqp:
Stub several more missing ops.
22:32
p/rak-jvm-support: 1cd19ce | jnthn++ | src/vm/jvm/ (2 files):
Stub missing cclass (needs implementing).
p/rak-jvm-support: 7ce3641 | jnthn++ | src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/P6bigint.java:
P6bigint serialization/deserialization.
kudo/jvm-support: 7f612cf | jnthn++ | src/Perl6/Optimizer.nqp:
Don't copy takedispatcher on block inlines.
22:33
dalek p/rak-jvm-support: b9b52e3 | jnthn++ | src/vm/jvm/runtime/org/perl6/nqp/sixmodel/ (3 files):
A few small serialization related fixes.

With these, serialization of CORE.setting works out.
22:43
adu oo you can! 23:07
r: class A { method hello { say "hello" } }; class B is A {}; class C is A {}; class D is B is C {}; D.new.hello
camelia rakudo 2a04f2: OUTPUT«hello␤»
adu good news
wait, when there is a conflict in the method resolution, whichever class is declared first gets precedence? 23:12
jnthn No, it uses C3 ordering 23:15
adu "C3 superclass linearization"? 23:16
jnthn yes 23:18
jnthn Time for some rest...didn't get the blog post I meant to done today, but will get to it tomorrow... 23:21
'night
colomon o/ 23:24
adu good night jnthn 23:27