|
Pugs t-shirts www.cafepress.com/pugscode | Pugs 6.2.9 released | pugscode.org | pugs.kwiki.org | paste: sial.org/pbot/perl6 | www.geeksunite.net Set by stevan on 15 August 2005. |
|||
| xinming_Beijing | hmm, anyone here can tell me why pugs still doesn't support the class attribute initializing? hmm, Just like `class A { has $.a = 1 }; | 00:37 | |
| wilx | Because nobody has implemented it yet? :) | 00:41 | |
| xinming_Beijing | wilx: I don't think so... This bug has been staying for a month. :-) I think It might be something related to MetaModule. But I am not sure. | 00:52 | |
|
02:01
khisanth_ is now known as Khisanth
|
|||
| buu | Where is evalbot's source? | 03:35 | |
| Or at least, where could I find information about safe mode? | 03:37 | ||
| QtPlatypus | buu: Its distributed with pugs. | 03:47 | |
| buu | Yeah, I found it. | 03:49 | |
| Ick, evalbot forks pugs to execute the code? | |||
| Is there any equivalent of the Safe module for p6/pugs? | 03:50 | ||
| QtPlatypus | Not to my knowlige, my advice would be to abstract out what evalbot does into a seperate module. | 03:55 | |
| buu | Er | 03:56 | |
| I prefer not to do that. | |||
| Mostly I prefer not to fork. | 03:57 | ||
| svnbot6 | r7128 | stevan++ | Perl6::MetaModel 2.0 - | 05:01 | |
| r7128 | stevan++ | * added stub POD to all the files in lib/ ... documentation to come | |||
| r7128 | stevan++ | * added the * (root) package then added $::Class, $::Object, $::Package | |||
| r7128 | stevan++ | $::Module and $::Role into it. | |||
| r7128 | stevan++ | * added the ::Main package | |||
| r7128 | stevan++ | * class() and role() in the Perl6::MetaModel now install all classes into | |||
| r7128 | stevan++ | the * namespace (which actually is not always correct, but works for now) | |||
| nothingmuch | rafl: ping | 05:54 | |
| svnbot6 | r7129 | Darren_Duncan++ | /ext/Locale-KeyedText : resync with newest perl 5 version changes | 07:08 | |
| nothingmuch | hi scook0 | 08:05 | |
| did you see the impl of your force_async thing? | |||
| scook0 | howdy nothingmuch | ||
| no? | |||
| nothingmuch | on the mailing ilst | ||
| scook0 | oh, from the other day? | 08:06 | |
| I saw it, but kind of glossed over it at the time -- I'll read it again now... | |||
| nothingmuch | groups.google.com/group/perl.perl6....00b4f107b7 | 08:07 | |
| hmm | |||
| oh, i see | |||
| the links are not really linkable | |||
| groups.google.com/group/perl.perl6....00b4f107b7 | |||
| xrl.us/hqm4 | 08:08 | ||
| autrijus: ping | 08:10 | ||
| nothingmuch realized he has a big question in there | |||
| &OUTER::yield(@stuff); # how do we do this? Maybe $?CALLER_CONTINUATION.yield? | |||
| scook0 | nothingmuch: I'm not really following it, sorry :( | 08:14 | |
| nothingmuch | buffer_lazy is a generator for a lazy list | ||
| it takes a lazy list | |||
| and returns it eventually | |||
| but it keeps an array | |||
| when there are no elements in it's array it takes an element from the lazy list directly | 08:15 | ||
| when there are elements in the array it returns the first one from there | |||
| whenever the array is smaller than $threshold elements, it also do an async { } that fetches more elements from the lazy list into the array | 08:16 | ||
| scook0 | hang on, it's a generator? so it gets called from the start each time someone wants to fetch an element? | ||
| nothingmuch | yep | ||
| scook0 | (that's what was confusing me on first reading) | ||
| nothingmuch | err, wait | 08:17 | |
| i have a bug | |||
| scook0 | is that sort of stuff specced somewhere? | ||
| nothingmuch | 'yield shift @buffer' is bad | ||
| the whole function should be a loop | |||
| my @buffer | |||
| state Sem $collecting; | |||
| scook0 | that's what I thought | 08:18 | |
| nothingmuch | while (@lazy) { ....; yield shift @buffer; } | ||
| scook0 | otherwise the meaning of `yield` would have to be utterly insane | ||
| nothingmuch | and state Sem $collecting should be 'my Sem $collecting' | ||
| scook0 | it makes a lot more sense to me now | ||
| nothingmuch | sorry ;-) | ||
| scook0 | have you had a look at luqui's theory stuff? | 08:21 | |
| nothingmuch | yes | ||
| but not the new proposal | |||
| scook0 | it's *very* ambitious | ||
| to be honest, I don't think it will be accepted, on account of changing everything too radically | 08:22 | ||
| but there's a lot of good stuff in there | |||
| nothingmuch hopes it does | |||
| there is no reason for it not to be | |||
| it's a superset of the current definition | |||
| scook0 | are you talking about the old stuff, or the new stuff? | 08:23 | |
| nothingmuch | what he was talking about for the past 2 weeks or so | ||
| damnit! | |||
| this bug is reproducing 30% of the time | |||
| where 70% is the times that i have had a breakpoint on the problematic code, and didn't hit continue by accident | 08:24 | ||
| scook0 | nasty | ||
| nothingmuch: any recruits for Blondie? | 08:26 | ||
| nothingmuch | not yet | ||
| i haven't worked on it in the weekend either | |||
| had a few obligations | |||
| wnat to join the fun? | 08:27 | ||
| scook0 | as much as I'd love to help, I: | 08:38 | |
| a) don't have the time, and | |||
| b) am lousy at P5 :) | |||
| nothingmuch | =) | 08:45 | |
| scook0 | is it essentially a test-bed for your 'circular prelude' idea (and similar stuff)? | 08:47 | |
| nothingmuch | yes, that and type inferrencing in a dynamic/static language mix | 08:48 | |
| The upshot is that you can easily delegate an arbitrary argument list to | 08:49 | ||
| another function: | |||
| sub foo (*$args) { bar(*$args) } # call bar with whatever args foo | |||
| # was called with | |||
| luqui++ | |||
| scook0 | yes, I thought that was very clever | 08:50 | |
| and a great re-purposing of the slurpy scalar | |||
| nothingmuch | yep | ||
| scook0 | (which I thought was a little dubious) | ||
| and it's good that he came up with something to replace it too | |||
| nothingmuch | can you do a slurpy unpack? | 08:51 | |
| sub tail (*[$head, @tail]) { @tail } | |||
| tail(1, 2, 3); [ 2, 3 ] ? | |||
| scook0 | `sub first (*[ $x, *@xs ]) { $x }` | 08:52 | |
| (from the doc) | |||
| one thing I don't get, though, is this: | 08:54 | ||
| "When you extend a union, you create a superset (but still a subtype)." | |||
| I'm pretty sure that union subtypes have to be SUBsets | |||
| nothingmuch | oh, nice. | 08:55 | |
| i still have to sync with that terminology | |||
| scook0 | subtypes? | ||
| or model/theory/factory/generator etc? | 08:56 | ||
| nothingmuch | subtypes and supersets WRT theories | ||
| i keep getting confused with which means what | |||
| scook0 | maybe you should read TaPL :) | 08:57 | |
| nothingmuch | yes, the moment i get it =) | ||
| scook0 | so if S <: T # S is a subtype of T | ||
| then any 'receiver' expecting an S can safely be given a T | 08:58 | ||
| uh, thinko | |||
| freakazoid | hiho | ||
| scook0 | other way around | ||
| nothingmuch | vice versa | 08:59 | |
| hi freakazoid | |||
| scook0 | (see how confusing this is!) | ||
| freakazoid | hi nothingmuch | ||
| nothingmuch | yep | ||
| scook0 | so if I expect Type, you can give me Subtype without invalidating my assumptions | ||
| nothingmuch | what's up freakazoid ? | ||
| define superset | |||
| scook0 | wrt unions? | 09:00 | |
| nothingmuch | no wait, don't bother | ||
| nothingmuch is not at even 30% concentration | |||
| this bug is driving me nuts, and I ate something bad so i'm not really myself either | |||
| scook0 | oh well | ||
| do you know what a superset is in general? | 09:01 | ||
| nothingmuch | in set theory? | ||
| eys | |||
| yes | |||
| scook0 | do you know what a (tagged) union type is? | ||
| nothingmuch | nope | ||
| no idea what tagging is | |||
| scook0 | hmm | ||
| nothingmuch | and i'm not sure i know what a union type is either | 09:02 | |
| i could make an educated guess | |||
| scook0 | I'm sure you know what I'm talking about; I just have to find the right words to bridge the gap | ||
| nothingmuch | which is either the C idea of union (probably not) | ||
| or the subtype that is two types together | |||
| or the supertype that is either type a or type b | |||
| scook0 | do you know about defining datatypes in Haskell? | ||
| nothingmuch | yep | ||
| e.g. data Foo = Bar | Gorch ? | |||
| scook0 | or `data List a = Nil | Cons a (List a)` | 09:03 | |
| nothingmuch | yes | ||
| so Nil a and Cons a (List a) are subtypes of List? | 09:04 | ||
| scook0 | I'm pretty sure 'union' is just luqui's Perl-friendly name for a Haskell-style data type | ||
| nothingmuch | and List is their union? | ||
| okay | |||
| scook0 | umm, I don't think so | ||
| give me a sec to think of a good example | 09:05 | ||
| data Fruit = MkApple Apple | MkOrange Orange | 09:06 | ||
| Fruit is a 'union' which can hold either an Apple or an Orange | 09:07 | ||
| nothingmuch | hmm | 09:08 | |
| nothingmuch sees it slightly differently | |||
| since Fruit is boxed | |||
| into two different constructors | |||
| scook0 | yes | ||
| nothingmuch | so it can't really hold either an Apple or an Orange, it can hold an apple xor an orange | ||
| okay | 09:09 | ||
| scook0 | that's why it's a 'tagged' union | ||
| because it has the MkApple tag, or the MkOrange tag | |||
| nothingmuch | oh | ||
| i see | |||
| scook0 | (I'm not really following Haskell terminology, btw) | ||
| anyway, let's say I define another data type: | 09:10 | ||
| data Food = MkApple Apple | MkOrange Orange | MkBread Bread | |||
| notice that Food is a 'superset' of Fruit | |||
| nothingmuch | aha | 09:11 | |
| scook0 | because it has all the same constructors (plus more) | ||
| nothingmuch | makes sense | ||
| does haskell allow that? | |||
| scook0 | no, I don't think so | ||
| but let's imagine we're working in a language that does allow it | 09:12 | ||
| nothingmuch | yeah | ||
| scook0 | you'll notice that any function taking Food as an argument | ||
| should be perfectly happy with receiving a Fruit | |||
| nothingmuch | can also take Fruit | ||
| scook0 | exactly | ||
| nothingmuch | okay | 09:13 | |
| so what was the confusion again? | |||
| scook0 | so Fruit <: Food | ||
| nothingmuch | fruit loves food | 09:14 | |
| scook0 | Fruit is a subtype of Food | ||
| nothingmuch | ;-) | ||
| scook0 | luqui appears to be claiming the opposite | 09:15 | |
| (from what I can tell, anyway) | |||
| nothingmuch | maybe it's just a wordo | ||
| i'm lacking context for that sentance | |||
| so when I get to it i'll state my opinion =) | |||
| scook0 | oh | ||
| where are you up to? | |||
| nothingmuch | fixing a bug | 09:16 | |
| eating bread to pass nausea | |||
| considering the rest of my lunch but waiting it out | |||
| scook0 | anyway, I'll ask him when I next see him on IRC | 09:17 | |
| nothingmuch opens the services panel for the nth time | |||
| nothingmuch doesn't know why he is maintaining code in C++ that does windows API calls when he doesn't really know either | 09:23 | ||
| svnbot6 | r7130 | autrijus++ | * add link to cufp2005.pdf | 11:16 | |
| nothingmuch | autrijus: cute talk | 11:36 | |
| a bit like a psychadellic movie witout the talking, I guess | |||
| wolverian | what is the link? :) | 11:58 | |
| masak | no.perlcabal.org/~autrijus/cufp2005.pdf | 12:00 | |
| nothingmuch | i hate windows | 12:03 | |
| nothingmuch is trying to deal with service handle leaks across process space | 12:04 | ||
| appearantly some kind of caching is making the object not die | |||
| because the same code when run in it's own debugger does not leak | |||
| but when exec'd by another process does leak | |||
| nothingmuch cries | |||
| masak hugs nothingmuch | 12:06 | ||
| just don't use windows | |||
| nothingmuch | it's not me, it's our clients | ||
| masak | :( | ||
| nothingmuch | this is the horrible horrible instller | ||
| that i have to maintain | 12:07 | ||
| masak | i've never heard anyone say "oh, this source code is so great! it must be written by a genious" | 12:08 | |
| possibly excepting autrijus' and damian's stuff | |||
| nothingmuch thinks damian's code is not great at all | |||
| have you ever tried reading it? ;-) | 12:09 | ||
| masak | yes :) | ||
| nothingmuch has read some great code in his life | |||
| masak | but i was talking about what people say about it | ||
| nothingmuch: really, what code? | |||
| nothingmuch | some stuff on CPAN | ||
| let me think | |||
| masak is reading "Perl Best Practices" right now | 12:11 | ||
| most things seem to make a lot of sense | 12:12 | ||
| nothingmuch | yeah | 12:14 | |
| masak | most tips boil down to "don't be clever, be clear. write maintainable code" | ||
| nothingmuch | the problem is that most people say "damian says" | 12:15 | |
| perlmonks is filled with "damian said I should always do yadda" | |||
| "but i have a situation where yadda is not so good" | |||
| masak | that's never a good reason to always do something :) | ||
| nothingmuch | "am I allowed to not do yadda just this once, even though Damian said not to?" | ||
| i'm sure it's filled with wonderful advice | |||
| masak | people who ask that have already given up their free will to someone else | 12:16 | |
| nothingmuch | but i think that the community has not been accepting it with enough maturity, and that it has actually caused some harm | ||
| right | |||
| masak | the world is full of folks who don't want to think | ||
| QtPlatypus | I've read stuff from Damian where he say's its not ment to be used that way. | ||
| masak | he says it in the book too | ||
| but maybe people don't read introductions :) | 12:17 | ||
| nothingmuch | i bet he did, but I doubt it matters =) | ||
| right | |||
| QtPlatypus | Fundermentalizim seems to taint all things. | ||
| nothingmuch | i think i know why I can't think of any good code | ||
| i haven't been traumatized by it | |||
| masak | :) | ||
| that's just sad | 12:18 | ||
| you only remember bad code | |||
| because it's bitten you | |||
| nothingmuch | heh =) | ||
| well, there's lots of good code here: search.cpan.org/~nuffin | |||
| ;-) | |||
| masak | lol | ||
| you're the modest one | 12:19 | ||
| nothingmuch | i think i judge good code by how hard it was to modify it so it gets what I want done | ||
| masak | then it's entirely possible that the programming community as a whole just isn't there yet | 12:20 | |
| and never will be | |||
| reusability is durn hard | |||
| nothingmuch | i think it's there | ||
| there are examples of code which I think is good since i never had to touch it's guts | |||
| like Test::Deep, for example | |||
| the interface is so good that it does everything i want without being bloated | 12:21 | ||
| masak | today, yes | ||
| nothingmuch | today? | 12:22 | |
| masak | today you don't need to poke inside Test::Deep | ||
| nothingmuch | ah | ||
| masak | because it does everything you want | ||
| nothingmuch | well, it has very flexible semantics | ||
| it's a pattern matching language for deep structures | |||
| masak | it might still not be very reusable, though it gets the first half (flexible interface) right | 12:23 | |
| nothingmuch | and it's good enough because it offers abstraction at a level slightly higher than most patterns should use | ||
| right... i'm not claiming anything about it's guts | |||
| i've yet to see them | |||
| masak | the second half (maintainable code) is just as important, if not more so | ||
| nothingmuch | maybe they're a delight | ||
| masak | maybe | ||
| nothingmuch | maybe they aren't | ||
| masak | there was a dream a couple of years ago | 12:24 | |
| probably still is | |||
| about software being like lego bricks | |||
| nothingmuch | what dream? | ||
| ah | |||
| masak | component-based programming | ||
| nothingmuch | one reason I like autrijus's code (perl code) is that it's very non-pretentious | ||
| masak | do you have a good example? | 12:25 | |
| nothingmuch | for example search.cpan.org/~autrijus/HTML-FromANSI-1.01/ | ||
| i needed to do a very weird thing with it | |||
| as opposed to what it does at the moment | |||
| instead of displaying a single screen, i needed a "termnal" that grows indefinitely | |||
| the way it works is it uses the vtterm emulator on CPAN | |||
| and then renders it's state to HTML | 12:26 | ||
| i needed an incremental interface to display progress from colored output as HTML | |||
| masak | the code looks very clean | ||
| nothingmuch | and I needed the whole log to be displayed | ||
| right... it's not very flexible interface wise | |||
| but it's so simple that you can reuse it all the same | |||
| i broke encapsulation, ofcourse | 12:27 | ||
| which is a nono | |||
| but I don't care | |||
| masak | that's what i mean | ||
| nothingmuch | the problem was: | ||
| sub ansi2html { | |||
| my $vt = Term::VT102->new( | |||
| cols=> $Options{cols} || 80, | |||
| rows=> $Options{rows} || count_lines(@_), | |||
| ); | |||
| i needed it to be a factory method | |||
| so that I could use my own hack, Term::VT102::AutoExtending, which had no concept of rows | 12:28 | ||
| masak | reusability, *real* reusability, is using those lego bricks without breaking encapsulation | ||
| nothingmuch | right | ||
| masak | i don't think it ever will happen | ||
| nothingmuch | one lesson learned from this is that I always use factory methods in my classes | ||
| i would say $self->term | |||
| masak | that's why perl comes to the rescue, with its lawlessness :) | ||
| nothingmuch | and sub term { shift->term_class->new() } | ||
| and this makes orthogonal overriding of this specific feature easy | 12:29 | ||
| masak | ah, ok | ||
| nothingmuch | you can change the class, or the instantiation, or both | ||
| masak | yes | ||
| nothingmuch | what frustrates me about static languages and closed source in general is that things like this are not the de-facto standard | ||
| autrijus obviously needed to get the job done quickly | |||
| and he did it well, and put up his code for others to use | |||
| i am 99% sure he'll accept a refactoring patch, btw, but that's besides the point | 12:30 | ||
| masak | yes | ||
| nothingmuch | i was able to take his code and use it even though it was not 100% useful for me | ||
| and i don't expect any code to be 100% useful for me, without infinite financial backing | |||
| masak | right | ||
| rafl | nothingmuch: pong | ||
| nothingmuch | rafl: did you find the image i sliced up for you? | 12:31 | |
| rafl | nothingmuch: No, would you give me the URL again? | ||
| nothingmuch | nothingmuch.woobling.org/7peoples.png | ||
| masak | how's STDERR spelled in p6? | 12:34 | |
| nothingmuch | $*ERR i would think | ||
| see also $*OUT | |||
| masak | thx | ||
| yes, *ERR, by S02 | |||
| err, $*ERR | 12:35 | ||
| rafl | nothingmuch: Thank you! | 12:38 | |
| nothingmuch wonders why there is even | 12:48 | ||
| a discussion on the stringification/interpolation thread | |||
| i haven't heard anyone say it was a good idea except for damian | |||
| masak | what, to differentiate between interpolation and stringification? | 12:49 | |
| nothingmuch | yep | ||
| masak | no, me neither | ||
| nothingmuch | masak - Algorithm::Bucketizer was very nice to hack | 12:51 | |
| reusable, flexible, precise | |||
| masak | i'll go have a look | ||
| scook0 | nothingmuch: off to bed; see you later | ||
| nothingmuch | ciao! | ||
| masak | yeah, Algorithm::Bucketizer looks real neat | 12:53 | |
| some code, and lots of docs | |||
| all clearly written | |||
| nothingmuch | i forgot what kind of fucked up bucket implementation i needed | ||
| but it handled it very gracefully | |||
| ah | 12:54 | ||
| i needed variable sized buckets | |||
| masak | you're crazy | ||
| nothingmuch | i had variadic resources | ||
| and I needed to binpack them | |||
| and it allowed me to use a generator | |||
| so that it requests the next bucket each time | |||
| masak | sounds nifty | 12:55 | |
| nothingmuch | it was a wonderful experience in that respect | ||
| SQLT otoh ;-) | |||
| i gave up trying to use it because it was so not reusable | |||
| it's biggest limitation is that it's filled with singletons by behavior (not definition) | 12:56 | ||
| that is, classes which can only be successfully instantiated once | |||
| masak | ouch | ||
| nothingmuch | due to data structures being ruined | ||
| masak | nasty | ||
| nothingmuch | it also has huge subs of interpolation madness | ||
| i wanted to create a schema filled with temporary tables | |||
| i had to use a s/// | |||
| i also had to split the statements to actually pass them to $dbh->do | 12:57 | ||
| masak | why? | ||
| nothingmuch | i think the sqlite driver didn't like to get semicolons in the statements | 12:58 | |
| it needed a statement per do | |||
| masak | :( | ||
| nothingmuch | the project was very fun though | ||
| you create a schema in terms of sqlfairy schema objects | |||
| with some sugary subroutines with nice prototypes, so that it slightly resemebles the declarative nature of real DDL | |||
| then this stuff is used to generate CDBI classes at runtime | 12:59 | ||
| optionally creating the actual tables in the DB. | |||
| the gain was that production and testing used the same schema | |||
| so tests could run on a temporary sqlite. | |||
| while production was on postgres | 13:00 | ||
| masak is translating Getopt::Long to Perl 6 right now | |||
| nothingmuch | with no code changes except 'sub dsn { $0 =~ /\.t/ ? "test dsn" : "production dsn" } # in the config lib | ||
| masak++ | |||
| masak | and learning some Perl5 along the way | ||
| nothingmuch | you dunno perl 5? | 13:01 | |
| masak | not 100% | ||
| i've used it a lot lately | |||
| nothingmuch | how did you wind up here? haskell? | ||
| masak | no, following general p6 development | ||
| nothingmuch | ah | ||
| masak | i don't know any haskell | ||
| nothingmuch | what's your background? | ||
| masak | webmaster, programmer, bioinformatics student | ||
| nothingmuch | in perl 5? | 13:02 | |
| masak | no, i just use perl5 on the side :) | ||
| whenever i get the change | |||
| chance* | |||
| nothingmuch | so what did you do those stuff with? | ||
| masak | those stuff? | ||
| nothingmuch | webmaster, programmer, bioinformatics student | ||
| masak | the two first: xml/xslt | ||
| the two last: java, mainly | 13:03 | ||
| nothingmuch | you poor thing ;-) | ||
| masak | i know :) | ||
| but it's a living | |||
| nothingmuch | hehe | ||
| masak | and it gives me something to complain about :) | ||
| nothingmuch | jobs.perl.org | ||
| complaining is very important | |||
| masak | the url: ah, didn't know about that | 13:04 | |
| nothingmuch | =) | ||
| masak | right now i'm not looking for more to do, though :) | ||
| but thx | |||
| i'm really buying into $larry's talk about perl being a postmodern language, btw | 13:05 | ||
| and i do think it's a strength | |||
| perl is not built to last, it's built to adapt | |||
| especially perl 6 :) | 13:06 | ||
| nothingmuch | =) | ||
| it is | |||
| masak | is there a way to p6ify this expression: | ||
| $opt = $+ if $opt =~ /^$prefix+(.*)$/s; | |||
| nothingmuch | i think the only area perl 5 is lacking is the hard edge between inside and out (c, and perl) | 13:07 | |
| masak | or should i just leave it as it is? | ||
| nothingmuch | and the fact that there is false huffmanization | ||
| masak | yes | ||
| nothingmuch | for example 'my $self = shift' 1000 times is not very huffy ;-) | ||
| masak | :) | ||
| nothingmuch | hmm | ||
| nothingmuch forgot what $+ is | 13:08 | ||
| masak | last paren match | ||
| i had to look it up too | |||
| nothingmuch | ah | ||
| masak | that is, the paren in the postfix if | ||
| not very intuitive by me | |||
| my first instinct was to look at the line above... | |||
| nothingmuch | i would actually do $opt =~ s/^$prefix+//s; | ||
| masak | yes, i think so too :) | ||
| thx | 13:09 | ||
| nothingmuch | and I'd use /x too to separate ^ from $ | ||
| $opt =~ s/^ $prefix+//sx; | |||
| that way it's more readable that $prefix is an interpolated variable | |||
| masak | this is p6 | ||
| you don't need /x | |||
| nothingmuch | i'd also make a point of qr//ing $prefix, so that it's obvious what it'd be used as later | ||
| the source in question is copypasted from perl5, isn't it? | |||
| oh wait, you asked me to p6ify ;-) | 13:10 | ||
| masak | yes :) | ||
| nothingmuch | so what's in $prefix? | ||
| a pattern? or a literal? | |||
| masak | a literal | ||
| $opt ~~ s/^ $prefix+ //; | |||
| nothingmuch | yep | ||
| masak | ...maybe | ||
| nothingmuch | i like it | ||
| wolverian | $opt.subst(/^ $prefix+ /, ""); # ;) | 13:11 | |
| masak | ;) | ||
| i would say the postfix if was an overreaction in the first place | 13:12 | ||
| since the regex would just fail silently if nothing matched | |||
| ah, and I'll throw in a P5 too, just in case | 13:13 | ||
| the original author has a few off-by-one errors here and there | 13:14 | ||
| at least i think so | |||
| maybe i should contact him | |||
| nothingmuch | are you porting it 1:1? | ||
| or are you basing off it? | |||
| masak | err... i was going for 1:1 | ||
| but gaal had so many great ideas | |||
| so i'm implementing some of them | 13:15 | ||
| and i think i'll correct the obvious errors | |||
| nothingmuch | how long is Getopt::Long? | ||
| masak | like, he checks @ary > 0 before looking inside $ary[1] | 13:16 | |
| it's long | |||
| nothingmuch | do you think you could break it apart to several modules somehow? | ||
| masak | maybe, i haven't thought about it | ||
| i just want it to pass the tests in the p5 version | |||
| nothingmuch | hmm | ||
| masak | which i have already ported and comitted | 13:17 | |
| nothingmuch | the problem with Getopt and friends is that they are too big and not reusable enough | ||
| they don't share any cod | |||
| e | |||
| did you hear my event parser rant? | |||
| masak | right | ||
| no, i didn't | |||
| nothingmuch | okay | ||
| masak | oh, wait | ||
| yes, i think so | |||
| you wanted layered getopt, yes? | 13:18 | ||
| nothingmuch | yes | ||
| masak | that's beyond me | ||
| i get the idea | |||
| nothingmuch | for example, clustered switches should replace the switch handler | ||
| to create several switch events | |||
| etc etc | |||
| masak | yes, i know | ||
| it's really nice | |||
| but it's not getopt:long | |||
| at least not mine :) | |||
| nothingmuch | well, i would be very happy for observations on how you think getopt::long could be implemented in terms of event parsing | 13:19 | |
| or rather, where it wouldn't work | |||
| masak | i'll think about it | ||
| as i translate | |||
| right now i'm trying to break down work so i have something (half-done) to commit | 13:20 | ||
| nothingmuch | goody | 13:22 | |
| masak | gaal and i already agreed on a non-trivial enhancement to getopt::long | 13:26 | |
| nothingmuch | which one? | 13:27 | |
| masak | returning the option hash/object instead of just a 1 if all went well | ||
| nothingmuch | ah yes | ||
| boolean status return is never quite enough | |||
| exceptions should be used for failure | |||
| masak | and disallowing non-hash use of getopt::long | ||
| yes, exceptions | |||
| nothingmuch | and compound result for summary =) | ||
| masak++ | 13:28 | ||
| masak | where do i read more about fail? | ||
| :) | |||
| nothingmuch forgets | |||
| i think that s 04 | |||
| masak | oki | ||
| i'll have a look | |||
| nothingmuch really hopes that was the last handle leak plugged | |||
| nothingmuch also hopes that the next time he meats the author of this code he'll have a hatchet close by | |||
| err... meats | 13:29 | ||
| masak | :) | ||
| nothingmuch | freudian slip, eh? | ||
| masak | fwiw, i like your p6l post | ||
| nothingmuch | HAH! fixed | ||
| which one? | |||
| masak | the last one about interpolation/stringification | 13:30 | |
| nothingmuch | ah | ||
| gaal | hello. | 13:34 | |
| nothingmuch | hi | 13:35 | |
| gaal | masak: some verbiage on 'fail' here: www.livejournal.com/users/gaal/170284.html | ||
| nothingmuch: either the fail builtin or Test.pm will have to back off :-) | 13:36 | ||
| nothingmuch | hmm? | ||
| masak | gaal: thx | ||
| nothingmuch | back off? | ||
| gaal | Test::fail and fatal::fail | 13:37 | |
| one of them should likely be renamed. | |||
| nothingmuch | ah | 13:38 | |
| Test::fail, i think | |||
| it's not as generic | |||
| since we have variadic args: | |||
| ok() | |||
| nok() | |||
| pass and fail | |||
| gaal | i don't follow the genericity/variadicness line of thought. | 13:39 | |
| variadicity? :) | |||
| variady? :) | |||
| maybe rename to &passes and &fails? | 13:42 | ||
| nothingmuch | sorry | ||
| well 'multi sub ok () { ok(1) }; multi sub nok () { ok(0) }' | |||
| it gets tricky.... multi sub ok (Str $desc) { ok(1, $desc) }; multi sub ok ($x) { if ($x) { ... } else { ... } }' | 13:43 | ||
| nevermind, it's silly | |||
| i think 'ok(1, "desc")' for pass | 13:44 | ||
| and 'nok("desc")' for fails | |||
| or fail | |||
| with aliases to passes and fails | |||
| gaal | urp? | ||
| no, it's good to have convenience methods for that | |||
| nothingmuch | hmm... okay | ||
| gaal | i insist they should exist :) | ||
| nothingmuch has a weird idea | |||
| use fatal | 13:45 | ||
| gaal | only question is what to rename them to | ||
| nothingmuch | try { | ||
| CATCH ($e) { | |||
| $e.continuation | |||
| } | |||
| that is, Test imports fatal to it's user | |||
| fail("foo") is just fail("foo") | |||
| and causes an exception | |||
| gaal | you are insane :) | 13:46 | |
| nothingmuch | Test's exception handler prints a NOK | ||
| and then goes to the exception's continuation as if the exception was non fatal | |||
| =D | |||
| gaal is laughing out loud | |||
| nothingmuch | autrijus: please implement this | ||
| gaal | (demonically) | ||
| nothingmuch | i think i'd rather like this | ||
| p6l time | |||
| gaal | i don't like it | 13:47 | |
| nothingmuch | how come | ||
| if code is already suitable for fail as an optional exception | |||
| gaal | because then innocent code that does die "moose" risks being interpreted as a non fatal failure | ||
| nothingmuch | then why not let the user decide on a case by case basis whether they want an error to be fatal or not? | ||
| gaal | (if i understand correctly) | ||
| nothingmuch | yes, it could | ||
| gaal | in tests!? | ||
| nothingmuch | but that's the user's fault | ||
| remember that the exception handler can look at the exception object | 13:48 | ||
| and determine if it was die or fail | |||
| (i hope) | |||
| gaal | nnnnnuh, i don't think it can | ||
| nothingmuch | it should | ||
| gaal | how would you do that categorically? | 13:49 | |
| nothingmuch | define.assuming(:context($this)).(categorically) | ||
| gaal | wrap all fails "str" in a die fatal.new("str") | ||
| nothingmuch | errm, no | ||
| gaal | but what about fail $obj | ||
| nothingmuch | every exception is already an object | ||
| since there is a whole exception stack | 13:50 | ||
| gaal | well, fail $x is just like die $x | ||
| if use fatal is in effect | |||
| nothingmuch | every exception being raised captures the current value of $! and stores it | ||
| so no nested exceptions are lost (unless explicitly deleted) | |||
| gaal | in my code, i do either die $x or fail $x. what do you do to tell the two apart? | 13:52 | |
| nothingmuch | $ | ||
| gaal | (you're the caller) | ||
| nothingmuch | $! will contain the data | ||
| gaal | yes, what i called $x | ||
| and? | |||
| nothingmuch | nono | ||
| read s 04 | |||
| $! is more than $x | |||
| gaal | from your pov, the two $!s are identical | ||
| nothingmuch | it contains, for example, handled and unhandled | 13:53 | |
| gaal | hmm | ||
| nothingmuch | i claim it should contain info on whether it was thrown because i used fatal | ||
| or because it died | |||
| gaal | so you stipulate another member, `fail` or `exception`? | ||
| nothingmuch | well, they're both excceptions in this case | ||
| read s04 on fail | |||
| gaal | i meant `fail` or `die`. | 13:54 | |
| nothingmuch | 'fail examines lexical scope for use fatal... will return an unthrown exception or throw an exception' (paraphrase) | ||
| gaal | yes, of course | ||
| nothingmuch | sub fail ($stuff) { $?OUTER::IS_FATAL ? die($stuff) : return Exception.new($stuff) } | 13:55 | |
| i think | |||
| the exception object is almost a proxy to $STUFF | |||
| err, $stuff | |||
| but it contains meta data | |||
| like the value of $! before it was thrown | |||
| gaal | see class fatal in the Prelude. | ||
| nothingmuch | or whether some CATCH block matched it | ||
| is it != what s04 says? | 13:56 | ||
| gaal | you can't use OUTER there, but nm | ||
| i must go now | |||
| nothingmuch | i meant $ | 13:57 | |
| gaal | back in ~40min | ||
| nothingmuch | ?CALLER | ||
| ciao | |||
| gaal | can't use caller either | ||
| nothingmuch | how come? | ||
| gaal | never moose, that's not the interesting part | ||
| later & | |||
| nothingmuch | ciao | 13:58 | |
| hola autrijus | 14:18 | ||
|
14:18
autrijus is now known as autrijus_tw,
autrijus_ is now known as autrijus
|
|||
| nothingmuch | already back? | 14:18 | |
| autrijus | back? | 14:19 | |
| I'm still in Tallinn | |||
| nothingmuch: patches welcome to FromANSI | |||
| nothingmuch | autrijus: patches unnecessary =) | 14:20 | |
| so what is _tw? | |||
| it's Good Enough | |||
| autrijus | _tw is the screen from the server in.tw | ||
| nothingmuch | oh | ||
| not your physical presence =) | |||
| autrijus | :) | 14:24 | |
| autrijus goes back to releng | |||
| nothingmuch | autrijus: i think you're going to like my latest idea | 14:25 | |
| or be very frightened at the very least | |||
| autrijus | does it have something to do with attributive grammar? | ||
| (probably not, it's just I'm reading about it now) | |||
| nothingmuch | no, about continuations, exceptions, and symmetry | ||
| autrijus | okay... | 14:26 | |
| nothingmuch | p6l is getting a nice code example soon | ||
| autrijus | good, I'll look at that | ||
| gaal | rehi | 14:28 | |
| nothingmuch: so the reason you can't use CALLER is that pragma values aren't regular vars | |||
| they're actually available at every node in the syntax tree | |||
| nothingmuch | gaal: i need to go... ride | ||
| ttyl | |||
| gaal | remember they're a compile-time thing | ||
| bye. | |||
| autrijus: mind taking a look at lexical pragmas, maybe we can get them in for the release? | 14:29 | ||
| autrijus | yes | ||
| gaal | great, sec | ||
| autrijus | I'll fetch some drink, be back in 10 mins | 14:30 | |
| gaal | ok, typing ahead: | ||
| autrijus | then I can work ~5 hours for release | ||
| gaal | the code that's currently in is bogus; we need something like this: sial.org/pbot/13305 | ||
| except that that loops :-) | |||
| it loops in the second readTVar; nothingmuch suggested changing InitDat in the Env to be an IORef instead of a TVar but that entails writing Show and Ord methods, which might be hard? | 14:32 | ||
| i don't grok STM really; maybe all that's needed is just some atomic (...) around something? | |||
| also the Prim side of this may be mistaken, but that I can take care off. | 14:33 | ||
| autrijus | rehi | 14:39 | |
| parsing your typeahead | 14:41 | ||
| ok | 14:43 | ||
| so I'll apply it locally | 14:44 | ||
| gaal | okay, you can also remove the cruft from ruleClosureTraits | 14:47 | |
| want a real patch? | |||
| autrijus | sure, that'd rock, and a oneline test | ||
| gaal | ./pugs t/packages/lexical_pragmas.t | ||
| autrijus | k | 14:48 | |
| ooh, nice test | |||
| real-patch-p? | |||
| gaal | it's all mjd's :) | ||
| sec | |||
| feather:~gaal/lex_loop.patch | 14:49 | ||
| i can move that to the webspace if you prefer | |||
| autrijus | +import Data.IORef | 14:50 | |
| this is redundant right? | |||
| in P.A.Internals | |||
| gaal | anyway, the test might still fail because of bugs in my pragma installing code: if you get it not to loop though then, good :) | ||
| yes, it is | |||
| autrijus | also btw, + trace ("<1>") (return ()) | ||
| may be written as | |||
| gaal | from my rewriting attempt | ||
| autrijus | liftIO $ print "<1>" | ||
| gaal | print? | ||
| autrijus | er no | ||
| gaal | for some reason that didn't work | ||
| oh, liftIO $ print | |||
| autrijus | sorry, because Rule monad is not MonadIO | ||
| gaal | ok | ||
| autrijus | but it can be made as such | ||
| may be better after all | |||
| gaal | ah, okay. | 14:51 | |
| autrijus | compiling | 14:52 | |
| still trying to grok the patch | |||
| gaal | - set up a place for &import to write to | ||
| - call import | |||
| - import installs a list of new values (usually just one) | |||
| autrijus | "unsafePerformSTM $ atomically" | 14:53 | |
| you don't need the atomically | |||
| gaal | - slurp that and stick it in the ast | ||
| autrijus | that's what unsafePerformSTM does implicitly | ||
| gaal | oh right, that was just me grabbing at straws :) | ||
| the clever thing about the design is how new pragma values are prepended to the list | |||
| autrijus | I wonder if envInitDat needs to be TVar | 14:54 | |
| gaal | so nothing except the head pointer needs to be copied | ||
| autrijus | I think it wants to be pure | ||
| gaal | oh! that'd simplify things | ||
| autrijus | since you can't modify it at runtime | ||
| gaal | true | ||
| autrijus | and then the unsighty side effects can go away | ||
| we'll just store env as usual | |||
| nothingmuch | gaal: it was besides the point | 14:55 | |
| gaal | so, in parser i can basically modify env as much as i like until i'm done? | ||
| autrijus | yes, that's the idea | ||
| nothingmuch | $?CALLER::IS_FATAL could be a constant compiled into the closure via the pragma | ||
| autrijus | see putRuleEnv | ||
| nothingmuch | i meant to convey the principal | ||
| gaal | nothingmuch: { use myprag; x; no myprag; y } | 14:56 | |
| nothingmuch | err... really, it doesn't matter =) | ||
| gaal | i agree. | ||
| autrijus | so | 14:57 | |
| -- Reset the initdat list | |||
| putRuleEnv env{ envInitDat = MkInitDat [] } | |||
| nothingmuch | Exceptuations on p6l | ||
| autrijus | makes some sense? | ||
| gaal | there's an internals api you have to use, and it could conveivably be made to work automagically from a var | ||
| autrijus: yes, changing | 14:58 | ||
| gaal praises type inference | 14:59 | ||
| great for refactoring :) | 15:00 | ||
| autrijus | yeah | ||
| hm, if it is pure though, Pugs::Internals::install_pragma_value needs to be rethunk | |||
| gaal | brb | ||
| autrijus ponders using a regular @*PRAGMA | 15:04 | ||
| I mean @*INITDAT | |||
| gaal | actually that was just a container for things passed from an &import hook | 15:05 | |
| at first i made a mistake and thought the installation should have taken place from a BEGIN block, so i wanted to put VContorl (see possiblyExit) there too | 15:06 | ||
| but that was just a mixup | |||
| i can't think of anything else import needs to convey to the parser, so maybe we don't need initdat at all. | |||
| anyway, that's refactoring; it can wait till after the release | |||
| autrijus | k | 15:07 | |
| gaal | (phone) | 15:08 | |
| autrijus | so envInitDat is basically a list of pragmas _waiting_ to be installed | 15:09 | |
| gaal | exactly | 15:11 | |
| i wish it didn't have to exist on every Env, looks like a waste | 15:12 | ||
| autrijus | so any reason why we can't make it in line with @*END @*BEGIN etc? | ||
| nothingmuch patiently waits for feedback =) | 15:13 | ||
| gaal | hmm, what's the lifetime scope of that? | 15:15 | |
| autrijus | gaal: local() scope | ||
| gaal | it can be a globalish thing | ||
| autrijus | nothingmuch: so the idea is $SIG{__DIE__} can "on error resume next" | ||
| gaal | dynamic, that's good | ||
| autrijus | that's basically the "on error resume next" idea | ||
| nothingmuch | err, sort of | ||
| what is "next" in here? | |||
| gaal | autrijus: but doesn't that get us into thread safety stuff? | 15:16 | |
| autrijus | same as your .continue | ||
| gaal: compile time thread safety is overrated | |||
| nothingmuch | well, it depends | ||
| since it's 'throw' like in other languages, but 'fail' it's slightly different | |||
| if open returns a fail, instead of a handle, the exception handler has the oppertunity to change the return value to a handle | 15:17 | ||
| gaal | lol | ||
| autrijus | ok. I have no problem with that notion, but it should be a EC | ||
| $!.continue should never return | |||
| nothingmuch | agreed | ||
| it causes the 'fail' to return a different value than the exception | |||
| autrijus | also sometimes errors occur at a level below p6 | 15:18 | |
| and is not easily resumable | |||
| since the tonext is lost in a lower level | |||
| stevan | morning boys and girls | ||
| nothingmuch | that's as if the fail happenned as the last statment of the wrapper | ||
| autrijus | s/tonext/context/ | ||
| nothingmuch | hi ho stevan | ||
| autrijus | stevan: heyw | ||
| nothingmuch | e | ||
| g | |||
| e.g. open | |||
| gaal | hey stevan | ||
| nothingmuch | it doesn't continue in the open system call | ||
| it lets your exception handler take the 'fail "bah"' return by the perl 6 function open | 15:19 | ||
| and replace the value with an equivalent handle | |||
| just like in my example the permission denied error allows a chmod dialog to open up | |||
| autrijus | I wonder if $!.resume is a better name | ||
| nothingmuch | and exceptions from that exception handling code could be handled to do a sudo | 15:20 | |
| autrijus | again, I have no problem with that notion. | ||
| it's something I tried to hack into p5 | |||
| nothingmuch | .resume is nice | ||
| autrijus | and failed miserably | ||
| nothingmuch | hehe | ||
| autrijus | do { return 1/0*3; CATCH { $!.resume(9) } } # 27 | 15:21 | |
| nothingmuch | yes | ||
| gaal | does resume move out of the scope, or actually resumes where we left off? | ||
| stevan | can anyone me to information about fail() and the BAILOUT method? | ||
| nothingmuch | gaal: if you assume everything is CPS then it's simpler | 15:22 | |
| fail has the continuation to * 3 | |||
| it applies that with the exception | |||
| autrijus | stevan: never heard of BAILOUT | ||
| gaal | do { my $x = 1/0*3; $x = "moose"; CATCH { $!.resume(9) } # moose? | ||
| nothingmuch | it also puts a copy of that continuation in the exception object | ||
| stevan | autrijus: it is in Test::Builder, I had never heard of it either :) | ||
| nothingmuch | and CATCH can apply the continuation with a different value, after the exception is thrown | ||
| yes | |||
| gaal | isn't BAILOUT when a test crashes hard? | 15:23 | |
| autrijus | stevan: I think it's not a builtin | ||
| stevan | hmmm | ||
| ok | |||
| nothingmuch | it's definately not a builtin | ||
| gaal gets back to implementation | |||
| stevan will just ask chromatic, since he wrote the thing :) | |||
| autrijus | gaal: so this: let idat' = unsafePerformSTM $ readTVar $ envInitDat env | ||
| loops | |||
| that's the bug you're hitting? | 15:24 | ||
| gaal | yes | ||
| oh, i know why we can't just use a value, autrijus. | |||
| autrijus | but I'm seeing <5> | ||
| gaal | in Prim: | ||
| fraxtal | Woo I fixed a link on the wiki | ||
| gaal | Pugs::Internals::install_pragma_value | ||
| has to write to that list... | |||
| autrijus | yes, I said that :) | ||
| gaal | you did? oh when you mentioned @*PRAGMAS? | 15:25 | |
| autrijus | yeah | ||
| gaal cargo cults some more | 15:26 | ||
| obra | nice slides, autrijus | ||
| autrijus | obra: thanks! | ||
| gaal | oh, i missed 18:00 < autrijus> hm, if it is pure though, Pugs::Internals::install_pragma_value needs to be rethunk | ||
| autrijus | gaal: why the let between <1> and <2> | 15:27 | |
| why can't you say | |||
| return $ unsafePerformSTM $ writeTVar (envInitDat env) (MkInitDat { initPragmas = [] }) | |||
| obra | "Arrow length over time" | ||
| autrijus | obra: *grin* | ||
| gaal | i can, i can. | ||
| autrijus | well, if so, it loops not | ||
| gaal | really? cool. why did it loop too with the let? | 15:28 | |
| autrijus | because the value of writeTVar depends on idat | ||
| idat's value depends on readTVar | |||
| so circular dependency between idat and envinitdat | |||
| (do note the Parsec Rule monad is lazy) | 15:29 | ||
| gaal | arrr | ||
| svnbot6 | r7131 | autrijus++ | * fix random control chars in cufp2005.txt | 15:32 | |
| autrijus | so it's still not passing tests | 15:34 | |
| gaal | that may be because of errors in install_pragma_value | 15:35 | |
| (still compiling here) | |||
| autrijus | it's always # Got: '8' | 15:36 | |
| gaal | beacuse maybe i'm not writing to the right plcae | ||
| autrijus | "unoptimised" is your friend :) | ||
| gaal | true :) | ||
| hey, i got that always-8 sometime too | |||
| i think that's the last value ever written, no? | |||
| yes, it is. | 15:37 | ||
| autrijus | it is. | ||
| gaal | yeah, well, i think i can take it from here then. | ||
| xinming_Beijing | autrijus: hmm, May I know if MetaModule design is finished? | ||
| stevan | xinming_Beijing: it is mostly finished | ||
| some work still remains, but the core design can be considered finished | 15:38 | ||
| xinming_Beijing | hmm, So, Does it mean, That rule support will be "soon" available? :-P | ||
| stevan | Rule? or Role? | ||
| nothingmuch explained CPS in another reply to the thread | |||
| autrijus | gaal: cool, do so then :) | 15:40 | |
| gaal | am. thanks very much :) | ||
| xinming_Beijing | stevan: rule... | ||
| autrijus | no prob :) | ||
| xinming_Beijing | not role... | ||
| nothingmuch | gaal: did the scenario in the email convince you of the value of continuable exceptions? | ||
| autrijus | I think xinming means the shift-of-focus from 6.28 to 6.283 | ||
| stevan | xinming_Beijing: ah, that is not related to the MetaModel then,.. that is the Rule engine | ||
| nothingmuch | ofcourse, it only makes sense when exceptions are optionally fatal to me | ||
| gaal | nothingmuch: do you need an answer now? :) me brain be of limited capacity and i want this feature in the release | 15:41 | |
| nothingmuch | gaal: take your time =) | ||
| i would like to know if the example is clear though | |||
| eventually | |||
| xinming_Beijing | autrijus: yes... | ||
| gaal | okay, will do. | 15:42 | |
| xinming_Beijing | it seems, that the working progress walk skip the schedule... :-P | ||
| autrijus | xinming_Beijing: I'm working on basic releng at this moment for 6.2.10 | 15:43 | |
| if we are very lucky, 6.28.0 may happen around euro oscon, which will make a good gift to the eurooscon people | |||
| xinming_Beijing | In my memory. that the rule support will be finished first... and then the role support will be added... | ||
| gaal | autrijus: btw parrot hangs when called as a separate exe on win32, may want to disable it for now | ||
| nothingmuch | what's 6.28 feature set supposed to be like? | ||
| xinming_Beijing | nothingmuch: maybe basic rule support... | 15:44 | |
| nothingmuch | ah | ||
| xinming_Beijing | and the role support will be release as a surprise for the next day.. ;-) | ||
| autrijus | xinming_Beijing: actually, compile-time roles (Traits) are 6.28.0 | 15:45 | |
| I guess I should fix the 6.2831.0 so it says something better than "other runtime features" | |||
| xinming_Beijing | the day after tomorrow, I will have more time to do the test... hmm, In fact, I was feeling a bit sorry on do-nothing. But take a line in the AUTHORS LIST. :'( | 15:46 | |
| autrijus | maybe "type system features" and "constraint types" etc. not sure it matters | ||
| xinming_Beijing | tomorrow, I will go and change 2 x 512M ram into a 1 x 1G single ram... | ||
| and will go out in the morning... :-) | 15:47 | ||
| autrijus | cool :) | ||
| xinming_Beijing | autrijus: hmm, by the way, Is 10.1 a festival in your area? | ||
| autrijus | xinming_Beijing: er, no, not by any measure | ||
| 10.10 is. | |||
| svnbot6 | r7132 | autrijus++ | * random kwid cleanup to 2005-09-21.kwid | ||
| xinming_Beijing | autrijus: Oh, | 15:48 | |
| autrijus | I care very little about either one :) | ||
| nothingmuch | btw, i think 'on error resume next' is completely different now that i've learned a bit about it | ||
| because it's declarative, and all or nothing | 15:49 | ||
| autrijus | it's not unlike a | ||
| xinming_Beijing | autrijus: hmm, by the way, I ever wish to change the Simplified version of Apocrypha on some words... But I was a bit afraid of doing something wrong... | ||
| nothingmuch | continuable exceptions let you inspect the error first | ||
| with regular try/catch semantics | |||
| autrijus | { CATCH { $!.resume } ... } | ||
| nothingmuch | and then choose | ||
| right | |||
| autrijus | right, yes, yours is much more flexible | ||
| nothingmuch | which is obviously bad code =) | ||
| autrijus | xinming_Beijing: nah, just commit | ||
| xinming_Beijing | autrijus: In fact, there are some characters we use less than "traditional Chinese", | ||
| nothingmuch | in order to 'on error resume next' you can just 'no fatal' | ||
| autrijus | xinming_Beijing: yeah, please fix away | 15:50 | |
| nothingmuch: er no, "no fatal" still dies on die"" and 1/0 | |||
| nothingmuch | is there any random releng work i could help with? | ||
| on 1/0? | |||
| xinming_Beijing | å°±ęÆęęé½åÆä»„ēč§£ļ¼ä½ęÆäøęÆę们ēä¹ ęÆēØčÆ. | ||
| autrijus | nothingmuch: er, sure, ext/DateTime-Set/t/basic.t | ||
| You probably don't want to export an operator name; instead | |||
| define a new variant on the new operator (eg. multi sub *infix:<+>):"&infix:\8745" at "blib6/lib/Set/Symbols.pm" line 17 column 1 | |||
| nothingmuch | oh, perl 5 does too =) | ||
| nothingmuch didn't know that =) | |||
| xinming_Beijing | I ever changed it. But discard the change... :'( | ||
| autrijus | xinming_Beijing: :-/ | ||
| xinming_Beijing: right, I used machin etranslation | 15:51 | ||
| xinming_Beijing: so it's bound to have many uncommon idioms | |||
| nothingmuch | wow, in that case 'on error resume next' is even dumber than I thought =) | ||
| autrijus | nothingmuch: it is for High Reliability Never Stop software | ||
| nothingmuch | haha! | 15:52 | |
| xinming_Beijing | autrijus: Ok, I will do it now... | ||
| nothingmuch 's first rule of language design has now become: | |||
| any language feature which is all or nothing is a design flaw | |||
| gaal | beh, i made a silly omission in the lexprag patch | 15:53 | |
| i'm pushing pragmas to the env | |||
| i should be pushing them to the exp! | |||
| i obviously need a break with some chocolate in it :) | 15:54 | ||
| nothingmuch tells a joke: | |||
| autrijus | gaal: ^Cchocolate^C | ||
| nothingmuch | sub warn (*$a) { use fatal; fail(*$@); CATCH { $*ERR.print($!); $!.resume } } | 15:55 | |
| gaal | %*SIG<BRK> = &chocolate | ||
| autrijus | greetings miyagawa-san! | 15:57 | |
| miyagawa | hi! | ||
| just saw your journal on use perl and takahashi method | |||
| autrijus | :D | ||
| miyagawa | that's really funny to see | ||
| :) | |||
| autrijus | takahashi rocks | ||
| so you read my slides? | |||
| miyagawa | yeah | ||
| nothingmuch | who is takahashi? | ||
| miyagawa | yeah, just saw that | ||
| takahashi is Ruby hacker in Japan | 15:58 | ||
| nothingmuch | ah | ||
| miyagawa | who invented a new methodology for presentations with huge fonts | ||
| nothingmuch | hehe | ||
| autrijus | right... various people has used something like that | ||
| but only Takahashi has the gut to scale "1)" into 640pt | |||
| nothingmuch | i imagine the slides were very effective with spoken words | 15:59 | |
| nothingmuch always tries to do that with his slides/text/whatever | |||
| miyagawa | yeah, Takahashi method has stolen something from Steve Jobs' presentation actually | ||
| nothingmuch | making things much more dense | ||
| autrijus | miyagawa: I ran into Eijiro Sumii san today | 16:00 | |
| miyagawa | but using "1)" is really nice and funny though | ||
| aut: hmm, who's that_ | |||
| autrijus | of the mincaml fame | ||
| min-caml.sourceforge.net/ | |||
| he was with 2 other people from .jp -- we are the only people from asia here :) | |||
| miyagawa | is it some YAML conference? | 16:01 | |
| nothingmuch | heh | ||
| autrijus | :D | ||
| it's ICFP | |||
| miyagawa | yet another meta language i maen | ||
| nothingmuch | autrijus: que es min-caml? what I think it is? | ||
| autrijus | nothingmuch: yes | ||
| miyagawa: it's the gathering of weirdo lambdafolks | |||
| nothingmuch | min-caml is to ocaml like python is to perl? | 16:02 | |
| miyagawa | cool | ||
| autrijus | erlang, scheme, ocaml, haskell, etc | ||
| nothingmuch | autrijus: i have a question about david roundy | ||
| is he really the mega hippy he looks like in the pictures on abridgegame.net? | |||
| autrijus | he looks like larry wall | ||
| 20 years younger | |||
| miyagawa | ha | 16:03 | |
| autrijus | speaks like him, moves like him | ||
| I keep resisting the impulse to call him larry | |||
| nothingmuch | www.abridgegame.org/screenshots/generalprefs.png | ||
| miyagawa | aut: did you make Takahashi method with MS Powerpoint? | 16:04 | |
| autrijus | miyagawa: OOo impress actually, with some help from ppt whilst I was downloading OOo | ||
| miyagawa | my co-worker tried to make a Kwiki/Spork plugin to enable Takahashi-ism in Spork slides | 16:05 | |
| autrijus | miyagawa: I wish there is a software that can scale automagically for me | ||
| right, I worked on it a bit using Font::AFM | |||
| miyagawa | ah, cool | ||
| autrijus | but I can't get it working in the reasonable timeframe | ||
| miyagawa | ;) | ||
| nothingmuch | isn't a wafl block for some inline CSS enough? | ||
| autrijus | nothingmuch: it's surprisingly hard to scale fonts to fit window border using CSS. | 16:06 | |
| nothingmuch | oh, you don't want it just big, but biggest | ||
| autrijus | yes. | ||
| nothingmuch | =) | ||
| perhaps javascript can help? | |||
| autrijus | yes, I'm sure it could | ||
| nothingmuch | no replies yet =/ | 16:08 | |
| nothingmuch ponders making a warnock ratio calculator and seeing if he's the winner | |||
| autrijus | nothingmuch: if you want to help with releng -- maybe changelogging? :) | ||
| nothingmuch | changelogging is not a good idea, since i'm still slightly nauseous (hard to concentrate) and i'm not really in touch lately, but i would be very happy to help with janitorial work | 16:09 | |
| autrijus | ah ok | ||
| nothingmuch 's stomache fail()ed yesterday | |||
| autrijus | you can chase away the "You probably don't want to export an operator name; instead | ||
| " | |||
| in fp.pm | |||
| nothingmuch | okay | ||
| autrijus | Set/Symbols.pm | ||
| *** No compatible subroutine found: "&union" | 16:10 | ||
| at blib6/lib/Set/Symbols.pm line 28, column 5-21 | |||
| etc | |||
| nothingmuch svk pulls | |||
| autrijus | nothingmuch: also | 16:13 | |
| unexpected "o" | |||
| expecting ";", statements or end of input | |||
| at t/packages/reflection.t line 14, column 1 | |||
| also | |||
| unexpected "{" | |||
| expecting word character, "::", ".", ":", "(", term postfix, operator, postfix conditional, postfix loop, postfix iteration, ";" or end of input | |||
| at t/packages/symbols.t line 16, column 9 | |||
| svnbot6 | r7133 | stevan++ | Perl6::MetaModel 2.0 - | 16:15 | |
| r7133 | stevan++ | * instance attribute keys are now locked, this is mostly to help | |||
| r7133 | stevan++ | me out when debugging (autovivifacation makes for some ugly | |||
| r7133 | stevan++ | and hard to find bugs in the MM) | |||
| r7133 | stevan++ | - added a means of adding attributes to live objects when | |||
| r7133 | stevan++ | absolutely nessecary, but shhh I didn't tell you that ;) | |||
| nothingmuch | autrijus: pugs is still compiling, soo i'm off to dinner | 16:16 | |
| i'll do this stuff in ~15 mins | |||
| autrijus | cool | ||
| miyagawa | "Functional Programming As a Means, Not an End " | 16:17 | |
| it's really cool | |||
| autrijus | miyagawa: aye, I think that's a good slogan | ||
| and I learned all I can about MDA | |||
| which is a very nice way to market the FP mindset | |||
| miyagawa | but I'm still wondering Pugs is "Commercial" usage of FP | ||
| MDA? | |||
| autrijus | it's not -- the chair said something about "Practical" instead | ||
| miyagawa | that makes more sense | 16:18 | |
| autrijus | www.omg.org/cots | 16:19 | |
| www.cotsjournalonline.com/home/arti...?id=100297 | |||
| mostly it's a way to phrase code generation / metaprogramming so that pointyhairs can understand. | |||
| miyagawa | thanks. MDA reminds me of Mail Delivery Agent like procmail | 16:20 | |
| autrijus | :D | ||
| alright, dinner, bbiab :) & | 16:22 | ||
| oh also, the test in t/rules/rules.t triggers weird numbers of | 16:28 | ||
| *** Warning: PGE doesn't actually do :ignorecase yet. | |||
| at tmp-Prelude.pm line 197, column 24-43 | |||
| the report site is not helpful (tmp-Prelude.pm) is not helpful | 16:29 | ||
| so I wonder if that should be disabled, or somehow limited so it occurs only once, or somehow not warn during testing, or otherwise make the user less panicked | |||
| but dinner for real. & | 16:30 | ||
| r0nny | hoi | 16:44 | |
| nothingmuch | hi r0nny | 16:48 | |
| autrijus: do you remember how we found out that Scalar::Util::blessed (the pure perl version) is so insane? | 16:54 | ||
| svnbot6 | r7134 | yiyihu++ | Edit Simplified Chinese version of Apocrypha to make it more comfort for Simplified Chinese User.... | 16:57 | |
| xinming_Beijing | hmm, Some small bug will be fixed the day after tomorrow... hmm, Bye for now... | 17:01 | |
| good night | |||
| autrijus | rehi | 17:34 | |
| nothingmuch | rehi | ||
| autrijus | nothingmuch: yeah, because we wished to find a way to test for objectness | ||
| and we didn't want to munge UNIVERSAL | |||
| so you thought S::Util may be good | |||
| nothingmuch | oh, right | 17:35 | |
| and then we figured out that thtat was exactly what it's doing =D | |||
| luqui: good stuff | |||
| luqui | hmm | ||
| nothingmuch | theory.pod | ||
| luqui | ? | ||
| nothingmuch | luqui++ | ||
| luqui | ahh, thank you | ||
| the factory/union connection has a few holes that I'm trying to work out, but other than that, I'm pretty happy with it | 17:36 | ||
| autrijus | hey luqui | ||
| luqui | hi autrijus, long time no irsee | ||
| autrijus | luqui: is @Larry currently addicted by AG? | ||
| s/by/to/ | |||
| luqui | AG? | ||
| autrijus | attributive grammars | ||
| nothingmuch | autrijus: briefly what is AG? | ||
| luqui | allison at least | ||
| nothingmuch | like , what does it give you | ||
| autrijus | luqui: oh... I thought $Larry mentioned something about it makign it part of perl6 | 17:37 | |
| in your journal | |||
| luqui | oh yeah, the tree transform stuff | ||
| that is the hot topic | |||
| nothingmuch | what is that stuff, btw? | ||
| autrijus | nothingmuch: www.haskell.org/tmrwiki/WhyAttribut...marsMatter | ||
| luqui | *click* | 17:38 | |
| autrijus | luqui: nice. I wonder what systems al and lwall worked with | ||
| I'm with a bunch of AG guys here | |||
| luqui | really? | ||
| autrijus | UUAG in particular | ||
| <- at ICFP | |||
| luqui | ... acronyms ... | ||
| autrijus | largest concentration of lambdafolks on the planet | ||
| luqui | cool | ||
| autrijus | (international conference of functional programming) | ||
| it's uncharted territory, and performance can be unpredictable, and it does not mix well with imperative primitives | 17:39 | ||
| but otherwise it's a good idea | |||
| certainly saner than importing the monad primitives to perl6. | 17:40 | ||
| luqui | :-) | ||
| autrijus, lwall worked with perl 5; al worked with P6C | 17:41 | ||
| so.... they didn't | |||
| and I haven't either | |||
| so we need some docs | |||
| autrijus | where did they find AG then, hmm. | ||
| luqui | al's reading | ||
| autrijus | sure. I'm working with UUAG | ||
| which is not actively developed but works pretty stable | 17:42 | ||
| implementing AG transfomer on Parrot of any efficiency is going to be an _interesting_ problem | |||
| certainly more so than PGE | |||
| oh btw, I accidentally implemented .TEMP and temp() | 17:43 | ||
| committing | |||
| luqui | neato | ||
| nothingmuch is not understanding anything | |||
| brain is completely fizzy | |||
| luqui is a little lost too... | |||
| because I'm trying to read WhyAttributeGrammarsMatter and autrijus at the same time | |||
| autrijus | luqui: more helpful may be www.cs.uu.nl/wiki/Swierstra/ResearchTalks | 17:44 | |
| the 3rd one in particular | |||
| some lambdafolk remarked that "AG was advanced technology in the 80s" :D | 17:45 | ||
| ...and somehow ignored by the rest of the world | |||
| luqui | there seems to be a lot of that | 17:46 | |
| like, oh, tail calls | |||
| sili | i hate pdf. | ||
| luqui | i hate bad music | ||
| autrijus | "after a lot of research on AG, we discovered that it is possible to write compilers in AG that is _almost_ as fast as hand written compilers" | 17:48 | |
| luqui | lhs.length =1.0 + @tail.length -- cognitive dissonance :-) | ||
| autrijus | "therefore compiler writers ignored AG, because it's not fast enough" | ||
| "and therefore other people ignored AG, thinking it's only for compiler writers" | |||
| svnbot6 | r7135 | autrijus++ | * proper temp() support even for nonlocal exits; also supports .TEMP as per s06 | ||
| luqui | are there any AG thingies on CPAN? | 17:49 | |
| sili | what's ag? | 17:50 | |
| autrijus | CPAN, being what CPAN is, no. :) | ||
| although the idea has been resurfacing with the term "aspect-oriented programming" | |||
| luqui | "being what CPAN is?" | ||
| what is CPAN | 17:51 | ||
| autrijus | comprehensive perl archive network :) | ||
| integral | but without the comprehensive bit? | ||
| autrijus | (referring to the fact that AG didn't have anything to do with perl prior to this point) | ||
| wolverian | AG looks like a really hard to read version of CSS | 17:52 | |
| luqui | okay, fair enough | ||
| autrijus | wolverian: except you can't embed closures in CSS | 17:53 | |
| and CSS attributes can't propagate upwards | |||
| so you are limited to one-pass downward propagation | |||
| luqui | from what I can tell, AG is tightly coupled to being lazy | ||
| this... is not a good sign | |||
| integral | what is "being lazy"? | 17:54 | |
| autrijus | yes, it's a lazy oasis within a normally imperative setting | ||
| or "declarative", so to speak | |||
| sili | declarative++ | ||
| luqui wonders how much laziness Perl can get away with without people noticing it is lazy | 17:55 | ||
| and if it turns out to be a lot, parrot is screwed | 17:56 | ||
| that or it just isn't good at the parts of the language that are lazy ("good" read "fast"), but still works | 17:57 | ||
| integral | luqui: I don't quite understand why parrot would be screwed? | ||
| autrijus notes that UUAG is in Artistic License, curiously | 17:58 | ||
| luqui | integral, it's just not set up to handle millions of little teeny closures | ||
| autrijus | luqui: a CPS VM is at an advantage to model laziness | ||
| luqui | yeah, I suppose | ||
| integral | luqui: really? hrm. ok, I thought it would be | ||
| luqui | but function calling has been designed too heaviweight | ||
| but then a lot of parrot has changed behind my back | 17:59 | ||
| because I haven't been looking for over a year | |||
| so don't listen to me | |||
| integral | but aren't you calling functions everywhere anyway with PMCs? | ||
| autrijus | that would be C level vtable function though | ||
| luqui is giving an all-day opengl tutorial | 18:03 | ||
| autrijus | nice | ||
| luqui will read up on AGs definitely | |||
| thanks for the seed :-) | |||
| adios | |||
| autrijus | np. :) I also ran into crazy scheme folks today | ||
| one of which incidentally had a nice algorithm for making runtime "where {...}" constraints more efficient to implement | 18:04 | ||
| autrijus goes back to chase testfails... | 18:08 | ||
| too bad the hotel room here does not have wireless, it's only in the lobby | |||
| so I may randomly drop off soon and go back for electricity :) | 18:09 | ||
|
18:14
DesreveR is now known as r0nny
|
|||
| gaal | nothingmuch: "making up these subjects is fun": www.livejournal.com/~gaal/89779.html | 18:15 | |
| (more at www.livejournal.com/~gaal/90197.html) | 18:16 | ||
| autrijus | nifty | 18:17 | |
| nothingmuch | gayes, i remember.. that's good stuff! | 18:19 | |
| nothingmuch wonders how the hell "gayes" came out of gaal | 18:21 | ||
| oh... ga<tab>yes | |||
| gaal: yes, I remember... that's good stuff! | 18:23 | ||
| sili | is anyone working on p6 documentation? | ||
| autrijus | sili: yes, see docs/quickref/ and other docs/ in the pugs tree | 18:26 | |
| bbl & | 18:28 | ||
| sili | ah, this is perfect | 18:33 | |
| nothingmuch | UGH! not with the interpolation again! | 18:34 | |
| nothingmuch cries | |||
| sili | what is defaul{} used for? | 18:35 | |
| oh i see. | 18:37 | ||
| i take it back. i don't get it | 18:41 | ||
| given/when/default :( | |||
| gaal | just for clarity. | 18:43 | |
| sili | how do you use them? | ||
| gaal | see L<S04/"Switch statements"> | 18:44 | |
| sili | thanks. | ||
| now i get it. | |||
| gaal | "The default case [...] is exactly equivalent to when true {...}" | ||
| xinming_Beijing | ?eval 3 ?? 1 :: 0; | 18:55 | |
| ??, pugs bot is gone? :-S | 18:56 | ||
| sili | looks like | 18:57 | |
| xinming_Beijing | hmm, It seems, that the Synopsis is a bit outdated because of the ?? !! operator... :-) | 18:59 | |
| sili | bad info is worse than no info :| | 19:01 | |
| xinming_Beijing | :-S Language syntax changed a bit in these days... :'( I think I have to review to see how much changes has been made... | 19:04 | |
| gaal punts on lexical pragmas for tonight | |||
| see ya :) zzzzZZZ & | |||
| meppl | is it possible to use perl5-modules momentaneous? | 20:04 | |
| pugs says "pugs_bin: *** perl5 is not available" | 20:05 | ||
| Khisanth | did you compile pugs with perl5 embedded? | 20:08 | |
| meppl | oh | 20:16 | |
| no | |||
| thx | |||
| svnbot6 | r7136 | putter++ | docs/quickref/namespace: mention it is out of date. | 20:22 | |
| r7137 | putter++ | crude_repl.pl: rename to pugs-p5.pl | 20:33 | ||
| putter | gaal: could you add a PUGS_EXECUTABLE environment variable to Main.hs, pointing to the pugs executable, so the backend helpers can reliably find their way back to the pugs which called them? thanks. | 20:44 | |
| svnbot6 | r7138 | putter++ | PIL/Run/EvalX.pm: To find a pugs to run, use a --pugs=xxx argument, or a PUGS_EXECUTABLE environment variable, or depend on finding 'pugs' in PATH. | 21:09 | |
| r7139 | putter++ | src/Main.hs: pass backends all arguments, not just some. -I again works. | 22:04 | ||
| r7140 | putter++ | pugs-p5.pl: delay PIL-Run startup until runtime (instead of compile-time), so --pugs gets set in time. | 22:46 | ||
| putter | gaal: ok, so Main.hs could define a --pugs instead of, or in addition to, PUGS_EXECUTABLE. The later is nice because it doesnt require backend perl "runtime" processing. But a quick and superficial search suggests ghc doesn't have a portable (ie, non Posix) setenv. | 22:47 | |
| svnbot6 | r7141 | putter++ | runjs.pl: Kludge to tolerate -B JS argument. Now runs with the new unwrapped pugs. But jspugs.pl still doesn't. | 23:22 | |
| putter | iblech: ./pugs the script was avoiding sending the backends the -B js argument. The "unwrapped" haskell pugs doesn't. And perhaps can't easily. So runjs has to tolerate a -B. So I kludged it. But jspugs, aka './pugs -B js', is still broken. It's probably easier to hack runjs, than to make Main.hs and Run/Args.hs smarter. They're rather narrowly targeted at pugs's own needs. | 23:25 | |
| Though perhaps we could do our own "run"-like parsing in Main.hs, before handing off to 'run' if it's not a backend task. But it's probably easier in perl than haskell. | 23:27 | ||
| gaal: runjs already supports --pugs, so perhaps that's worth doing first. | 23:29 | ||
| fglock: the only remaining pilrun regression from the ./pugs unwrapping should be "make test-perl5". Everything else should be working again. Please ping me if something else turns up. I'll try to look into make test early this week. Smoke works. | 23:48 | ||
| After that, perhaps a bit of code dusting, and then maybe switch to mm2? Unless that's done already? :) | 23:49 | ||