»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg p6eval perl6: ... | irclog: irc.perl6.org/ | UTF-8 is our friend!
Set by sorear on 4 February 2011.
pmichaud the point being that in a dynamic language, one cannot simply look at local variables when deciding to inline. 00:00
jnthn But $_, $! and $/ are all (or some are anyway) contextual-y or outer-visible-y
pmichaud: You locally know if you have any is context ones, other than the magicals, though.
pmichaud jnthn: for Perl 6, yes.
my larger point is that Parrot's tree optimizations appear to be optimized for static languages. 00:01
jnthn Ah, OK
Yes, I was talking about Perl6::Optimizer ;-)
Anyway, the analysis is decidedly non-trivial.
pmichaud and much more than "do we have some local variables"
we also have to be careful of things like MY:: 00:02
as well as stuff like my $a; if test() { my $a; ... }
jnthn *nod* 00:03
pmichaud yes, that's a pretty standard inlining test... but if we have any sort of introspection on $a that lets us get to its name, then we have to be aware of that
jnthn That too
oh 00:04
Though $a is the Scalar container which has the name
But yes, if we want to drop containers too...we'd need that.
That's even harder though
You gotta know nothing you're calling has "is rw" params.
Which means method calls soon hose that.
sorear niecza avoids most of the problems you're describing by having a LetScope node type, which creates a namespace for variables *inside* a sub 00:05
00:06 envi_laptop left
jnthn sorear: How does that help exactly? How is it used in compilation? 00:12
sorear jnthn: the inliner pass doesn't substitute the raw body of the inner sub, it gets wrapped in a LetScope 00:13
this means that my $x; if 1 { my $x } doesn't pose an issue 00:15
jnthn sorear: ah, you have lexpads not tied to blocks?
dalek ecza/immediate: 68b5b15 | sorear++ | src/niecza:
Remplement blocks, pointy blocks, conditional and loopy statements
pmichaud jnthn: how about a de-null-pmc opcode? 00:16
jnthn pmichaud: mumble
pmichaud: Use case?
pmichaud something like foo $P0, $P1
sorear jnthn: the low-level lexpad maps integers to references, and there's only one per low-level frame object
pmichaud returns $P0 if it's not null, $P1 otherwise
sorear jnthn: however, each low-level code object can have more than one string->int name mapping 00:17
jnthn pmichaud: OK...what are you wanting it for?
pmichaud my use case at the moment is that I'm retrieving values from a RPA that might be null and need to easily convert them to some other type (Any)
I'm wondering if there are other places it'd be useful for working with parrot types
in particular, I could write pir::foo(pir::something(), Any) 00:18
jnthn pmichaud: The usual thing that makes me nervous about that setup is that you tend to end up paying the cost of fetching the Any whether you need it for not.
s/for/or/
pmichaud troo
without it, though, I have to pay the cost of fetching the result of pir::something() twice
so I still have a fetch. 00:19
jnthn Hmm, true.
Well, maybe true
pmichaud right now the closest I'm getting is
my $x := pir::something();
pir::isnull($x) ?? Any !! $x 00:20
where I could be doing
jnthn pmichaud: Well, we could always do something macro-y
pmichaud pir::foo(pir::something(), Any)
jnthn That is, it compiles to something more like the way you'd write it in PIR 00:21
nqp::fix_null(x, y)
$P0 = x
unless null $P0 goto foo
x = y 00:22
foo:
That's how we'd write it in PIR
Is there a PAST tree we can write that does something like that?
pmichaud we still end up with the lookup, though.
(for y)
jnthn Yes but only if it's null
pmichaud oh, you mean an instruction that becomes an if
jnthn Right
That's what I was trying to imply by macro
pmichaud sure, that's just :pasttype<if> 00:23
00:23 thou left
pmichaud well, almost. 00:23
jnthn Well, nearly...that won't check nullness
It's more like def_or
But we want null_or :)
(I think it's def_or that // compiles to, anyway...)
pmichaud actually we want notnull_or :) 00:24
jnthn er, yes :)
pmichaud might be worthwhile to create nqp::if() and nqp::unless() while we're at it 00:25
so we have low-level ways to do if/unless 00:26
heck, we could get most of the pasttypes in place
that would avoid issues with while loop bodies for a while, too :)
well, maybe. :-)
jnthn \o/
jnthn likes :)
sorear that's what I do
pmichaud nqp::while( $text, (body; body; body ...)) 00:27
(note: no block)
jnthn I'd like that
pmichaud cheap form of inlining :)
sorear pmichaud: (body; body; $body) while $test
pmichaud I don't remember if while statement modifier topicalizes anything 00:28
sorear AFAIK it doesn't
jnthn Don't think so either.
sorear only "for" and "given" topicalize
pmichaud anyway, nqp::if() also makes it possible to do if/else trees cheaply :) 00:29
00:30 cooper|ipad left 00:31 cooper|ipad joined 00:34 Jason_ni joined
dalek kudo/nom: 0cf7367 | jnthn++ | src/Perl6/ (2 files):
Get handling of $?CLASS fixed up so we can have a shot at composed methods and attributes working. Not quite there yet...
00:36
kudo/nom: 38f9ee7 | jnthn++ | src/Perl6/Metamodel/GenericHOW.pm:
Fix a silly thinko.
kudo/nom: bf3b966 | jnthn++ | src/Perl6/SymbolTable.pm:
Make type captures work again. With this, methods composed from a role work (no role summation to do multiple roles yet, though).
sorear What do type captures have to do with roles, jnthn? 00:37
TimToady role Foo[::T] I suppose
perigrin parameterized roles 00:38
jnthn What TimToady said.
sorear and they are required for methods and attributes?
00:38 dukeleto left
jnthn All roles are inherently parametric. 00:38
So yes.
00:39 dukeleto joined
jnthn Rakudo master got away with it, but Rakudo master's roles have some nasty issues. 00:39
It took me practically telling masak how to construct it, but you can very quickly get yourself into really weird semantics in Rakudo master with composed multi-methods.
s/it, /it to get somebody to find it and RT it,/ 00:40
perigrin you know if you could make all roles paramedics too ... we could possibly get funding in the health care industry easily
jnthn I guess I could always doctor the implementation to make it look that way...
perigrin sure ... nurse that pun ... 00:41
sorear needs to implement roles soon... 00:42
jnthn sorear: It's fun. They're probably the trickiest thing I've done since the 6model core... :)
Of course, I have the benefit of having written 3 other implementations of roles. :)
Each one has been steadily better than the last. 00:43
colomon practice++ 00:46
jnthn oops, nearly 3am 00:48
00:48 ccc joined
pmichaud jnthn: do class predeclarations work? i.e., "class Parcel { ... }" 00:51
jnthn pmichaud: Yes; add in stubs.pm
(not because they'll only work there, just because that's where I've been collecting them :-))
pmichaud and it's okay if I redeclare the class later? 00:52
stubs.pm doesn't look like what I'm looking for
jnthn pmichaud: I believe stubs work...lemme check 00:53
pmichaud List needs to know about Parcel... and Parcel needs to know about List. 00:54
(they only need to know that the other exists... it's okay for the details to defer) 00:55
jnthn yeah
oh, hmm
They should work but there's an odd bug
oh, regression 00:59
pmichaud yeah
jnthn jnthn--
pmichaud gist.github.com/1018075 01:00
I'm being called to dinner so will try it later.
oh, wait.
nm, syntax error in that one.
oh, it seems to be working locally 01:01
I'll have to look at it later and try it a bit later
I'll see if I can golf it down a bit.
afk, dinner
01:02 ccc left
jnthn pmichaud: For when you're back, fixed the issue, and this works now: gist.github.com/1018081 01:05
01:05 wooden left
jnthn pmichaud: Also note that if you comemnt out the actual definition of Foo, you'll get a compile time error telling you that you stubbed something but didn't define it. :) 01:07
dalek kudo/nom: 06322a3 | jnthn++ | src/Perl6/Actions.pm:
Unbust ... stubbing of packages.
sorear ponders recognizing { foo }; in the grammar
TimToady very diffult before statement reduction 01:08
*c
*ic
01:08 mtk left
sorear niecza/master has a semantic rule that certain types of blocks do not get separate runtime pads 01:09
mainlines, bare blocks, and package bodies (recursively)
setting the flag on blocks is proving rather snaggy in /immediate 01:10
TimToady the 1st and 3rd are unlikely to be on a hotpath, and the 2nd is unlikely to be correct :) 01:11
jnthn sleep, night o/
TimToady o/ 01:12
sorear why not correct?
it's not just an optimization
this is what makes { my $x; say $x; INIT $x = 1; } work
TimToady and what does my $x; { my $x; say $x; INIT $x = 1; }; say $x say? 01:15
sorear 1\nAny()\n
TimToady okay, so it's still scoped 01:16
01:17 mtk joined
TimToady and do OUTERs in an eval still count correctly? 01:17
sorear yes; this isn't about inlining the pad into the OUTER pad 01:18
it's about combining the pad and the protopad
TimToady okay; sounds a bit like P5 pads :)
sorear sub foo($x) { END say $x } # this will not work, because &foo lacks the "unified pad" bit 01:19
hmm
it works in P5. *wonders how*
01:32 donri left
dalek ecza/immediate: e383d0a | sorear++ | / (3 files):
Reimplement bare blocks, {YOU_ARE_HERE}
01:34
01:34 yinyin joined
sorear /immediate can now run -I. -e 'say "Hello, world"' 01:36
with a hacked setting...
01:53 whiteknight left 02:11 donri joined 02:12 woosley joined 02:13 Ali_h joined 02:15 cooper|ipad left 02:16 cooper|ipad joined 02:22 cotto left, donri left, donri joined 02:23 cotto joined
pmichaud phenny: tell jnthn class stub failure: gist.github.com/1018148 02:37
phenny pmichaud: I'll pass that on when jnthn is around.
02:42 donri left 02:47 Ali_h left 02:48 Ali_h joined
dalek ecza/immediate: a23b506 | sorear++ | src/ (4 files):
Partial mergeback
02:54
ecza/immediate: 29063d3 | sorear++ | src/niecza:
Reimplement enums
03:19 hudnix left 03:20 lichtkind left 03:23 Su-Shee_ joined 03:24 daemon_ is now known as daemon 03:26 Su-Shee left, satyavvd joined 03:36 envi_laptop joined 03:37 shachaf joined 03:50 molaf joined 03:54 scottp joined 04:34 molaf left
dalek ecza/immediate: 804c737 | sorear++ | src/ (2 files):
Kill several now-unused op types
04:38
ecza/immediate: 327d588 | sorear++ | src/ (3 files):
Loopy operators, $! fixes, eval fixes
05:18 cooper is now known as starcatfish 05:19 starcatfish is now known as planetcatfish 05:20 planetcatfish left
dalek ecza/immediate: 70e5354 | sorear++ | src/niecza:
Fix enum and block-term handling
05:26
sorear now it runs with a considerably less hacked setting, notably including the correct definitons of Bool and Parcel
05:29 cognominal left 05:30 cooper joined, cooper left 05:37 [particle] joined 05:38 cooper|ipad left, cooper|ipad joined 05:40 cooper|ipad is now known as fish|ipad, y3llow left 05:41 y3llow joined
sorear std: "{ $^a }" 05:43
p6eval std 37a0cdd: OUTPUT«===SORRY!===␤Placeholder variable $^a may not be used here because the surrounding block takes no signature at /tmp/YkxuEohKd0 line 1:␤------> "{ ⏏$^a }"␤Check failed␤FAILED 00:01 113m␤»
05:45 wamba joined
dalek ecza/immediate: 00b71e5 | sorear++ | src/niecza:
Fix general loops, blast
05:45
ecza/immediate: 808ab79 | sorear++ | src/niecza:
Reimplement embeddedblock
05:46 wtw joined 05:47 kboga joined 05:58 wamba left
dalek ecza/immediate: 1cf951a | sorear++ | src/ (2 files):
Implement package-scoped variable references
06:01
06:38 noganex joined 06:41 noganex_ left 06:55 fhelmberger joined 06:59 envi_|2 joined 07:02 envi_laptop left, cognominal joined 07:10 mattp_ joined 07:11 Gothmog_ joined 07:21 mj41 joined
dalek ecza/immediate: 686aabc | sorear++ | src/ (2 files):
Implement package stubbing (using jnthn++ nom semantics)
07:22
07:22 jfried joined 07:24 Su-Shee_ is now known as Su-Shee 07:28 fish|ipad_ joined 07:31 fish|ipad left, fish|ipad_ is now known as fish|ipad, cognominal left 07:34 cognominal joined 07:36 flatwhatson left 07:37 lue left, lue joined
mberends hoping to tie up some loose ends about comparison and sorting led to the Unicode Collation Algorithm, a gorilla of a spec that relies on table lookups :-( If we ignore its rulings, it would be at our peril. www.unicode.org/reports/tr10/ 07:52
dalek kudo/nom: 5ca495b | moritz++ | src/CORE.setting/operators.pm:
add (partially hacky) prefix:<+>
07:53
07:53 Gothmog_ left
mathw Unicode is complicated 07:54
there's just no getting around it :(
Too many writing systems in the world
07:58 cognominal left, Gothmog_ joined
mberends and because of that, large tables are unavoidable 07:58
sorear calls it a night 08:00
08:00 cognominal joined
sorear tomorrow will be exciting 08:01
08:12 furryfish joined
mberends do tell! 08:15
pmichaud phenny: tell jnthn I figured out the problem with stubs/ACCEPTS -- Bool didn't have a .Str method that could be printed. Now fixed in 9874b46 (and my problem is resolved). 08:16
phenny pmichaud: I'll pass that on when jnthn is around.
08:17 scottp left, cognominal left 08:18 cognominal joined
dalek kudo/nom: 850bffe | pmichaud++ | / (2 files):
Add Bool.Str(). Temporarily remove List/Parcel/etc. from Makefile so I can develop them locally.
08:19
kudo/nom: 9874b46 | pmichaud++ | src/CORE.setting/operators.pm:
Merge branch 'nom' of github.com:rakudo/rakudo into nom
mberends does the default nom 'make' verify that the NQP and Parrot revisions are sufficiently new? 08:22
pmichaud Configure does, yes. 08:23
make does not.
we could put something in 'make' to verify it. 08:24
mberends ok, so after pulling in a bunch of new commits, is there an easy way to tell whether a new Configure needs to run?
pmichaud need to run Configure if Makefile.in or NQP_REVISION has been modified
mberends understandable. It would be nice if the verify was always done automatically. I suppose we need to compare timestamps or archive a bit of state. 08:26
I'll work on it if you point me in the right direction
pmichaud does git maintain file timestamps? 08:27
I'm guessing no.
mberends probably not
pmichaud that's good, then.
mberends git doesn't trust the local OS very much 08:28
pmichaud so easiest is probably to write tools/build/check-versions.pl
that script checks the timestamps of Makefile and Makefile.in, dies if Makefile.in is newer
mberends and the death terminates make? 08:29
pmichaud yes
mberends ok, will do it like that :)
pmichaud check-versions.pl should probably also accept the nqp script as an argument 08:30
we can then do the nqp version check
I can draft that one... just a sec
mberends would it make sense to locate the script in the nqp directories, to make it available for non-rakudo uses of nqp? 08:31
pmichaud probably not 08:32
08:32 cognominal left
pmichaud when building rakudo or other tools, can't assume we have an nqp checkout handy 08:32
someday one could be building from a pre-compiled/pre-packaged nqp 08:33
mberends ok
pmichaud gist.github.com/1018467 # skeleton of checking for sufficiently new nqp 08:34
mberends thanks! 08:35
08:35 jfried left
pmichaud then add a "check-version" target and dependency to the "all:" target in the makefile 08:36
mberends oh, yes. keep it modular.
pmichaud someone wanting to build rakudo even if versions don't check can do "make xmas", which doesn't do the check.
(we can also have a "nocheck" target if we need one.) 08:37
mberends there may be a use case for someone bisecting for a bug, or for someone gather historical benchmark trends. 08:38
pmichaud right 08:39
there are times when I've wanted to disable the check
mberends this looks like enough basis to go on 08:40
08:46 daniel-s joined
pmichaud phenny: tell jnthn I'm unable to set attributes in a method that gets called from a derived class. gist.github.com/1018497 08:50
phenny pmichaud: I'll pass that on when jnthn is around.
08:56 mtk left
moritz liskov fail :-) 08:57
08:57 tzhs joined
moritz is 0 and v the same in pir:: signatures? 09:00
09:01 scottp joined
pmichaud no 09:01
v == opcode doesn't return any value
0 == use first operand as return value
09:02 jfried joined
pmichaud thus pir::setattribute__0PPPs(self, ...) sets the attribute of self and returns self as the result 09:02
moritz shouldn't it be pir::setattribute__vPPsP then?
ah
pmichaud pir::setattribute__3PPsP(self, class, 'attr', value) would set the attribute of self and return value as the result 09:03
moritz funky
pmichaud it's an easy way to chain multiple pir operations together, especially for those pir operations (like setattribute) that don't normally return a usable value
09:04 daniel-s left, mtk joined 09:09 daniel-s joined 09:15 ewemoa left 09:24 Jason_ni left 09:25 MayDaniel joined 09:29 Mowah joined 09:33 scottp left
jnthn morning, #perl6 09:33
phenny jnthn: 02:37Z <pmichaud> tell jnthn class stub failure: gist.github.com/1018148
jnthn: 08:16Z <pmichaud> tell jnthn I figured out the problem with stubs/ACCEPTS -- Bool didn't have a .Str method that could be printed. Now fixed in 9874b46 (and my problem is resolved). 09:34
jnthn: 08:50Z <pmichaud> tell jnthn I'm unable to set attributes in a method that gets called from a derived class. gist.github.com/1018497
pmichaud jnthn: morning! o/ 09:35
moritz \o 09:36
pmichaud jnthn: would it bug you if I stubbed in Numeric/Real as classes until roles are ready?
it should be easy to switch them to roles when that's ready
09:36 Su-Shee left
jnthn pmichaud: Yes 09:37
(as in, yes you can do it)
pmichaud okay, cool
jnthn Though
roles may already work enough for that :)
Try it with role Numeric { } first :)
The type checking part may not work yet, if you need that.
pmichaud can we augment Int with "does Real" somehow?
jnthn does works, but only for a class doing a single role (no summation yet) 09:38
pmichaud my plan was
jnthn That attributes bug is concerning...
pmichaud class Numeric is Cool { ... }
class Real is Numeric { ... }
09:38 Su-Shee joined
pmichaud class Int is Real { ... } 09:38
09:38 amkrankruleuen left
pmichaud class Num is Real { ... } 09:38
(all in Metamodel/BOOTSTRAP.pm) 09:39
09:39 amkrankruleuen joined
jnthn You can do that if you wish. 09:39
I probably will have roles done enough to switch them later on today, or tomorrow.
pmichaud I might just wait for that then
jnthn Up to you - depends how blocked you are on it. 09:40
pmichaud will Numeric/Real have to go into BOOTSTRAP, or will we be able to do "augment Int does Real { ... }" like we do in master?
I'm more blocked on the attribute thingy right now... I thought I'd work on Numeric and Stringy while waiting for that to unblock
09:41 daniel-s left
jnthn Everything in BOOTSTRAP is seen by CORE.setting as if it was stubbed previously 09:41
So no augment needed.
pmichaud so, Int does Real might work "today"?
I might try that then :-) 09:42
09:42 icwiener joined
jnthn Int does Real probably will work today 09:42
Real does Numeric probably won't (I didn't do roles doing roles yet)
pmichaud okay 09:43
it's not super-high priority for me
I'm just using this to get more familiar with the overall setup
very nice, btw. I'm liking it more and more as I get into it.
it was nice to be able to fix Bool.Str easily.
jnthn pmichaud: ah, I don't think this attributes one can be too deep. The code works in NQP. 09:44
09:49 daxim joined, pernatiy left 09:50 pernatiy joined 09:59 MayDaniel left
jnthn pmichaud: Looks like container-y issue. 09:59
pmichaud: Thus how it affects Rakudo and not NQP.
pmichaud: Here's a workaround patch: gist.github.com/1018574 10:00
(for your local development; I'm going to fix the issue at its source though) 10:01
pmichaud I probably won't pick up lists again until after I head to sleep; the workaround patch will do fine though. 10:02
10:02 furryfish left 10:03 fish|ipad left
jnthn OK. It's fairly likely that the real fix will be in by then anyway. 10:03
bbkr_ hi. i'm looking for command that can convert unicode char to it's base char, for example ą => a, ó => o, etc. is there something built into P6 that can do this kind of magic?
pmichaud right.
moritz bbkr_: I don't think there's something built-in 10:04
jnthn pmichaud: oh, you used :D in the Bool patch :)
jnthn wonders how many times those are gonna show up :)
pmichaud: I think that you may have wanted multi there though
pmichaud oh, perhaps
doesn't it need :D there, though? 10:05
moritz bbkr_: once normalization forms are implemented, you can do somthing like converting to a decomposed normal form, and use the first codepoint
10:05 awoodland joined
jnthn pmichaud: It does need :D 10:05
bbkr_ moritz: thanks
jnthn pmichaud: It just also needs multi
moritz bbkr_: that's how I'd to it in p5 too
jnthn pmichaud: Now "say Bool" is probably busted. :)
10:06 f00li5h joined
pmichaud probably :) 10:06
yes.
I'll fix it.
jnthn thanks :)
pmichaud has anyone mentioned that CORE.setting is an awful directory name to have to type? 10:07
jnthn pmichaud: I don't
src/c<tab>
:)
pmichaud pmichaud@kiwi:~/nom$ ./perl6
> say Bool
Bool()
> say 1.Bool
Bool::True
jnthn \o/
pmichaud for me it has to be src/<shift>C<tab> 10:08
that shift is a bit of a pain
also, I'm very used to being able to type src/core/ without needing the tab completion :)
jnthn Oh, you have one of *those* operating systems... :P
I'd not thought of the need for shift for others...I can see how it gets annoying. 10:09
Now we've shuffled all the other stuff into "old", we could I guess go back to just calling it core
pmichaud I might do that when it annoys me enough
I'll do it while you're not in the midst of hacking though :)
jnthn :)
pmichaud Bool.Str (and other things) pushed. 10:10
dalek kudo/nom: c88a41c | pmichaud++ | src/CORE.setting/ (3 files):
Add Bool.Numeric and Str.Numeric. Switch prefix:<+> to use .Numeric.
10:13
kudo/nom: 5694d6e | pmichaud++ | / (5 files):
Add Numeric and Real as classes for now -- we'll switch them to roles later. Convert prefix:<+> to work with Numeric instead of Int/Num.
kudo/nom: 0dae6dd | pmichaud++ | src/CORE.setting/Bool.pm:
Add multi to Bool.Str (jnthn++).
10:14 scottp joined
moritz pmichaud: any objections to changing s/eq/==/ in t/00-parrot/03-op-logic.t ? 10:16
pmichaud no objection. 10:17
dalek kudo/nom: 0bea57f | pmichaud++ | src/CORE.setting/operators.pm:
Add prefix:<?>.
10:19
moritz pmichaud: prefix:<?> argument type should be Mu, not Any
now LHF: prefix:<so> 10:20
pmichaud fixing prefix:<?> to be Mu 10:21
10:21 pernatiy left
dalek kudo/nom: d7d9348 | pmichaud++ | src/CORE.setting/Bool.pm:
Add Bool.pred and Bool.succ.
10:24
kudo/nom: 6c83b5c | moritz++ | t/00-parrot/03-op-logic.t:
[t] remove useless coercion. We now pass 3 test files in t/00-parrot/
kudo/nom: c0e0cdd | pmichaud++ | src/CORE.setting/operators.pm:
Parameter to prefix:<+> should be Mu, not Any. (moritz++)
kudo/nom: 525e56a | pmichaud++ | t/00-parrot/03-op-logic.t:
Merge branch 'nom' of github.com:rakudo/rakudo into nom
10:24 woosley left
pmichaud do we have &return yet?
moritz seems not 10:25
pmichaud okay
moritz pmichaud: are you working on coercive infix ops (a la infix:<~>(Any, Any))? 10:26
if not I might do that after lunch
pmichaud moritz: not yet. but infix:<~> wants Stringy, so I was thinking of doing that.
jnthn no, no return yet 10:28
pmichaud is there a way to create "hidden subs" in the core?
i.e, subs that the public ones can call but are invisible to others? 10:29
10:29 koban joined
jnthn Maybe there's a way to do it with lexical scoping or some such 10:32
Nested sub or something?
pmichaud well, it's factoring out common capability
so it can't be nested in the public thingy 10:33
jnthn ah
pmichaud specifically, &return, &take, &return-rw, &take-rw, &fail, &next, &last, etc. all have a common underlying sub 10:34
jnthn If we had import working, we could put them all in some module, then things that wanted to call them could just import them
pmichaud I suppose I could hide it in a package
jnthn Or that, yes
pmichaud package Hidden { sub foo() { ... } }; sub public() { Hidden::foo() }
> say Any 10:36
Any()
> say ~Any
10:36 cognominal joined
pmichaud I put .Stringy into Mu, it might belong in Any (so that it will autothread) 10:38
jnthn pmichaud: Note it'd have to be our
pmichaud yes, our
jnthn pmichaud: Which probably means I should do our-scoped subs :)
pmichaud oh, yes, "our" doesn't work yet.
it's no rush, I can have a visible private sub for now. 10:39
I think I'll move Stringy to Any
dalek kudo/nom: f7f3f27 | pmichaud++ | src/CORE.setting/ (2 files):
First cut of .Stringy and prefix:<~> using .Stringy.
pmichaud well, hmm
I think I'll wait on that.
jnthn pmichaud: When I update NQP, should I bump something in Rakudo? 10:40
pmichaud tools/build/NQP_REVISION
...which maybe ought to be tools/build/NQP_VERSION now. "REVISION" is left over from the svn days. 10:45
oh, drat. 10:56
I can't write &return in Perl 6 because the exception gets caught by the &return sub.
did we have a way to indicate that a sub shouldn't have a return handler? 10:57
I guess I could do my &return := ... 10:58
er, my &return := { ... }
jnthn heh...hadn't seen that one coming :) 11:00
Maybe something like that will work 11:01
Currently there's not, afaik, a way to flag "no return handler"
pmichaud I think we discussed that there might be an "is xxx" trait for that 11:03
oh well, using the blocks seems to work 11:04
frettled is xxx? I know of some content filters that would be happy to gain that feature.
dalek p: 53824c3 | jonathan++ | src/ (4 files):
Move decontainerization logic into a place where it can be more easily re-used.
11:05
p: b43dcd1 | jonathan++ | src/ (2 files):
Add some missing decontainerization.
jnthn pmichaud: Another silly question. How do I get the version identifier? 11:07
pmichaud git describe --match 2*
you can also get it from nqp itself: nqp --showconfig or nqp --version 11:08
jnthn Thanks
pmichaud: BTW, above patch fixes the issue you ran into with attributes 11:09
Decontainerizations are like write barriers: easier to put in up front than completely retroactively add :) 11:10
tadzik has passed o/ 11:11
11:11 scottp left
frettled tadzik: congrats! 11:12
tadzik 4 more to go 11:13
jnthn tadzik: \o/ congrats! Piwo time! ;)
tadzik yeah, that's a conflict of interests. Piwo or internet :)
pmichaud muwahahahaha IT WORKS
gist.github.com/1018633 # hide your eyes before reading 11:14
tadzik oh nice
jnthn How can I read it if I hide my eys? :P
tadzik return is an exception?
pmichaud gist.github.com/1018634 # with results 11:15
tadzik: yes, it's an exception (or at least a jump in control flow)
and it can break out of multiple blocks 11:16
tadzik so a function call is a try?
jnthn pmichaud: Did := not work?
pmichaud jnthn: it did not. I suspect nom doesn't know that &'s are scalars yet
I get 11:17
Cannot use bind operator with this LHS at line 2, near " -> \\$parc"
or something like that
something prevents := from working, at any rate. 11:18
jnthn Bad.
jnthn will look
bind_op makes it look like it should work. :S
pmichaud: oh. :/ 11:19
&foo compiles down to a PAST::Op node that uses find_sub_not_null__Ps
Rather than a PAST::Var
11:20 PacoLinux left
jnthn ponders just making it compile to a PAST::Var node. 11:20
sub looks is purely lexical anyways.
pmichaud wfm
dalek kudo/nom: a936de0 | jnthn++ | tools/build/NQP_REVISION:
Bump NQP revision to get container fixes, which were keeping inherited attributes from working properly.
11:21
jnthn just deletes 10 lines of code and sees what happens :)
pmichaud when building new nqp I get 11:22
sixmodelobject.c:50:14: error: static declaration of ‘decontainerize’ follows non-static declaration
../6model/sixmodelobject.h:204:7: note: previous declaration of ‘decontainerize’ was here
hmm, my git fetch failed. 11:23
tadzik same error here 11:25
dalek kudo/nom: 6b519cc | jnthn++ | src/Perl6/Actions.pm:
Stop special-casing &foo style variable lookups. Unbreaks my &foo := ...
11:26
11:26 scottp joined
jnthn pmichaud: wait, is that when building the PMC? 11:26
pmichaud yes. 11:27
looks like when building the serializationcontext pmc
oh, wait, no 11:28
yes
dalek p: c6c1df5 | jonathan++ | src/pmc/sixmodelobject.pmc:
Try and fix build breakage.
jnthn See if that helps
pmichaud yes, that seems to have fixed it. 11:29
need to bump NQP_REVISION again
11:31 scottp left
jnthn done 11:33
kboga 3333333333333333333333
pmichaud gist.github.com/1018654 # &return works again 11:34
jnthn \o/
pmichaud++
pmichaud well, I want to do more work but the sun is coming up here and I should probably get some sleep since I'm having trouble seeing the screen :) 11:35
I should be able to do Parcel/List/Array a bit later, and then maybe I'll do gather/take
jnthn :) 11:36
pmichaud: Yes, sleep is probably sensible. :)
I've gotta sort out a few errands here, then I'll get back to roles.
pmichaud I have Parcel/List working locally; I got blocked on Array not wanting to work with the attribute bug you just fixed
dalek kudo/nom: 3d4de00 | jnthn++ | tools/build/NQP_REVISION:
Bump NQP revision again to get build fix; pmichaud++, tadzik++ for noticing/testing.
11:37
kudo/nom: b22eefe | pmichaud++ | / (2 files):
Add &return and &return-rw .
pmichaud afk, sleep 11:38
jnthn sleep well o/
11:39 PacoLinux joined 11:54 yinyin left 11:57 scottp joined 12:02 zamolxes joined 12:04 scottp left 12:05 satyavvd left 12:06 daniel-s joined
takadonet morning all 12:07
12:08 daniel-s left
jnthn o/ takadonet 12:10
takadonet jnthn: looks like nom is coming along 12:11
moritz it is. 12:12
jnthn takadonet: Seems to be, yes :)
pmichaud can't sleep yet :( 12:13
jnthn ohnoes
pmichaud jnthn: is there a way to detect if something is in a Scalar container?
takadonet i was able to build it the last few days but I just tried now and I'm getting : 'NQP revision 2011.05-54-gc6c1df5 required (currently 2011.05-36-gc9a6dba).' when doing perl Configure.pl --gen-nqp
jnthn pmichaud: yes
moritz takadonet: try perl Configure.pl --gen-nqp
takadonet: sorry, --gen-parrot
takadonet k
jnthn pmichaud: pir::is_container__IP($x) 12:14
takadonet i love the new startup time :) 0.2
0.2 s
jnthn takadonet: yeah, though we didn't put everything back in the setting yet...
takadonet: Though this branch isn't really the "make startup fast" one :)
takadonet well as long as it does not reach 1 sec i will be happy 12:15
jnthn takadonet: We need the full-blown serialization stuff for that.
takadonet ya i know
pmichaud jnthn: will pir::is_container also return true for Array and Hash containers?
takadonet wonder how fast things will go with my real life bioinformatics script that I wrote a while back in p5 and p6
jnthn pmichaud: No
pmichaud excellent.
just what I need then.
jnthn pmichaud: Not unless you give them a container spec. 12:16
pmichaud: Which we almost certainly don't want to do.
Basically, 6model/nqp has a mechanism for scalar container handling. You can tell it "this type is a container" and a few other bits.
pmichaud got it 12:17
jnthn So it's ready for languages other than Perl 6.
12:17 jfried left
jnthn And should interop just fine. 12:17
12:17 jfried joined
takadonet moritz: thanks that looks like it got it to work 12:25
12:28 scottp joined
pmichaud jnthn: any ideas about how we'll handle WHENCE closures? 12:29
12:33 jfried left
jnthn pmichaud: I've figured out lots of ways not to... :) 12:35
pmichaud: The spec is a tad busted, I fear.
pmichaud the general use case is that I need to be able to declare
jnthn pmichaud: Because it suggests Foo but WHENCE ...
pmichaud my $z = Any but WHENCE({ ... })
jnthn Which is decidedly problematic
Becuase Any is a type object. It has no state. 12:36
pmichaud it can't be cloned/instantiated?
jnthn So we can't mix in to it to add storage
It can be cloned
But that still doesn't give you any storage.
And if you instantiate it, it's not a type object any more... 12:37
And I figure that (Any but WHENCE({ ... })) should be undefined...
pmichaud yes, it should be.
jnthn Also, none of this deals with the fact that we need to handle:
pmichaud it's still Any for all intents and purposes
jnthn my $x = Any but WHENCE({ ... });
$x.foo; # uses the WHENCE 12:38
e.g. it auto-vivifies with the WHENCE there
12:38 jfried joined
jnthn Which really is a method cal interception. 12:38
*call
pmichaud master currently sticks the WHENCE closure in a property of a clone of the type object
I can repeat that hack in nom, unless you have a better idea 12:39
jnthn I'd really like to think of a better idea. The Parrot property hash is...ew. :)
pmichaud it won't occur often
jnthn But I think the spec is probably bogus there too
Foo{ ... }
That's fine
12:39 hudnix joined
jnthn But it shoudln't desugar to a "but", I suspect. 12:39
I also pondered an extra S-Table slot (same place we store WHAT, HOW, etc) 12:40
12:40 scottp left, hudnix left
jnthn But then realized that gets us into S-Table cloning. 12:40
Which scares me a little. 12:41
Mostly on memory management, though I think we'd actually be OK.
It boils down to shallow cloning the s-table and using the presence of WHENCE to know how to free memory. 12:42
The reason it'll cause problems is because sometimes we may update the s-table's pointers 12:43
gfldex i know it is most dangerous to distract you from your most important work, but this is to funny: www.cnet.com/8301-30976_1-20068778-10348864.html
jnthn e.g. if we publish a new method cache
The WHENCE'd s-table would keep the old one.
Though we could just toss the caches...
pmichaud is it possible for type objects to have storage that is separate/different from the instances? 12:44
jnthn hm
pmichaud i.e., if something is a type object, it has "type object storage", if it's an instance, it has storage as determined by the details of the type? 12:45
jnthn The question is how we'd specify the "type object storage"
pmichaud well, the only thing that would go in there (so far) would be a WHENCE property :) 12:46
jnthn It doesn't really fit with the whole 6model repr approach to do taht though.
The definition of type object pretty much is "we didn't allocate storage".
12:46 hudnix joined
jnthn As in, it actually uses that as the way it implements "am I a type object". 12:46
pmichaud right
jnthn I suspet the s-table slot and the shallow cloning may be best. 12:47
It's evil but less evil than other options.
12:47 donri joined
jnthn Oh. Hm. 12:47
No, I think it's OK actually 12:48
jnthn is worrying about a very unlucky case we could hit with GC non-ordering
But I think we get away with it.
moritz reading that, and being not very informed, it sounds to me as though that solution won't scale 12:49
what if we need another slot like WHENCE eventually, which also requires cloning the S-Table? 12:50
jnthn moritz: Hm
Also I realized that it doesn't help us with the auto-viv really. :/
Plus copying all the stuff in the S-Table is hardly efficient. 12:51
Well, it's one memcpy I guess...
pmichaud fwiw, "WHENCE" could potentially be a property on the container for now.
jnthn Yeah, I think Niecza does it that way
pmichaud i.e., instead of my $x = Any but WHENCE({...}) 12:52
it could be (my $x = Any) but WHENCE { ... }
jnthn (my $x = Any) but WHENCE { ... }
gah
(my $x = Any).VAR but WHENCE { ... } # maybe better
pmichaud yeah
for now I don't even mind
pir::set_whence(my $x, { ... }) 12:53
jnthn Well, if you add $!whence to Scalar then your set_whence there is just setattribute :)
pmichaud that would be fine with me.
jnthn Seems workable for the time being. 12:54
pmichaud I'll go with that for now. 12:55
12:55 cognominal_ joined 12:58 cognominal left
pmichaud what does the set_attribute look like in that case? 13:01
jnthn pir::setattribute__0PPsP(my $x, Scalar, '$!whence', { ... }) I guess 13:03
pmichaud need to define class Scalar { } 13:04
?
jnthn pmichaud: ?
pmichaud: Oh, it's already in BOOTSTRAP
pmichaud otherwise it doesn't seem to know about Scalar
jnthn huh :S 13:05
pmichaud I've noticed this on several classes
even if it's in bootstrap, to use it in a p6 program we also have to do "my class XYZ { }"
(in the core setting)
or maybe I'm observing something else and don't realize it
jnthn ohh 13:06
Yeah, it needs to get composed at some point.
pmichaud oh, it works
even without declaring Scalar
cool
jnthn Right, though we should declare Scalar anyway.
s/declare/define/
:)
pmichaud yes, I'll do that if you don't beat me to it at some point. 13:07
jnthn s/define/finish/ ;-)
OK
jnthn needs to lunch now :)
forgot, and getting kinda hungry ;)
pmichaud gist.github.com/1018802 # works great 13:11
13:11 bluescreen10 joined
moritz ooh, nice 13:12
13:13 koban left
PerlJam good morning #perl6 13:13
jnthn containers being real objects FTW 13:14
moritz does .VAR work?
jnthn moritz: not yet
pmichaud: One important thing to remember: getting and binding attributes are one of the few operations that explicitly do *not* decontainerize. 13:17
(thus why this works :)) 13:18
pmichaud what would be the code to invoke the whence property from C? (Assume I already have the whence object) 13:20
I can never remember the Parrot calling convention stuff
13:20 jfried left
jnthn pmichaud: Depends on context. 13:21
pmichaud if (!PMC_IS_NULL(scalar->whence)) { 13:22
/* invoke the whence object */
scalar->whence = PMCNULL;
}
jnthn (e.g. if we need to use a nested runloop or can get away with it)
pmichaud this is in Rakudo_cont_store
jnthn ah, nested then 13:23
moment
13:23 jfried joined
pmichaud I could potentially do the whence handling (in PIR) before ever getting to Rakudo_cont_store.... but I think we should vivify only after typechecks and rw checks are performed, not before. 13:23
jnthn yeah 13:24
Does the closure get any args?
pmichaud no
jnthn OK
I think fastest way is:
PMC *cappy = Parrot_pmc_new(interp, enum_class_CallContext);
Parrot_pcc_invoke_from_sig_object(interp, scalar->whence, cappy); 13:25
e.g. create an empty capture and invoke with it.
(Don't use Parrot_ext_call, it's slow.)
pmichaud ah, there's an example up above under "Invoke FETCH method" :-) 13:26
jnthn ah :) 13:27
even better
You need a simpler version of that :)
pmichaud right
trying it now
gist.github.com/1018824 # way too simple 13:30
gist.github.com/1018826 # the patch to make it work
jnthn :) 13:31
Wish the parametric roles were that easy :P
pmichaud jnthn++ # there needs to be a bigger increment here than just '++'
moritz jnthn += (^100).pick
pmichaud I was thinking of something like jnthn+! 13:32
jnthn★★
jnthn☚☚ 13:33
moritz .u ★
phenny U+2605 BLACK STAR (★)
jnthn .u ☚
phenny U+261A BLACK LEFT POINTING INDEX (☚)
13:34 slavik joined 13:35 Bzek left, Bzek joined, mkramer joined
moritz .u black belt 13:39
phenny moritz: Sorry, no results for 'black belt'.
pmichaud okay, let's try again for some sleep -- bbl 13:40
13:40 jaldhar left, jaldhar joined 13:42 perigrin joined
dalek kudo/nom: 30faa78 | pmichaud++ | src/ (3 files):
Add a simple $!whence slot for Scalar containers.
13:42
13:45 jaldhar left 13:54 mkramer left 13:56 jaldhar joined
jnthn fills out visa application so we can go to the BJPW :) 13:57
13:58 mkramer joined, kboga left 14:12 awoodland left
frettled I assume that's not Big Japan Pro Wrestling. :) 14:15
jnthn Beijing Perl Workshop :P
frettled Oooh, that will be interesting! 14:16
14:17 wtw left 14:21 MayDaniel joined 14:22 spq1 joined 14:24 mkramer left, [particle] left
jnthn frettled: Yes. I've never been to a Perl event there before.:) 14:26
14:27 [particle] joined
frettled jnthn: A life achievement award awaits you if you manage to visit a Perl workshop in every Chinese city with more than 5 million inhabitants. ;) 14:34
14:35 jaldhar left
moritz www.wolframalpha.com/input/?i=numbe...nhabitants # meh, not very informative 14:36
frettled Okay, it's not as bad as I feared, no cause for a life achievement award: en.wikipedia.org/wiki/List_of_citie...population 14:37
I was about to say "more than 1 million", but then I amended it as I typed it, because I thought there were many, many with more than 5 million. 14:38
sjn frettled: it's more than NINE THOUSAND!!1! o_O 14:39
moritz 12 if I can count
sjn :)
that's all that matters. 'nuff said.
frettled :D
sjn oh
maybe it goes "it's OVER NINE THOUSAND!"
sjn isn't completely trained in internet memes
PerlJam moritz: they aren't necessarily in order by population by default. 14:41
jnthn :) 14:42
frettled: One in every country in the world would be a more fun thing to shoot for. :)
PerlJam jnthn: you're just saying that because you're ahead in that imaginary race. 14:43
:-)
frettled jnthn: ooh, yes
jnthn: and if noone is yet holding a workshop in that country, you can opt to do it yourself for extra credit
jnthn PerlJam: I'm certainly near the front if not at the front. :)
PerlJam: Andrew Shitov is probably my main "competitor" :) 14:44
frettled jnthn: so, have you been to Liechtenstein and Uzbekistan yet?
PerlJam frettled: organizing a perl conference/workshop in a country you've never been to would be some feat.
jnthn frettled: No :(
frettled PerlJam: or very easy, just saying «I'm going, and I'm holding a workshop with a hackathon, even if it's just me!» 14:46
jnthn: aaw :(
jnthn: those are the only two doubly-landlocked countries in the world
PerlJam frettled: that's cheating though :)
frettled PerlJam: yup
PerlJam: could add the requirement that the workshop has to include at least three local people producing separate blog posts about it ;) 14:47
PerlJam an awesome award would be "perl conference farthest away from Earth's gravity well"
perl conference in space anyone?
frettled Great idea!
PerlJam we'd probably have to settle for a perl conference at the top of a mountain though 14:48
frettled or in Tibet
jnthn ooh
Lhasa.pm :)
Jungfraujoch.pm :)
frettled jnthn: Tingri.pm!
jnthn :)
frettled PS: toilet facilities are not very good.
PerlJam heh 14:49
frettled PPS: bring your own power source for recharging laptops
PPPS: the power source must run on diesel, as petrol engines don't work at that altitude 14:50
;)
(okay, okay, solar power and wind power would probably work)
PerlJam wonders if there ever was or will be interesting perl conference locations like: under ground, under water, in a volcano, on a glacier, in a jungle, etc.
frettled PerlJam: well, for a mere USD 70k or something like that, you can go visit the Titanic, so perhaps … 14:51
That would be the conference _closest_ to the center of the Earth.
PerlJam "Here's the perl program I wrote to optimally rearrange the deck chairs on the Titanic"
frettled Well, now I've probably got jnthn drooling over the prospects instead of producing useful code, so, uhm. :D
PerlJam: \o/ 14:52
jnthn :P
sjn PerlJam: LOL
jnthn is actually trying to get his trip to China at least a little bit sorted out. :)
And NPW :)
Just one week until the pre-conference meetup :) 14:53
sjn thinks frettled should come to NPW :)
frettled sjn: still the wrong dates for me :(
sjn frettled: you can always cancel the other stuff ;)
frettled goes for an afternoon jog, cheerio, and happy weekend! 14:54
14:57 kst left 14:58 buddhabrot joined 15:00 buddhabrot left 15:05 mkramer1 joined 15:06 kst joined, mkramer1 left, mkramer1 joined, xinming joined 15:08 mkramer1 left 15:17 MayDaniel left 15:19 tzhs left 15:20 wamba joined 15:23 cognominal_ left, cognominal_ joined 15:24 stephanepayrard_ joined 15:28 cognominal_ left 15:32 kst left, kst joined 15:34 alester joined 15:37 kst left, mj41 left
jnthn researching pre-workshop venue's beer quality & 15:42
tadzik speaking of beer, what has this world come to. 4 PLN for a can o'beer! 15:49
15:56 REPLeffect joined 15:57 Chillance joined 16:09 thou joined 16:15 jedai_ joined 16:17 am0c joined 16:22 daxim left 16:25 jfried left 16:28 jfried joined 16:34 pamera joined
mberends researching dutch hackathon venue's beer quality (as a control group) 16:37
16:38 stephanepayrard_ left, stephanepayrard_ joined
mberends tadzik: is that including or excluding the drinking-in-public ticket? :P 16:38
tadzik mberends: no, that's a can o'beer in the local shop! 16:39
mberends: btw, my semiconductors are passed :) 16:41
mberends \o/ congrats! 16:42
tadzik 4 more exams to go :) 16:44
oh, github now has an option to re-own a repo
so we could possibly keep modules under some perl6-module-authors organization, 'cos everyone's hacking on everything anyway 16:45
moritz re-own?
tadzik change the owner of the repository
github.com/blog/876-repo-transfers 16:46
moritz is this much different from forking the repo into the new account, and deleting it in the old one? 16:47
tadzik dunno 16:48
flussence it probably updates all the forks to point to the new one 16:49
16:50 jfried left 17:00 molaf joined
pmichaud good afternoon, #perl6 17:13
sjohnson yo 17:14
pmichaud pmichaud@kiwi:~/nom$ git pull 17:15
Already up-to-date.
...huh? no commits while I was gone? 17:16
17:18 thou left 17:26 thou joined 17:29 envi_|2 left
moritz nope :/ 17:31
17:35 Perl_ joined
Perl_ hiii, someone here ? 17:35
moritz Perl_: no
Perl_ lol
anyone can help me ? 17:36
moritz how can we know whether we can help you if we don't know what help you need?
Perl_ maybe, i can explain... 17:37
moritz but if you need help with Perl 6, here's one of the best places on this planet
Perl_ nice :D
yath moritz: did you mean "the only"? :)
Perl_ i think i am in the best place
moritz yath: not at all. People in my office also get good Perl 6 help :-)
17:38 envi_laptop joined
yath moritz: okay, point for you :) 17:38
Perl_ how can i redirect the *STDOUT to a subroutine ? 17:39
yath *STDOUT sounds like perl5
moritz Perl_: in Perl 6 that's spelled $*OUT
Perl_ sorry... 17:40
moritz Perl_: and you can replace it with any object with print() and say() methods
Perl_ its possible ?
moritz rakudo: class UCPrinter { method say(*@args) { pir::say(@args>>.uc.join) } }; $*OUT = UCPrinter.new; say 'foo' 17:41
p6eval rakudo 4a6d21: OUTPUT«FOO␤»
moritz Perl_: that's an example of intercepting a normal say() call, and doing something else with it (here, converting it upper case before actually printing it) 17:42
17:44 pamera left 17:45 hercynium joined
Perl_ and it in PERL5 ? 17:47
moritz Perl_: ask in a Perl 5 channel (or read 'perldoc perlopentut')
Perl_ harshhhh
moritz Perl_: not harsh, just trying to stay on topic
flussence no, he's asking about "PERL5", not Perl 5 :)
yath print-eval-read-loop?
Perl_ can you give me the link of channe of perl 5? 17:48
moritz oh wait, you need Inline::PERL for that
Perl_: #perl or #perl-help or so
Perl_ i need more explain than the perl -help could give me
:)
moritz then read perldoc perlopentut 17:49
Perl_ hmmm like linux 17:50
^^
colomon what does $*OUT usually contain? errr, or rather, how do you specifically specify std out? 17:51
moritz rakudo: say $*OUT.WHAT
p6eval rakudo 4a6d21: OUTPUT«IO()␤»
moritz rakudo: say $CORE::OUT.WHAT
p6eval rakudo 4a6d21: OUTPUT«Null PMC access in find_method('WHAT')␤ in main program body at line 2:/tmp/GSuk7AXCMp␤»
moritz rakudo: say $GLOBAL::OUT.WHAT 17:52
p6eval rakudo 4a6d21: OUTPUT«Null PMC access in find_method('WHAT')␤ in main program body at line 2:/tmp/fA243DueCC␤»
moritz rakudo: say $PROCESS::OUT.WHAT
p6eval rakudo 4a6d21: OUTPUT«IO()␤»
moritz that's it
which in rakudo is IO.new(:PIO(pir::getstdout__P)); 17:54
17:56 MayDaniel joined
dalek kudo/nom: 3981965 | moritz++ | src/CORE.setting/ (3 files):
implement infix<+>(Any, Any)

