The Return of the Journal : pugs.blogs.com/ | pugscode.org | pugs.kwiki.org | paste: paste.lisp.org/new/perl6 or sial.org/pbot/perl6
Set by stevan on 23 December 2005.
sky seen audreyt 01:37
audreyt sky: pong 01:55
"comped"?
obra "given a complimentary" 01:56
audreyt oh. nope... I chose typepad mainly because sky and miyagawa are there :) 01:57
obra nod :) 02:00
audreyt and also because obra is not in the business of Blifty blog hosting :) 02:02
mm, blifty.{net,org,com} is all open 02:03
obra heh
my demo blog app is still too trivial
and will wait until i figure out how to abstract the authentication magic
also, dispatcher 02:04
audreyt nod 02:05
need more tricks in Jesse's Insane Form Transforming Yoga
obra hehh 02:07
audreyt continuations and regions and selective form->action->model interactions does sound like yoga to me 02:08
and the "insane" part is indisputable as well
obra I'll give you that
stevan__ obra++ # Jifty looks very nice 02:10
obra yay! 02:11
it's still very beta
and wants love
but hopefully it will get your love
stevan the "full stack" part was what convinced $coworker :) 02:12
he has been bugging the catalyst crew for that ever since he got the rails book
obra heh 02:13
stevan obra: I will surely get some lovin from us :)
obra is keeping track of which sorts of buzzwords attract which sets of people ;)
stevan :D
stevan "continutations" was what sold me 02:14
and the REST stuff too
I need to dig into the form handling more ,... it sounds really cool too
obra that was my big original concept 02:15
and it worked out really well
audreyt I think demasonizing the dispatcher will attract another set of people
rather large set too, considering TT2's audience
wolverian yes, please :) 02:16
obra so, I still want the dispatcher to end up falling through to serving a tree of templates, whatever the template engine 02:17
And yes, I'd be thrilled to see good patches that let jifty use TT2 as an alternative
stevan likes TT, but has never used Mason so has no opinion yet 02:18
actually I care very little about my template engine, as long as it can do all the things I need (which I am sure Mason can) 02:19
obra nod. 02:20
the common complaint about mason is that perl is its domain language
stevan well I know in Rails, eruby is the same way ,.. and people seem to have taken to it 02:21
I think it brings up thoughts of ASP and PHP development for some,... which is understandably not a good thing 02:22
wolverian I just don't like perl in templates. templates are messy enough without it.
(domain specific languages)++
stevan wolverian: but why is the TT language really that much different? 02:23
wolverian it looks like ruby :)
stevan :D
audreyt and also it's minimal like your favourite minilang :)
stevan ponders a Jifty::Template::MiniLang module 02:25
audreyt thinks stevan is insane
stevan thinks?
audreyt otoh, compiling minilang to perl5 takes very few lines
stevan I would think you would know that by now
audreyt given your previous Perl6-ObjectSpace 02:26
stevan :)
audreyt I dreamed (literally) of compiling minilang to native haskell code using GADT to precompute method bindings
I've been dreaming strange things lately ;)
stevan I was dreaming about vObj the other night
audreyt very nice 02:27
I think I'd like to finish up YAML::Syck and PGE::OPTable port today 02:28
wolverian I dreamt I was a elephant. that was very, very strange.
audreyt and then turn to minilang dispatcher 02:29
stevan: so still in $thinking phase about roles?
obra audreyt: I'd like a perl one first ;) 02:30
or minilang ala jifty::dbi::schema
stevan audreyt: nope, in implementation mode now
audreyt stevan: ooh cool
stevan I am just going to add a way to handle "requirements"
for things like role Foo { method bar { ... }}
audreyt wolverian: it could've been stranger... such as dreaming that you were 2+ elephants at once
stevan and for method conflicts
wolverian audreyt, hmm, yes. have you dreamed that? :) 02:31
audreyt stevan: 'k. let me know if you need support from underlying level 02:32
stevan audreyt: will do,.. I think I should be good though 02:33
I am commiting private method functionality right now
audreyt wolverian: at one time when I had fever, I dreamed I was a dreamer and the dream itself at once in parallel
that was quite strange
s/and/and also/ 02:34
stevan currently it just adds to %!methods until you get the dispatcher part working, then you can change them to add to %!private_methods
wolverian audreyt, wow. I just dream about crabs attacking me when I have a fever.
stevan audreyt: do you have any thoughts on adding types to the mini-language? 02:36
avar You have the most funky dreams when you have a high fever
i.e. fever to the point of you being in delirium 02:37
svnbot6 r8438 | stevan++ | PIL/Native/Bootstrap.pil 02:38
r8438 | stevan++ | - added support for private methods, still needs work on the
r8438 | stevan++ | dispatcher end (in Haskell) for full proper support
r8438 | stevan++ | t/pil/metamodel/*
r8438 | stevan++ | - fixed all instances of . which should actually be `
avar Is there a particular reason why perl makefiles have a PL extension instead of pl ? 02:42
audreyt stevan: you can use private methods now 02:46
stevan: first-class types-as-value would work
stevan: why do you plan to use it? 02:47
stevan audreyt: re: private methods ... really? 02:49
svnbot6 r8439 | audreyt++ | * PIL.Native.Eval - recognize %!private_method in dispatcher
r8439 | audreyt++ | as well. not yet distinguished between $obj!meth and $obj.meth though.
stevan :P
audreyt: so how does it work? does it use the MRO?
stevan reads the haskell source 02:50
audreyt stevan: r8440 02:51
I gotta run... bbl 02:52
stevan ok
svnbot6 r8440 | audreyt++ | * private method calls should not consider MRO nor install &?NEXT. 02:55
avar the only application that loads my computer more than ghc is phpdoc 03:32
svnbot6 r8441 | avar++ | * Does a character codepoint (\x..) evaluate to the same thing as its literal?, nah-ah in pugs 6.2.10 03:37
dduncan I don't recognize %!private_method , unless that's just because all attrs implicitly have methods
stevan dduncan: %!private_methods is a mini-language thing 03:39
it is part of the metamodel
dduncan okay
stevan it is an attribute of the ::Class object 03:40
dduncan: unless you want to hack the metamodel,.. you will never encounter it 03:41
dduncan I hear that!
?eval ::Foo; 03:46
evalbot_8441 ::Foo 03:46
dduncan ?eval class Bar {} ::Bar; 03:47
evalbot_8441 \Class.new(("name" => "Bar"), ("traits" => ("Object",)))
dduncan ::Foo;
?eval ::Foo;
evalbot_8441 ::Foo
dduncan this appears to be wrong 03:48
class Foo was never declared
oh wait
I am seeing some differences in my pugs ... could have to do with state maintenance between requests 03:49
superficially, it appears that after declaring any class, referencing the name of any other class, those not declared, returns true, or "{obj:Class}" to be specific
those same undeclared class refs returned undef before the unrelated class declaration 03:50
this is seen when running ./pugs on the command line
a related question of mine ... 03:51
luqui dduncan, I'm trying to reproduce this
can you give me a sequence of commands to execute?
dduncan yes, just a minute
wolverian isn't :: still the 'class that isn't yet declared' sigil? 03:52
luqui uh... kinda
Larry recently killed the ^ type sigil, reviving :: 03:53
so maybe that's not what :: means anymore
luqui doesn't remember, but thinks that Larry addressed the issue
dduncan here's a simpler case
1. ::Foo;
2. class Bar {}; ::Bar;
3. ::Foo;
do that on a freshly opened Pugs
if pugs is open, quit and reopen first
line 1 returns undef 03:54
line 3 returns {obj:Class}
note that the ::Bar; on line 2 is important for line 3 to return somthing different than line 1
luqui <lwall> The problem that worried me (about wanting to refer to a type that 03:55
will exist but hasn't been declared yet) does not arise often in
practice, and can be solved with a symbolic ref in any event, or
by predeclaring a stub type.
wolverian oh. so what's :: now?
luqui type sigil
wolverian ah. thanks
luqui dduncan, try omitting those semicolons
wolverian ::$(Foo) is the symref?
er, s/$//, I think..
luqui ::('Foo') maybe... 03:56
wolverian right. thanks again :)
luqui I'd prefer class Foo {...} Foo
man, that {...} thing is really starting to bug me
wolverian heh.
dduncan okay, that version treats Foo as a sub and fails
wolverian in this case it is a bit bugging
but usually you don't need to write stubs except when you want the ... to be visible 03:57
dduncan in any event, the actual problem I want to solve is, how do I test whether a package (not a file) has been loaded or not, so I can just conditionally 'require' it
luqui dduncan, omitting the *semi*colons, not the colons
dduncan oop,
luqui pugs interactive is flaky with regard to semicolons. It ends up ignoring various things 03:58
when in doubt in pugs interactive, never put a semicolon at the end of a line
dduncan will try to remember that
luqui thinks he should get that fixed
dduncan okay, leaving out the semis showed some useful info 03:59
will try to make use of it in code ...
luqui in response to your "actual problem"... I have no idea 04:00
dduncan I noticed in pugs interactive mode
that the result of the non-declared ::Foo had a ref of ::Type 04:01
whereas, the result of declared ::Bar had a ref of ::Class
this might do what I need
need to test more though
luqui that may just be a bug 04:02
dduncan may be
diotalevi Does pugs do threading?
luqui diotalevi, uh huh
diotalevi This is the "#pugs" place, and not actually perl6, right?
luqui yes
well, perl6 too
diotalevi Why is it called #perl6 then? 04:03
luqui because perl6 spec and pugs implementation are tightly interrelated
it would be a pain to have to think about where each question belongs
diotalevi Cuz people have told me that this is where to go to talk about pugs but that it isn't the place if I have other non-pugs perl6 stuff.
luqui and the same people would be in both channels anyway
diotalevi, no, it's fine in both cases 04:04
diotalevi oh ok.
luqui (though writing to perl6-language is generally more appropriate with perl 6 language stuff, because that's where the design team is listening)
diotalevi so was that "uh huh" to threading sarcastic or does it actually have threading support? 04:05
Can I run anything interesting on this thing yet?
stevan diotalevi: see examples/ 04:06
all are runnable
t/* has about 10,000 tests (most of which run too)
ext/* has many ported modules, almost all of which has their own test suites too
luqui diotalevi, pugs really does do thread
s
stevan diotalevi: to quote luqui,.. "uh huh" ;) 04:07
diotalevi Sweet.
Can I run perl5 stuff on pugs? 04:08
luqui diotalevi, you can use perl 5 modules
wolverian you'll still need perl on your system.
luqui use perl5:DBI; # etc
stevan diotalevi: there is a perl 5 bridge between the two, although it has some quirks IIRC
diotalevi zowie.
How about stuff that cares about perl5 optrees? Does that stuff still work? 04:09
luqui uh no
I mean, I'm not sure what you're talking about without an example
but any tricky stuff will probably not work
diotalevi I'm the maintainer of a few B:: modules and author of several more. Nothing "tricky," that doesn't use documented interfaces. 04:10
luqui ponders use perl5:Perl6::Attributes
;-)
well, pugs interprets itself, it does not convert itself to a perl5 optree
(well, I guess the perl5 backend does ;-)
diotalevi so when pugs runs perl5 code, does it launch a real perl5 interpreter or emulate one? 04:11
luqui launch
diotalevi sweet. Then it should DRT.
luqui see, I wasn't sure what you meant by "cares about optrees"
dduncan luqui, thanks for your help
whether based on a bug or not, I found a solution 04:12
diotalevi oh. do you know what optrees are?
luqui yes
dduncan the expression ::($module_name).does(Module)
luqui but the definition of "cares about" was a little vague
dduncan, interesting
dduncan returns true if the module is loaded, and false if not
diotalevi yeah, cares about is vague.
luqui I was thinking like optimize.pm
dduncan so I'll checkin a Locale::KeyedText with the relevant bug fixed in a moment ... 04:13
diotalevi actually... anything that cares about those is already in bed with the interpreter.
sky hmm 04:14
clkao sky 04:15
stevan audreyt: ping 04:16
luqui: wanna hack some haskell for me :) 04:17
luqui stevan, just a moment, then yes
stevan its simple stuff,.. I just can't get the damn type sigs to match up
cool
luqui stevan, mmkay 04:19
ready'
stevan luqui: so I am looking to add delete to the mini-lang's hash type 04:20
it should work fine with Data.Map.delete
but I can't get the types to match up in PIL/Native/Coerce.hs
class IsPlural needs a proper signature 04:21
and I am not sure what that should be
then it needs to be added to the instance on line 106
but that part is easy ( I think) 04:22
luqui should be
stevan and it doesn't need to do in place delete,.. it can just return a new map
which I what Data.Map does anyway (i think)
luqui haskell has no idea what "in place delete" is anyway ;-)
stevan yeah I figured :) 04:23
luqui (well, you could do it within STM monad)
(but naah)
stevan I dont need ti anyway
it can just return the copy
luqui in "IsPlural", the variables are:
"a" - the type of the thing that's being declared plural (map in this case) 04:24
svnbot6 r8442 | Darren_Duncan++ | r1604@Darren-Duncans-Computer: darrenduncan | 2005-12-25 20:22:01 -0800
r8442 | Darren_Duncan++ | /ext/Rosetta-Incubator : in KeyedText.pm, updated template_module_is_loaded() so it works correctly under current Pugs, though whether it is due to a specced or unspecced or bug is unknown
luqui "key" - keys; "val" - values
so the delete function should take a map and a key and return a new map with that value deleted, no?
stevan yes
a -> key -> a?
luqui yeah... well key -> a -> a probably 04:25
(it's convention in haskell to end signatures with a -> a)
(so that you can curry them to a mutator)
stevan ok
luqui but audreyt doesn't seem to be following that convention here 04:26
so you should probably do a -> key -> a
stevan it compiled!!!!
luqui coolness 04:27
you realize that you have to implement delete for all the other Plurals, right?
stevan yup
luqui (which could be an error message)
stevan it warned only
but I am putting in stubs to throw errors 04:28
luqui wait -- what does splice do?
stevan :)
probably exactly what I want delete to do :P 04:29
luqui except it takes an Int
stevan yup, and it is not assigned as in Prims.hs
luqui it looks like it drops the first n elements of the container 04:30
splice is a pretty bad name for that...
stevan yeah tail would be more approriate I think 04:31
or rather,.. my usage of it... would be better expressed as &tail
luqui well, "tail" and "drop" are taken by the prelude
stevan cause all I ever do is splice(1)
luqui (not that you can't hide those.. but they're useful, and it's a pain to hide them) 04:32
luqui wonders what Data.Seq is 04:33
stevan eak! Data.Map.delete takes a Map as it's arg 04:38
luqui uh huh? and?
oh 04:39
no, that looks fine
stevan it barfs all sorts of errors now though
luqui did you change the sig to a -> key -> a ? 04:40
stevan deleteAt looks promising maybe
yes I did
luqui that's the problem
stevan knows that
luqui Map.delete :: key -> Map -> Map
so you need to flip Map.delete's argument order to make it match
using none other than the "flip" builtin, which does precisely that!
:-)
stevan ok
where do I put that? 04:41
luqui delete = flip Map.delete
stevan nevermind I see
horray,.. we have compilation
and it works too :) 04:42
muchas gracias luqui
luqui de nada
ugh... learning a new instrument is so hard! 04:45
luqui cringes at his own violin playing
stevan can only play "Smoke on the Water" on violin 04:46
luqui better than me
luqui tries
stevan you just reverse the way your hands would go on a guitar since its tuned by 4ths instead of 5ths
luqui and you do it with a bow... 04:47
stevan ah
nah
strumming
luqui oh, I sound a lot better strumming than bowing
stevan its a power chord,.. you can't bow a power chord :P
luqui you can bow a double stop
and a power chord only has two notes anyway
the biggest hardness about the violin is that it has no frets 04:48
so everything sounds off key
stevan that takes time
luqui yeah. and I want to be a virtuoso NOW, damnit!
stevan I used to play a lot of fretless bass (electric, not standup) and it just took some time to get your hands trained 04:49
luqui bows smoke on the water
using double stops. Gee, that was fun.
stevan most good players can hear if they are off,.. so they quickly slide up/down to compensate
stevan got extra credit in figure drawing class for being able to do that once :)
luqui I can hear it too... and I slide up/down to compensate
"quickly".. not so much
by the time I compensate, I'm out of bow 04:50
:-)
stevan :D 04:51
stevan gives himself "roles with proper conflict handling" for a chirstmas present 04:52
luqui Coolness! (stevan xx 100)>>++
stevan and if all the other tests pass I will share it with everyone else too
of course I can't die in the mini-lang...
so I just don't include it 04:53
luqui actually thinks that's almost the right way to go
stevan I am considering returning a list of conflicts
you need to call &resolve on the class to get all the roles to flatten into it
luqui thinks, at first glance, that the best way to do it is to replace the method with a die "conflict in these roles" message
stevan well,.. yes and now 04:54
no
luqui it would be nice to catch it at compile time
stevan that would work, but it differs the error until runtime,.. this should be detectable at compile time
or at the very least class composition time
luqui has to think about this 04:55
stevan if &resolve returns a conflict object, that should give the next layer up enough infomation to decide what is best
in other words,.. just punt to the next layer :)
luqui we have to think in terms of interfaces
stevan aka - make audreyt handle it
luqui when role A does role B, that means that if you conform to A, then you automatically conform to B 04:56
I think that's the metric that needs to guide our conflict handling
stevan no, you are thinking something else
luqui ?
stevan if A has method &foo and B has method &foo,.. they are in conflict
luqui I know 04:57
stevan however, that is irrelevant until class C does them
luqui if A does B and A does C, then implementing A must implement both B and C
stevan yes
luqui if B and C have a conflict, then that must be resolved by whatever implements A, or by A itself
stevan yup
luqui say that A doesn't resolve it... 04:58
that method gets added to the interface of A
(the necessary interface, that is)
and if the class doesn't implement that method, then it doesn't conform to A
that makes the most sense to me
of course, we should fudge the error messages 04:59
to point to the conflict in B and C, not the fact that the class doesn't do A
stevan yes, correct on all accounts
luqui okay good
stevan the conflict between B and C is undiscovered until the class tries to consume A 05:00
luqui well... not "undiscovered", but "unreported"
stevan yes
luqui I've been thinking about scoping and roles a bit 05:05
but it's very fuzzy, so bear with me
an object would have a "view role" 05:06
stevan is very "fuzzy" at the moment anyway (long day)
luqui only methods in that role could be called on the object
other methods would pretend not to exist
stevan downcasting
luqui yeah... something like that 05:07
stevan this is fairly common Java thing
luqui but in Java "pretend not to exist" means "refuse to compile"
maybe that's what it means in static perl too
anyway, that's precisely how to handle private members
and the readonly-ness of attributes 05:08
stevan MyInterface a = (MyInterface) collection_iterator.getNext();
luqui that's an upcast, isn't it?
casting from Object into something more specific?
stevan oh,.. well yes, in this case your right
luqui but I think we're on the same page 05:09
stevan but since it was probably some object which implements MyInterface, then ... well you get what I mean
I was actually thinking about this too
that really the user should only ever interact with Roles
luqui anyway, to handle these things, you'd have:
svnbot6 r8443 | stevan++ | PIL/Native/Coerce.hs
r8443 | stevan++ | - added delete to IsPlural class, and appropriate instances
r8443 | stevan++ | PIL/Native/Prims.hs
r8443 | stevan++ | - added delete to the mini-lang's {} primative
r8443 | stevan++ | PIL/Native/Bootstrap.pil
r8443 | stevan++ | - added remove_method, remove_private_method and
r8443 | stevan++ | remove_attribute to ::Class
r8443 | stevan++ | - fixed ::Role.resolve so that it properly detects and removes
r8443 | stevan++ | method and attribute conflicts. Need to talk to audreyt++
luqui class Foo { has $.foo; has $!bar }
becomes
svnbot6 r8443 | stevan++ | about how I should return the conflicts so that errors can
r8443 | stevan++ | be thrown appropriately
r8443 | stevan++ | t/pil/metamodel/*
r8443 | stevan++ | - added role_conflicts.t to test basic role conflicts
r8443 | stevan++ | - added some more tests to roles.t
luqui role Foo { method foo() {...} } role FooImpl { does Foo; method foo() is rw {...} method bar() is rw {...} } 05:10
and the class would be created from FooImpl. Inside the class, it would see itself as FooImpl, but outside, everything would see it as Foo 05:11
which doesn't have the "rw" accessor for the foo attribute
stevan yup 05:12
I was thinking something very similar
luqui the private member might be something different though; it should have a different scope than the public methods
stevan and we get autogeneted accessor conflict resolution for free
luqui but there's something a little tricky
stevan I discussed this on p6l a while back
luqui the reason I wanted $.foo to mean method call is so that you could override attributes on behalf of your ancestors 05:13
because you know better than they do
and that's all dandy... except what happens when your ancestor *writes* to such an attribute?
that hardly makes sense in the above model 05:14
stevan do you have a use case for that?
a real world one
I would think that if you wanted to override attribute
luqui for which?
stevan you would have to seek out all the places it is used,.. and override those methods
luqui which isn't cool...
stevan but that really breaks stuff 05:15
cause your sub class now behaves differently
very diff
luqui well, my use case is that I create accessors for all my attributes when I create classes
so that my subclasses can do that
stevan yes 05:16
luqui and we already know that attributes autogenerate accessor methods
and everything is virtual, so those accessor methods can be overridden
but then when the ancestor writes to his attribute, it is simply ignored
which kinda seems like the wrong thing to m
me
stevan ignored? 05:17
luqui yeah; the outside world doesn't see his change
if he uses his own accessor method to get it back, his change hasn't happened
it hasn't even been considered by the subclass
stevan accessor methods are virtual too
luqui I know. but the rw part of them is not 05:18
stevan ah
interesting
ok
so if I override it with just r, then there is an issue
luqui yeah. especially since $.foo is the self-call syntax.
you can't tell the difference between writing to the underlying attribute and to its accessor (which I think is a step in the right direction, actually) 05:19
stevan well that has to desugar into something,..
luqui so it would seem that subclasses don't derive from the public role, but from the private impl class
which seems wrong...
stevan no
luqui no what? 05:20
stevan because the subclass has a different relationship than the user of the class
stevan is reminded of a cool paper on composable encapsulation policies for Smalltalk
luqui oh, and I don't have a use case for this weird rw stuff, because I have a tendency to write value types
i.e. constant classes
is it called "composable encapsulation policies"? 05:21
:-)
because I found that paper
stevan something like that yeah :)
luqui reads 05:22
I'm glad that I'm finally thinking aloud about this
stevan yeah thats it
stevan googled composable encapsulation policies and found it
its by the same people who did the original Traits paper
well, while I like the $.foo desugaring into a method call,.. I think it may be problematic 05:23
luqui neato
stevan now that I think about it at least
because of exactly the example you made
luqui right. but before we abandon it, I'd like to work through it
stevan the body of a method needs to have access to the innards of self
luqui because every other OO language uses the "autogenerated accessor" technique (most of the time without the "auto" part) 05:24
stevan in a way which is more permissive than the code *outside* a methods body does
luqui sure, thus Foo & FooImpl roles
you can still call $.foo an accessor, as long as the innards see the rw version and the "outards" don't
"information hiding is not necessarily an essential component of encapsulation." I like this paper already. 05:25
stevan yeah its a good one 05:26
ok,.. I have to sleep,..
read the paper,.. and we can continue this later
luqui excellent 05:27
nite
stevan actually the way to do this would be to make Foo the role,.. and FooImpl be a class 05:28
classes would have no notion of rw, or auto-generated accessors, etc
the Foo role would do all that
then your subclasses just deal with the class version
but the users always deal with the role version 05:29
luqui basically what I was saying above, that subclasses do FooImpl 05:31
oh wait
"then your subclasses just deal with the class version" 05:32
how? can you still override attributes?
stevan yes 05:33
luqui but classes have no notion of rw...
stevan yes
it is always rw
for classes
luqui oh. yeah, so basically what I was saying above. 05:34
stevan but $.foo does not desugar into self.foo
luqui aa soo, that's the one
stevan it desugars to self`get_attr('$foo')
luqui hmm, that's an interesting idea
you can still override attributes, but it's not the same as overriding a method
stevan yes
luqui I think I like it. Let me toy with it. Go to bed! :-) 05:35
stevan exactly :)
nite &
luqui Perl 6 has no reason to have inheritance 06:56
role composition is monotonic, and we reject local precedence ordering (the idea that class Foo { is Bar; is Baz } should look in Bar first) 06:57
s/is/does/g :-) 06:58
gaal luqui: what does monotonic mean? is that "and" up there used in the sense of "that is"? 07:23
luqui monotonic means that you never get a base class's method having precedence over a derived class's version 07:30
basically, "stuff isn't totally insane"
by that definition, Perl 5 was totally insane
er, I guess that's not what it means (I tried to simplify)
gaal when does that happen in p5? 07:31
luqui It means that "if A precedes B in the linearization of a class C, then A will precede B in the linearization of any subclass of C"
it doesn't happen in p5; I oversimplified
gaal ah, ack. 07:32
luqui do you grok that?
gaal i grok the correction :) I don't know what linearization means, though I have a guess.
luqui the order in which you look for methods
gaal no mixins (compiletime composition) involved? well my guess was wrong :) 07:33
luqui hmm... actually, perl5 is insane 07:34
let me contrive an example 07:35
and I actually think that the oversimplification is correct
gaal A pattern I've used in the past in P5 was inheritable singletons -- there was one instance of type B *or* C, both of which were derived from A. The actaul reference was stored in A. But this is a little weird, and doesn't have much to do with invocation anyway. 07:36
luqui Okay, insane p5: the standard diamond problem: B isa A, C isa A, D isa B, D isa C 07:37
gaal okay...
luqui If C overrides one of A's methods, say "foo", but B doesn't, then D.foo will resolve to A
not to C where it "should"
gaal C3 fixes that, no? 07:38
luqui indeed
and so does role composition
role composition does it all by constructing vtables; it does no linearization
gaal i'm not sure that's insane though :) 07:39
I mean it is consistent.
luqui how is it consistent?
gaal suppose B had overridden foo to do SUPER::foo()
you'd get B.foo
luqui (also: {"you are stupid", "stupid are you"} is consistent, but that doesn't mean it's good)
gaal "stupid are you" is a question with a little help from intonation and punctuation :) 07:40
luqui you'd need a comma, I think
gaal I said punctuation :)
luqui yeah, just realized that
wait, you said that B.SUPER::foo() would give you B.foo? 07:41
do you mean A.foo?
gaal both :)
luqui okay, I think I see what you're saying
gaal in invocation, it'd give you B.foo
luqui but we know that SUPER is broken, too
gaal in behavior, A.foo, but that'd be *reasonable*.
luqui so the fact that C overrided foo gets completely ignored when it is inherited multiply? 07:42
doesn't seem like inheriting from C did much good at all
gaal what would you do if both had overridden foo?
luqui that's what "local precedence ordering" is 07:43
gaal hmm?
luqui in python, it would have picked B, since it came first in the list of derivations
gaal p5 also
luqui but perl doesn't like ordering dependencies like that; i.e. we're rejecting the necessity of local precedence ordering
instead, we pitch a fit 07:44
gaal that's the only alternative
luqui was that a question?
gaal an observation.
luqui true
gaal errr, I mean: "sure, if you don't want to do that, raising an early error is the only alternative" 07:45
luqui and what you're left with is *precisely* the semantics of role composition
luqui understood
gaal except that last time I read S12, there was mention of runtime role composition
which silently discarded conflicts
luqui except it doesn't really
it just isn't "flat" like regular role composition 07:46
it introduces an ordering
the order in which they were composed at runtime
gaal can you still call the other method?
nothingmuch hola
gaal hey nm
luqui and I've thought about it; you can't get around that ordering
you can't make role composition commutative
gaal, the method that was overridden?
gaal the one that I said was discarded 07:47
luqui dubious, at least not without explicit qualification
gaal I said, ha. S12 did.
luqui :-)
gaal luqui: qualification is fine here. alternatives are to demand an alias at composition time 07:48
nothingmuch christmas sucks
no email
means i actually have to work
luqui works for me...
gaal stevan mentioned something about accessing the vtable programmatically, but most programmers wouldn't want to have to do that.
nothingmuch: that's why you're on the channel is it? :) 07:49
luqui yeah, you might say <overridden_role>.meta.methods<method_name>($obj)
luqui thought nothingmuch was saying that email didn't work
rather than the phenomenon of nobody sending you email
after checking my mail, I understood ;-) 07:50
gaal if there were something like a cast, you could do (<overriden_role>)$obj.<method_name>
nothingmuch =)
this CD is interesting
i have no clue what to make of it
gaal I don't know, I'm getting so much spam these days I always know if my mail stops working 07:51
luqui gaal, that wouldn't respect the "virtualness" of methods
nothingmuch The Big Gundown: John Zorn Plays the Music of Ennio Morricone
luqui nothingmuch, which CD?
I don't know what to make of the title
gaal nothingmuch: did you get a chance to hear the other lisa germano?
nothingmuch ~en.wikipedia.org/wiki/John_Zorn
gaal: i got some more off emusic 07:52
but only heard it, didn't listen yet
gaal yeah takes me a while too
nothingmuch Hapiness, Excerts From a Love Circus, and I already had Geek the Girl
gaal luqui: can you explain that virtualness comment?
nothingmuch: Lullaby for Liquid Pig is really, really beautiful 07:53
nothingmuch got mp3/ogg/something?
luqui well, if Bar does Foo: my Foo $x = Bar.new; $x.method_overridden_by_bar # calls Bar's version
that's pretty much the definition of virtual dispatch
gaal sure
nothingmuch it's not on emusic, and it'll be a while till i get stuff from amazon
gaal it's out of print :(
luqui so even though $x had been "casted" to Foo, it should still behave like Bar, because it is one 07:54
nothingmuch crap
luqui unless you're redefining cast
but I'm under the impression that if you override an attribute in a base class, space for that attribute shouldn't even be allocated
so it may not even make sense to call the method of a base class
gaal luqui: point. 07:55
luqui man, we still have to figure out BUILD. How can you claim to have an object system if you don't even have that?
gaal wants a subject system
but is more likely to get an abject system 07:56
luqui wants a dative system. But there have to be hot chicks on it.
luqui wonders if he still has that latinesque toy language of his 07:57
gaal wonders what luqui's gallinaceous dative system would do in the case of method conflicts. 08:00
luqui maybe it would be methodist-only 08:01
luqui looks up "gallinaceous"
gaal galline golfs it down a bit, really. 08:02
you did want chicks eh.
anymoose: $work &
luqui that even furthers the joke
gaal hey, the reason I spell my name with two As is to prevent (American) people from thinking I'm a chick. 08:03
s/prevent/avoid having them assume/ etc. 08:04
(can't help what other people think)
luqui: in c#, base class attributes *are* allocated, and are reachable. fwiw. 09:13
# msdn.microsoft.com/library/en-us/cs...sorspg.asp
Alias_ OK, so 10:01
Alias_ waits until nothingmuch stops being distracted by salad
nothingmuch ~30 mins 10:02
ciao
gaal Lettuce go now you and I... Is it dressing from a cucumber that makes me so encumbered? 10:07
luqui gaal, yeah, I know. I'm trying to change conventional OOP. 10:24
but thanks
luqui beds 10:27
nothingmuch dancing moose moose moose moose laa di da di da 10:39
avar zomg 10:40
just how long does building pugs take?
webmind depends on your cpu I think? :)
avar It still hadn't compiled after ~6hrs 10:41
started it when I went to sleep
nothingmuch that's too much
avar 1GHz iBook G4 running GNU/Linux
nothingmuch doesn't make sense
avar I even did make unoptimized! 10:42
nothingmuch that makes even less sense
avar how long should it take, approximately 10:43
gaal avar: how much RAM have you got? 10:50
is the machine thrashing?
avar 512MB real 512MB swap
gaal luqui: ack; which is why I appended the qualification. 10:51
avar: how big is your ghc? you *sure* you're running with -O0?
avar what would "big" mean in this sense?;) 10:52
nothingmuch RSS, VSZ from top or ps
avar mm, I tried turning swap off and I'm building it again, it was defenetly swapping before though, but I still think it took a bit too long 10:54
(didn't finish, I killed it)
trying again 10:55
gaal avar: afair 'make unoptimized' shouldn't go over 200, maybe 220mb 11:02
avar oh dear 11:08
it always gets killed my linux because of lack of memory, trying with swap again 11:21
xinming b 12:30
DaGo buenas! 13:25
avar woo 13:30
my pugs build worked like a charm when I reduced the heap size for ghc 13:31
it was either that or setting precompile_prelude: false
gaal avar: did you manage an unoptimized build with precompiled prelude? that's interesting 13:35
avar of course it doesn't actually work;)
well, I have to install it, it's trying to load some stuff from /usr/lib/perl6 13:36
does PREFIX= still not work like it says in INSTALL?
gaal dunno. 13:38
why do you need to install? i haven't installed in a loong while. 13:39
export PERL6LIB=blib6/lib
or setenv equivalent.
rafl_ Juerd: ping 14:31
svnbot6 r8444 | audreyt++ | * Text.Parser.OpTable: 100% feature-complete port of PGE::OPTable! 14:55
r8444 | audreyt++ | Pure-Haskell port of PGE (compiling rules to parsec) is now within reach.
audreyt wonders if luqui will get some cycles to do a p6 port from this
clkao WHOOT 14:56
audreyt++
audreyt :))) 14:57
clkao we should meet up
audreyt verily. you @ taizhong or taibei?
clkao taipei 14:58
till wednesday and then i am off for some hiking
i am having dinner with uni friends tomorrow
audreyt k 15:00
so you are free at daytime?
clkao likely, and will probably be around ntu 15:01
audreyt cool, I can probably go find you then
you got a cell #?
clkao yep. tmp one. 15:02
xinming audreyt: will you come to China in the future? :-)
hcchien clkao: where will you go for hiking
audreyt xinming: sure, if there's a conference and preferably if someone pays for airfare :)
xinming: if you can manage to come to Tokyo for YAPC::Asia, we can also meet there 15:03
clkao hcchien: 1b.hinet.net/~happyman/out/show.php...12.tag.png
xinming audreyt: I can't go anywhere after I learnt well, and make some money. :-P 15:04
I think I should use "before". :-/
xinming is going out for supper 15:05
gaal is "bei" in taibei related to mandarin bei (north)? 15:10
nothingmuch ARF
nothingmuch is getting segfault from inside libc's malloc
=( 15:11
audreyt gaal: yup
nothingmuch: clearly you need a better libc 15:12
nothingmuch audreyt: it's directly affected by a change I made
i just need to figure out what =(
redhat--
stevan_ hello all :)
nothingmuch the set of all inputs to malloc is amazingly huge
ofcourse, the bug lies therein
but I trigger it somehow
hola stevan_
stevan_ audreyt: roles are working now, but we need to chat about how to die when conflicts arise 15:13
nothingmuch fuck this. i want to be out biking
work-- # exhausting
stevan_ (C++)--
hmm, that cancels itself out
nothingmuch well, learning new stuff is exhasting
stevan_ learning new stuff is good though
nothingmuch stevan_: you just tride to pass an rvalue as a rw to postfix -- 15:14
naghty
audreyt stevan_: ::.error_conflict_arises
stevan_: that may be to gonzo. you'd like an exception object I presume?
stevan_ audreyt: no need for exceptions actually
I was thinking I would return you a "conflict" object 15:15
I could collect detailed info
audreyt that's best
stevan_ basically punting to the next layer
audreyt since at your level a conflict need not be fatal
stevan_ exactly
audreyt so it makes sense to punt... damn we agree again.
stevan_ :)
I blame nothingmuch
nothingmuch kicks stevan_
i'm exhausted, don't blame me for anything right now
stevan_ ok, I blame luqui then 15:16
nothingmuch thanks
stevan_ he was the one helping me with the Haskell
audreyt not fair, luqui's not even here :)
stevan_ exactly :)
stevan_ praises nothingmuch
you sound like you need it :)
nothingmuch stevan_: tell rob i am willing to make a Catalyst plugin out of CGI.pm's html generation, so he can have his awesome rails feature ;-) 15:17
stevan_ audreyt: I will collect the follwing things: the name of the conflicting item, and the roles in which they conflicted
nothingmuch it didn't occur to me till today that *that* was what he was really complaining catalyst lacks ;-)
stevan_ and return an opaque with a hash of these items, one for methods and one for attributes
nothingmuch: no, what he wants is the Ruby on Rails idea of a "full stack" 15:18
he wants the intelligent defaults too
nothingmuch i'm not really serious
stevan_ which is counter to Catalyst in many ways
nothingmuch but he gave 'textbox("foo", "bar")' as an example of a killer feature ;-)
stevan_ nothingmuch: :)
nothingmuch: when was this? recently, like today?
nothingmuch when was what? 15:19
stevan_ cause i told him to look at Jifty, which might be where he got that idea
nothingmuch a while ago
stevan_ oh
nothingmuch like 2-3 weeks
stevan_ yeah, blame me, I got him the Rails book on the company card :)
nothingmuch aye
nothingmuch can't see how a fully integrated stack can be good for business though
sure, it saves time the first 50% of the way 15:20
but then...
stevan_ nothingmuch: well thats the thing, most of what we do is in the first 50%
nothingmuch unless the app is so simple it might as well be just a scaffold
stevan_ well, the scaffold looks like shit though
people want pretty applications :)
nothingmuch heh
audreyt stevan_: roger. is Bootstrap.pil ready for separate dispatch of .send and .send_private? 15:21
stevan_ but other than that, yes thats most of what we need
audreyt: yes I think it is
nothingmuch what I mean to say is that the reason I value catalyst is that when I had to plug it into some backends that were not fully integrated into a stack
audreyt k
nothingmuch backends which my company paid big bucks to have
stevan_ I am properly installing to %!private_methods and self!method is used where appropriate
audreyt yeah, cat is very gluey. I like that a lot.
nothingmuch then catalyst made it very easy, since I didn't have to a. learn magic b. learn how to undo that magic c. undo the magic d. reimplement the magic on my other backend
the ratio of magic to usefulness is very good 15:22
magic is only good if it gives usefulness
stevan_ nothingmuch: I agree, but the less time i spend on $work , the more time i can spend here ;)
audreyt perl5/mg.c: "Sam sat on the ground and put his head in his hands. 'I wish I had never come here, and I don't want to see no more magic,' he said, and fell silent."
nothingmuch that's true
but i guess the real issue is what I had to work on and what you have to work on 15:23
stevan_ nothingmuch: very true
avar Compiling Pugs.Run ( src/Pugs/Run.hs, dist/build/src/Pugs/Run.o )
GHC's heap exhausted: current limit is 99999744 bytes;
hur hur
nothingmuch you're thinking of reimplementing the ears thing?
audreyt avar: "make" again should fix that
stevan_ nothingmuch: I actually think a full stack on top of catalyst is probably a good idea
audreyt avar: we are working on fixing it with the minilang thing :) 15:24
avar audreyt: it was a typo in config.yml
nothingmuch stevan_: Catalyst::Enzyme is perhaps a full stack and then some
audreyt avar: it was?
oh, a missing 0
stevan_ nothingmuch: well, we have some new work which almost requires we re-write it (new features, more flexibility, etc)
nothingmuch also, by not saying "full stack, la la la" you can't avoid design
stevan_ nothingmuch: I have been watching Catalyst::Enzymem
avar I speled precompile_prelude: false bad! 15:25
nothingmuch so people make the frameworks (e.g. HTML::Widget) be something that's both useful as a full stack (90% at least)
and very reusable, too
avar audreyt: nah, already doing "make unoptimized"
stevan_ nothingmuch: have you looked at seaside?
nothingmuch if you look at lathos's maypole hacks for CDBI - eeeeeeeeeeeeeeeeeeeekk
no, not yet
i sort of planned to
audreyt k.. very strangely, "unoptimized" is more likely to blow up heap in Run.hs
nothingmuch but no i realized i'll never get to it
audreyt if you just type "make" now, it will probably work :)
nothingmuch now
stevan_ nothingmuch: it is very nice, and worth a look
avar audreyt: already did make clean;) 15:26
audreyt avar: sigh :)
nothingmuch when I'm back in the webapp business, if ever, i promise to have a look
stevan_ if for nothing more than to steal the good ideas from
nothingmuch: ok :)
nothingmuch i know that it's continuation based, right?
stevan_ yup
stevan_ likes continutations :)
nothingmuch what i'd like is to steal jifty's form dispatch orientation thing
it sounds useful
i just have to see what it is 15:27
but again, punt till webapp business
hint hint
;-)
stevan_ we are going to do a review of all the major frameworks in January, and build pros/cons lists too
if it comes out useful we will put it up public somewhere
nothingmuch aye 15:29
my grudge with jifty at the moment: learn yet another ORM, and yet another template engine
stevan_ nothingmuch: learning new things is a Good Thing, it expands your vision ;)
nothingmuch well, yes
but (time / value) 15:30
i already know the ORM and templating problem
stevan_ I like the sound of Jifty, my only concern is it's BETA state, but thats a temporary thing
nothingmuch no matter how clever Jifty::DBI is, i doubt it will be as mind opening as the lambda shaped crowbar that audreyt shoved in to my ear and pried my mind open with
stevan_ nothingmuch: yes, we are looking for a long term investment though, so "learning new things" is not really a concern for us
nothingmuch aye 15:31
stevan_ wonders if there is a Haskell on Rails :P
audreyt aye, it's HSP
stevan_ :)
audreyt very cool stuff with inline XML construction and regex match of XML patterns 15:32
stevan_ oh
nothingmuch is it like that filesystem that oleg(?) wrote?
using the zipper pattern and continuations to represent a repeatable read model for the data, through an HTTP view? 15:33
that would be so cool that no one would use it
=D
audreyt nothingmuch: no, that's WASH
nothingmuch that's not googleable
oh, it is
stevan_ tries to recruit nothingmuch to work on a mini-language based web framework
audreyt nothingmuch: www.haskell.org/communities/11-2005....html#wash
also www.haskell.org/communities/11-2005....html#hasp 15:34
stevan_ audreyt: is the mini-language going to be PIL2? or is it that already?
audreyt stevan_: no, PIL2 will have native construction nodes for SigList, ArgList and containers 15:35
NativeMap etc is _not_ exposed to PIL2.
stevan_ ok
nothingmuch AUGH
stevan_ we need a good name for it then
nothingmuch i want to go out
walk
sick of sitting
ENORIDE
stevan_ mini-language is too much to type, and not very sexy
audreyt PILN
for PIL-Native 15:36
PIL.N
nothingmuch Pee.NET
stevan_ gives nothingmuch a "get out of work free" card
nothingmuch (the L is silent)
audreyt do not pass IRC. do not collect 200 karma.
nothingmuch karma nothingmuch? 15:37
no jabbot?
perlbot: karma for nothingmuch?
perlbot Karma for nothingmuch: 27
stevan_ slow perlbot
nothingmuch perlbot: karma for audreyt
perlbot Karma for audreyt: 15
nothingmuch perlbot: karma for autrijus
perlbot Karma for autrijus: 90
nothingmuch hmm
perlbot: karma for c
perlbot Karma for c: 708
nothingmuch i remember you had ~600 a while back 15:38
oh well
gaal so, who's changing their name to c?
nothingmuch gaal: chromatic
c c-- 15:38
audreyt c--++
audreyt # nice intermediate language 15:38
gaal c-+-+
nothingmuch ?eval say 'c-- ' for 1 .. 100
evalbot_8444 OUTPUT[c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- 15:38
nothingmuch ?eval say 'c-- ' for 1 .. 100 15:39
evalbot_8444 OUTPUT[c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c--
nothingmuch ?eval say 'c-- ' for 1 .. 100
evalbot_8444 OUTPUT[c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c--
nothingmuch perlbot: karma for c
perlbot Karma for c: 442
nothingmuch laa di daa
stevan_ wow it worked :)
nothingmuch ?eval say 'c-- ' for 1 .. 100
evalbot_8444 OUTPUT[c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c--
nothingmuch ?eval say 'c-- ' for 1 .. 100
gaal talk about "killer feature"
evalbot_8444 OUTPUT[c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c--
nothingmuch ?eval say 'c-- ' for 1 .. 100
evalbot_8444 OUTPUT[c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c--
nothingmuch perlbot: karma for c
perlbot Karma for c: 178
nothingmuch ?eval say 'c-- ' for 1 .. 1000
stevan_ :D
evalbot_8444 OUTPUT[c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c--
nothingmuch ?eval say 'c-- ' for 1 .. 100
evalbot_8444 OUTPUT[c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c--
nothingmuch ?eval say 'c-- ' for 1 .. 100
evalbot_8444 OUTPUT[c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c--
nothingmuch perlbot: karma for c 15:40
perlbot Karma for c: -86
nothingmuch damn right!
stevan_ thats better :)
nothingmuch ?eval say 'c-- ' for 1 .. 100
evalbot_8444 OUTPUT[c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c-- c--
nothingmuch one last time ;-)
gaal sets topic for #pugs: "nothingmuch doesn't like c very much"
audreyt or rather, s/c/$work/
nothingmuch no, i like work
i'm just tired
gaal s/pugs/perl6/
nothingmuch and I want to go home and do stuff
audreyt I see
nothingmuch but I don't have a way home yet
audreyt so s/$work/boredom/ 15:41
nothingmuch aye
time for tea
stevan_ audreyt: I think I like PILN the best 15:43
gaal audreyt: I'll finally have some time tomorrow for import/export stuff again. what do you think can be done w/o major refactorings?
nothingmuch tPILN
PILN 15:44
somewhat hard to type
Pee.NET, on the other hand
gaal assuming i break chained assignments :)
stevan_ nothingmuch: Pee stands for?
gaal pull in reduceSyn's logic into ruleVarDeclaration etc?
nothingmuch stevan_: it's a porn site
just ignore me
stevan_ :) # programmer porn 15:45
nothingmuch unixsex!
i think i'm going to go home
or rather, to b.s.
stevan_ where programmers go to look at unmanaged code
stevan_ has to go as well (family activities and such)
avar audreyt: setting precompile_prelude = false worked;)
stevan_ adios all &
kenben when is perl 6 coming out 16:11
clkao by christmas, of course
nothingmuch a christmas
kenben lol 16:12
svnbot6 r8445 | audreyt++ | * PILN: Handle the three method dispatch forms (obj`prim, 17:10
r8445 | audreyt++ | obj!private, obj.public) distinctly and correctly.
r8445 | audreyt++ | * Adjust Bootstrap.pil's invocations to use the new syntax.
r8445 | audreyt++ | A few tests from bootstrap.t still fails; probably needs
r8445 | audreyt++ | some input from stevan++.
r8446 | audreyt++ | * fix syntax tutorial in PIL.Native.Parser's comments. 17:34
luqui guten tag 19:36
svnbot6 r8447 | gaal++ | * pil REPL: don't die on parse errors 20:19
wolverian is there a specced method yet to tell what kind of values an array can hold? 20:52
I see there's .shape.. I don't think that holds what I want, though
(this is perl6, not pugs)
.sig.returns maybe? 20:55
arrays are after all glorified subroutines :)
avar mm, ideas 20:56
I'm going to write a program that allows you do to stuff like my $res = $x + $y; where $x = "one" and $x = "forty-two"; $res would then become 43 20:57
Obviously I'm going to have to overload the + operator and have $x and $y be some type I make up
wolverian remember i18n :)
avar but I don't quite know how to get started, the synopsis only glance over it..
where can I read about how to do stuff like 20:58
gaal multi &infix<+> (Str $x, Str $y) { ... }
avar $y = new Number("forty-two");
diotalevi_ Say, this is OT but it seems like rt.perl.org isn't authenticating using the same database as rt.cpan.org. Is this true?
wolverian avar, Number.new :)
avar gaal: Yeah, I know, but I don't know how it works with classes..
and I want to make it work through one
gaal rt.cpan.org authes with PAUSE 20:59
what's at rt.perl.org? :)
avar i.e. how does overloading an operator inside a class relate to the rest of the program?
wolverian it's a global (ie, in the * namespace), unless you say 'my multi'
diotalevi_ avar, isn't there already a CPAN module for doing that? "one" + "two" is likely already handled in a p5 cpan module.
gaal avar: this is multi dispatch
see the end of S12 IIRC 21:00
wolverian so, no ideas about the array introspection?
avar ah, a multi sub is accesable below the scope which it was defined in?
diotalevi_ rt.perl.org is what perl5 is tracked in. Apparently it's not in the rt.cpan.org site.
wolverian goes look in S29
avar I though it was just accessable if you included a file ...
wolverian not in S29 :) 21:01
avar if that's the case that's the answer I was looking for then;)
gaal avar: like wolverian said, you want the method to be in *
avar mm, okey, thanks!
gaal ah, S13
wolverian ..which is the default when you say 'multi foo ...', I think 21:02
gaal wolverian: I think not
"Note the lack of * on those definitions. That means this definition of addition is only in effect within the scope of the package in which infix:<+> is defined. Similar constraints apply to lexically scoped multi subs. Generally you want to put your multi subs into the * space, however, so that they work everywhere."
wolverian oh, sorry. 21:03
gaal I think introspection is underspecced in general. 21:06
I'm sure luqui &co. have more rabbits up their sleeves, but I never saw how to interrogate a sub about whether it has a named arg called X and what's its type etc. 21:08
luqui hmm... yeah, not specced
probably just goes with the OO interface for &codes
gaal was I right about your rabbity sleeves? (does that tickle, I always wondered?) 21:09
luqui i.e. it's not something that really needs to be specced
gaal, it hurts more than tickles
gaal hum? why not?
luqui well, it's almost arbitrary, as long as there is *some* WTDI
it's not a linguistic issue
gaal OO interfaces can be better or worse too you know :) 21:10
luqui though for multiple implementations, it's good to have it nailed down
gaal, yeah, sure, but that's not the kind of thing that's done often enough for it to matter
lisppaste3 avar pasted "overloading" at paste.lisp.org/display/15032 21:12
avar mm, what am I doing wrong
that's the basic concept of how this is going to look...
luqui avar, well, what is going wrong? 21:13
avar *** cannot cast from VObject (MkObject {objType = (mkType "Tala"), objAttrs = <ref>, objOpaque = Nothing, objId = 53}) to Double (VNum)
at int2is2.p6 line 31, column 5-12
gaal avar: try putting the last three lines inside the class scope, for starters
not sure what the state of this is in pugs 21:14
luqui avar, when you're overloading an operator
you want to put the multi into the global namespace
the only time you don't is when you want to lexically override some notation
that is, change multi sub infix:<+> ...
to multi sub *infix:<+> ...
gaal sleeps & 21:15
avar woo, that works;)
thx
luqui we really ought to have warnings and whatnot about that
gaal how would you avoid the warning?
luqui no warnings ...
gaal heh, that may be a while. :) 21:16
luqui to me, and this could be argued, the only operator overloading that make sense are lexical and global
package doesn't make sense
but package is the default!
gaal zzZZZ fer realzors & 21:17
avar arr, nothing's working/ 21:20
luqui avar\awk... \awk? 21:20
Aho, Weinberger, Kernighan? 21:21
avar is more famous that I thought...
wolverian maybe should prod p6l about introspectoin? 21:26
s,oi,io,
luqui have at it 21:27
wolverian sent 21:35
lisppaste3 avar annotated #15032 with "infinite loop..." at paste.lisp.org/display/15032#1 21:38
avar that's strange 21:39
luqui avar, known bug
luqui plays with it to find a workaround 21:40
hmmm... the usual workaround is not working 21:44
luqui is stumped 21:45
avarab luqui: did you find something? 22:20
svnbot6 r8448 | luqui++ | Fixed interpretation of curlies to make a hash. The following:
r8448 | luqui++ | { %foo }
r8448 | luqui++ | { %$foo }
r8448 | luqui++ | { %foo, a => 1, b => 2 }
r8448 | luqui++ | are now interpreted correctly.
luqui wtf... svk is being a bitch
avarab, no, sorry
I could have sworn I already committed that! 22:21
avarab that's pretty much a showstopper for my app if I can't find a workaround;/ 22:23
luqui hmm.. 22:24
unless you can figure out a way to add without calling '+'... 22:25
svnbot6 r8449 | luqui++ | Backtracking controls. 22:29
r8450 | luqui++ | Change "cut"'s name to "commit", even though what I'm doing is a little more general than commit.
avarab hahah
I found a workaround
luqui how can I get conflicts when I'm the only one editing these files!? 22:30
avarab, cool, what did you do?
svnbot6 r8451 | luqui++ | A little documentation.
lisppaste3 avar annotated #15032 with "workaround" at paste.lisp.org/display/15032#2 22:31
luqui isn't sure why that works...
svnbot6 r8452 | luqui++ | A little bit more documentation, for the slightly tricky quantify combinator.
r8453 | luqui++ | Minimal quantifiers.
luqui maybe it's the type annotations 22:32
avarab is there a t/pugsbugs/ for it?
luqui I think r0nny put in a test for a related problem 22:33
svnbot6 r8454 | luqui++ | Making sure that quantifiers are maximal by default.
r8455 | luqui++ | Optional, and some untested anchors.
luqui but more tests never hurt
avarab I'm not sure how to make a test for something that results in an infinite loop
and something I can't narrow down to a single statement...
luqui it's easy to test the latter
just set up the necessary stuff before the actual test 22:34
svnbot6 r8456 | luqui++ | Renamed match_num and match_name to capture_num and capture_name, since
r8456 | luqui++ | they're better names for that.
luqui if calling + results in an infinite loop...
then put a counter around the call to +
and make sure it doesn't exceed, oh, say, 10 22:35
it's an infinite *recursion*
svnbot6 r8459 | luqui++ | Get rid of some error checking in perl6.vim, because it has false negatives.
r8459 | luqui++ | Specifically: ( $s { } )
r8460 | luqui++ | Fixed editor.vim better.
r8461 | luqui++ | Allow ./method: arg1, arg2 (listop method with implicit invocant). Refactored
r8461 | luqui++ | the parser a little in the process.
luqui other sorts of infinite loops are not so easy
ugh, that was a painful push
I could have sworn that I pushed that stuff long ago
and I got conflicts all over the place
svk-- 22:36
lisppaste3 avar pasted "hmm" at paste.lisp.org/display/15036 22:40
luqui & 22:42
stevan audreyt: all tests pass now 22:54
mostly it was swapping . for ` 22:55
luqui stevan, did you see my proclimation yesterday?
stevan see r8463
luqui I don't have the guts to p6l it yet
stevan luqui: yes I did
I agree with you, but disagree at the same time :)
luqui 'splain
stevan I agree we dont really need them
but I disagree that we should do anything about that
svnbot6 r8463 | stevan++ | PIL.Native.Bootstrap.pil
r8463 | stevan++ | - added .class and .id methods to ::Object so that they are
r8463 | stevan++ | accessible to the metamodel
r8463 | stevan++ | - fixed is_a (it used . where it meant `)
r8463 | stevan++ | t/pil/metamodel/*
r8463 | stevan++ | - fixed all tests to pass, a lot of swapping . for `
stevan people are used to classes 22:56
they like classes
luqui oh, no, I didn't say we didn't need classes
stevan classes make them feel all warm and fuzzy
luqui I think we do
I said we didn't need inheritance
stevan that all goes for inheritence too
you can't shake things up that much
luqui i.e. there doesn't need to be a difference between inheritance and role composition
stevan right
but shhhh don't tell people that
:P
you will scare them away 22:57
luqui well, we could just s/is/does/g, and teach people that "does" is how you inherit
"is" is for trait application anyway
and I've never liked the overloading of that word
stevan I think it is a case of "dont rock the boat"
luqui why?
stevan perl 5 people will have enough time with a real object system
it takes some getting used to
I think most people will like it 22:58
but its an adjustment
luqui yeah... except...
there's this thing about "what does it mean for a role to inherit"?
stevan so to snatch classes and things many people are comfortable with, out from under it,.. thats too much
roles dont inherit
thats the thing
they flatten
luqui yeah 22:59
stevan only like a handful of people really understand what that means
luqui so they flatten in the inheritance
but then what does inheritance do?
stevan its chains it
only langs like C++, where everything is analyzed to death, is inheritence flattend
into vtables
thats what vtables are basically
flattened inheritence
luqui yep
stevan but anyway,.. I agree with you,.. they are pretty much interchangeable in most cases 23:00
luqui the "pretty much" is what scares me
stevan but thats the technical side of the argument
luqui we have two different things, which do almost the same thing
stevan well I imagine there might be an edge case or two where they differ
luqui exactly!
stevan but I am paranoid like that
luqui how do people know which one to use?
stevan they will learn
luqui I don't know yet... you don't either.
stevan roles are new things,.. shiney,.. and ohhhh so purty
luqui sure 23:01
stevan it will take time
luqui I'm thinking that it will only "rock the boat" for people who are into the metamodel already
stevan consider this,.. you, and I ,... we can write the p6 OO style guide
so we can stear them in the right direction :)
luqui for the end user, and for the folks who don't care about the OO design, it amounts to s/is/does/g
stevan oh, it's not rocking my boat really
wolverian I happen to agree. two keywords that do the almost same thing is weird.
stevan i think its a question of comfort level 23:02
this is the human end of language design
luqui you think people are more comfortable with the "is" keyword than the "does" keyword?
stevan if you change something too radically,.. you will scare a percentage of people away
wolverian I don't like "does"
stevan luqui: keyword is irrelevant,.. its the words you use
luqui stevan, yeah...
and we use the words "inheritance" 23:03
stevan to best describe roles,.. you say they are composed,..
luqui and role composition becomes our inheritance model
stevan to best describe classes... you say they are inherited
luqui maybe.
stevan I will think it over more,.. and try to come up with test cases both for and against 23:04
luqui the thing that differentiates roles from classes is that they have sane conflict resolution
other than that, they are just abstract classes
stevan and they are not inherited
no, they are not
luqui pretend they are
stevan they are modules
they are not able to be instantiated
they dont need constructors
luqui neither are abstract classes
stevan they are dumb collections of methods and attrs
luqui stevan, hang on 23:05
stevan swings from his branch awaiting luqui's next thought :)
wolverian I don't see any difference between abstract classes and roles, myself
(besides inheritance)
stevan wolverian: exactly,.. thats a big difference I think 23:06
luqui tell me the difference between class Foo { does Bar } and class Foo { is Baz }, given that the Bar role is just like the Baz abstract class (no constructors, uninstantiable)
stevan luqui: how does next METHOD work in a flattened context?
if you have no super,..then where do you go
luqui point
stevan because everything is composed together,.. thee is no parentage,.. and so you cannot go anywhere 23:07
luqui I don't tend to use those guys, so they don't enter into my consideration...
stevan yeah
luqui hmm
stevan I tend to agree that role composition can be a superior form of class composition
luqui what do people use SUPER for?
stevan but I dont agree that it should replace inheritence
time and a place for both
luqui er, I mean, NEXT (SUPER is gone)
stevan, what is that time and place?
stevan t/pil/metamodel/S12_example.t 23:08
luqui: I hate to cut this short,.. but I am running off to see King Kong,.. and my wife is going to kill me if I dont get off the computer :)
luqui okay
we'll discuss later
stevan luqui: I dont know what those time/places are,.. but we can/will figure them out 23:09
luqui that's important
if we have a distinction between is and does, we have to know what the heck it is
stevan but NEXT is *very* useful,.. trust me :)
luqui see ya
stevan ok,.. I will try to pop in later tonight
luqui I'm here all day, I think 23:10
stevan runs off before he gets in trouble &
luqui: another thought (this time to support the "just use roles" end of the argument 23:26
if you use multi-methods instead of instance/class methods, then you can have call-next-method
since you would just be calling the next most appropriate method,.. which will likely be the same one you would call for SUPER or next METHOD 23:27
this is how CLOS works
then classes/instances are just purely about attribute management
this is also how Dylan works
it would be possible and be very cool 23:28
CLOS/Dylan call it generic functions
take a look :)
stevan can go and enjoy the movie now that he said that ;)
and for the record,.. I am down with whatever meta-model makes sense,.. I am not married to the current one 23:29
I like it,..but I would be happy to write another one too,.. I enjoy it :)