»ö« 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 failedFAILED 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
|