This is the same way as in master, through a .Bridge method which converts to a common numeric type if no direct multi is found.
I don't quite like the current factoring, because something like "3" + 4.4e0 goes through (Any, Any), then (Real, Real) and finally through (Num, Num) - three dispatches for a single, coercive multi.
Any suggestions on how to improve it (and still keep it extensible when the user adds enw Real types) are very welcome.
17:58
17:59 molaf left, thou left
colomon hmmmm 17:59
18:00 kst joined
colomon rakudo: "3".Numeric.WHAT.say 18:00
p6eval rakudo 4a6d21: OUTPUT«Num()␤»
18:00 kanishka joined
pmichaud in nom that will be Int() 18:00
colomon it certainly should be 18:01
I suppose you could implement infix:<+>(Real, Num) 18:02
18:03 Reaganomicon joined, furryfish joined
colomon or do something like the Niecza approach: have a bunch of the default approaches coded right in infix:<+>(Real, Real). 18:04
guess it probably depends on how efficient dispatch is
18:07 Eevee joined
pmichaud is .Bridge mainly a way of saying "convert to Num"? 18:08
benabik NQP Question: Does NQP handle multiple return values? 18:09
18:09 kanishka left
pmichaud benabik: it can return a list, yes. 18:09
it doesn't unpack into a list
18:10 kanishka joined
pmichaud $a := foo(); # if foo returns multiple values, then $a will be a RPA 18:10
colomon The idea of it is that it doesn't have to be Num, because what you want to convert to by default depends on what you want to do. But with current Rakudo, it's "convert to Num".
pmichaud what would be an example of converting to something other than Num ?
colomon Depending on what you're trying to do, Rat or FatRat may be more appropriate 18:11
pmichaud but Bridge can't know that, can it?
you're saying that Bridge is context sensitive somehow...?
colomon not at all
I'm say some implementations may want a different Bridge
18:12 huf joined
pmichaud I don't understand. I need a better example. 18:12
18:13 jfried joined
colomon what happens if you say something like (2 ** 1000000) > (5/4) ** 20000? If you convert both sides to Num, it's just Inf > Inf. 18:14
18:14 huf left
pmichaud it is? why? 18:15
I mean, why would one convert to Num there anyway?
(in a "real Perl 6 implementation", at least)
I guess because those values won't fit in Int or Rat? 18:16
colomon because -- at least in theory -- you don't want to write out comparison operators comparing every possible pair of numeric types.
pmichaud I understand that part, yes.
does Bridge apply to anything other than the reals?
18:17 huf joined
colomon just reals 18:17
18:17 ymasory joined
pmichaud then why the abstraction layer? if an implementation things that num is its best core numeric type, it should do &infix:<+>(Real $x, Real $y) { $x.Num + $y.Num } 18:18
*thinks
colomon the abstraction layer is so you can write code that doesn't care what the best core numeric type is. code portable between different implementations of Perl 6, that is. 18:19
pmichaud for primitive ops, I suspect performance is much more important than portability. Perhaps others disagree with me. 18:20
colomon for primitive types, it's entirely possible that doing it in the Perl 6 type system at all is a big disadvantage 18:21
pmichaud anyway, removing Bridge wouldn't resolve the problem that moritz++ notes in the commit message
so it still needs some thinking
colomon Niecza's math operators do the dispatching between core types right in C#. I'm guessing that is a huge performance win. 18:22
pmichaud well, yes -- rakudo's equivalent would be to do the dispatching in PIR (*sigh* which is where we started) 18:23
anyway, I'll let it pass for now. I suspect a slightly different approach would be
sub &infix:<+>(Num $x, Real $y as Num) { ... } 18:24
and
sub &infix:<+>(Real $x as Num, Num $y) { ... }
(modulo ambiguous dispatch)
then "3" + 1e0 would avoid the extra dispatch to &infix:<+>(Num, Num) 18:25
or even just 18:26
sub &infix:<+>(Real $x as Num, Real $y as Num) { ... }
and do a primitive Num add right there. 18:27
colomon is that (in theory) smart enough to avoid casting $x to Num if it already is a Num?
pmichaud well, presumably Num.Num returns self 18:28
which is what Bridge currently does
(for Nums)
colomon right
pmichaud I don't remember if "as XYZ" avoids the cast... but I think it does. 18:30
basically, "ABC $x as XYZ" means to typecheck based on ABC, but then cast to XYZ. Presumably one could check for XYZ-ness before doing the cast. 18:31
colomon is there any practical functional difference between infix:<+>(Real $x, Real $y) and infix:<+>(Real $x as Num, Real $y as Num)? From a dispatching point of view, I mean.
pmichaud depends on where you put the Num+Num logic 18:32
the second one doesn't require a separate &infix:<+>(Num, Num)
sorear pmichaud: niecza has an extension "is return-pass" which can be applied to subs to disable the return handler 18:33
pmichaud sorear: good to know, thanks
colomon pmichaud: Right, but will it always match the same calls? (Seems like yes, but I don't know for sure.)
18:34 Perl_ left
pmichaud colomon: I don't know... I'm somewhat hesitant about "always" when talking about dispatch :) 18:34
flussence I have a silly-sounding question (is there a FAQ for these?): why is the literal «1e0» a Num instead of Int? 18:35
colomon flussence: because that's how we defined it. :)
flussence fair enough :)
18:35 MayDaniel left
colomon flussence: the e<whatever> is the literal signal that we have a Num. 18:35
flussence: without it, your literal is some other kind of number. (Unless it's a Rat-like thing that cannot be stored in a Rat.) 18:36
pmichaud: I guess the other way of asking is, is "as Num" ignored during the dispatching? 18:37
TimToady wonders if putting the 'as Num' on a proto can figure out which multis need the coercion and which don't 18:38
and when we know the candidate lists at compile time, we can compute the coercions at compile time 18:40
18:41 buubot_backup left
pmichaud colomon: I don't think "as Num" affects the dispatch selection, no. 18:41
sorear good * #perl6 18:42
colomon pmichaud: to me that makes infix:<+>(Real $x as Num, Real $y as Num) sound like the ultimate solution. it's every bit as flexible as having infix:<+>(Real $x, Real $y) and infix:<+>(Num $x, Num $y), faster, and requires less code. Seems like a huge win. 18:43
mberends good * sorear
pmichaud colomon: cool. now we just need jnthn++ to implement "as XYZ" in nom. :-) 18:44
dalek kudo/nom: 9c4146d | mberends++ | tools/build/ (2 files):
[tools/build] suggest when and how Configure.pl needs to be re-run
18:45
tadzik oh nice 18:46
pmichaud mberends: + @$(PERL) tools/build/check-versions.pl install/bin/nqp 367
probably wants to be
@$(PERL) tools/build/check-versions.pl $(NQP_EXE)
so you're checking the version of NQP being used to build Rakudo, as opposed to assuming it's in install/bin/nqp :) 18:47
moritz it does in nom :-)
mberends thanks pmichaud, will fix immediately :)
moritz sorry, answering to stale chat
moritz should backlog the whole stuff
pmichaud is there a reason for not using -M for the file modification times? 18:48
(ooc)
colomon pmichaud: as far as I can see, there's no conflict in that solution with .Bridge, either -- it just won't be used for normal math operations on the built in types.
mberends pmichaud: I thought that was a value in days, the stat is in seconds. (But the days may be fractional) 18:49
pmichaud my experience has been that -M has good enough resolution to distinguish seconds... but perhaps my experience is not so complete :) 18:50
colomon wonders if a BridgeType type alias could make it easy to remove that penalty for user-defined math operations and user-defined real types...
mberends pmichaud: I thought about -M and wasn't sure... but I'm happy to switch to that and try it 18:51
18:52 aindilis joined 18:54 REPLeffect left
dalek kudo/nom: dd97747 | mberends++ | tools/build/ (2 files):
[tools/build] use $(NQP_EXE) and for timestamps -M as suggested by pmichaud++
19:01
19:02 buubot_backup joined 19:04 mkramer joined 19:08 mkramer left 19:09 REPLeffect joined 19:14 icwiener left
dalek kudo/nom: ac26106 | pmichaud++ | / (4 files):
Initial implementation of Array, List, and Parcel.
19:17
kudo/nom: 3015a76 | pmichaud++ | src/CORE.setting/Array.pm:
Use a vivification closure for Array.at_pos.
kudo/nom: f5bccfc | pmichaud++ | / (5 files):
Merge branch 'nom' of github.com:rakudo/rakudo into nom
kudo/nom: ba0e74c | pmichaud++ | tools/build/ (2 files):
Merge branch 'nom' of github.com:rakudo/rakudo into nom
kudo/nom: fd1c2a1 | pmichaud++ | / (5 files):
Add EnumMap and Hash. Refactor Array and List slightly.

