|
-Ofun: xrl.us/hxhk | pugscode.org | pugs.kwiki.org | paste: paste.lisp.org/new/perl6 or sial.org/pbot/perl6 Set by apple-gunkies on 11 November 2005. |
|||
| svnbot6 | r7970 | Darren_Duncan++ | r861@Darren-Duncans-Computer: darrenduncan | 2005-11-18 12:46:27 -0800 | 01:14 | |
| r7970 | Darren_Duncan++ | /ext/Rosetta-Incubator : added SEE ALSO to indicate dependents of 5 core modules | |||
| r7971 | Darren_Duncan++ | r863@Darren-Duncans-Computer: darrenduncan | 2005-11-18 13:23:48 -0800 | |||
| r7971 | Darren_Duncan++ | /ext/Rosetta-Incubator : updated LICENCE AND COPYRIGHT in Validator.pm and all 8 en.pm files to briefly refer to their core modules for details rather than verbosely reprinting them | |||
| r7972 | Darren_Duncan++ | r865@Darren-Duncans-Computer: darrenduncan | 2005-11-18 13:52:17 -0800 | |||
| r7972 | Darren_Duncan++ | /ext/Rosetta-Incubator : updated ACKNOWLEDGEMENTS in the same 9 files likewise | |||
| r7973 | Darren_Duncan++ | r867@Darren-Duncans-Computer: darrenduncan | 2005-11-18 17:05:59 -0800 | |||
| r7973 | Darren_Duncan++ | /ext/Rosetta-Incubator : in each of the 17 lib/*.pm files, split up the NAME pod into 2 lines | 01:15 | ||
| rafl | leo: Ah, OK. | 02:11 | |
|
08:36
khisanth__ is now known as Khisanth
|
|||
| gaal | autrijus: ping | 11:20 | |
| autrijus: we have dates for YAPC, finally | 11:30 | ||
| 26-28 Feb | |||
| theorbtwo | Febuary? | ||
| YAPC::Na? | |||
| gaal | we'd like to do the hackathon 21-25 maybe? | 11:31 | |
| theorbtwo: YAPPC::Israel | |||
| theorbtwo | Aaah | ||
| christopher_ | luqui: ping | 11:58 | |
| luqui | christopher_, pong | 12:04 | |
| christopher_ | I thought about things you worried about in your journal entry about a week ago. | 12:07 | |
| First thought: The only problem with making Natural do Ring is with the return type. So, for multiple-dispatch, subtypes are okay for parameters, but not | |||
| for return values. | |||
| luqui | sure | 12:08 | |
| christopher_ | Are subtypes actually full-fledged classes? | 12:09 | |
| luqui | well, I'd like to answer you, but I'm afraid "class" is something we still haven't defined :-) | 12:10 | |
| christopher_ | I came to the conclusion that maybe they shouldn't be. If something was | ||
| inherited from Integer, then it should inherit the Ring role. But I | |||
| don't think a subtype should. | |||
| the first "inherited" should be "derived" | |||
| luqui | yeah... um. so if you inherit from integer | 12:11 | |
| you are specifying a subset of the integers, right? | |||
| I mean, anything that is your derivation of integer is also an integer is a subset | |||
| but the only subsets of the integers which are rings are {0} and all the integers | |||
| christopher_ | No, that's what subtypes are for. If you derive from integer, you're | 12:12 | |
| basically an integer but you represent something more special and so you | |||
| have extra, pretty little functions attached. | |||
| luqui | but what if you also have extra data attached? | ||
| certainly "1" is not your special derived integer, because it doesn't have the pretty data | |||
| and then your ring doesn't have a multiplicative identity :-) | |||
| christopher_ | If you have extra data attached, then you still do Ring by forgetting | 12:13 | |
| the extra data. If the extra data makes Ring ambiguous, well, that's | |||
| what my other proposal is for. | |||
| luqui | that's the subtyping *within* the ring you're talking about | ||
| the set of your specialized integers still does not do the ring | |||
| but they can certainly be used as elements of the ring. | |||
| you're just not guaranteed to get a specialized integer back again | |||
| let's call it MyInt | 12:14 | ||
| That is, Ring{MyInt} is still not true | |||
| even though you may certainly use MyInt in Integers place if MyInt is a subtype (or subclass or whatever) of Integer | |||
| christopher_ | By "derived" above, I mean class B isa A. I'm distinguishing the "isa" | ||
| relation from the "subtype" relation. | |||
| luqui | sure. but when you reduce it to fundamentals, you realize that they're both just certain kinds of subsets | 12:15 | |
| here's what I'm saying: | |||
| if Ring{MyInt}, that means there is a method infix:<+> (MyInt, MyInt --> MyInt) | |||
| if Ring{Int}, that means there is a method infix:<+> (Int, Int --> Int) | |||
| If MyInt isa Int, then you can still pass MyInts to the latter function | 12:16 | ||
| but you might not get a MyInt back | |||
| christopher_ | When you have "isa" class inheritance, you can think about properties of | ||
| the group as a whole. When you use subtypes, then lots of your methods | |||
| may fail. Subtypes work fine for many self-invoked methods but as you | |||
| observe the multiple-invocant start making less sense, because there's | |||
| no concept of the "subtype as a whole" having nice properties. | |||
| luqui | If Ring{MyInt} were true, that means you'd have to define a infix:<+> where if you added two MyInts, you'd get another MyInt back | ||
| christopher_, what is "isa" inheritance in the presence of multimethods? | 12:17 | ||
| you can fail there, too | 12:18 | ||
| only in the single-invocant case are you guaranteed still to succeed | |||
| but Ring defines lots of multimethods. | |||
| I'm not sure what you mean by "when you have 'isa' class inheritance, you can think about properties of the group as a whole' | 12:20 | ||
| christopher_ | With isa inheritance, aren't all the Int variables and methods automatically | 12:24 | |
| visible in the derived class? | |||
| You're right, you could recede to the base type when you call some of them.. | |||
| luqui | with subtyping, isn't the *exact same* value automatically visible in the derived class? | 12:25 | |
| I think of subtyping as derivation without adding any methods or data | |||
| (though construction is certainly different) | 12:26 | ||
| christopher_ | So, how about trying to separate covariant and contravariant promises? | 12:28 | |
| Role gets into so much trouble by trying to satisfy both of them at once... | |||
| at least, it makes it impossible for it to deduce much of anything. | |||
| luqui | did you read theory.pod? | 12:29 | |
| christopher_ | parts of it. why, are they already separated? | ||
| luqui | the idea was: role: contravariant only; factory: covariant only; theory: both | ||
| (but I called them the opposite things, as TSa hadn't corrected me yet) | 12:30 | ||
| christopher_ | But roles aren't contravariant-only in A12, are they? | ||
| luqui | sure | 12:31 | |
| they're even more restrictive | |||
| you can only have the topic type (the type being defined) in the first invocant position | |||
| christopher_ | so, the problem is with Ring as Theory? | ||
| luqui | the problem is in the expansion law; the rules that I use to transform the "sugared" form into constraints on variables | 12:32 | |
| it doesn't work | |||
| in order to solve it, I have to introduce "theory-valued theories" (theories that take other theories as parameters) | |||
| which I imagine could be a major pain for the typechecker | 12:33 | ||
| christopher_ | "Theory-valued theories" were already in theory.pod before yesterday | 12:34 | |
| (though admittedly, I didn't read that part). | |||
| luqui | oh, yeah, the note at the end | ||
| I was hoping that I could eliminate that | 12:35 | ||
| and then I did. but now I realize that I *really* can't | |||
| (it's a much bigger problem than the GADT case mentioned at the end) | |||
| christopher_ | So, I'd imagined that if you needed contravariant promises and covariant | 12:38 | |
| ones at once, you wouldn't be able to inference anything non-explicit. | |||
| But you say that with this extra machinery, there are some special | |||
| inferences you'll be able to make about Ring? | |||
| luqui | with what extra machinery? | ||
| christopher_ | theory-valued theories | ||
| .. | |||
| luqui | uh, no. they're necessary just to express the kinds of algebra that people want to express | 12:39 | |
| you couldn't make a Functor class without them. | |||
| oh, you were talking about inference | 12:40 | ||
| but maybe you weren't... the rest of your sentence doesn't seem to suggest that you're talking about type inference. | |||
| christopher_ | I think I was talking solely about type inference. | 12:41 | |
| luqui | hmm... okay, let me figure out what you were saying then :-) | ||
| christopher_ | maybe I should just ask a different question: why are theories necessary for p6? | 12:42 | |
| luqui | well, they're not *really*. We could settle for a Java-like type system | 12:43 | |
| christopher_ | okay, why do we want theories in p6? | ||
| luqui | Theories are really just an extension of Haskell's type classes. And type classes rock. So we stole them. | ||
| In most type systems, which don't have them, you can't even express algebraic structures like Ring | 12:44 | ||
| You just settle for assuming it implicitly in your program | |||
| It's really kind of obvious. We're all about generalization. You can think of theories either as a generalization of classes to multiple parameters, or a generalization of multimethods to collections of related multis. | 12:46 | ||
| s/classes/roles/ | |||
| christopher_ | By the expansion law, do you mean the place where you rewrite your | 12:47 | |
| simple syntax and put in '<=' a few times? | |||
| luqui | Yeah. | ||
| Haskell makes you write: sort :: (Ord a, Ord b) => [a] -> [b] | 12:48 | ||
| and I thought that was linguistically and conceptually complicated | |||
| so I wanted to be able to write it: sort :: [Ord] -> [Ord] | |||
| It gave a meaning to putting a role in a signature, since a role was just a theory | |||
| christopher_ | that may have led to my question about signature syntax, and how | 12:49 | |
| you express that whether the ord's are supposed to be fulfilled by | |||
| the same or different classes... | |||
| luqui | ahh, if you require them to be fulfilled by the same class, you have to use a variable | ||
| hmm, maybe the flaw in the rewrite syntax was the existential flaw I made in haskell the other day | 12:50 | ||
| do you know haskell? | |||
| (to know whether I should put it in haskell or perl 6 syntax) | |||
| (because p6 syntax isn't as well-defined) | |||
| christopher_ | i'm trying to learn it. I'm up to chapter 9 in the gentle intro, and | ||
| have just discovered that 'local' is provided by the Reader monad... | |||
| luqui | that's definitely good enough | ||
| basically, I was trying abstract away my implementation types. | 12:51 | ||
| so I had a function: mkFoo :: (Foo a) -> a | |||
| and I defined it: mkFoo = ImplFoo, where ImplFoo was a constructor for a type that was an instance of Foo (whew) | |||
| and then ghc whined at me about it | 12:52 | ||
| oh, s/->/=>/ above | |||
| I was making a logical error | |||
| my signature says that *whatever* type a you give me, if it is an instance of Foo, I can return it | |||
| whereas I was thinking, there exists a type a that is an instance of Foo that I return | 12:53 | ||
| And the latter is what I'm thinking when I say: sub mkFoo(--> Foo) | |||
| so clearly the expansion law doesn't work there either | |||
| in the "returns" position, the type has to be existential, not universal | |||
| so I think I was bound to hit a wall in the big picture eventually | 12:54 | ||
| (because mkFoo is equivalent to sub mkFoo(--> ^T <= Foo{^T}), which is the same as the haskell example) | |||
| christopher_ | remind me what the --> means? | 12:56 | |
| luqui | "returns" | ||
| however, it is very early in the morning, and I think it's time for me to go to bed | 12:58 | ||
| nice chatting with you; it clarified *my* thoughts a bit | |||
| I hope it did yours too | |||
| sayonara | |||
| christopher_ | thanks for bringing me up to speed! i definitely need more ghc prractice. | 12:59 | |
| svnbot6 | r7974 | iblech++ | * Usual svn props. | 13:07 | |
| r7974 | iblech++ | * New t/oo/attributes/defaults.t: | |||
| r7974 | iblech++ | has $.foo = get_foo(); # &get_foo executed at compile-time | |||
| r7974 | iblech++ | has $.foo = { get_foo() }; # &get_foo executed at object initialization time | |||
| r7974 | iblech++ | * New t/oo/attributes/is_rw_on_class.t: | |||
| r7974 | iblech++ | class Foo is rw { | |||
| r7974 | iblech++ | has $.bar; # automatically "is rw" | |||
| r7974 | iblech++ | } | |||
| Juerd | Hmm | 13:40 | |
| What does class Foo { has $.foo; is rw; has $.bar; } do? | |||
| (a) invalid syntax: is and friends have to come before anything else | |||
| (b) both $.foo and $.bar are rw, because is influences the entire class | 13:41 | ||
| (c) $.foo is ro, $.bar is rw, because is rw works lexically | |||
| 14:08 < svnbot6> r7974 | iblech++ | has $.foo = { get_foo() }; # &get_foo executed at object initialization time | 13:42 | ||
| Eek! | |||
| But it should assign a closure. | |||
| Or does "my $foo = { ... }" also not assign a closure? | |||
| Symmetry must be | 13:43 | ||
| theorbtwo | ?eval my $foo = { 1 }; $foo; | ||
|
13:43
evalbot_7969 is now known as evalbot_7974
|
|||
| evalbot_7974 | \sub {...} | 13:43 | |
| Juerd | luqui++ # apparently changed evalbot :) | 13:45 | |
| svnbot6 | r7975 | iblech++ | * Changed $:foo to $!foo, per latest S12 (r6618) in examples/, t/, ext/, and docs/. | 14:01 | |
| r7975 | iblech++ | * Changed $self.:bar to $self!bar, same reason, same directories. | |||
| r7975 | iblech++ | * Changed method :foo to my method foo, same reason, same directories. | |||
| r7975 | iblech++ | * Pugs.Parser: Parse $!foo. | |||
| r7975 | iblech++ | Note: Calling of private methods (self!foo) is not yet parsed. | |||
|
14:05
lampus_ is now known as lampus
|
|||
| Juerd | There goes infix none() :( | 15:01 | |
| r0nny_ | ls | 15:04 | |
| qmole | :) | 15:05 | |
| r0nny_ | how does adding new stuff to ΩINC work in perl6 ? | 15:06 | |
| Juerd | ...OhmINC?! | 15:09 | |
| r0nny_ | i found - again a 'foo" typo :/ | 15:10 | |
| Juerd | Hoping you mean @INC, it's no different than in Perl 5, BEGIN { push @INC, ... } | ||
| r0nny_ | im doing use lib 'foo'; | 15:12 | |
| it threw totally unrelated error messages at me casue i wrote 'foo"; | |||
| is there a way, to allow special classes to read pricate methods of other classes ? | 15:14 | ||
| eh provate | 15:15 | ||
| dudley_ | Does anybody have an svn dump of the pugs repo so that I could bootstrap my svk mirror? | 16:23 | |
| I lost my repository and I don't really want to pull down 10000 revisions from svn. | 16:24 | ||
| nothingmuch lost it too today | 16:25 | ||
| integral | dudley_: there is an option to sync to limit how much it pulls | 16:29 | |
| dudley_ | Oh, I know. It's just an OCD packrat thing, I want to have the whole history. | 16:30 | |
|
22:40
_SamB_ is now known as SamB
|
|||
| Jthon | Hello | 23:38 | |
| rafl | Hello Jthon | ||
| Jthon | Is there anyone around who would be willing to answer some questions about threading in parrot? | 23:39 | |
| liz6 | wouldn't #parrot be a better place to ask this? | ||
| Jthon | Well there is all of one person there, and it is the perl6 vm. | ||
| rafl | Jthon: #parrot on irc.perl.org | 23:40 | |
| obra | Jthon: What do your questions look like? | ||
| Jthon | I'm just trying to write some PASM/PIR code that starts additional threads and runs code in parallel. Unfortuneatly the calling code doesn't seem to work correctly. | 23:41 | |
| The only example I have is thr-primes.imc and that doesn't work either. | |||
| Same error as I get. | |||
| obra | So. It's my understand that parrot threading isn't yet specced ;) | ||
| Jthon | Which is get_str() not implemented in class 'NCI' | ||
| That's dissapointing. | 23:42 | ||
| leo | Jthon: calling code wrt threading is currently not working at all - it was though | ||
| Jthon: get_string() | 23:43 | ||
| but as said that belongs to #parrot, which is at L<irc://irc.rhizomatic.net>/ or L<irc://irc.pobox.com/> | 23:44 | ||
| Jthon | Ok I'll try there then. | 23:45 | |
| I'm trying to get Parrot running on a HW transactional memory system, and need some benchmarks. | |||
| leo | obra: and that too of course | ||
| Jthon | thanks for the help | ||
| leo | these exists already: 'HW transactional memory system'? | 23:47 | |
| Jthon | Well not entirely | ||
| Its running in a simic simulator as its still in development. | |||
| leo | simulator? | ||
| <- #parrot | 23:48 | ||