pugscode.org/ planetsix.perl.org/ | nopaste: sial.org/pbot/perl6 | evalbot: perl6: say 3; (or rakudo:, pugs:, elf:, etc) | irclog: irc.pugscode.org/ | ~340 days 'til Xmas
Set by mncharity on 16 January 2009.
00:17 donaldh left 00:18 donaldh joined 00:34 |jedai| left 00:35 |jedai| joined 00:40 DemoFreak left 00:48 [particle] joined 00:53 [particle]1 left 01:06 Chillance left
pugs_svn r24967 | putter++ | [elf] Added Str::hex, Int::chr. 01:24
r24967 | putter++ | [elfparse] Added "\xNNNN" escapes, and std.pm's %open2close.
01:38 jhuni left 01:39 jhuni joined 01:40 meppl joined 01:45 |jedai| left, aindilis joined, |jedai| joined 01:51 hcchien_ joined 01:52 hcchien left 01:54 spx2 left 01:57 justatheory left 01:59 aindilis` joined, spx2 joined 02:10 |jedai| left, |jedai| joined
melkonem whose worked on scala 02:10
anyone awake 02:17
02:20 aindilis` left 02:22 alc joined 02:24 aindilis left 02:28 melkonem left
s1n what kind of method is :by()? are there other methods like it? 02:36
02:38 |jedai| left 02:40 |jedai| joined 02:52 wknight8111 left 02:59 |jedai| left 03:00 |jedai| joined
pugs_svn r24968 | putter++ | [elfparse] Aliases in elfgreen; some alias p6-ification; <sym>. 03:00
03:01 jhorwitz left 03:08 stephenlb left 03:09 [particle]1 joined, jhuni left 03:17 [particle] left
s1n anyone know anything about methods like :by()? 03:17
03:17 meppuru joined 03:22 aindilis joined 03:33 meppl left 03:34 alester_ joined 03:44 alc left 03:52 hcchien_ is now known as hcchien 04:01 gravity left
rakudo_svn r35787 | chromatic++ | [ops] Removed n_abs, n_bnot, n_bnots, and n_not opcodes; cleaned up langauges 04:20
r35787 | chromatic++ | which use them. See RT #58410.
04:24 alester_ left 04:25 alester_ joined 04:29 tmaesaka left 05:01 justatheory joined 05:04 justatheory left 05:09 meppuru is now known as meppl, justatheory joined
pugs_svn r24969 | putter++ | [src/perl6/STD.pm] Converted tabs to spaces. (emacs M-x untabify) 05:25
05:28 [particle] joined
pugs_svn r24970 | putter++ | [elfparse] std.pm synced with current STD.pm. 05:32
05:33 [particle]1 left 05:43 stephenlb joined 05:57 |jedai| left 05:58 |jedai| joined 06:00 donaldh left, donaldh joined 06:11 iblechbot joined 06:13 justatheory left 06:18 |jedai| left, |jedai| joined
szabgab s1n: I just recently looked at :by() adverbs, they were not implemented in rakudo a few days ago 06:33
std: for 1..5:by(2) -> $i { say $i } 06:34
p6eval std 24970: OUTPUTĀ«00:05 87mā¤Ā»
szabgab pugs: for 1..5:by(2) -> $i { say $i }
p6eval pugs: OUTPUTĀ«*** ā¤ Unexpected ":by"ā¤ expecting "_", fraction, exponent, term postfix, operator or block constructā¤ at /tmp/TFeJjGekEw line 1, column 9ā¤Ā»
szabgab rakudo: for 1..5:by(2) -> $i { say $i } 06:35
p6eval rakudo 35788: OUTPUTĀ«Statement not terminated properly at line 1, near ":by(2) -> "ā¤ā¤current instr.: 'parrot;PGE;Util;die' pc 129 (runtime/parrot/library/PGE/Util.pir:83)ā¤Ā»
moritz_ rakudo: for Range.new(1, 5, :by(3)) { .print } 06:43
p6eval rakudo 35788: OUTPUTĀ«argument doesn't hashā¤current instr.: 'parrot;Perl6Object;BUILD' pc 543 (src/classes/Object.pir:283)ā¤Ā»
06:51 ashizawa joined 06:54 stephenlb left
rakudo_svn r35789 | infinoid++ | [cage] Fix some codingstd failures. 07:00
07:20 |jedai| left, |jedai| joined 07:21 Ehtyar joined 07:41 jao left 07:42 ejs joined 07:45 _jedai_ joined, |jedai| left 07:49 [particle]1 joined 07:52 smtms left 07:58 vixey joined 08:00 alester_ left 08:05 DemoFreak joined 08:08 [particle] left 08:27 riffraff joined, pbuetow joined 08:31 _jedai_ left 08:32 |jedai| joined 08:36 pbuetow left 08:55 |jedai| left 08:56 |jedai| joined 09:06 ejs left 09:35 riffraff left 09:45 schmalbe joined 09:46 ejs joined 10:09 [particle] joined 10:15 vixey left 10:23 ChrisDavaz joined 10:27 [particle]1 left 10:48 ChrisDavaz left 11:01 |jedai| left 11:02 |jedai| joined
jnthn hi all 11:07
11:25 zamolxes joined 11:26 ruoso joined
ruoso HellO! 11:28
11:34 aindilis` joined 11:48 aindilis left, ashizawa left
rakudo_svn r35796 | jonathan++ | [rakudo] Seems Test.pm was patched with extra features, but unfortunately that causes it to break on a few tests. This patch tweaks the workaround for some things not having a .perl method, which gets us passing pretty much everything again, aside from fail.t, which I'm really 11:50
..not sure what is wrong with yet...
12:01 Casan left 12:06 ruoso_ joined 12:08 ruoso left, ruoso_ is now known as ruoso
pugs_svn r24971 | jnthn++ | [rakudo] Unfudge test for using role parameter as type constraint, and add a few more for this. 12:22
12:22 nnunley left 12:23 pmurias joined
pmurias hi 12:23
12:29 pmurias left
rakudo_svn r35798 | jonathan++ | [rakudo] newclosure clones, but the signature is lost during the clone since it's attached as a property. This re-instates it, which happily is all that's needed for role parameters to act as type constraints. 12:30
12:30 [particle]1 joined
ruoso hi pmichaud 12:38
hi pmurias
12:39 ejs left 12:41 |jedai| left 12:42 ejs joined, |jedai| joined 12:48 [particle] left 13:00 _jedai_ joined, |jedai| left 13:01 aindilis` left, aindilis` joined 13:12 pmurias joined 13:18 nothingmuch_ joined, nothingmuch_ left 13:19 ruoso_ joined, nothingmuch_ joined, ruoso left 13:20 nothingmuch_ left 13:23 ruoso_ is now known as ruoso
pugs_svn r24972 | jnthn++ | [t/spec] Unfudge some .does tests for parametric roles. 13:24
13:24 nothingmuch_ joined, nothingmuch left 13:25 nothingmuch_ is now known as nothingmuch, Juerd left, nothingmuch left, nothingmuch joined
ruoso pmurias, from now and then I consider doing a major refactor in SMOP splitting it in several different pieces... 13:29
rakudo_svn r35799 | jonathan++ | [rakudo] Track what roles we have already created and re-use them appropriately. For example, every time you said does Foo[Int] before, it would have created a new Parrot role. Now it creates one and re-uses it. This means that .does(Foo[Int]) tests now work also. 13:30
ruoso smop-base, which would contain only smop-base.h
smop-native, which would contain only the native types
(including idconst and native capture)
smop-run, which would contain only the interpreter instance (but no interpreter implementation) 13:31
smop-refcounting, which would contain lowlevel.sm0p with some other name 13:32
(maybe bool and idconst should be in a different package, as they are not subject to garbage collection)
smop-singleton, holding bool and idconst 13:34
13:34 _jedai_ left
ruoso smop-mold 13:34
smop-pcl
smop-p5
and so on
pmurias, somehow I think it would make our lifes easier 13:36
13:37 |jedai| joined
ruoso then we would need a package that would bundle all this into something useable, maybe that's the p5 binding SMOP.pm for instance... it could initialze all the stuff... 13:38
13:40 pmurias left 13:42 pmurias joined 13:45 ZuLuuuuuu joined 13:48 lambdabot left 13:51 lambdabot joined 14:03 SamB left
pugs_svn r24973 | jnthn++ | [t/spec] More tests for punning a role into a class. 14:04
14:06 |jedai| left, |jedai| joined 14:08 pmurias left 14:09 SamB joined 14:12 Exodist joined 14:23 pmurias joined
pmurias ruoso: you mean we should physically seperate the components? 14:24
ruoso yeah...
so we have a clearer view on the dependencies
pmurias seems reasonable 14:25
14:25 eric256 joined
ruoso I was also thinking that we could have a "state machine" for some lowlevel operations that potentially need recursion 14:26
so we don't make lowlevel.sm0p depend on mold
this could also be used for some basic operations the native types need to do with the captures they receive 14:29
(solving the $OUT problem, for instance) 14:30
rakudo_svn r35806 | jonathan++ | [rakudo] Make a role pun a class when you call .new on it.
r35807 | jonathan++ | [rakudo] Add spectest for role punning/instantiation.
pmurias a "state machine" won't be very hard to write by hand
ruoso jnthn, I was wondering... shouldn't it pun a class on every invocation on a Role?
pmurias, exactly, and it could be specific for each case, avoiding a lot of mallocs 14:31
14:31 |jedai| left
ruoso jnthn, is "new" really a special case? 14:31
pmurias i'm wandering how efficient would a mold block compiled to one be
14:31 |jedai| joined
jnthn ruoso: We only discussed making .new work, as I remember it. 14:32
ruoso jnthn, wasn't it because it was the example on hand?
jnthn Not sure... 14:33
ruoso what made me think that is that a role is a package declarator, and as a package declarator it has a HOW that is responsible for it... so we have a RoleHOW, as we have ClassHWO
jnthn But I know that I sure want ACCEPTS on a role *not* to cause an instantiation.
ruoso *ClassHOW
14:33 ZuLuuuuuu left
jnthn erm, a pun 14:33
ruoso so basically, it would make sense that since a Role is represented by a p6opaque 14:34
that the "pun" happens at "dispatch" time
jnthn, you mean ACCEPTS as in $foo ~~ Array? 14:35
jnthn Yes.
ruoso jnthn, wasn't $foo ~~ Array expressed in terms of $foo.^does(Array)?
jnthn I don't think type RHS is a special form.
pmurias ruoso: what's our current ROADMAP towards getting &infix:<+>(int,int) to work? 14:36
ruoso pmurias, loading Multi.pm
spack: ACCEPTS 14:37
buubot, spack ACCEPTS
buubot ruoso: S03-operators.pod:17
jnthn No, it's not.
And it's $_.does(X)
Thing is, if you're creating an instance and calling ACCEPTS on that you'd end up calling the ACCEPTS of the instance. 14:38
Not of the proto.
So I don't just saying "every method causes an instantiation" is going to work.
ruoso but nobody is creating an instance
14:38 nihiliad left
jnthn Ah, you're saying we'd call it on the proto? Hmm. 14:38
That still means we're doing the does test on the wrong thingy though. 14:39
ruoso but you're not calling does on the proto
you're calling does on the value
passing the proto as argument
jnthn role Foo { }; Foo.ACCEPTS($x); # Here, if we pun Foo, we are then calling ACCEPTS on the thing we get from punning the role, not on the role itself. 14:40
And since $x probably doesn't do the class but does do the role, it'd give the wrong answer.
ruoso right... but... 14:41
ruoso re-re-re-reading the spec
eric256 does feather have rakudo running and updated on it? wanted to use it to test stuff on, but didn't want to take up the space to download and make rakudo if its already on there 14:43
jnthn Hmm. The section under =head1 Autovivifying objects 14:45
Suggestions you may be able to call anything.
But doesn't deal with the ACCEPTS issue.
ruoso somehow I always read the ACCEPTS thing as a fallback to that table 14:46
14:46 riffraff joined
ruoso but that table would be implemented directly as-is 14:46
pmurias ruoso: prepending ::MildewSOLoader.new.load('Prelude.mildew.so',$LexicalPrelude.FETCH); at the top of each program would work
jnthn No, only the first batch of entries are dispatched on the form and the rest are via ACCEPTS. 14:47
riffraff hi
pmurias riffraff: hi
ruoso jnthn, the first batch contains Any ~~ Type
jnthn huh?
You looking at svn.pugscode.org/pugs/docs/Perl6/Sp...rators.pod ? 14:48
The first section contains privileged syntax; if a match can be done
via one of those entries, it will be. These special syntaxes are
dispatched by their form rather than their type.
ruoso jnthn, I'm looking at that file, line 2960 14:49
jnthn Any Type type membership $_.does(X)
That one?
ruoso yes
jnthn That's not in the first section.
The first group of them ends with Any .<...> 14:50
ruoso er...
14:51 [particle] joined
ruoso jnthn, you really surprised me on that one... 14:52
jnthn ruoso: I can't see how it could be any other way, since all of the things on the RHS below that point could be in a scalar.
So we don't have a syntactic form to go by. 14:53
ruoso what about is_type?
since Type is not really a type
14:54 ejs left
jnthn It perhaps means "anything that does Abstraction" 14:54
Which is what I've generally taken type to mean in Perl 6.
ruoso I don't know... but I think there's no much meaning in the extra newline after the Any .<...> line 14:55
pmurias, you could try instantiating a Multi then, and adding the variant you want... 14:56
jnthn Well, we're best off just asking for answers to this stuff than guessing it...
ruoso indeed... TimToady?
jnthn For now, having .new at least do a pun will get me enough for now.
ruoso fair enough... but this issue will be very much important for SMOP, because the RoleHOW.dispatch is the one creatign the pun, and I don't think it is a good idea for it to intercept ACCEPTS 14:57
jnthn Right. 14:58
We'd have to similarly special-case ACCEPTS in Rakudo too.
Which doesn't feel greatly neat.
pmurias ruoso: Multi doesn't have a .new 14:59
ruoso oh right..
in fact...
I think it would be sane to implement Multi as a Role 15:00
which means we need RoleHOW
that implements the class pun at dispatch
jnthn ruoso: That still doesn't handle the ACCEPTS issue. 15:02
ruoso jnthn, I know... I still don't support smart match
jnthn Ah, OK. ;-) 15:03
I'll probably leave what I've got for now, until there's some clarification. 15:04
ruoso pmurias, would you like to adventure yourself into RoleHOW?
15:04 |jedai| left, |jedai| joined 15:07 [particle]1 left
ruoso just a sanity check, but every punned class needs to declare that it is Object, right? 15:09
jnthn ruoso: I think an Any
ruoso right...
jnthn so it's like a class Foo does TheRole { }
(class Foo { ... } inherits for Any by default.) 15:10
ruoso what about class Object {...} ?
jnthn erm, *from*...
ruoso heh
jnthn heh
I would imagine that doesn't. ;-)
Guess that is special in some way. 15:11
ruoso it would be interesting to know in what way... 15:12
jnthn I guess just that it doesn't have any parens.
15:12 kane_ joined
jnthn *parents 15:13
ruoso right... but in terms of syntax
ruoso considering one could start a different type hierarchy at some point
and also, if you want to implement something that works in the level of a Junction, for instance 15:14
jnthn class Junction is Object { .. } 15:16
I don't know that there is any syntax specially for saying "it has no parents"
Maybe you could just do a trait?
ruoso clas Object is nothing {...] 15:18
class Object is nothing {...}
15:18 jhorwitz joined
ruoso .oO(I think I'll enter the "how many typos you can get into a single line" contest) 15:18
class Object isn't Any {...} ;) 15:20
jnthn lol
moritz_ :) 15:21
moritz_ thinks of Acme::Don't
ruoso you know... with all this "built-in types are roles" thingy...
I realised how to solve the "defining undef" problem
if all the built-in types are roles, 15:22
Object is also a Role
and when you call Object.BUILDALL
it will pun a new class and build it all
then you will never make Object defined 15:23
jnthn Hmm... 15:24
jnthn tries to follow that logic...
15:25 pmurias left, kisu_ left, kisu_ joined
ruoso jnthn, if we do that and also define that when you try to do "class Foo is Role {...}" causes Foo to inherit from the punned class... we even make it more protected against action-at-a-distance 15:32
since modifying a Class affects its descendants... but modifying a Role doesn't affect it's composed classes 15:33
jnthn We so don't want to encourage people to do this...
ruoso s/it's/its
inheriting from Roles?
jnthn Yeah
Though that doesn't mean it shouldn't be possible.
Though you'd be really inheriting from the punned class. 15:34
ruoso yes...
and protecting from action-at-a-distance indeed looks like an interesting feature
jnthn Provided folks can't lay their hands on the punned class and is also it ;-) 15:35
ruoso if they can, they need to get a private copy... 15:36
the punned-class-sharing is an optimization that needs to be aware of that
jnthn :-| 15:38
Not sure I like that idea.
How would we know if people were going to do changes later?
Anyway, I can't think of a way you'd syntactically do it.
So it's probably a non-issue.
ruoso but if this issue raises, you'll need some form of COW 15:39
jnthn We'll not raise it, because it's hard. ;-)
(Plus if people *really* want to shoot themselves in the foot that badly...) 15:40
Matt-W mops brains off his monitor after reading the latest topic of discussion
15:41 _jedai_ joined 15:43 |jedai| left
ruoso so, should I consider it is sane to think as: 15:49
role Object { }
rakudo_svn r35812 | pmichaud++ | [rakudo]: spectest-progress.csv update: 292 files, 6280 passing, 171 failing 15:50
r35812 | pmichaud++ | Failure summary:
r35812 | pmichaud++ | S04-exceptions/fail.rakudo 1 - 42
r35812 | pmichaud++ | S04-exceptions/fail.rakudo 3 - fail() causes our sub to return (1)
r35812 | pmichaud++ | S12-attributes/delegation.rakudo aborted 41 test(s)
r35812 | pmichaud++ | S12-class/anonymous.rakudo aborted 3 test(s)
r35812 | pmichaud++ | S12-role/basic.rakudo aborted 3 test(s)
r35812 | pmichaud++ | S29-str/chomp.rakudo aborted 14 test(s)
r35812 | pmichaud++ | S29-str/unpack.t aborted 2 test(s)
r35812 | pmichaud++ | integration/99problems-31-to-40.rakudo aborted 65 test(s)
r35812 | pmichaud++ | integration/99problems-51-to-60.t aborted 37 test(s)
r35812 | pmichaud++ | integration/say-crash.t aborted 4 test(s)
jnthn ruoso: Not sure, trying to work through the implications of that... 15:51
ruoso lunch &
jnthn The undefinedness comes through it being a proto, as I understood things..
ruoso jnthn, sure... but the problem is that you can call methods on undefined values 15:52
as well as in protos 15:53
the problem is that one of those methods is the thing that turns undef into defined
which is called during "new"
more precisely, during "bless"
pmichaud that confuses me. 15:54
jnthn I think in Rakudo we see proto as being like an instance of the object that has proto-ness mixed into it.
pmichaud the "turns undef into defined" part confuses me.
jnthn (Or put another way, I don't really see the problem you're trying to solve...)
pmichaud me either.
ruoso pmichaud, take a look at ClassHOW.pm in smop/src-s1p
pmichaud please don't make me look at code and try to figure out what you're saying. 15:55
ruoso looking at code might be easier than looking at the spec ;)
but anyway
pmichaud I have to even find where smop is.
ruoso pugs repo/v6/smop
the process of creating a new object goes by: 15:56
.new
15:56 _jedai_ left
ruoso new calls CREATE and bless 15:56
jnthn pmichaud: svn.pugscode.org/pugs/v6/smop/src-s...lassHOW.pm
ruoso CREATE is separated from new so you can send the :repr parameter 15:57
and choose a different representation for your object
pmichaud yes, I know this -- rakudo has a similar sequence.
ruoso bless accepts a candidate object and turns it into a instance of the invocant prototype
pmichaud =item method bless($how: $prototype, $candidate, *@protoobjects, *%initialize)
that looks wrong to me, at least according to the spec.
the prototype is the invocant.
15:58 |jedai| joined
ruoso pmichaud, ClassHOW is the HOW, it's not Object.pm 15:58
that's why it has $how: as invocant
pmichaud okay
ruoso if you look at Object.pm in the same directory
so, bless is the one that calls BUILDALL 15:59
BUILDALL is a regular method
that can be overriden
pmichaud ruoso: I know this part.
I understand bless, BUILDALL, BUILD, CREATE, etc.
ruoso right...
so
if you call Object.BUILDALL 16:00
you're asking Object to be built
it's the same as doing $some_undefined_value.BUILDALL
there's no way to tell if the undef is supposed to be a class
or if it's just something that wasn't yet initialized
pmichaud "the undef is supposed to be a class" doesn't make sense to me. 16:01
$some_undefined_value still has a type.
its type isn't "undef".
ruoso $some_undefined_value := Object;
pmichaud in that case it's exactly identical to Object.BUILDALL 16:02
Object already knows its own type
ruoso which is "Object"
so, if the BUILDALL method turns the invocant into a defined value 16:03
pmichaud it doesn't.
at least, that's not how I read it.
let me check.
ruoso someone needs to
pmichaud Object.new calls .bless 16:05
jnthn ruoso: I kinda don't get the issue. A proto is an instance of the class with some special behaviours. Creating a new instance of the class wouldn't create another proto though.
It'd create an instance.
ruoso jnthn, right... I got what the problem is...
16:05 eternaleye left
pmichaud .bless calls .CREATE to create a candidate object . That candidate object is "defined" 16:05
it's already defined at that point
ruoso pmichaud, is that spec? 16:06
pmichaud which part?
undefinedness is a property of protoobjects
ruoso it being defined from the return of CREATE
pmichaud I don't think it's speced to that detail, no. But it works that way.
ruoso pmichaud, undefinedness is a matter of the return of the "defined" method
pmichaud it's also not speced that BUILD turns an undefined object into a defined one. 16:07
regardless, it doesn't seem to matter.
we get a candidate object, and we call BUILD on that object.
ruoso pmichaud, autovivification makes that
S12:682 16:08
"The C<bless> function automatically calls all appropriate C<BUILD> routines by calling the C<BUILDALL> routine for the current class,which initializes the object in least-derived to most-derived order."
16:09 vixey joined
pmichaud I still don't understand the problem you're trying to solve. 16:09
ruoso you don't see it because we disagreed wether CREATE should return something defined or not 16:10
pmichaud no, even if CREATE returns an undefined object, I don't see the problem.
ruoso if CREATE returns an undefined object, BUILDALL turns it into a defined object 16:11
which means BUILDALL makes the invocant defined
pmichaud I think the difference is whether CREATE returns a *typed* undefined object 16:12
ruoso there's no such thing as untyped undef
pmichaud okay, if we agree on that (we do)
then I really don't see the problem.
I don't see how definedness comes into play with what you're saying.
ruoso do you assume that the Type and the Value have the same representation 16:13
?
both "p6opaque" by default?
pmichaud depends on what you mean by "type" 16:14
do you mean "protoobject"?
16:14 ejs joined
ruoso the protoobject is the thing we can refer to when talkign about the type 16:14
in this case "Object"
pmichaud okay, Object is a protoobject. 16:15
ruoso and is a type
pmichaud as such, it has the same representation as the values of that type.
ruoso do you agree that Object.clone returns an identical undefined object
?
but the namespace points the name "Object" to the first 16:16
16:16 stephenlb joined 16:17 spx2 left
pmichaud I don't have a problem with Object.clone returning an identical undefined object, no. 16:17
16:17 spx2 joined
ruoso considering that... is there a fundamental difference between "Object.clone" and "Object.CREATE"? 16:17
pmichaud there can be, yes.
Object.CREATE creates a new object. That's different from Object.clone, at least as I've been looking at it.
jnthn ruoso: Are you basically saying that smop creates an instance by cloning the proto-object and then doing something to it to make it defined? 16:18
ruoso Object.CREATE returns a new object, if it returns a defined value
but it returns a protoobject, if we assume it returns an undefined value
jnthn, that's what a "knowhow" is
not a class
16:19 justatheory joined
pmichaud my understanding is that CREATE is used to construct a new instance of a class. 16:19
jnthn ruoso: I don't follow.
pmichaud not to clone an existing object.
ruoso is this new instance defined or not? 16:20
pmichaud (1) that's up to the 'defined' method
ruoso my understanding is that it is only defined after it is fully initialized
moritz_ ruoso: isn't definedness an aspected of how that cless defines .defined?
s/cless/class/ 16:21
ruoso (I mean the behavior implemented by Object)
pmichaud (2) a protoobject may have different behaviors from instances of the class 16:22
ruoso pmichaud, so you assume there are different types of typed undef
the ones that can become defined
and the ones that can't
is it?
16:22 riffraff left
pmichaud right now we just do it that protoobjects are instances of a class that have additional "protoobject" roles. 16:23
16:23 simcop2387 left
ruoso so they can't become defined 16:23
pmichaud S12: Some objects
may tell you that they are defined, while others may tell you that
they are undefined. That's up to the object, and depends on how the
metaclass chooses to dispatch the C<.defined> method.
ruoso I'm talking about the behavior implemented by Object 16:24
pmichaud a protoobject differs from other objects by how it responds to the .defined method
16:24 broquaint joined
ruoso so Object.BUILDALL fails? 16:24
16:25 simcop2387 joined
pmichaud I have trouble seeing when we'd ever do Object.BUILDALL 16:25
you mean you're trying to initialize the protoobject itself?
16:25 |jedai| left
ruoso yes... 16:25
pmichaud I think that probably *should* fail. 16:26
16:26 |jedai| joined
ruoso ok... I think the major misunderstanding point here... 16:26
is that SMOP has a more prototype-based OO
16:27 Whiteknight joined
ruoso while Parrot/Rakudo has a more class-based OO 16:27
so in SMOP there's only the protoobject... not the protoobject *and* the class 16:28
pmichaud but that's not what S12 says.
as I read S12, we have objects and (meta)classes 16:30
16:30 alester left
pmichaud a protoobject is simply an object that serves as the placeholder for the class 16:30
ruoso metaclass instances, actually
pmichaud metaclass instance is fine
the point being that protoobjects are not metaclasses.
rakudo/parrot follows this model. 16:31
ruoso right... and that metaclasses are not classes
pmichaud there's not really a "class"
ruoso exactly... there's something that knows how to dispatch methods for some object 16:32
(defined or not)
16:32 Whiteknight is now known as wknight8111
eric256 jnthn++ #parametric roles 16:32
ruoso pmichaud, but the point is that S12 doesn't force the information about the methods to be stored in the metaclass instance or in the protoobject 16:34
because it supports both class-based and prototype-based oo
pmichaud but we're talking about Object, and things derived from Object
S12: "However, by default, objects derived from Object support a fairly 16:35
standard class-based model.
16:35 km3 joined, km2 left 16:36 tux300181 is now known as tux300181we, tux300181we is now known as tux300181
ruoso pmichaud, some other parts of S12 relaxes that... 16:37
16:37 aindilis` left
ruoso but maybe it needs some clarification 16:37
16:38 aindilis` joined
pmichaud just because p6 supports prototype-based oo doesn't mean that prototype-based oo has to be the foundation for all of its classes and methods 16:38
and it's pretty clear that Object follows a more class-based approach
we can of course get objects that use a different metamodel by creating them with different representations
ruoso pmichaud, it's not that all clear (except for that specific wording)
pmichaud, metamodels and representations are not related 16:39
you're supposed to be able to use different representations with the same metamodel
as well as different metamodels with the same representation
pmichaud all I'm saying is that clearly much of S12 was designed with a class-based representation in mind, and Rakudo follows that. 16:40
16:40 nihiliad joined
ruoso pmichaud, and I'm saying that it pretty much fits a prototype-based... and was relaxed in several points to allow that 16:41
I'm not at alll saying it should be one or another....
on the contrary, I'm advocating it needs to be agnostic... 16:42
pmichaud then yes, we need clarification from p6l I guess.
regardless
ruoso (as it almost is, the only part of the spec that implies otherwise is that specific phrase in S12)
pmichaud saying "Object.BUILDALL" doesn't make much sense to me, because "Object" is supposed to remain an undefined protoobject. 16:43
ruoso pmichaud, sure sure...
pmichaud, this is just a corner case
and it's not supposed to work gracefully
it's a huge shoot in the foot
the question is how to handle it... 16:44
pmichaud so the notion of "converting an undefined to defined" instance doesn't really follow for me either, nor do I see why it's an issue.
ruoso it's an issue if you think of protoobjects as something that can become an object
which is not the case for Parrot/Rakudo AFAICS
pmichaud protoobjects are objects
ruoso *defined object, that is
pmichaud they just respond differently to .defined
in particular 16:45
if I say: $p = Object.clone; $p.BUILDALL it's not clear to me that should work.
ruoso let me rephrase
pmichaud perhaps it should, but there's nothing in the spec to indicate that.
ruoso it's an issue if you think a protoobject and a defined object share the same implementation of .defined
which sees if the value is initialized 16:46
pmichaud what does "value is initialized" mean in this case?
ruoso the instance storage has been populated with the instance data
pmichaud with all of it, or with some?
ruoso with all of it
as in
Dog{ name => 'fido' } is undefr 16:47
but it becomes defined later
pmichaud no it does't.
no it doesn't.
ruoso er...
S12:2065
pmichaud does it have to be the *same* instance? 16:48
jnthn my $x = Dog{ name => 'fido'}; my $y = $x.new; # $y is defined now. But $x ain't.
pmichaud right
$y is a new instance
it's not the same as $x
jnthn Right.
ruoso but my $x = Dog{ name => 'fido' }; $x.wag;
$x is defined nwo
now
jnthn Huh?
ruoso S12:206 16:49
pmichaud but does $x have to be the same instance?
ruoso S12:2065
well, I'm implementing as it being the same
pmichaud yes, but is that required?
ruoso I'm not sure how you'd track down every container that holds it
pmichaud how do you mean?
"track down every container..."?
ruoso if you store that inside several hashes and arrays 16:50
16:50 |jedai| left
rakudo_svn r35817 | jonathan++ | [rakudo] If a routine is marked as proto, then all routines after that not declared multi will be made to be multis. 16:50
ruoso it should autovivify and become available in all that containers
pmichaud oh, Rakudo does that.
no problem.
16:50 |jedai| joined
jnthn my $dog = Dog{ :name<Fido> }; defined $dog or say "doesn't exist"; # Fido doesn't exist $dog.wag() # Fido wags his tail 16:50
In those three lines, does $dog end up defined?
ruoso yes
pmichaud yes
jnthn *after those...
ok 16:51
jnthn didn't realize Rakudo was doing that, but good.
pmichaud Rakudo isn't doing that yet
but I haven't figured out what causes it to happen.
jnthn Ah, OK.
pmichaud i.e., what triggers the conversion to defined
jnthn pmichaud: I really dunno.
pmichaud it's not simply the calling of a method.
jnthn It can't be ...right.
Because then .new would make the proto defined.
ruoso autovivifying implies calling BUILDALL
pmichaud either way, in Rakudo it's not at all a problem for us to take the object and replace it with a defined instance. 16:52
jnthn Indeed.
But it's a case of when it happens.
ruoso: Sure, but would wag here do that explicitly?
ruoso jnthn, I still didn't figure out what triggers that exactly... but yes...
wag would do that explicitly
pmichaud ruoso: but what makes it defined in this case? 16:53
16:53 ejs left
ruoso in my understanding... BUILDALL 16:53
pmichaud okay
but having BUILDALL convert an undefined to a defined instance isn't at all a problem (at least not in Rakudo
ruoso alright... I presume that is because of Parrot features 16:54
pmichaud even w/o parrot features
if we simply assume that Object has a $!defined attribute
and that BUILDALL sets $!defined to true
(it doesn't have to be a visible one -- could be handled internally)
then protoobjects don't have $!defined set, and BUILDALL sets $!defined 16:55
ruoso right... you ended up with the same as I do
you can call $proto.BUILDALL and make it defined
which is where we started 16:56
:)
pmichaud as I said, I don't see it as being a problem. :-)
ruoso so what happens when you do Object.BUILDALL ? 16:57
pmichaud I think it should be an error.
ruoso how do you detect that? 16:58
pmichaud Perhaps "Object" has a readonly property on it.
yes, that does become an issue if you assume that creating a new object involves cloning a protoobject (and the readonly property gets cloned)
ruoso which is set to false when you Object{ :attr }
pmichaud although I tend to think of "Object" as being a container just like "$x" 16:59
and then Object{ :attr } has an implicit clone in it, because it's really Object but WHENCE({ :attr }) 17:00
ruoso phew... I think we're getting somewhere now ;) 17:01
pmichaud afk, inauguration 17:02
ruoso so I get back to 1 hour ago ;) ;)... 17:07
if every built-in type is a Role
is Object a role?
ruoso lunch & 17:08
17:08 hercynium joined 17:11 [particle]1 joined
moritz_ std: for (my $i = 1; $i <= 3; $i++) { say $i; } 17:23
p6eval std 24973: OUTPUTĀ«00:05 86mā¤Ā»
17:27 ntgrl joined
eric256 rakudo: role Greet[Str $greeting] { method greet() { say "$greeting!"; } }; class English { does Greet["Hello"]; }; English.new.greet(); 17:27
p6eval rakudo 35819: OUTPUTĀ«Could not find non-existent sub doesā¤current instr.: 'parrot;English;_block38' pc 426 (EVAL_21:149)ā¤Ā»
moritz_ eric256: you have to write it as 'class English does Greet["Hello"] { ... }' for now 17:28
jnthn eric256: You have to put the does up after the class English for now.
17:28 [particle] left 17:29 ntgrl is now known as integral
eric256 ok ;) 17:29
17:29 ruoso left
eric256 just trying out the synopsis S12 since there doesn't appear to be an S14 yet 17:29
17:29 |jedai| left 17:30 |jedai| joined, szbalint left
jnthn eric256: Yes, some of S12 will move to S14. 17:32
eric256 makes since 17:33
lots of role stuff in there
jnthn Aye. 17:34
17:34 ruoso joined
jnthn I'm planning to work on that in the not too distant future. 17:34
eric256 now i just have to figure out a real world example for roles ;) lol
jnthn You'll find plenty once they settle into your head. :-)
eric256 of that i'm sure 17:35
gettings classes and roles and parametric roles all at once is alot to digest
jnthn Yes! 17:36
ruoso does "role Foo[:$something]" means that there's an attribute with that name? or is that a lexical variable that should be installed?
jnthn You can see it as a lexical.
What's between the [...] is just a signature.
In Rakudo we quite literally just bind it like a normal call.
ruoso I see...
jnthn Then do some magic to make sure we get the scoping of methods right. 17:37
Also, you do a multi-dispatch to decide which role to do.
moritz_ rakudo: role foo[:$a] { method m { say $a } }; (1 but foo[:a<z>]).m
p6eval rakudo 35819: OUTPUTĀ«No applicable candidates found to dispatch to for '_block20'ā¤current instr.: 'parrot;Perl6Role;!select' pc 2444 (src/classes/Role.pir:108)ā¤Ā»
eric256 is there any reason roles take [] instead of ()?
moritz_ rakudo: role foo[:$a] { method m { say $a } }; (1 does foo[:a<z>]).m
ruoso actually, it's not that hard once you have to support $?CLASS pointing to the class where the role was composed into
p6eval rakudo 35819: OUTPUTĀ«No applicable candidates found to dispatch to for '_block20'ā¤current instr.: 'parrot;Perl6Role;!select' pc 2444 (src/classes/Role.pir:108)ā¤Ā»
moritz_ jnthn: should that work?
jnthn moritz_: I *think* so. 17:38
ruoso rakudo: role Foo { method m { say $?CLASS } }; class Bar does Foo { }; Foo.m;
jnthn I can guess why it doesn't.
p6eval rakudo 35819: OUTPUTĀ«Scope not found for PAST::Var '$?CLASS' in mā¤current instr.: 'parrot;PCT;HLLCompiler;panic' pc 146 (src/PCT/HLLCompiler.pir:102)ā¤Ā»
moritz_ jnthn: should I open a ticket?
jnthn I've not written the tests for named parameters yet. ;-) 17:39
moritz_: You can, but it's already in the line of fire.
moritz_ ok, then I don't bother
jnthn ruoso: I suspect all roles will take an implicit $?CLASS as their first parameter.
Not done that yet, but...
rakudo: role Foo[Pair $x] { }; 1 but Foo[:x<1>] 17:40
p6eval rakudo 35819: RESULTĀ«1Ā»
jnthn Aye, 'tis what I expected.
missing build_call...
ruoso jnthn, I was guessing the role composition would glue an additional outer scope to the method being composed
declaring $?CLASS 17:41
not an additional, actually... but it would add a new scope in the hierarchy
17:41 zamolxes left
moritz_ rakudo: grammar A { }; my $a = A.new; say $a ~~ A; 17:42
p6eval rakudo 35819: OUTPUTĀ«too few arguments passed (1) - 3 params expectedā¤current instr.: 'parrot;PGE;Match;new' pc 28 (compilers/pge/PGE/Match.pir:54)ā¤Ā»
ruoso jnthn, I think [:x<1>] is always a named parameter, isn't it?
jnthn ruoso: Yeah.
ruoso you'd have to add an additional ( ) to make it a positional
jnthn ruoso: It is, but it's not being turned into one, it's being passed as a pair object.
I was just checking that the bug was what I thought it was. :-) 17:43
eric256 running 0 but True; seems to hang perl6 at the command line 17:46
17:46 ejs joined
moritz_ same here 17:47
17:47 nihiliad left
eric256 did know if but was working...guessing it isn't lol 17:47
jnthn The re-write of enums gets ever more desparate... 17:48
moritz_ 0 but Str also loops
jnthn Hmm
That's odd - I'd have expected an error... :-S
(Since Str is a class atm, rather than a role, and such issues.) 17:49
moritz_ I know
17:50 |jedai| left
jnthn wonders why something failed during make spectest, and yet runs just fine at the command line 17:50
17:50 |jedai| joined 17:57 nihiliad joined
rakudo_svn r35821 | jonathan++ | [rakudo] Compose roles at class composition time, rather than as we encounter them. 18:00
18:01 pdcawley joined
eric256 rakudo: role Err { has $.reason is rw;}; my $x = 1 but Err("Test"); say $x; say $x.reason; 18:05
p6eval rakudo 35819: OUTPUTĀ«1ā¤Testā¤Ā»
eric256 ;)
moritz_ rakudo: enum Foo <bar baz>; my $x = 1 but Foo::bar; say $x.Foo 18:06
p6eval rakudo 35819: OUTPUTĀ«Use of uninitialized valueā¤ā¤Ā»
18:11 Casan joined 18:12 rindolf joined 18:16 kst left 18:17 kst joined, |jedai| left 18:18 |jedai| joined 18:19 aindilis` left 18:20 aindilis` joined
moritz_ perl6: sub f($a, $b) { say "$a|$b" }; my @a = <1 4>; f(|@a) 18:21
18:21 kst` joined
p6eval pugs: OUTPUTĀ«*** No compatible multi variant found: "&f"ā¤ at /tmp/obfojECJqI line 1, column 47 - line 2, column 1ā¤Ā» 18:21
..rakudo 35825: OUTPUTĀ«1|4ā¤Ā»
..elf 24973: OUTPUTĀ«Undefined subroutine &GLOBAL::prefix__124 called at (eval 124) line 6.ā¤ at ./elf_h line 4307ā¤Ā»
rindolf Rakudo seems the only one right. 18:22
moritz_ aye 18:23
rakudo: rakudo: for "foo\nbar\nbaz".split( /\n ** 2..*/ ) { say
.trans([ /\s+/ => " " ]) }
p6eval rakudo 35825: OUTPUTĀ«Statement not terminated properly at line 1, near ": for \"foo"ā¤ā¤current instr.: 'parrot;PGE;Util;die' pc 129 (runtime/parrot/library/PGE/Util.pir:83)ā¤Ā»
moritz_ rakudo: rakudo: for "foo\nbar\nbaz".split( /\n ** 2..*/ ) { say .trans([ /\s+/ => " " ]) }
p6eval rakudo 35825: OUTPUTĀ«Statement not terminated properly at line 1, near ": for \"foo"ā¤ā¤current instr.: 'parrot;PGE;Util;die' pc 129 (runtime/parrot/library/PGE/Util.pir:83)ā¤Ā»
moritz_ what is complaining about? 18:24
pmichaud the extra "rakudo:"
rakudo doesn't understand labels yet.
moritz_ rakudo: for "foo\nbar\nbaz".split( /\n ** 2..*/ ) { say .trans([ /\s+/ => " " ]) }
p6eval rakudo 35825: OUTPUTĀ«foo bar bazā¤Ā»
moritz_ blind
pmichaud: do you want to (temporarily?) revert the Test.pm changes?
pmichaud yes. 18:25
moritz_ good.
pmichaud if you could easily do that, it would be great.
if not I'll do it, but have to hunt them down.
moritz_ I'll look into it
pmichaud could probably simply restore the Test.pm that was in effect yesterday.
instead of finding+reverting patch. 18:26
moritz_ I found the offending commit
now running spectest to see if it works out 18:27
18:30 ruoso left 18:35 km3 left 18:36 kst left 18:38 masak joined 18:44 riffraff joined, Patterner left 18:49 Psyche^ joined, Psyche^ is now known as Patterner
rakudo_svn r35830 | moritz++ | [rakudo] revert changes to Test.pm that broke some tests in fail.t 18:50
r35830 | moritz++ | We we re-evaluate the patch from Ovid++ after the release
jnthn moritz_: fail.t passes again after this?
moritz_ jnthn: all tests pass here 18:53
jnthn w00t 18:54
moritz_ jnthn: although I've seen some non-reproducible failures of t/spec/S16-filehandles/io_in_for_loops.t
jnthn: no #parrotsketch for you?
jnthn moritz_: Oh? Is it now? 18:56
moritz_ jnthn: yes, question time already
jnthn ooops!!!
pugs_svn r24974 | jnthn++ | [t/spec] Various extra tests for proto. 18:58
rakudo_svn r35836 | jonathan++ | [rakudo] Final fix needed to get a proto in the class to avoid conflicts with methods of the same name in roles (by bringing them into the multi). 19:01
19:01 simcop2387 left, simcop2387 joined
moritz_ mail sent to p6l. Let's see if we get some kind of productive response... 19:08
jnthn A flame war produces emails. ;-) 19:12
19:14 cosimo joined
masak aie! all the work I did on Text::Markup::Wiki::MediaWiki has just mysteriously disappeared! :O 19:16
moritz_ blames git
oh wait, I can't. Git is a saint...
19:16 schmalbe left
masak blaming git is close at hand right now. 19:17
but I'll withhold judgment. it's just as likely I or someone else did something wrong.
ok, found it. 19:18
still mystified, though. 19:24
19:24 zamolxes joined
jnthn afk for a bit - dinner 19:25
masak oh. I think I get it now. 19:26
merging, though marvellously simple, is not always easy. 19:27
19:30 kst` is now known as kst
diakopter @tell ruoso libpcl won't build on windows; I tried several environments.... although I guess I haven't tried vc++ 19:30
lambdabot Consider it noted.
19:31 On left, On joined 19:32 [particle] joined
eric256 reads about roles and traits and then wanders the halls mumbling to himself 19:34
19:35 pmurias joined
diakopter pmurias: :( libpcl won't build on windows; I tried several environments.... although I guess I haven't tried vc++ 19:35
pmurias: howdy :D
19:40 kst` joined
pmurias diakopter: hi 19:40
diakopter: libpcl is not really required for anything
diakopter okay... so src/pcl_coro.c is extraneous? 19:41
.ri I mean
pmurias src/pcl_coro.ri is not used by anything other than it's test 19:42
19:42 pbuetow joined
diakopter renames it 19:42
pmurias was doing just it 19:43
19:43 km2 joined
eric256 is there a way to get a Match object to give up its keys? 19:43
pmurias svn reverts
masak eric256: you give it a meaty bone instead? 19:44
diakopter well, that was quite the excursion
eric256 masak: ;)
masak eric256: have you tried $/.keys?
eric256 yep
masak eric256: did it work?
eric256 rakudo: rule a {H}; say "Hello" ~~ /<a>/; say $/.keys.perl;say $/<a>; 19:45
p6eval rakudo 35839: OUTPUTĀ«Hā¤[]ā¤Hā¤Ā»
eric256 no ;)
masak eric256: did you submit a rakudobug?
eric256 i don't even know if it is a bug, cause i can't find a sepc for Match...but thats cause i'm slow
19:45 riffraff left
eric256 lol 19:45
19:45 |jedai| left
pmurias diakopter: does it compile now? 19:45
masak eric256: please do. that's easier than asking.
"it's easier to get bugfixes than explanations" 19:46
19:46 |jedai| joined
eric256 only if it is suppose to handle .keys 19:46
masak eric256: as I said, there's only one way to find out :P
eric256 lol
alright alright
masak eric256: (I've wanted that functionality at times too)
moritz_ it's a bit tricky 19:47
$/ is both a hash and an array
and both have .keys methods
but I guess it's more dwim'my to assume hash semantics for .keys, .values, .kv etc.
masak yes, I agree. 19:48
moritz_ rakudo: rule a {H}; "Hello" ~~ /<a>/; say %($/).keys.perl;
p6eval rakudo 35839: OUTPUTĀ«["a"]ā¤Ā»
19:48 [particle]1 left
masak there's no way to satisfy Liskov in this case. 19:48
19:50 p6eval left, p6eval joined 19:52 silug left, pasteling left, Patterner left, literal left, tux300181 left, moritz_ left, kcwu left, lisppaste3 left, cotto left, Helios left, zostay left, AzureStone left 19:54 kst left 19:55 kst` left
eric256 oh cool ;) 19:56
rakudo: class Match is also { method keys () {return %($self).keys }; }; rule a {H}; say "Hello" ~~ /<a>/; say $/.keys.perl; 19:58
p6eval rakudo 35839: OUTPUTĀ«Scope not found for PAST::Var '$self' in keysā¤current instr.: 'parrot;PCT;HLLCompiler;panic' pc 146 (src/PCT/HLLCompiler.pir:102)ā¤Ā»
eric256 rakudo: class Match is also { method keys () {return %(self).keys }; }; rule a {H}; say "Hello" ~~ /<a>/; say $/.keys.perl; 19:59
p6eval rakudo 35839: OUTPUTĀ«Hā¤["a"]ā¤Ā»
eric256 sweet
masak eric256++ # taking matters into self.hands 20:01
jnthn masak: Actually, details here is probably more on-topic. :-=)
20:01 nihiliad left
masak jonathan: foo( :$bar ) doesn't work anymore. 20:02
jnthn hmm
masak jnthn: but it _is_ a Rakudo implementation question.
jnthn I can't believe we don't have spectests for that!
masak: True. :-)
masak oh, so it isn't a conscious regression?
jnthn But it's noisy on #parrot at the moment
No, it's not.
eric256 if i aksed all my questions as a bug report there would be like 100 new bugs ;)
jnthn Not knowingly on my part, anyway...
eric256 needs a #perl6-users channel 20:03
PerlJam eric256: do that right *after* the release.
masak eric256: bring 'em on.
eric256 or this should be #perl6-rakudo-dev ;)
jnthn rakudo: sub foo(:$x) { say $x }; my $a = 42; foo(:$a)
p6eval rakudo 35839: OUTPUTĀ«complex varname colonpair case not yet implemented at line 1, near ")"ā¤ā¤current instr.: 'parrot;PGE;Util;die' pc 129 (runtime/parrot/library/PGE/Util.pir:83)ā¤Ā» 20:04
masak jnthn: I find your lack of spectests disappointing.
jnthn rakudo: sub foo(:$x) { say $x }; my $a = 42; foo(:a($a))
p6eval rakudo 35839: OUTPUTĀ«too many named arguments - 'a' not expectedā¤current instr.: 'foo' pc 95 (EVAL_17:52)ā¤Ā»
jnthn rakudo: sub foo(:$x) { say $x }; my $a = 42; foo(:x($a))
p6eval rakudo 35839: OUTPUTĀ«42ā¤Ā»
eric256 rakudo: class Match is also { method keys () {return %(self).keys }; }; rule a {H}; say "Hello" ~~ /<a>/; say $/.keys.perl;say $/.WHO;
p6eval rakudo 35839: OUTPUTĀ«Hā¤["a"]ā¤Method 'WHO' not found for invocant of class 'Match'ā¤current instr.: 'parrot;P6metaclass;dispatch' pc 119 (src/classes/ClassHOW.pir:95)ā¤Ā»
eric256 rakudo: class Match is also { method keys () {return %(self).keys }; }; rule a {H}; say "Hello" ~~ /<a>/; say $/.keys.perl;say $/.WHAT;
jnthn rakudo: sub foo(:$x) { say $x }; my $x = 42; foo(:$x)
p6eval rakudo 35839: OUTPUTĀ«"load_bytecode" couldn't find file 'PGE.pbc'ā¤current instr.: 'parrot;PCT;Grammar;onload' pc 0 (src/PCT/Grammar.pir:41)ā¤Ā»
jnthn rakudo: sub foo(:$x) { say $x }; my $x = 42; foo(:$x)
p6eval rakudo 35839: OUTPUTĀ«complex varname colonpair case not yet implemented at line 1, near ")"ā¤ā¤current instr.: 'parrot;PGE;Util;die' pc 129 (runtime/parrot/library/PGE/Util.pir:83)ā¤Ā»
jnthn masak: I did write well over 50 new ones this week. :-P 20:05
Or close to anyway...
masak jnthn: I know, I'm not actually complaining.
20:05 cosimo left
jnthn :-P 20:05
masak just paraphrasing Darth Vader.
pmichaud masak: I don't think the foo(:$x) syntax was ever implemented.
masak pmichaud: oh, it was.
jnthn pmichaud: I seem to remember it working...
masak pmichaud: I had working code using it.
pmichaud okay, then it's been broken since rvar.
jnthn masak: Any idea on what timescale? 20:06
pmichaud because I don't think I put it into rvar.
masak jnthn: late November.
jnthn If last couple of days, I'm surprised. If rvar, I'm less so.
Ah, OK.
masak it was before rvar.
jnthn OK.
masak but I'm still sad it's gone.
jnthn blames rvar
pmichaud in which case, we don't have tests for it.
masak grr!
pmichaud blames spectest.
masak (lack of tests)--
jnthn will look at it in parallel with make nom 20:07
20:07 cosimo joined
masak jnthn++ 20:07
pmichaud what is responsible for handling :$x anyway? Is that colonpair?
because if so, I didn't do anything to colonpair.
(in rvar)
...and that might be why it's broken. 20:08
jnthn pmichaud:
ah.
it's because desigilname used to capture a name 20:09
And now captures it as longname
And actions.pm wasn't updated to follow that change in method colonpair.
pmichaud ah, std compiliance.
jnthn Aye, grammar.pg is right, actions.pm just didn't track it.
pmichaud: What whould we do in the :$foo::bar case? Is that illegal, I wonder? 20:10
But if so, I wonder why not just have ident...
pmichaud jnthn: I have no idea.
20:10 silug joined, pasteling joined, moritz_ joined, Patterner joined, literal joined, tux300181 joined, kcwu joined, lisppaste3 joined, Helios joined, AzureStone joined, cotto joined, zostay joined
jnthn heh, nor does S02. :-) 20:11
pmichaud it also means that :$$name would parse also.
eric256 rakudo: class Match is also { method keys () {return %(self).keys }; }; rule a {H}; say "Hello" ~~ /<a>/; say $/.keys.perl; my $x = $/; $x.keys.perl.say;
p6eval rakudo 35839: OUTPUTĀ«Hā¤["a"]ā¤Null PMC access in find_method()ā¤current instr.: 'parrot;Match;keys' pc 345 (EVAL_24:106)ā¤Ā»
masak eric256: Null PMC accesses are free rakudobugs! 20:12
submit, submit!
jnthn $key = $<var><desigilname>.text
(from sTD.pm)
eric256 masak: lol okay i'm off to file two bugs then
jnthn Well, that can't be wrong. ;-) 20:13
masak eric256++
pmichaud okay, that works for me. Do you want to do the colonpair change or shall I?
jnthn building it now...
masak rakudo: class A { has &.f; method t { &.f } }; A.new( f => { say "OH HAI" } ).t 20:16
p6eval rakudo 35839: OUTPUTĀ«Method 'f' not found for invocant of class 'A'ā¤current instr.: 'parrot;A;t' pc 245 (EVAL_20:96)ā¤Ā»
masak jnthn: this used to work as well >:(
moritz_ masak: please add to t/spec/S12-attributes/instance.t
masak moritz_: with all due respect, I'm too busy writing workarounds right now :( 20:17
we're on a tight schedule tonight.
moritz_ masak: ok
pmichaud masak: what did you expect that to do? return a sub?
masak pmichaud: no, run it.
oh.
jnthn You probably need parens for that.
moritz_ &.f is short for &( self.f )
masak rakudo: class A { has &.f; method t { &.f() } }; A.new( f => { say "OH HAI" } ).t
p6eval rakudo 35839: OUTPUTĀ«Method 'f' not found for invocant of class 'A'ā¤current instr.: 'parrot;A;t' pc 245 (EVAL_20:96)ā¤Ā»
masak would that be enough?
jnthn ok, i haz colon pair fix 20:18
20:18 kane_ left
jnthn will write spectest for it now, then run the tests... 20:18
masak jnthn: yay.
moritz_ jnthn: and I have a test locally here
20:19 kane_ joined
jnthn moritz_: Oh? Commit away then. 20:19
masak if I write that test, will the &.f regression be fixed sooner? :)
I'm willing to bargain here.
pmichaud rakudo: class A { has $!f; method t { $!f() } }; A.new( f => { say "OH HAI" } ).t
20:19 kane_ left
p6eval rakudo 35839: OUTPUTĀ«OH HAIā¤Ā» 20:19
jnthn oh, I thought you meant for colonpair.
pugs_svn r24975 | moritz++ | [t/spec] tests for mysub(:$named_arg)
masak pmichaud: oh, that helps. kthxbai. 20:20
jnthn oh, moritz++
20:20 kane_ joined
jnthn moritz_: Which file was it in? I'll unfudge it locally... 20:20
moritz_ jnthn: t/spec/S06-signature/named-parameters.t, one of them can probably be unfudged wih your fix
pmichaud rakudo: class A { has &!f; method t { &!f() } }; A.new( f => { say "OH HAI" } ).t
p6eval rakudo 35839: OUTPUTĀ«No such attribute '!f'ā¤current instr.: 'parrot;A;t' pc 209 (EVAL_20:83)ā¤Ā»
20:20 [particle]1 joined
pmichaud I don't know that we have subroutine attributes working yet in Rakudo. 20:20
masak pmichaud: I'm surprised constructors can assign to privates.
pmichaud subroutines are weird because we have to do funky things to sigils.
masak: I'm pretty sure that was the spec that was decided upon (assigning to privates) 20:21
moritz_ masak: they ahve to be initialized by .perl output somehow
masak moritz_: Perl 6 and I don't agree on what a private is, then.
moritz_ ok, back to the question: is &.f() actually allowed?
pmichaud rakudo: class A { has $.f; method t { $.f() } }; A.new( f => { say "OH HAI" } ).t
p6eval rakudo 35839: OUTPUTĀ«OH HAIā¤Ā»
pugs_svn r24976 | pmurias++ | [mildew] start of a Prelude
r24976 | pmurias++ | it is for now only loaded by load_prelude.p6
pmichaud I have to think about &.f() a bit.
moritz_ I mean it's self.f() in Callable context 20:22
pmichaud yes, that's what it looks like to me.
moritz_ so the return value better be coerced to a sub... which won't work
pmichaud I'm not even sure that $.f() is correct here.
moritz_ but you could declare it as &.f and call it as $.f() or so 20:23
pmichaud I think it would have to be (&.f)() 20:24
and ($.f)()
20:25 |jedai| left, On left
pmichaud because $.f() would be self.f() in scalar context. 20:25
er, in $ context
moritz_ since @.f means "call self.f in List context", the former would mean "call self.f in Code context", which doesn't amek sense to me
20:25 |jedai| joined
moritz_ $.f() or @.f() should do, though 20:26
pmichaud $.f and $.f() are equivalent.
both are method calls.
moritz_ right
pmichaud both are method calls with no arguments.
so, if $.f returns a sub to be invoked, then it would have to be ($.f)()
moritz_ with "former" I meant "(&.f)()"
pmichaud in order to invoke it. 20:27
moritz_ hm, right
pmichaud and rakudo gets that wrong for now, because it doesn't recognize the $.method(...) syntax.
moritz_ aye 20:28
20:28 alester joined
pmichaud some pieces of the grammar are really weird. 20:29
I bet I can get &.foo(args) to work if we ignore the sigil for now. 20:30
masak: use ($!f)() as your workaround for now, otherwise it'll break again when we fix Rakudo. 20:31
masak pmichaud: acknowledged.
pmichaud masak: or ($.f)()
masak aye.
20:32 cosimo left
pmichaud (and it's very likely that those are in fact the "correct" Perl 6 in the long run) 20:32
alester hey pmichaud 20:33
I have much to talk with you about.
pmichaud alester: if you can handle my possibly being distracted at a moment's notice today -- shoot :-)
alester Actually, I'd like to talk voice this evening, if possible.
pmichaud it's possible. 20:34
have a time in mind?
alester 8ish? 9ish? 20:37
20:37 [particle] left
alester I don't know what your home life is like. 20:37
pmichaud either of those work for me.
(I'm CST, btw)
alester will you be online?
Yeah, I know.
TX
pmichaud I don't know if I'll be online or not. I can break away from whatever I'm doing to take a call; I can't necessarily sit in front of the computer waiting for one, though.
if you just call 8ish 9ish or whatever that should be fine. 20:39
phone # coming via priv msg 20:40
alester no, that's fine.
PerlJam text messages make good pings.
pmichaud afk # kids from school 20:41
pugs_svn r24977 | jnthn++ | [t/spec] Fix and unfudge a colonpair test.
alester pmichaud: My agenda is roughly: What are we doing on rakudo.org? What do we want people to do in Perl 6? I'm working on my keynote for FP2009. 20:42
jnthn masak: fixed 20:43
jnthn -> nom
masak jnthn: woot!
looks promising for tonight's upgrade.
20:43 rhr_ joined 20:44 rob joined, rob is now known as Guest38745
eric256 okay apparently RT is smarter than me...is there anyway to submit a bug other than emailing it in? 20:48
i got a bitcard account and logged in, but i don't see any way to submit a bug 20:49
Guest38745 does anyone else find vim eats up a lot cpu whilst highlighting perl6 code? I am using the syntax file from the pugs repo
PerlJam eric256: are you sure you're looking at the correct interface?
eric256 PerlJam: nope 20:50
masak eric256: I usually email them in.
rakudo_svn r35840 | jonathan++ | [rakudo] Make :$foo form of colonpair work again.
eric256 PerlJam: rt.perl.org/rt3/
Khisanth eric256: which module do you want to report a bug for?
eric256 perl6
so i clicked perl6 on the right, got a list of bugs, but no submit or new ticket or. 20:51
20:51 viklund joined 20:52 |jedai| left, |jedai| joined
moritz_ Guest38745: update your copy of perl6.vim, that has been improved a few days ago 20:52
for bug reports you *must* send a mail (rakudobug@perl.org), there's no way to submit them via a web form 20:53
eric256 ahh okay
20:54 rhr left, cosimo joined
Guest38745 ah thanks moritz_ :) 20:54
20:55 Guest38745 is now known as rob___ 20:56 smtms joined 20:57 rindolf left
eric256 bugs away 21:00
rakudo: Null PMC access in find_method()ā¤current instr.: 'parrot;Match;keys' pc 345 (EVAL_24:106) 21:02
p6eval rakudo 35839: OUTPUTĀ«"load_bytecode" couldn't find file 'PGE.pbc'ā¤current instr.: 'parrot;PCT;Grammar;onload' pc 0 (src/PCT/Grammar.pir:41)ā¤Ā»
eric256 lol if you paste that in the interactive mode you get a segmentation fault... i dunno why its a segfault instead of a parse error 21:03
masak eric256: probably because you're running ./perl6 21:04
21:06 ejs left, mberends joined
eric256 ahh yea 21:07
PerlJam pmichaud, alester: I hope the two of you come up with a "standard" place to send people for rakudo stuff.
alester That's part of it, yes. 21:08
pmichaud PerlJam: that will happen. The only question is where and how.
21:08 wknight8111 left
pmichaud (I guess that's really two questions) 21:08
eric256 would love to see it be rakudo.org ;) but the blog isn't realy cutting it as an general information source 21:09
alester we realy only have 2.5 weeks to get rakudo.org in a state that I can show off in Minneapolis.
PerlJam For instance ....
alester eric256: Yes, we know.
We are aware that rakudo.org needs more on it.
eric256 ;) i figured ++ to both of you by the way
PerlJam < ben_m> PerlJam: currently looking for how to install rakudo.
alester That is one of the things we will be discussed.
PerlJam from one of the #perl
eric256 i'd be happy to help with anything you can offload ;)
alester eric256: thanks, I'm sure there will be stuff.
eric256 i'm trying to focus on examples etc since i can't seem to get enough time to get update on internals, but i'd love to help with some documentation for newbies too. i'm still green enough to sympathize with them 21:10
alester ANYTHING we write will be a win. 21:11
eric256 i think that package idea on the comments is good too, i just went through getting all the stuff for rakudo and it is a bit of work hunting around
21:12 perl7 joined
mberends rakudo: grammar G { regex r { \r }; regex b { \b }; }; if "b" ~~ G::b { say "blue"; }; 21:13
p6eval rakudo 35839: OUTPUTĀ«Method 'ACCEPTS' not found for invocant of class 'PGE;Match'ā¤current instr.: 'infix:~~' pc 19585 (src/builtins/match.pir:18)ā¤Ā»
mberends rakudobug, anyone?
masak mberends: that syntax is deprecated. 21:14
jnthn mberends: No, that code is wrong.
mberends good, then I can stand corrected!
jnthn try /<G::b>/
mberends ok, thanks! 21:15
jnthn e.g. "b" ~~ /<G::b>/
masak mberends: I have at least two things I want to talk to you about. :) but I don't have time tonight.
jnthn The other way did work in Rakudo for a while, but due to a shortcoming in Rakudo rather than because it was spec. :-)
21:15 |jedai| left
masak we used that shortcoming a bit too much in November :P 21:16
21:16 |jedai| joined
mberends masak: and my internet this week is an unreliable hotel wifi. I also want to discuss u4c and other matters with you. 21:17
masak aye, that's one of the things.
mberends sign me up, anyways
masak consider it done.
diakopter @tell ruoso never mind; pmurias informed me libpcl wasn't strictly necessary 21:18
lambdabot Consider it noted.
perl7 when will be the next version of parrot released? 21:24
PerlJam perl7: today 21:25
21:25 gravity joined
perl7 nice! 0.9? 21:25
21:25 gravity left 21:26 gravity joined 21:31 |jedai| left 21:33 |jedai| joined
diakopter pmurias: are you around for smop building help? 21:43
pmurias diakopter: sort of 21:51
21:52 [particle] joined, pmurias left 21:53 pmurias joined
diakopter pmurias: build\idconst.o: In function `SMOP__NATIVE__idconst_createn': 21:54
C:/Users/mwilson/source/pugs/v6/smop/build/idconst.c:132: undefined reference to `_imp__pthread_rwlock_rdlock'
pugs_svn r24978 | moritz++ | [irclog] try to make things like 'tt #202' link to trac tickets
diakopter but the pthread.h it's using definitely defines pthread_rwlock_rdlock (but I don't know about the _imp__ prefixed one) 21:55
though there are some cases in the pthread.h where it wouldn't define most/certain things 21:56
pugs_svn r24979 | moritz++ | [irclog] fix typo in regex
pmurias diakopter: dunno 21:57
diakopter: you could #define all the pthread stuff to empty strings
as we don't depend on multi threading for now 21:58
diakopter okay... do you know what the _imp__ prefix is/does?
pmurias no
diakopter oh; it might be a windows thing 21:59
pmurias i don't have anything like that in my pthread.h 22:00
what compiler are you using?
diakopter gcc 22:01
3.4.5 I think
on mingw
no it's not in my pthread.h
pmurias i see it mentioned in www.phpman.info/index.php/info/gcc 22:03
the _imp__
prefi
x
diakopter: your compiler wasn't shipped with Dev-C++ right? 22:06
22:08 nihiliad joined
diakopter pmurias: no.. 22:08
it's the gcc/mingw bundled with strawberry-portable
with mingw32-dlfcn-0-0.3.r11 and mingw32-pthreads-2.8.0-3 added in 22:09
22:09 [particle]1 left 22:12 perl7 left 22:13 mberends left
pmurias diakopter: you could try "#define pthread_rwlock_rdlock(...) " 22:16
i'm really clueless about windows so i can't help you much with getting pthread to work there 22:17
22:22 cosimo left 22:28 jhorwitz left, mberends joined
moritz_ rakudo: class Object is also { method perl { 'faked' } }; class A { }; say A.new.perl; 22:29
p6eval rakudo 35840: OUTPUTĀ«fakedā¤Ā»
moritz_ rakudo++
rakudo: class Object is also { method w { self.WHAT } }; class A { }; say A.new.w 22:30
p6eval rakudo 35840: OUTPUTĀ«Aā¤Ā»
PerlJam jonathan++ pmichaud++ even
moritz_ aye
22:32 |jedai| left 22:33 pmurias left 22:34 |jedai| joined
mberends this diagnostic used to work, but not now, please help: perl6 -e '$*ERR.say: "hello";' # result: Cannot write to a filehandle not opened for write 22:36
moritz_ mberends: please submit a bug report 22:37
that's one of the things we can't test yet with pure Perl 6 tests :(
mberends ok, will do.
moritz_ so it's not tested, and breaks frequently
diakopter pmichaud: ok thanks 22:38
oops
pmurias: ok thanks
22:39 wknight8111 joined 22:52 masak left 22:56 _jedai_ joined 22:58 |jedai| left
mberends moritz_: $*ERR bug is RT#62540. If I can figure out a spectest using perl5 qx(), should I submit a patch or could I commit the test to pugs? 23:04
23:04 Exodist left, eric256 left
moritz_ mberends: the spectests should be pure Perl 6. But feel free to write a rakudo specific test for now 23:05
using perl 5, that is
and attach it to the ticket
mberends will do, cannot promise a test because capturing stderr might be tricky. shades of open3()... 23:06
nihiliad Based on the advice of masak++ yesterday, I built Parrot and Rakudo and ran "make test && make spectest", in preparation for writing tests based on the synopses. Any particular place I should start in the synopses? Anyone else working on this, with whom I should coordinate? 23:09
23:10 iblechbot left
mberends moritz++ is our testking, and masak++ is bugking 23:11
23:11 pbuetow left
moritz_ nihiliad: please consult svn.pugscode.org/pugs/t/TASKS 23:11
nihiliad: it contains a list of things that need to be done. If none of them is of your liking, just say here "I'm now writing a test for $feature", we don't need more coordination right now 23:12
nihiliad moritz_: Thanks! Just what I was looking for. 23:13
mberends nihiliad: several people are planning similar work, see backlogs irclog.perlgeek.de/perl6 23:14
moritz_ but on the other hand the test suite is *so* large, that even with uncoordinated work collisions are rare
just commit early, commit often 23:15
23:16 _jedai_ left 23:17 |jedai| joined 23:30 vixey left
rakudo_svn r35844 | chromatic++ | [languages] Fixed POD formatting errors. 23:40
23:55 mberends left 23:56 |jedai| left 23:57 |jedai| joined
pugs_svn r24980 | lwall++ | [STD] head off attempt to use C-style for loop 23:57