Note that these implementations of List, Array, etc. are currently intended to "get basic functionality in place" rather than
  "optimized for performance". Once we have things fleshed out
a bit further in nom, we will revisit the implementations to figure out where the hotpaths are and how to improve them
  (e.g., List.gimme).
19:19 gbacon_ joined, araujo left, kanishka left
tadzik nombuild fails for me 19:32
moritz fine here
tadzik with --gen-nqp probably
19:33 kaare_ joined
tadzik that's what fixed that for me: wklej.org/id/544262/ 19:33
pmichaud ah, yes 19:34
PerlJam tadzik: it "fails" if you've got a root-installed parrot, but attempt to install rakudo/nqp as non-root :)
pmichaud that's correct.
pmichaud fixes
19:37 bluescreen10 left
colomon is --gen-parrot now obsolete? 19:37
pmichaud no
moritz m 19:38
19:38 bluescreen10 joined
colomon Is --gen-parrot-option broken, then? I'm getting the PCRE error even with --gen-parrot-option=--without-pcre in my Configure.pl line. 19:38
pmichaud there is no more --gen-parrot-option, it's now --parrot-option. 19:39
it's probably not implemented in nom, I can add it.
colomon I'd appreciate that.
pmichaud --parrot-option now pushed. 19:41
(not tested... that's your job :) 19:42
colomon roger
dalek kudo/nom: 004e57a | pmichaud++ | src/CORE.setting/traits.pm:
Stub in a "is rw" trait for Routines.
19:43
kudo/nom: 6aec0a7 | pmichaud++ | src/CORE.setting/ (2 files):
Be careful about using \$ref that will appear inside of closures.
kudo/nom: b5b3d7a | pmichaud++ | tools/build/check-versions.pl:
Fix path for NQP::Configure in check-versions.pl; patch courtesy tadzik++.
kudo/nom: 7c85e61 | pmichaud++ | src/ (2 files):
Initial version of postcircumfix:<[ ]> and postcircumfix:<{ }>.
kudo/nom: 6dcae2e | pmichaud++ | Configure.pl:
Add --parrot-option to Configure.pl.
pmichaud phenny: tell jnthn Array and Hash now implemented in Nom, if you want to work on "my @a" and "my %h" and the like. :) 19:44
phenny pmichaud: I'll pass that on when jnthn is around.
TimToady pretty soon you guys are going to be able to knock out a new Perl 6 implementation in about a week or so... :)
tadzik 10 years of practice :)
TimToady it shows :)
pmichaud I've only had seven. 19:46
PerlJam pmichaud: has it been that long?
pmichaud I "started" in summer 2004
(but didn't actually get up to speed until about a year after that) 19:47
PerlJam: and yes, it's been "that long" (sigh)
jnthn back 19:48
phenny jnthn: 19:44Z <pmichaud> tell jnthn Array and Hash now implemented in Nom, if you want to work on "my @a" and "my %h" and the like. :)
jnthn has had less than 4 :)
tadzik is approaching 1, if that counts :)
jnthn I think that puts me at one implementation of roles per year.
:) 19:49
pmichaud I think I've had about one implementation of array/list per year, yes.
tadzik do they get better? 19:50
pmichaud oh, absolutely
this latest one is going together quite nicely
it's even.... readable (I think)
tadzik then I see that as progress
jnthn So are the roles
Generally, ever implementation of roles reifies more concepts.
colomon pmichaud++ # fix seems to have worked
pmichaud Generally, every instance of lists reifies more values. :-P
jnthn The current roles implementation has 4 meta-objects.
(as in, current one I'm doing) 19:51
Up from 2, which was up form 1. :)
pmichaud colomon: excellent, thanks
benabik jnthn: Next version will have 8? 19:52
jnthn benabik: I think I may have run out of concepts to split up. :)
pmichaud jnthn: Don't worry, TimToady++ will add more.
jnthn O.O
pmichaud: Do Array and Hash have $!container_descriptor s? 19:53
pmichaud jnthn: not yet
jnthn: you can add if you want
jnthn k
Probably need that :)
uh-oh 19:54
TimToady I think most of the concepts that have been split up so far were implicit in the original design, so you'll just have to find more concepts to split up there :)
jnthn "We are very close to physical limit of time slots for the talks #ye2011. Please submit now if you want to give a talk!"
jnthn submits
pmichaud uh-oh
19:54 thou_ joined
pmichaud I guess I should submit. 19:55
jnthn pmichaud: Planning to come to YAPC::Europe?
OK
pmichaud jnthn: what are you submitting on?
jnthn pmichaud: what are you...oh.
:)
EDEADLOCK :)
pmichaud jnthn: I figure you've given talks already this year and kinda know what you want to talk about.
I have only done one (very generic) Perl 6 talk this year.
19:55 kaare_ left
jnthn pmichaud: You'da thunk so but I'm not sure what to do. 19:55
Normally I write something special for YAPC::Europe 19:56
So all the folks I spoke for at workshops have something new to see.
pmichaud too bad we haven't done anything significant recently that you could write about :)
jnthn :P
pmichaud: I guess question is, what do you want to do?
pmichaud I'm not at all picky
jnthn I guess traditionally, you've done the talk in the role of "Rakudo update"
19:57 cognominal_ joined
pmichaud I can do a generic "here's where we are with Rakudo talk" or an NQP talk (but I think with recent changes you're entitled to the nqp talk) or focus on some feature of the nom implementation or ... 19:57
I've also thought about doing a "State of the Butterfly" talk to correspond to the "State of the Velociraptor"
jnthn I think there should be a talk looking at the latest tech and goodies in Rakudo land, and some roadmap
Or at least touching on that 19:58
So folks know where things stand.
I could very easily talk about 6model and meta-programming.
PerlJam I think most people still tend to think the butterfly hasn't left its chrysalis
pmichaud I'm also thinking about a talk on "Perl 6 as a disruptive technology" but it might be a bit too provocative/controversial
19:59 george_z0rwell joined
pmichaud I can also talk about Rakudo performance over the past year 19:59
jnthn a bit too...disruptive? :)
19:59 aindilis` joined, stephanepayrard_ left, Reaganomicon left
pmichaud (and hopefully by yapc::eu we'll be able to benchmark nom) 19:59
19:59 aindilis left 20:00 frettled left
jnthn I guess most of what I've focused on over the last year is metamodel stuff and preparing for more static analysis. 20:00
20:00 frettled joined
jnthn And gradual typing and such stuff. 20:00
20:00 s1n joined
pmichaud Anyway, I'll do some sort of "Rakudo talk" 20:03
I don't want it to be just "status", though -- would like something a bit spicy in there.
jnthn yeah, quite
20:05 mkramer1 joined, mkramer1 left, cognominal_ left
pmichaud afk for a bit 20:06
sorear ...I'm back 20:07
20:07 furryfish is now known as furryfishy
jnthn backlogs what happens while we was on his pub research mission :) 20:08
pmichaud oh, before I go: interesting statistic: gist.github.com/1019662 20:11
20:11 masak joined
masak allo, #perl6 20:11
pmichaud it takes us less time to compile the setting to .pir (9.74 seconds) than it takes for parrot to compile the .pir to .pbc (16.74 seconds)
which either means our compilation speed has improved greatly, or we're generating too much .pir 20:12
tadzik or both :)
20:12 cognominal_ joined
tadzik masak: allo allo 20:12
pmichaud ....and it's not the latter, I don't think 20:13
pmichaud@kiwi:~/nom$ wc -l src/gen/CORE.setting.pir
28050 src/gen/CORE.setting.pir
sorear pmichaud: I remember back when compiling the setting to .pir took 36,000 seconds :) 9.74 is _impressive_ 20:16
jnthn pmichaud: Wait, the PIR => PBC takes longer than the Perl 6 => PIR? 20:17
tadzik the setting got a bit smaller
jnthn pmichaud: Oh :/ 20:18
pmichaud: You know all those little loadinits we no longer have? :)
pmichaud: And how PIR is currently our "serialization format"? :) 20:19
jnthn suspects we're blowing up the register allocator. :)
benabik The register allocator is a little simple..
jnthn sees some easy improvements 20:21
tadzik I like those
jnthn (to our code-gen, not to the reg alloc)
tadzik they're easy, and they're improvements :)
jnthn It's doing stuff I didn't think it was doing.
20:22 envi_laptop left
jnthn tadzik: ooc, is the startup time still fairly decent? I remember you measured it when we had even less in the setting. 20:22
tadzik hmm, I'll have to track down the logs to see how it was :) 20:23
moritz it's gone up a bit
from ~270ms to 360ms
masak strangelyconsistent.org/blog/june-8...of-strings updated for the new C<substr> API.
tadzik ./perl6 -e "say 'Hello, world'" 0,32s user 0,06s system 98% cpu 0,388 total
jnthn tadzik: I forget what you had before :) 20:24
moritz: OK, thanks.
tadzik jnthn: let me see that in the logs 20:25
I suppose "Hello world" does not occur too often. But was I using the comma...
2011-06-01 23:35:03 tadzik ./perl6 -e 'say "Hello world!"' 0,25s user 0,03s system 99% cpu 0,281 total 20:26
we need "isnomstillfast.com" 20:27
masak :) 20:28
pmichaud any chance that nom will appear on p6eval (before it becomes 'master')? 20:29
jnthn: yes, PIR=>PBC is taking about 60% longer than Perl 6 => PIR :)
tadzik that's a bit weird 20:30
PerlJam When does it look like nom will become master? 20:31
20:31 ymasory_ joined
pmichaud and although CORE.setting is currently mostly stubs, 941 lines of CORE.setting(.pm) results in 28050 lines of PIR, which means a factor of about 28:1 20:31
20:31 ymasory left
pmichaud ...which is not very much. 20:31
PerlJam: I don't know. I doubt we'll be ready for June. July is entirely in the realm of possibility.
normal release date for 2011.06 would be Jun 23 20:32
that's 13 days from today
tadzik wow, wow 20:33
pmichaud that said, with as quickly as things are coming together, June isn't entirely out of the question. But then again, NPW is next weekend.
masak yeah, too bad :)
jnthn It is? O.O
tadzik I'm jealous
jnthn Also I ahve to write a keynote for the event the day before NPW. :)
pmichaud wonders about the modifier there 20:34
is it a keynote for the event that occurs the day before NPW, or is the day before NPW when jnthn++ will write his keynote? ;)
jnthn oh!
I hadn't seen the ambiguity :P
pmichaud I suppose it could be both. :)
jnthn pmichaud: There's an (unrelated) event my $dayjob is co-hosting the day before NPW 20:35
pmichaud you could write the keynote for the event that occurs the day before NPW on the day before NPW :)
jnthn I think I'll try and write the keynote a little further ahead of time than that :P
pmichaud: if I'm generating PAST that calls a pirop, and there's an I register, what PAST can I generate to stop it making PIR that instantiates an Integer PMC only to immediately unbox it to use in the op? 20:36
pmichaud: It turns out the deserialization code is chock full of that.
Which is wasteful in terms of registers, when a literal would be just fine.
(These are all literals.)
pmichaud jnthn: can you point me to the code in question? 20:37
mainly you need to make sure the signature is correct
masak pmichaud: I'm afraid I overpromised yesterday with "crunchy chocolate action". :/ that's not until in a week. today's the Moon Lander. :) 20:38
pmichaud masak: no problem :)
masak writes a moon lander
tadzik :)
place your bets gentleman, what would it be?
jnthn pmichaud: oh 20:39
pmichaud: It's more involved than that, I think. :(
pmichaud can you point me to the code in question? ;) 20:40
jnthn pmichaud: Yeah, it wasn't the bit I thought it was. Finding the relevant thing.
pmichaud it looks to me (from looking at the pir output) that the arguments to repr_bind_attr_* are being forced to be PMCs by the PAST 20:41
jnthn pmichaud: src/PAST/SixModelPASTExtensions.pir
pmichaud: That's the code that generates natively typed attribute binds/gets.
pmichaud: It kinda sucks. 20:42
I couldn't figure out how to do better though. I may well have missed something with regard to the whole coercion model.
pmichaud # We have three cases here. 20:43
# 0 children = use self
# 1 child = object to look up on
# 2 children = object to look up on + class handle
which case is this one?
sorear How many registers does the current PAST::Compiler need for "$x + $y; $x + $y; $x + $y;" (NQP)? 6? 9? 20:44
jnthn pmichaud: Rakudo and NQP will always emit 2
pmichaud call_on = self.'as_post'(call_on, 'rtype'=>'P')
I suspect that's forcing a PMC 20:45
sorear o/ masak
pmichaud (it might need to be one)
masak \o sorear
benabik sorear: I count 9. 20:46
jnthn pmichaud: Line 146 onwards are the more interesting ones, I think
pmichaud oh, wait
when this gets called, bindpost is already a POST tree? 20:47
jnthn pmichaud: I think call_on is the invocant.
pmichaud: er
pmichaud: the name suggests so
pmichaud: I understand this less than you might hope. :)
(It was quite a struggle to write something that actually worked.)
I suspect I'm missing something.
pmichaud what generates an attribute_6model pasttype ? 20:48
jnthn pmichaud: Any attribute access in NQP or Rakudo.
pmichaud: It's basically a replacement for attribute that understands 6model enough to ask it whether the type is a native or not.
And if native, what sorta native. 20:49
pmichaud okay, looking.
jnthn Thanks.
pmichaud I'm guessing the problem arises when we have $!attribute := <value> 20:50
<value> is being coerced into a PMC by :pasttype<bind> before it ever gets to attribute_6model 20:51
jnthn pmichaud: That sounds familiar.
pmichaud yes, :pasttype<bind> has:
rpost = self.'as_post'(rpast, 'rtype'=>'P') 20:52
rpost = self.'coerce'(rpost, 'P')
ops.'push'(rpost)
jnthn Hmm. Premature commitment?
I guess we never had the native case before then.
pmichaud well, until 6model it wasn't possible to bind to anything by a PMC
*but
jnthn Ah, true. :) 20:53
pmichaud also, :pasttype<bind> doesn't have any information to know what sort of thing it's binding.
20:53 bluescreen10 left
sorear yiiiikes native types it looks like rakudo/nom is trying to beat niecza on speed :) 20:53
pmichaud since it's a node above the attribute node
masak sorear: well, we have to keep things interesting, don't we? :) 20:54
jnthn pmichaud: I think in PAST2DNST I passed down the PAST for the value to bind by having it in a contextual and letting the actual var node deal with it. 20:55
Or something like that.
sorear in niecza, var nodes are variadic, 1 arg = bind, 0 arg = fetc
dalek kudo/nom: 185801c | moritz++ | src/CORE.setting/operators.pm:
add coercive Str ops. If any of those need .Stringy instead, it is an easy search+replace for pmichaud++
20:56
pmichaud moritz: I know that infix:<~> is Stringy 20:57
jnthn: I'm guessing we need a new "bind" pasttype that lets the lhs decide the coercion 20:58
jnthn pmichaud: That could also work. 20:59
21:00 ymasory_ left
pmichaud it's probably a pain to try to have NQP figure out when a bind is to an attribute versus something else 21:00
easier to do it in the bind pasttype 21:01
jnthn pmichaud: I suspect so, yeah
pmichaud do we have any other native binds yet? 21:02
jnthn pmichaud: Just looked through your Array/List/EnumMap/Hash. :)
pmichaud: no, only to attributes
pmichaud I'm guessing we'd want the others someday also.
jnthn pmichaud: Though that may be all we need (more)
pmichaud I wish I had more latitude to fix this in Parrot.
jnthn my int $a := 42; # don't think this works, you can only assign natives 21:03
sorear I prefer to think you can only bind natives
pmichaud presumably the PAST::Var node knows it's native, though, and would select a different fetchop/storeop
sorear it's clear you can't do both
jnthn sorear: That was my first intuition too, but apparently not ;)
sorear jnthn: so why does nqp allow binding to native typed attributes? 21:04
jnthn sorear: Right, and since binding feels more referency I think the last call on this was that it should be assignment.
sorear: Because it doesn't have assignment :P
sorear: I think I implemented it and then asked the question also ;)
sorear maybe nqp should allow my int $a := 42 for the same reason. :)
jnthn hehe
Well, the thing is, what does my int $a actually mean 21:05
Does it mean "we have a Scalar[int]"
masak dang, I crashes into the moon :(
*crashed
this game is hard! :)
jnthn Or does it mean, we have an int register?
sorear it allows you to use $a as a synonym for an I slot in the lexpad
21:05 bluescreen10 joined
sorear or does it? 21:05
jnthn :) 21:06
I dunno, I put off thinking too hard about them :)
21:06 araujo joined, araujo left, araujo joined
sorear yeah 21:06
jnthn Maybe after roles... :)
sorear I'm reminded of our last discussion
I remember deciding that it should create Scalar[int]
And decontainerization should be orthogonal
However it begs the question - can we ever decontainerize attributes? 21:07
jnthn Anyway, I think the "desired syntax" is assigny, not bindy.
Well, that's why I'm a bit reluctant on the Scalar[int] approach
sorear containers are not free
masak yay! second landing attempt was successful! :) 21:08
sorear I estimate that 1/3 to 1/2 of the memory use of niecza's Op-trees are actually the containers
jnthn Because P6opaque just puts the native int straight into the attribute.
sorear $some-op.lhs is a 6 word Scalar-instance
which points to $some-other-op
jnthn pmichaud: (latitude to fix this in Parrot) what do you want to change? 21:09
pmichaud: also, is this a thinko: 21:10
-sub infix:<,>(|$) {
+my sub infix:<,>(|$) {
(my is the default)
pmichaud it's just the result of a cut-and-paste from another file 21:11
(I re-developed Parcel/List/Array in a separate file then cut+paste them into CORE.setting, rather than recompiling CORE.setting for each minor change) 21:12
(latitude) I'd want to change the structure of :pasttype<bind> 21:14
but that's probably too radical a change for Parrot
(it also involves fixing the PAST::Var node types) 21:15
We'll just fix it when we re-implement PAST in NQP :)
sorear too late, iiuc
benabik has already started that
pmichaud I think he's implementing in nqp-rx
jnthn yeah, I believe so too
Also, I think the big part of what he's doing is POST => PBC 21:16
benabik jnthn: POST -> PBC is done-ish. I'm trying to get everything needed for PAST -> PBC
This does involve getting PAST into NQP-rx so it's hackable 21:17
jnthn benabik: POST -> PBC is mostly done? Wow!
benabik jnthn: bacek worked on it for a while. 21:18
jnthn: But he added new POST types to do it, so I have to teach them to PAST.
jnthn Magical coding robot is magical.
moritz doesn't feel motivated to do all the coercive numeric operators right now 21:21
jnthn moritz++ # already did the string ones :) 21:22
21:22 tomize joined
dalek kudo/nom: ebbf34c | jnthn++ | src/CORE.setting/ (2 files):
Really hard patch to make my @a and my %h work properly.
21:22
jnthn moritz: Is there any chance of a nom target on p6eval? 21:24
moritz: Or are you the wrong person to ask about that? 21:25
21:25 PhatEddy joined
moritz jnthn: there is a chance, yes :-) 21:26
sorear moritz, diakopter, and I have shell access to p6eval
moritz: what all needs to be done to add a new p6eval target?
moritz sorear: 1) set up a dir where the target is compiled (typically clone some source repo) 21:27
sorear: 2) a build script in the evalbot repo
sorear: 3) a crontab entry
sorear: 4) a patch for evalbot.pl to accept the target
dalek kudo/nom: 145e466 | jnthn++ | src/Perl6/Actions.pm:
Fix %h<foo> style hash indexing.
21:28 hercynium left
sorear I see moritz is already started 21:29
dalek albot: ad9b9cf | moritz++ | build-scripts/rebuild-nom.sh:
initial build script for nom
21:34
albot: b87bf78 | moritz++ | evalbot.pl:
add nom target
pmichaud jnthn: I'm going to have to think a bit on the attribute_6model stuff
it's not a trivial fix :(
moritz (both of the commits to evalbot are not tested in any way. Be impressed if they actually work :-) 21:35
dalek albot: 1693c51 | moritz++ | build-scripts/rebuild-nom.sh:
fix permissions
21:36
sorear nom: say "Hello world"
21:37 scottp joined
moritz evalbot not yet restarted 21:37
sorear evalbot control restart
21:37 p6eval left, p6eval joined, ChanServ sets mode: +v p6eval
sorear nom: say "Hello world" 21:37
moritz oh, and I'm just testing the rebuild script
during which time the perl6 executable is likely not available :/
sorear is there a p6eval target for newNQP?
moritz yes, nqp
the old one is now nqprx 21:38
sorear nqpnet: say("Test")
nqpclr: say("Test")
p6eval nom: OUTPUT«sh: ./perl6: not found␤»
nqpnet: OUTPUT«(timeout)»
PhatEddy rakudo: class A { method m {say 'm from A'}}; class B is A { method m { say 'm from B'}}; my $x = B.new; $x.SUPER::m()
p6eval rakudo 4a6d21: OUTPUT«Null PMC access in find_method('ACCEPTS')␤ in main program body at line 22:/tmp/p9BkQAh2H5␤»
PhatEddy I am having some trouble figuring out how to call a superclass method ... 21:39
dalek albot: 644f0c6 | moritz++ | build-scripts/rebuild-nom.sh:
fix directory
moritz PhatEddy: nextsame, nextwith
masak blog post! strangelyconsistent.org/blog/june-1...oon-lander 21:40
jnthn PhatEddy: What moritz said, or explicitly name the superclass. SUPER isn't implemented yet (and in the case of multiple inheritance it's just plain ambiguous)
moritz I guess it's a fossile
PhatEddy thx 21:41
sorear SUPER can (assuming we're using P5 semantics for it) only be used within the class
because it really means something like __PACKAGE__->{ISA}[0]
(or ::?PACKAGE.superclasses.[0] ?) 21:42
moritz oh wow, nom build fails fails on evalbot server
/home/p6eval/perl5/perlbrew/perls/perl-5.12.2/bin/perl5.12.2 -MExtUtils::Command -e cp src/pmc/perl6_group.so src/ops/perl6_ops.so dynext
Too many arguments at -e line 1
make: *** [dynext/perl6_group.so] Error 2
any ideas? 21:43
21:43 Tedd1^ joined
PhatEddy rakudo: class A { method m {say 'm from A'}}; class B is A {method m1 { self.SUPER::m() }; method m { say 'm from B'}}; my $x = B.new; $x.m1() 21:43
p6eval rakudo 4a6d21: OUTPUT«Null PMC access in find_method('ACCEPTS')␤ in 'B::m1' at line 22:/tmp/wH88ygPFyI␤ in main program body at line 22:/tmp/wH88ygPFyI␤»
jnthn moritz: er...wow. :)
sorear PhatEddy: 14:40 < jnthn> PhatEddy: What moritz said, or explicitly name the superclass. SUPER isn't implemented yet (and in the case of multiple inheritance it's just plain ambiguous)
jnthn moritz: It's actually failing to use cp from EXTUtils::Command
21:44 spq1 left, Patterner left
moritz jnthn: yes 21:45
masak PhatEddy: I think SUPER is a spec fossil, like moritz said.
jnthn moritz: Then...I'm very confused. :)
I don't think I've ever seen *that* fail before.
moritz from S12: Hidden classes may be visited 21:46
as C<SUPER::>, but not via "C<next>".
wtf?
21:46 Psyche^ joined, Psyche^ is now known as Patterner
masak moritz: we've discussed it before. 21:46
jnthn "is hidden"
masak moritz: I think it's a fossil *anyway*. 21:47
moritz what about just requiring the explicit class name?
masak yeah.
it's fragile to classes changing parent, but that's rare.
pmichaud parent(s)
masak it's that possible 's' that makes SUPER extra suspicious. 21:48
as people have pointed out.
sorear someday, the spec will be translated into specese and nicely printed
masak I say get rid of it.
tadzik landed on the 2nd try :)
masak not the spec, SUPER. :)
moritz gets rid of it
tadzik masak++ # fun game
masak tadzik: yay!
tadzik: it took two tries for me as well :)
sorear then I would love to see the look on Bjarne Stroustrop's face when he he sees a language spec three times bigger than C++ :)
dalek ecs: fafed74 | moritz++ | S (2 files):
[S02,S12] remove SUPER from the specs

If anybody wants it back, please revert this patch, and add an explanation what SUPER does in the presence of multi inheritance
21:49
sorear moritz: S01! Perl 5 has SUPER and MI, we copy its rules unless noted otherwise.
PhatEddy thx all - have enough to get what I'm planning done think ... 21:50
moritz sorear: ... unless the rules are insane :-)
sorear: but you're welcome to explicitly add that SUPER is gone
dalek ecza/immediate: 6e8c8fc | sorear++ | src/ (2 files):
Unsorted fiddles to remove Body use from all except subset/regex
21:52
ecza/immediate: e7fb127 | sorear++ | src/niecza:
Tweak stubbed packages again to work when lexical
masak sorear: did you see dlugosz' "Perl 6 Rigorous Technical Specification"? www.dlugosz.com/Perl6/
moritz PhatEddy: IT WON'T WORK WITH SUPER 21:54
PhatEddy: sorry, replied to a stale chat
moritz should really, really go to bed
masak it bears repeating, though.
:)
moritz but not in that tone :( 21:55
sleep &
jnthn night o/
masak no, rarely in that tone.
night, moritz.
22:02 alester left
pmichaud jnthn: possible attribute_6model patch coming 22:03
jnthn woo 22:04
sorear masak: epic fail on planetsix.perl.org
22:04 furryfishy left, furryfish joined
pmichaud jnthn: gist.github.com/1019879 22:05
see if that improves things?
don't know if nom will also have to do bind -> bind_6model
I don't know how to check in nqp itself if the patch makes things better. 22:06
oops
definitely a bug in that patch 22:07
just asec
22:07 gbacon_ left
pmichaud (I'm not even sure how/why it worked) 22:07
22:08 colomon left
pmichaud jnthn: gist.github.com/1019884 # updated patch 22:08
grrrr
still not right
gist.github.com/1019888 # this one
jnthn pmichaud: Really ready now? :P 22:10
jnthn tries it :)
pmichaud I'm trying it with nom
jnthn me also 22:12
pmichaud nope, doesn't seem to have helped.
jnthn pmichaud: Is there a difference between $integer in a PAST tree and a PAST::Val.new( :value($integer) ) 22:13
pmichaud shouldn't be.
jnthn e.g. does the first imply :returns('Integer')?
pmichaud hmmm 22:14
no, shouldn't imply :returns('Integer')
my nom build didn't use the new nqp
oh, I know why
pmichaud--
jnthn pmichaud: oddness, I get:
Method 'attribute_6model_type' not found for invocant of class ''
When building NQP
(with the patch)
pmichaud that's definitely odd 22:15
jnthn Done a make clean justin case.
pmichaud: no, same thing :( 22:16
pmichaud weird 22:17
it definitely doesn't work on my system, so let me work on the patch a bit more.
jnthn k
22:18 whiteknight joined
pmichaud it did change the output, so I know that it's doing _something_ at least :) 22:18
22:21 cognominal joined 22:22 MayDaniel joined 22:23 cognominal_ left 22:24 furryfish left
dalek ecza/immediate: e21bfa2 | sorear++ | / (2 files):
More fixes to gather and package stubbing
22:26
ecza/immediate: fdcf61d | sorear++ | src/ (2 files):
Reimplement &?BLOCK et al, INIT et al, statement labels
22:26 PhatEddy left
masak sorear: the June 7 post seems to be out of order on Planet Perl 6. it used to have a date in the future, but I fixed that. don't know what else to do about it. 22:27
22:27 Mowah left
jnthn masak: How far in the future? :) 22:27
masak: Will it be top of Planet Perl for days, months, or years? ;)
22:28 bluescreen10 left
masak jnthn: about a month in the future. 22:28
22:28 gfldex joined
masak and I don't know. 22:28
sorear 20110706, eh
jnthn That's one way to dominate an aggregator. :) 22:29
sorear does Juerd (ping) run planetsix?
jnthn Don't think so.
22:30 bluescreen10 joined
sorear who is in charge of the TPF aggregators? 22:30
22:38 bluescreen10 left, thou_ left 22:39 sftp left, furryfishy joined 22:40 sftp joined, fish|ipad joined 22:52 bluescreen10 joined
masak good night, #perl6. 22:59
22:59 masak left
sorear good night, masak 22:59
oops. I just accidentally broke a critical invariant of niecza's package system 23:00
the requirement: subclasses always have higher ID numbers than their superclasses, so are loaded later, so the superclasses are always complete 23:01
the break: class A { ... }; class B { }; class A is B { }; # used to emit B,A, now emits A,B as a result of stronger predeclaration semantics 23:02
TimToady obviously you should be counting down instead of up :) 23:04
pmichaud jnthn: got it! 23:05
jnthn pmichaud: \o/
pmichaud repr_bind_attr_int $P3650, $P3651, "$!rw", 0
jnthn :D
pmichaud repr_bind_attr_str $P3652, $P3653, "$!name", "$child"
jnthn pmichaud: I bet that shaves some off CORE.setting.[pir&pbc] :) 23:06
pmichaud we'll see. my solution is a bit on the hacky side.
it cleans up a couple of items while doing a couple of hacky things
jnthn Are we pushing against an overall PAST::Compiler that's not been so used to dealing with natives? 23:07
pmichaud overall coercion in attribute_6model is cleaner; but we have to work around the broken bindpost semantics
jnthn Ah
23:07 bluescreen10 left
pmichaud not so much that, as a PAST compiler that had to deal with Parrot's broken lvalue semantics 23:07
jnthn Ah :/
pmichaud (and guessed wrong in this particular case.)
23:07 bluescreen10 joined 23:08 awoodland joined
pmichaud shall I just commit + push my patches and let you test that way... or shall I nopaste them? 23:09
23:09 am0c left
jnthn pmichaud: Is it to just NQP, or to Rakudo also? 23:09
pmichaud both
:pasttype<bind> has to become :pasttype<bind_6model>
(in Rakudo also)
jnthn pmichaud: Can you push just the NQP ones first, so I can check the build issue is gone? 23:10
pmichaud I can just nopaste you the patch
23:10 gbacon_ joined
pmichaud gist.github.com/1019984 23:10
23:10 MayDaniel left
jnthn applied, tryijng build 23:12
sorear jnthn++ pmichaud++ fighting to push forward the state of the art in native typing
TimToady: Have you thought much about the issues in decontainerizing object attributes? 23:13
pmichaud jnthn: btw, that patch to enable my @a and my %h was TEH AWESOME :) 23:14
jnthn pmichaud: I thought you'd like it. ;) 23:16
pmichaud gist.github.com/1019997 # here's the corresponding patch to nom
sorear jnthn: why BIND_POS but BIND_Key ?
jnthn good news, nqp built
sorear: Where, exactly? 23:17
sorear nom
pmichaud Hash.pm
jnthn sorear: Yes, I guessed that bit... :)
Oh
you're talking about code pmichaud++ did ;)
pmichaud might've been me that did that
sorear actually I'm reading the "TEH AWESOME" patch
jnthn didn't code review carefully enough :P
sorear++
pmichaud it's a typo on my part
I'll fix it once we're stable with the nqp/native stuff 23:18
jnthn sorear: github.com/rakudo/rakudo/commit/eb...7002d09992 ?
oh, it was in the context
sorear Why do Array and Hash BIND_Key/BIND_POS use '$x is copy'?
pmichaud because they want to be sure to have their own container 23:19
sorear my @foo; @foo[0] = 5; @foo[1] := @foo[0]; @foo[0]++; say @foo[1]
is copy breaks that, no?
pmichaud I'm not worried about that case yet.
see note about that says "This is all preliminary to get stuff working...." 23:20
*above
jnthn We don't know how to code-gen the @foo[1] := ... yet anyway
pmichaud also, it's not clear that := will call BIND_POS anyway
jnthn Unlikely
sorear Unlikely?
jnthn Maybe passes :BIND_VALUE(...) to postcircumfix
sorear ah 23:21
I like that
jnthn Which yes, may eventually call down to the method we're discussing now
Me too, it's a simple AST twiddle ;)
sorear mind if I use that for niecza, or do you expect you'll be changing it again?
pmichaud I think you're always welcome to use whatever you want for niecza. :) 23:22
sorear heh
pmichaud I think there's a non-zero probability we'll change it again. :)
sorear "mind" maybe not the right word...
what about ::=? 23:23
in nieczaland, X := Y does the equivalent of X := pir::descalarrref__pp(Y)
er, X ::= Y :)
jnthn pmichaud: Just make installing your NQP patch and trying Rakudo one now 23:24
23:24 ymasory joined
jnthn (sorry, had a small distraction implementing something...) 23:24
23:24 awoodland left
pmichaud np 23:24
23:24 colomon joined
sorear o/ colomon 23:25
colomon \o
just opened my computer again in preparation for running out the door for a show. :)
how's hacking?
sorear good!
colomon I'm scheming on how to add trig functions, etc to Niecza. Presuming you didn't already do it while I wasn't looking. :) 23:26
23:26 kid51 joined
jnthn pmichaud: oh noes 23:26
nom patch won't apply cleanly
sorear colomon: 2 ** 10000 > (5 / 2) ** 10000 # this is actually 2 ** 10000 > Inf
pmichaud I might not be up-to-date 23:27
sorear colomon: no, not yet. I look forward to seeing what you come up with!
pmichaud checking
colomon sorear: yeah, realized it after I typed it.
dalek kudo/nom: c7ba581 | jnthn++ | src/Perl6/Metamodel/ParametricRoleHOW.pm:
Try and make it clearer that line 2 of an error message is actually an explanation for line 1.
kudo/nom: 32b2b73 | jnthn++ | src/Perl6/Actions.pm:
Toss old code for handling |@foo, |%bar, etc. Don't quite know how we'll handle it but...probably not like this.
kudo/nom: 045613a | jnthn++ | src/Perl6/Actions.pm:
Refactor and clena up term:sym<name> action a bit; should make type name mentions cheaper at runtime and prepares for handling types as role parameters.
kudo/nom: bbb094d | jnthn++ | src/ (5 files):
First cut of parametric roles. Type variables seem to work out OK in signatures at least...something's busted with attributes, and probably there's hairy fixup issues to go too.
colomon (5 / 2).FatRat ** 10000 wouldn't be, though
jnthn pmichaud: Probably because I did ^
:)
pmichaud yes, that's it.
let me rebuild the patches
jnthn nqp one is fine 23:28
I didn't change that
pmichaud gist.github.com/1020017 # possibly clean nom patch 23:29
jnthn pmichaud: applied cleanly, building 23:30
sorear should ~ use Str or Stringy? Note that it never receives a Junction argument, due to autothreading. 23:34
infix:<~> I mean
pmichaud last I heard, infix:<~> uses the Stringy versions of its arguments
say "hello", Any; # helloAny() 23:35
say "hello" ~ Any; # hello (+ possibly a warning)
rakudo gets this wrong, of course.
sorear .Stringy or .Stringy.Str? Is .Stringy on non-Junctions allowed to return non-Str?
pmichaud don't know -- hadn't gotten that far. 23:36
TimToady .Stringy is required only to return something Stringy, doesn't have to be Str 23:38
just as Numeric doesn't have to return Num
pmichaud nom: say 'hello'; # yet?
p6eval nom: OUTPUT«sh: ./perl6: not found␤»
pmichaud not yet.
sorear TimToady: what do &chars, &infix:<~>, etc do when fed a general value of Stringy?
jnthn pmichaud: +1 on the patches 23:39
pmichaud jnthn: okay, committing, pushing
jnthn pmichaud: A nice 42KB off the PBC size. 23:40
pmichaud: And probably hundred plus less junk PMCs and instructions at startup, if not more.
TimToady that would depend on what multis are out there with which types; to the extend there are multiple Stringy types, they have to play together much like numeric types do
sorear I see 23:41
TimToady but grapheme strings should be pretty general
much like Nums and/or FatRats 23:42
just as Nums imply some restrictions as a general type, so might Str 23:43
dalek p: b289784 | pmichaud++ | src/PAST/SixModelPASTExtensions.pir:
First set of coercion refactors for attribute_6model.
p: dd1944b | pmichaud++ | src/ (4 files):
Add :pasttype<bind_6model> to PAST::Compiler, to improve handling of native constants.

PAST::Compiler's :pasttype<bind> doesn't know about native types, and forces the RHS argument to be a PMC. This doesn't play well with 6model's native attributes, though, and caused a lot of unneeded boxing and unboxing of native constants. Rather than try to fix
  :pasttype<bind> in PAST::Compiler (which likely runs into all sorts
of Parrot deprecation issues), we just add a new :pasttype<bind_6model> that can handle binding to attribute_6model variables (albeit in a slightly hacky way). When we rewrite PAST into NQP, we should be able to clean up the bind semantics dramatically and can fix things then.
23:43 bitpart joined
pmichaud jnthn: yeah, I'm sure it improves our overall time hugely. It bugs me to see boxing/unboxing that we really don't need. 23:45
jnthn pmichaud: btw, config.default is working out very nicely for me :)
pmichaud jnthn: excellent, same here.
jnthn pmichaud: That also
pmichaud nqp and nom patches pushed.
jnthn It probably shaves a little off the time Parrot spends in there too
pmichaud well, I'm always a little worried about gc churn as well.
jnthn It's worth worrying about.
pmichaud I'm not sure what to do to reduce our register usage there, though. 23:46
a lot of the registers are in fact .const 'Sub' things, so it's not like we can reuse those I don't think.
jnthn True
Well, it's not a long-term thing.
Oh 23:47
We're also still generating the fixup and deserialize code
When actually we only really need generate one of them
(I wanted both for debugging for a while, but the number of bugs I've needed to fix in that area has been close to zero.)
pmichaud that sounds good also 23:48
dalek kudo/nom: 7aa97bd | pmichaud++ | / (3 files):
Update Actions.pm and SymbolTable.pm to use new :pasttype<bind_6model>
kudo/nom: 82c88f5 | pmichaud++ | src/CORE.setting/Hash.pm:
Fix typo in Hash.BIND_KEY (sorear++ for spotting this one!)
jnthn I need a way to know if we're compiling to run straight away, or if we're going to output PIR and that's all.
pmichaud %*COMPILING likely has the flags.
jnthn ah, yeah 23:49
Anyway, I can get a nice win from that.
Was always the plan, just was more -Odebug so far. :)
pmichaud sure, no problem.
diakopter hello from iphone
pmichaud so far we seem to be *much* more efficient in codegen than master was
jnthn o/ diakopter 23:50
pmichaud: Yes, there was a concious effort to be. :)
pmichaud: We emit a LOAD less code surrounding containers.
pmichaud time for a break here -- bbiaw 23:51
jnthn k
sorear diakopter: hello
pmichaud overnight I'm likely to switch CORE.setting -> core
I keep mis-typing the directory name
jnthn core blimey 23:52
:P
23:52 woosley joined 23:53 lue left 23:54 jfried left 23:57 lue joined 23:58 thou joined