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. |
|||
00:00
avarab is now known as avar
|
|||
luqui | stevan, oh, don't worry, I'm highly inconsiderate as far as keeping what is already there | 00:24 | |
:-) | |||
svnbot6 | r8464 | luqui++ | Brand spankin' new, spectacularly extensible, extremely role-based, marvelously broken architecture for Parse::Rule. | 00:49 | |
r8465 | luqui++ | Added my architecture design doc. | |||
clkao wonders why ` in pil ;) | 00:51 | ||
luqui | they need a character other than . | ||
and ` kinda looks like a dot on the top of the screen | 00:52 | ||
er, line | |||
clkao | i thought audreyt will use funky things like ☞ | 00:53 | |
luqui | heh... other people have to type it too, you know | ||
clkao | luqui: what happened to svk today? | 00:54 | |
luqui | I don't know | 00:55 | |
I pushed and it tried to merge a bunch of stuff that I had already pushed | |||
giving me conflicts, since I had changed it since then | |||
luqui supposed he should have saved the dialog | 00:56 | ||
clkao | eek. | 00:58 | |
svnbot6 | r8466 | luqui++ | It seems that the array context fix broke multiple | 01:37 | |
r8466 | luqui++ | inheritance. (Didn't seem like those would be related, | |||
r8466 | luqui++ | but you never know) Fixed. | |||
r8467 | luqui++ | All tests again pass. The architecture move is complete! | 02:07 | ||
r8468 | luqui++ | Medium- and strategy-independent interface. | 02:37 | ||
clkao | audreyt: do i still need this: | 02:43 | |
+ let caller = maybe "main" envPackage (envCaller env) | |||
in Parser.hs ? | |||
luqui | that actually looks a little dangerous | 02:48 | |
clkao | it's a bandaid for export bug | 02:49 | |
luqui | If you're trying to export but you don't have a caller, it should probably blow up | 02:50 | |
asavige | anyone there to help haskell beginner? | 02:56 | |
i'm trying to write my first haskell program for cheap thrills | |||
luqui | I can. Just a sec though | ||
svnbot6 | r8469 | Darren_Duncan++ | r1634@Darren-Duncans-Computer: darrenduncan | 2005-12-26 18:57:21 -0800 | 02:59 | |
r8469 | Darren_Duncan++ | /ext/Rosetta-Incubator : added new files lib/Locale/KeyedText/L/en.pm (start of LKT itself using Message exceptions) and lib/SQL/Routine/Migration.pod (start of a guide to translate between languages); small KeyedText.pm update | |||
luqui | asavige, mmkay | 03:00 | |
asavige | i'm in ghci, loaded my little function and can evaluate it ok .. but I want to trace it | ||
when i try putting trace before the function i get Not in scope: trace | |||
luqui | import Debug.Trace | ||
oh, in ghci | 03:01 | ||
:module +Debug.Trace | |||
(add Debug.Trace to the list of "search paths" for functions) | |||
asavige, don't be afraid to ask over at #haskell too, but the answers get very detailed and stylistic | 03:04 | ||
like asking a beginner perl question at #perl | |||
nobody knows how to talk to beginners | |||
phredmoyer | except other beginners :) | 03:09 | |
luqui | :-) | ||
I always think that pedagogy is more an art than a science. One teacher can usually explain things really well. | |||
Ten give away too much and too little information at the same time. | |||
asavige | ok, finally got it to work after grepping for trace in Pugs code | 03:26 | |
it seems trace is very, er, manual, you insert the statements ok for monads | 03:27 | ||
but can you use trace for non monads? | |||
(i haven't got up to monads yet) | |||
is there a more generic less intrusive trace facility so i can just see what is going on when i evaluate a function | |||
just a couple more general haskell questions, then I'll leave you in peace | 03:29 | ||
is there a standard stack class in haskell std library? | 03:30 | ||
what about hashes? | |||
luqui | sorry, was afk | ||
asavige, no, trace works even outside of monads | |||
asavige | finally does haskell support exceptions try/catch? if so, what are they called? (i know about "error" function) | ||
luqui | asavige, there's not much reason for a stack class, since a cons list works well for that as it is | 03:31 | |
asavige, haskell has exceptions within monads | |||
(Control.Exception) | 03:32 | ||
asavige, trace works like so | 03:33 | ||
trace "message" (foo bar) -- prints message to the screen, then returns whatever foo bar returned | |||
there's no such thing as a statement boundary, so you have to "pass values through" trace | |||
asavige, oh yeah, and there is a hash. It's called Data.Map | 03:34 | ||
(well, it's not technically a hash, but it does the same thing) | |||
asavige | ahhh beauty! got it now. with this new trace-foo I'll be unstoppable ;) | ||
thanks luqui! | |||
luqui | sure | ||
oh, and when using trace, remember that haskell is lazy so it doesn't surprise you | 03:35 | ||
that is: let foo = trace 42 in bar -- where bar doesn't depend on foo | |||
will not print anything to the screen | |||
oh, s/trace/trace "baz"/ | 03:36 | ||
asavige, one more thing | 03:38 | ||
do you know about "show"? | |||
asavige | luqui: no | 03:39 | |
luqui | ahh, that can be helpful with trace | ||
show turns various values into strings | |||
so you can say: trace ("got here with " ++ show myvalue ++ "fine") etc | |||
but it won't do it with any value (functions for example don't work), so be prepared for it to whine at you | 03:40 | ||
asavige | thanks, i remember now, i lied, I read about show and its opposite read (but no practical experience yet) | 03:41 | |
luqui | okay cool | ||
asavige | thanks luqui++ | 03:42 | |
svnbot6 | r8470 | luqui++ | Changed $/.start and $/.end to $/.from and $/.to, as per spec. | 03:59 | |
phredmoyer | hey is there some conduit to donate to the pugs project? There's perl development on TPF but they have about $90k and I am interested in giving to the PUGs dev | 04:25 | |
Alias_ | Just write a cheque for My C. Ash and send it to my address | 04:26 | |
Mr | |||
phredmoyer | lol | 04:27 | |
luqui | phredmoyer, are you serious? | 04:28 | |
phredmoyer | seriously though, I am interested in donating. Would do so through TPF but I want to know that it's going to to pugs... | ||
luqui | phredmoyer, you should tell TPF that you want it to go to pugs | 04:29 | |
I don't know much about TPF, but you can probably talk to obra and he'll get you on the right track | |||
phredmoyer | who's obra? (on cli irc client) | 04:30 | |
luqui | jesse fsck com | ||
Jesse Vincent | |||
phredmoyer | ok | ||
gotta go, will email him. | 04:31 | ||
luqui | thanks! | ||
aww I missed him | |||
svnbot6 | r8471 | Darren_Duncan++ | r1634@Darren-Duncans-Computer: darrenduncan | 2005-12-26 18:57:21 -0800 | 04:44 | |
r8471 | Darren_Duncan++ | /ext/Rosetta-Incubator : added new files lib/Locale/KeyedText/L/en.pm (start of LKT itself using Message exceptions) and lib/SQL/Routine/Migration.pod (start of a guide to translate between languages); small KeyedText.pm update | |||
obra | donating to pugs is still not trivial. | 05:05 | |
luqui | how nontrivial? | 05:06 | |
obra | Well, first someone would need to apply for a grant for something pugs related | 05:07 | |
luqui | ah, that's how that works | 05:08 | |
maybe phredmoyer should apply | |||
Alias_ | Like a "keep audreyt now having to work" grant? | ||
s/now/not/ | |||
luqui | oh yeah, audreyt has been caught up in $work, hasn't he. But I thought he didn't want grants. | 05:09 | |
Alias_ | she, and not sure... would have to ask | ||
luqui | damnit | ||
:-) | |||
Alias_ | It will be a confusing month or two | ||
luqui | that was the first time I used a pronoun for her, and I swore that I would get it right! | ||
obra | She's getting there. She's hacking Jifty apps for customers ;) | 05:10 | |
Alias_ | oh? | ||
Open Source ones presumably... unless they are paying that crazy $600 an hour proprietary rate... | 05:11 | ||
obra | I don't believe they're open source, but I'll leave it to her | ||
Alias_ nods | |||
spinclad | it took me a while to figure out autrijus was from taiwan; the name sounded baltic to me... | 05:21 | |
now i want to call her autrija ... must ask if ok first. | |||
obra | spinclad: "Audrey" also works now | ||
araujo | mm.. is autrijus == audreyt ? | 05:22 | |
obra | yes | ||
spinclad | right, i've gathered... just wanting a least bend on 'autrijus'. | ||
obra | & | ||
spinclad | so... audreyt, question above? | 05:24 | |
qwr | iirc audreyt = audrey tang | 05:25 | |
Alias_ | formerly Autrijus Tang | ||
spinclad | she's blogged about this lately; see pugs.blogs.com/audrey/2005/12/runti...pecas.html | 05:29 | |
araujo | mm.. she? :-/ | ||
spinclad | with full respect for her preference and self-understanding, yes. | 05:31 | |
araujo | oh, ok. | 05:32 | |
spinclad | a change like this takes some getting used to, but i know others (transgender/transsexual/whatever-term-applies) and i know it's important. | 05:34 | |
i was away (sort of) for much of november and came back to a new name (and person, in a way) to make sense of, along with the rest of the community. | 05:39 | ||
anyway, i was most happy to see her blog lately. audreyt, may this change find you safe, happy, and well! | 05:41 | ||
</OT> | 05:42 | ||
audreyt | rehi | 06:43 | |
spinclad: thanks! *smile* | |||
luqui | audreyt, I can't figure out the best interface for the subrule combinators | 06:44 | |
s/s$// | |||
audreyt | luqui: mmm? | ||
I see you are using (sort of) multiparameter roles | |||
luqui | I am? | 06:45 | |
audreyt | yeah, except you call an instance "class" | ||
svnbot6 | r8472 | audreyt++ | * As lexical import is implemented correctly by gaal++, | ||
r8472 | audreyt++ | we no longer need the withInlinedIncludes hack to get | |||
r8472 | audreyt++ | "use" statements working with PIL-based compilation. | |||
r8472 | audreyt++ | Thanks to clkao++ for prompting this fix. | |||
audreyt | and encode the strategy part and media part as separate role mixins | ||
luqui | oh yeah, it's a level of indirection to get around the absence of such roles | 06:46 | |
audreyt | luqui: but anyway. elaborate on the subrule combinator problem? | ||
*nod* | |||
luqui | we're not lazy, so we can't just build recursive combinators like you do in haskell | 06:47 | |
and in any case, I'd like to be able to compile subrules | |||
so "execute a closure that returns a Parser" doesn't work | |||
and I'd also like subrules to take arguments | |||
audreyt | you can make a strict language lazy by creating a closure that takes nil | 06:48 | |
oh wait, arg-taking subrules | |||
luqui | (as I've done many times ;-) | ||
audreyt | hmm, that's hard | ||
you can still build recursive combinators | |||
using a level of reference | |||
luqui | well, the recursive combinators isn't really what I'm concerned about | 06:49 | |
compilation is the bigger problem | |||
audreyt | compile in two passes? | ||
or keep a .id-based cache | |||
and inject previously compiled results in | |||
memoize on arguments | |||
luqui | hmm... | 06:50 | |
that's almost like packrat | |||
audreyt | I think it's a cheap and cheerful fix | ||
luqui | except not... nevermind | ||
it seems like that would be extremely memory hungry | |||
what I'm doing right now is having a Parser and a Rule, where Rule is a compiled form of Parser | 06:51 | ||
and then the subrule combinator calls a closure which returns a *Rule* | |||
supporting precompiled results | |||
audreyt | I don't see the memory hungry part. are you concerned that memoize will not be GC'ed away in time? | ||
luqui | oh... right... memoization gets GC'd | ||
audreyt | yup | ||
and we are _not_ refcounting | |||
so selfref is just fine | 06:52 | ||
luqui | can I make a memoization in pugs now? | ||
(except... I don't really care, because I don't have a compiling runtime yet) | |||
audreyt | nod | ||
just fake it as a per-sub-attached hash for now | |||
luqui | hang on--- | 06:53 | |
what if arguments are passed through the match object.. | |||
clkao | iblechbot! | ||
audreyt | iblechbot: PIL2JS fails on @array.shift in shift.t (same for pop) | ||
luqui | that doesn't seem to buy me anything... nevermind | ||
audreyt | iblechbot: it seems that @array.shift is turned into shift(*@array) -- clkao and I suspect autoderef semantics in the dispatcher to Root::shift | 06:54 | |
iblech: but I'm not sure if that's the correct reading | |||
gaal | heya! | 06:56 | |
luqui | audreyt, so can the subrule(&code:(Match --> Rule)) interface support such memoization... | ||
(I'm still not clear how that would work) | |||
gaal | audreyt: can you suggest a next move on the import game? fold reduceSy{m/n} into ruleVarDeclaration? | 06:57 | |
audreyt | gaal: PIL2JS now supports lexical imports! | ||
gaal | ! | ||
audreyt | <- hackathon'ing with clkao | ||
gaal | for vars as well? | ||
audreyt | all it takes is just _removing_ the withInlinedIncludes paragraph in Pugs.hs | ||
gaal | Carter's Compass, isn't that's what it's called? | 06:58 | |
audreyt | mmm? | ||
gaal | "I know I'm in the right direction when by removing code I'm adding functionality" | ||
audreyt | right | ||
gaal | or something to that effect. | ||
audreyt | gaal: is lexical varimport working in vanilla runcore? | 06:59 | |
gaal | no, that doesn't even parse. | 07:00 | |
I left it off last week when there was a shortage of tuits and an unexpected comlication: | |||
if you recall, allocating space happens in eval (reduceSym) | 07:01 | ||
audreyt | yes | ||
gaal | and chaining got in the way too. So chaining will have to move away for a bit :-) | ||
but should I just inline the reduceSym code into ruleVarDeclaration and use its temporary values in the exportation? | 07:02 | ||
audreyt | I think that's sane | ||
as we already agreed exporting lexical reentrant "my" vars is insane | |||
gaal | okay. brb w/coffee. | 07:03 | |
svnbot6 | r8473 | luqui++ | Subrule support. | 07:04 | |
audreyt | I'll brb as well | 07:06 | |
dduncan | hidee-ho | 07:07 | |
audreyt | Alias_: re open sourcesness of my Jifty app -- $company agreed to make all reusable part free software, and I can refactor any production code out freely | ||
dduncan: yo | |||
Alias_ | audreyt: neato... and I would too if it saved me $400-500 an hour :) | 07:08 | |
audreyt | yeah :) | ||
Alias_ | I'm surprised clients are commisioning Jifty apps when it's only been out for 1 day though | ||
You must know clients that live more on the edge :) | |||
audreyt | er, actually, it's been around a while before that | ||
dduncan | since there doesn't seem to be any movement that I'm aware of about scoping $! as an env, any time soon, I will incorporate workarounds into my code, so it doesn't suffer from untimely wipeouts | ||
audreyt | dduncan: nod, I think that's prudent. sorry about that | 07:09 | |
luqui | all-rightythen... it seems I am ready to start on OPP | ||
dduncan | not your fault per se ... p6l has to change the spec first, don't they? | 07:10 | |
audreyt | dduncan: yup | ||
I'm just this... coding monkey | |||
dduncan | separately, whether due to something specced or not, I discovered how to determine if a package is loaded or not | ||
incorporation of that was checked in yesterday | 07:11 | ||
audreyt | cool! how? | ||
luqui | oh audreyt, do you think you could make it so that pugs-interactive doesn't care about trailing semicolons? | ||
dduncan | test the value of ::($foo).ref | ||
it is 'Type' if the package isn't loaded | |||
Alias_ takes notes for P6 Class::Inspector | |||
dduncan | if the package is loaded, it is 'Module' or 'Class' or whatever | ||
audreyt | dduncan: cool | ||
dduncan | package named in $foo that is | 07:12 | |
I don't know why that works, but it does the job | |||
see, for example: | 07:13 | ||
?eval ::('Foo').ref | |||
07:13
evalbot_8444 is now known as evalbot_8473
|
|||
evalbot_8473 | ::Type | 07:13 | |
audreyt | luqui: sure, implemented, committing | ||
luqui | audreyt, thanks :-) | ||
audreyt | :) | ||
dduncan | ?eval module Foo {} ::('Foo').ref | ||
evalbot_8473 | ::Module | ||
dduncan | ?eval class Bar {} ::('Bar').ref | 07:14 | |
evalbot_8473 | ::Class | ||
GeJ | greetings all | ||
audreyt | it's nice seeing #perl6 back to constant activity/hacking :) | ||
dduncan | ?eval package Baz {} ::('Baz').ref | ||
evalbot_8473 | ::Package | ||
audreyt | GeJ: greetings | ||
GeJ | audreyt & stevan: congrats for PIL^N | ||
dduncan | this is predictable, but in the longer term something more self-documenting should be available | ||
some meta-module function | 07:15 | ||
audreyt | dduncan: yup | ||
dduncan | on other notes, I discovered your moved journal and read the latest | 07:16 | |
so I see your intentions for release dates | |||
audreyt | yup | 07:17 | |
svnbot6 | r8474 | audreyt++ | * In Pugs shell, drop all trailing whitespace and comma in | ||
r8474 | audreyt++ | interactive evaluated code. Suggested by luqui++. | |||
audreyt | GeJ: thanks! :) | 07:18 | |
svnbot6 | r8475 | audreyt++ | * Data.FastPackedString: a specialized fast packChar. | 07:20 | |
gaal | ?eval ::('NoSuch').ref | 07:25 | |
07:25
evalbot_8473 is now known as evalbot_8475
|
|||
evalbot_8475 | ::Type | 07:25 | |
gaal | say, is reverse . <filter> . reverse fast in haskell, when the data is strictly a String? | 07:29 | |
gaal wants to see a discussion of how lists are implemented for special cases | 07:30 | ||
or is that e.g. precisely why there's Data.FastPackedString etc? | |||
audreyt | gaal: it's very space-inefficient | 07:32 | |
and yes, that's why the PIL^N runcore switched to FPS | |||
and why Text.Parser.OpTable parses against FPS | |||
a linked list of UTF32 code points is simply too inefficient. | |||
(it's very convenient though.) | 07:33 | ||
gaal | sure | ||
audreyt | gaal: also, for randomly accessible growable arrays, instead of [a] we now use "Seq a" | ||
gaal | Theoretically GHC could optimize in some cases, no? | ||
audreyt | yes, GHC optimizes whenever "fusion" occurs | ||
gaal | "could have optimized" | ||
audreyt | and I think double reverse counts as fusion | 07:34 | |
but not 100% sure | |||
gaal | fusion == ? | ||
audreyt | fusion is that a list producer and a list consumer can both handle things lazily | ||
svnbot6 | r8476 | Darren_Duncan++ | r1641@Darren-Duncans-Computer: darrenduncan | 2005-12-26 23:33:48 -0800 | ||
r8476 | Darren_Duncan++ | /ext/Rosetta-Incubator : updated translate_message() of Locale::KeyedText to make a copy of $message arg, working around crashes caused by being scoped globally | |||
gaal | interesting: and there I was imagining that strictness would help things | 07:35 | |
but I can see why laziness if better in this case | |||
audreyt | cf. www.haskell.org/ghc/docs/latest/htm...#id3153312 | ||
dduncan | er, s//$!/ | 07:36 | |
I keep forgetting to escape some $ in the shell | |||
audreyt | gaal: hm, there's no fusion rule for "reverse" | 07:37 | |
gaal | "forestation"... /me has some more to read up on :) | ||
in the code generated for a list, are there sometimes backwards pointers + a size field? | 07:39 | ||
this is interesting but distracting stuff :) | |||
audreyt | and the short answer is no :) | ||
gaal | sometimes a list doesn't even have next pointers per se, right? just a next thunk | 07:40 | |
...lazy | |||
audreyt | s/sometimes/always/ | ||
gaal | so reverse 1 .. 100 is very costly | 07:41 | |
well, I bet it's at least memoized | |||
but still. | |||
audreyt | yeah | 07:42 | |
[100,99..1] | |||
is much better | |||
gaal | I will resist reading more about this now. :) | ||
audreyt | :) | 07:43 | |
gaal | in Eval, there's a special case I don't understand for reduceSym: | 07:44 | |
"Special case: my (undef) is no-op" | |||
when does that happen? | |||
reduceSym _ "" exp | |||
probably some artifact of one of the parser rules needing to change their minds about a symbol? | 07:45 | ||
audreyt | my (undef, undef, $x) = (1,2,3); | ||
gaal | ah! | 07:46 | |
right. I like that syntax. | |||
audreyt | DWIM kicks! DWIM bites! DWIM casts a spell! You feel dizzy... --More-- | ||
gaal | :) | 07:47 | |
my undef is export; # sounds like a Wallace Stevens poem | |||
audreyt | my () is export; | 07:48 | |
gaal | my $bonnie is over_the(:ocean); | ||
audreyt | Poetry Elucidation and Resonance Language | 07:49 | |
luqui read Elucidation as Eucliedean | 07:50 | ||
that's how you know you've been a math major too long | |||
s/lied/lid/ :-) | |||
gaal | www.cs.rice.edu/~ssiyer/minstrels/poems/604.html | 07:51 | |
luqui | gaal, :-) | 07:52 | |
too bad I'm so terrible at interpreting poetry. It had beautiful rhythm and rhyme though... | 07:53 | ||
nothingmuch got his lost roll of 120 slide film developed | 07:55 | ||
got the pictures from canada | |||
gaal | luqui: it's a purer version of "C-beams glitter in the dark near the Tannhauser Gate". | ||
nothingmuch | well, one picture from canada | ||
a siluhette of $Larry hand-waving | |||
well, no, more pictures from canada were also taken | 07:56 | ||
gaal | nothingmuch: any moose? | ||
nothingmuch | but none of you guys, except castaway and theorbtwo and John actually came out of the building =) | ||
gaal: nope, didn't see any | |||
i have a shirt with a camel-moose though | |||
gaal | Toronto used to have plenty of moose-statues on the streets | 07:57 | |
this is now mimiced by so many cities | 07:58 | ||
Tel-Aviv now has a silly bull stint. I hate it. | |||
luqui | audreyt, what is DynTerm/DynStr? | ||
haha: instance Ord DynStr where compare _ _ = LT | 07:59 | ||
every DynStr is less than every other | |||
gaal | luqui: it's a lesson in modesty. | 08:00 | |
luqui | "all dynstrs are less, but some are more less than others" | 08:01 | |
gaal | eeeep! $Larry mentions this in his latest post: my *@s := @a[0,2,4]; | 08:02 | |
that would be interesting to implement. | |||
luqui | why? | ||
you have to do it anyway for argument binding, don't you? | |||
gaal | hmm, I suppose so, yes. | 08:03 | |
luqui | (that's how he came up with it, after all) | ||
?eval 3/4 | 08:07 | ||
08:07
evalbot_8475 is now known as evalbot_8476
|
|||
evalbot_8476 | 3/4 | 08:07 | |
luqui | when did that happen | ||
?eval 3.4/8.2 | |||
evalbot_8476 | 17/41 | ||
luqui | how do I get floats? | 08:08 | |
?eval 1/2**100 | 08:09 | ||
evalbot_8476 | 1/1267650600228229401496703205376 | ||
scook0 | ?eval sqrt( (3/4) ** 2 ) | 08:11 | |
evalbot_8476 | 0.75 | ||
gaal | ?eval 3.4/8.2+0 | ||
evalbot_8476 | 17/41 | ||
scook0 ducks | |||
gaal | ?eval (3.4/8.2)+0 | ||
evalbot_8476 | 17/41 | ||
gaal | ?eval +(3.4/8.2) | ||
evalbot_8476 | 17/41 | ||
luqui | ?eval 3.4/8.2 + pi/pi | 08:12 | |
evalbot_8476 | 1.4146341463414633 | ||
gaal | contagious rats. | ||
luqui | I think that things with decimal points should be doubles | ||
gaal | ha, pi/pi's a nice idiom for the transcendental. | ||
luqui | I'm actually overjoyed that rationals are so prevelant | 08:13 | |
but they can quickly eat up all your memory if you're doing something like, oh, say, computing mandelbrot | |||
probably processor first, actually | |||
audreyt | luqui: pong | 08:14 | |
I changed DynStr | |||
luqui | what do you mean you changed it? | 08:15 | |
audreyt | I mean it works | ||
svk up | |||
svnbot6 | r8477 | audreyt++ | * Text.Parser.OpTable: Implement DynStr correctly and removed | ||
r8477 | audreyt++ | the horrible emptyTerm/emptyOper hack in original PGE. | |||
r8476 | Darren_Duncan++ | r1641@Darren-Duncans-Computer: darrenduncan | 2005-12-26 23:33:48 -0800 | |||
r8476 | Darren_Duncan++ | /ext/Rosetta-Incubator : updated translate_message() of Locale::KeyedText to make a copy of $message arg, working around crashes caused by being scoped globally | |||
audreyt | pull, Imean | ||
luqui | I did that right as you said you changed it and saw nothing ;-) | ||
audreyt | look at r327 | ||
luqui | but then I did it again | 08:16 | |
audreyt | yeah, commit takes ~3 secs :) | ||
see line 327 | |||
, mk Term (span isDigit) | |||
the idea of dynterm is that it parses a term first | |||
and then calls a sub to attempt parse more | |||
only if that sub succeeds, the match is considered complete | 08:17 | ||
luqui | I don't quite understand. Kind of like "ask if this is a listop"? | ||
audreyt | no... | ||
for example, if you want to parse $1, $5, $945 as a term | |||
then you create a DynTerm | |||
with str as '$' | |||
luqui | ahh | 08:18 | |
audreyt | and dynStr as (makeMaybe $ span isDigit) | ||
where makeMaybe rejects empty span | |||
useful stuff | |||
luqui | well, I suppose | ||
seems like a speed hack to me | 08:19 | ||
(a very good and honest hack) | |||
audreyt | also the dyn part is expected to be able to change opTable | ||
luqui | can't opTable just call back into the rule parser? | 08:20 | |
(hmm, but I wonder if it should be able to call back into a *different* parser) | |||
audreyt | yes. | ||
luqui | (for pre-tokenized stuffs) | ||
audreyt | so needs an generic interface | ||
yup | |||
luqui | no, not really | 08:21 | |
pre tokenized stuffs would use a tokenlist medium | |||
why does DynStr return (Str,Str)? | 08:22 | ||
why two of them? | 08:23 | ||
cm | ola | ||
luqui | (initial,remainder)? | ||
audreyt | yeah | 08:24 | |
matched,remainer | |||
luqui | that's what I meant | ||
okay | |||
audreyt | a lookafter will return initial | ||
but preserve remainder | |||
so can't just return a splitAt pos | |||
s/lookafter/lookahead/ | |||
luqui | ahh | 08:25 | |
gaal | urp. folding in reduceSym isn't enough, duh; I'd need to replace two unsafeEvalXXX functions. | ||
cm | *folds audreyt* | ||
luqui | okay, I think I can do the OPP parser now | ||
still using this as a reference | 08:26 | ||
gaal | argh! it's not even possible to refactor unsafeEvalEtc. funcs to accept a callback, because it needs to go all the way down to reduce. :-( | ||
luqui | gaal, what are you trying to do? | ||
audreyt, one more thing... what is Close? | 08:28 | ||
gaal | luqui: export variables. the difficulty is that their memory is allocated in Eval, not the parser. | 08:29 | |
as opposed to Subs, where the mkCode was in Parser, making export much easier. | |||
luqui | sub foo () { my $x is export; ... } | 08:30 | |
audreyt | luqui: Close is the closing part of a circum | ||
luqui | you add that automatically when someone declares a circumfix? | 08:31 | |
audreyt | in circumfix:<[ ]>, the close:<]> token is manufactured | ||
yeah, and postcircum | |||
luqui | okay, fair enough | ||
audreyt | luqui: OpTable-mutator is in | ||
luqui | oh, and rationals get rid of the whole string-compare trick | ||
I was rather pleased to see that | |||
svnbot6 | r8478 | audreyt++ | * Text.Parser.OpTable - DynStr can now return a function that | ||
r8478 | audreyt++ | modifies the operator table for the remainer of parse. | |||
audreyt | luqui: I think the string compare trick is _broken_ in PGE | 08:32 | |
from what I see, a trailing ">" will continue be a trailing ">" | |||
even if it's specified twice | |||
gaal | luqui: that line you just said would probably not be allowed | ||
audreyt | since it's using substr($level, -1) to substitute | ||
luqui knows | |||
audreyt | but of course I may've read the assembly wrong | ||
luqui | (re: gaal) | ||
audreyt | in any case I much prefer rationals. | ||
luqui | does the math you're doing work? | 08:33 | |
audreyt | you mean multiplying by 1.5 and 0.5 respectively? | ||
luqui | yeah | ||
oh, ternary | |||
gaal | .oO( not that I see why we need to allow sub foo { our $x is export } ) |
||
luqui | base 3, no? | ||
audreyt | yeah | 08:34 | |
luqui | that makes sense | ||
audreyt | cool | ||
wlel, it's actually still binary | |||
because for "=" equiv you don't touch the number | |||
for ">" you add a trailing 0 | |||
for "<" you dec by 1 and add trailing 1 | |||
if the match doesn't work, feel free to fix it :) | 08:35 | ||
s/match/math/ | |||
luqui | I'll attempt to prove that it works before using it | ||
audreyt | cool | ||
luqui | got to put my school skills to work somehow | ||
audreyt | I hope my use of implicit params is grokkable to you | ||
it's just writing Reader monad code in direct style | 08:36 | ||
luqui | implicit params? | ||
audreyt | ?tbl | ||
?termStack | |||
they are like $+tbl | |||
glasgow haskell has native support for "env" vars | |||
and let-binding introduces new env | |||
luqui | oh cool | 08:37 | |
wow perl is so original :-p | |||
audreyt | let ?tbl = (transform ?tbl) | ||
heh :) | |||
nothingmuch | where are env vars described? | ||
luqui | I'll figure it out | ||
S02 | |||
nothingmuch | s06 only mentions them | ||
ah | |||
audreyt | the GHC implementation is haskell.org/ghc/docs/latest/html/us...parameters | ||
note that in GHC, whether you accept env or not must be marked in type signature | 08:38 | ||
if you don't declare you want caller's env, you don't get them | |||
for speed reasons and type soundness | |||
nothingmuch | ++ | ||
luqui | thus type Parse a? | ||
audreyt | in p6 I imagine we always get the whole env stack? or do we hoist $+foo like $^foo? | ||
luqui: yup | |||
luqui | ? | 08:39 | |
audreyt | Parse a is something that receives the env vars and has type a | ||
luqui | you can return it? | ||
that is, the function depends on ?tbl | |||
audreyt | sure | ||
luqui | do you return something that depends on ?tbl and it works? | ||
audreyt | yup | ||
luqui | okay | ||
oh yeah, because return is covariant | |||
nothingmuch | audreyt: what about '$( '+foo' ) ? | ||
luqui feels stuff starting to make sense | 08:40 | ||
nothingmuch | or do we need $+( 'foo' )? | ||
audreyt | nothingmuch: I have no idea | ||
I imagine we just pass the whole frame around | |||
very slowly but surely | |||
nothingmuch | continuations would be ouch wouchy | ||
audreyt | yeah | 08:41 | |
nothingmuch | env lexicals are just regular lexicals that arrange in a graph though, right? | ||
i mean, if you look at 'sub { ... { } ... }' | |||
the pads are chained | |||
audreyt | env lexicals are things you pass implicitly to every function you call in your scope. | ||
nothingmuch | env just means that you can chain pads dynamically instead of lexically | ||
right | |||
no need to pass the whole frame around | |||
just a pointer | |||
to the most recently declared env | 08:42 | ||
linked list of pads for in->out lookup | |||
luqui | that puts the cost on lookup | ||
which seems better than putting the cost on closure | |||
nothingmuch | luqui: $+foo could be statically resolved into a hidden parameter | 08:43 | |
while $( "+foo" ) would have expensive lookup | |||
luqui | yes, if we can do such static binding | ||
nothingmuch | we can | ||
luqui | hmm... when you don't know, you just fill it in on demand | ||
okay, I see that | |||
nothingmuch | just add a $plus_foo_for_this_func to every caller of this_func that | ||
that has $+foo somewhere in it's env | |||
statically resolved env | 08:44 | ||
luqui | I'm just thinking about function pointers | ||
nothingmuch | it's just a matter of callgraph walking | ||
i don't understand the connection | |||
one sec, need chocolate | |||
luqui | you can't statically bind $foo() without adding envs to the type system like Haskell did | ||
nothingmuch | you can statically bind by compiling static envs into parameters | 08:45 | |
function parameters | |||
luqui | not when you don't know what you're calling | ||
as in my $foo = get_random_coderef(); $foo() | |||
audreyt | 09:45 < nothingmuch> you can statically bind by compiling static envs into parameters | 08:46 | |
nothingmuch | oh, right | ||
audreyt | # which is exactly what GHC does at runtime | ||
because $foo in that case stilll has static type informatino | |||
nothingmuch | i thought thep problem was '$+foo.()' | ||
audreyt | as of what env they want | ||
luqui | here's another question: | ||
sub foo() { return { $+bar } } | |||
$+bar comes from the caller of the returned closure? | |||
audreyt | obviously, yeah | ||
nothingmuch | i'd want it to be a closure closure, i think | 08:47 | |
luqui | I suppose you would do: sub foo() { my $bar = $+bar; return { $bar } } | ||
audreyt | yup | ||
nothingmuch | unless we explicitly mark it | ||
this is only because i tried to put $_ in closures too many times | |||
e.g. 'my @adder_subs = map { sub { $_ + shift } } 1 .. 10' | |||
but then again, i could say this now: | |||
luqui | the idea that envs are part of the signature is nice, but it's probably too picky for perl users | 08:48 | |
nothingmuch | my @adder_subs = map -> $x { sub { $x + shift } } 1 .. 10' | ||
audreyt | luqui: not if we hoist it like $^x | ||
luqui | nothingmuch, yep. perl 5 was crappy... | ||
nothingmuch | hehe | ||
audreyt | i.e. collect static info | ||
if you mention $+x in your code, you want $+x | |||
luqui | audreyt, wouldn't you still get bogus type errors | ||
audreyt | I don't see why. | 08:49 | |
luqui | yeah sure, they wouldn't write the type information | ||
but it would still be that | |||
*there | |||
audreyt | no, because subsumption always happens | ||
luqui | hmm | ||
audreyt | there's no failure case | ||
so you never see an errmsg | |||
not in comp time anyway | |||
luqui | okay... I can see that... | 08:50 | |
my only other fear is that the lists of implicit parameters would get huge | |||
in top-level functions | |||
I suppose you can remove them from the list upon binding... | |||
audreyt | yeah | ||
same for any other tunrime type passing | |||
luqui | interesting | ||
audreyt | s/tunrime/runtime/ | 08:51 | |
luqui | heh tunrime | ||
audreyt | which we'd need for runtime resolution of objtype polymorphism anyway. S12: | ||
luqui | which runtime type passing are you referring to? | ||
audreyt | All public method calls are "virtual" in the C++ sense. More surpris? | ||
ingly, any class name mentioned in a method is also considered virtual, | |||
that is, polymorphic on the actual type of the object. | |||
nothingmuch | gah | 08:52 | |
audreyt | so at runtime, the actual type of object subsumes the (potentially superclass's) class name | ||
nothingmuch is getting a pugs craving again | |||
i will be back very very soon | |||
luqui | hooray! | ||
audreyt | nothingmuch: I look forward to it :) | ||
luqui | audreyt, must the derived class be a subtype of the original? | ||
nothingmuch | but now i need to work ;-) | ||
i need a sabbatical from work | |||
luqui | (hmm... unless it is used in contravariant position, in which case it must be a supertype) | 08:53 | |
(and you don't get any virtual anything if you use it in both positions; it must be precisely equivalent) | |||
(I guess you can override behaviors) | |||
audreyt | luqui: I thought that's the denotational definition of "derived" | 08:54 | |
operationally what "deriving" means is what "subtyping" means on the type level | |||
luqui | did S12 ever say derived? | 08:55 | |
oh, I did | |||
s/derived/overrided/ | |||
audreyt | and S12 does too. | ||
luqui | where? | 08:56 | |
I'm referring to the virtual class, not the class that contains the virtual class | |||
audreyt | oh, sorry | ||
hm | 08:57 | ||
class Foo { method (Foo $self: Foo $other) { ... } } | |||
er | |||
s/method/method m/ | |||
class Bar is Foo {} | |||
Bar.new.m(Bar.new) | |||
luqui | is that what it's talking about? | ||
audreyt | then the "Foo" in the method type becomes Bar automagically | 08:58 | |
yes. | |||
luqui | it says "any" class name | ||
audreyt | sure | ||
same | |||
luqui | i.e. Bar.new.m(Foo.new) # illegal? | ||
audreyt | it is legal | 08:59 | |
first Foo becomes Bar | |||
luqui | well of course... | ||
audreyt | second Foo untouched | ||
luqui | I don't see what's virtual here... | 09:00 | |
audreyt | all it's saying is that there's no static precalculation of binding to Foo:methname | ||
luqui | example if there were? | ||
(sorry I'm being rather dense) | |||
audreyt | class Foo { method m1 (Foo $other) { $other.m2 }; method m2 { 'z' } } | 09:02 | |
class Bar is Foo { method m2 { 'zz' } } | |||
Bar.new.m1(Bar.new) | |||
# zz | |||
but if prebinding happens it would be 'z' | |||
luqui | that's not what it's saying | ||
audreyt | because it's dispatched to Foo::m2 on $other.2 | ||
.m2 | |||
luqui | that's just "all methods are virtual" | ||
audreyt | no, it's on "$other" | 09:03 | |
luqui | S12 says class *names* are virtual | ||
audreyt | if it's on "$self", it'd be "all methods are virtual" | ||
oh wait, I see what you're talking about | |||
I think it's calking about this | |||
luqui | s/c/t/? | ||
audreyt | class Foo { method m1 { Foo.new } } | ||
luqui | you're having phoenetically appealing butterfingers today | 09:04 | |
audreyt | class Bar is Foo {} | ||
Bar.m1(); # returns a Bar obj? | |||
luqui | yeah, that's on the right track, but I think that would be wrong | ||
GammaRay | can anyone point to a real example of := ? | ||
luqui | examples/advocacy/motd-i.p6 | 09:05 | |
nothingmuch | my $short_name := $very_long.{expression}{with}[$subscripts]; $short_name = "foo"; | ||
$short_name++; | |||
luqui | GammaRay, know C++? | 09:06 | |
audreyt | GammaRay: know perl5? :) | 09:07 | |
GammaRay | depends... I'm more versed w/ C | ||
audreyt | $foo = 1; *foo = *bar; $bar++; print $foo; # 2 | ||
GammaRay | and yes I "know" perl5.. though it's kinda hard to say that definitively | ||
luqui | GammaRay, := is just like references in C++. int& foo = bar; # they're not exact aliases | 09:08 | |
s/not/now | |||
audreyt | er, I mean *bar = *foo | ||
in perl6, you can say $bar := $foo to do that | |||
without getting %bar and @bar into the game | |||
and also works on lexical vars | |||
luqui | which is important, because in perl5 you just do *foo = \$bar | ||
for the former | |||
but the latter doens't work without XS hackery | |||
audreyt | and you just use Devel::LexAlias for the latter | 09:09 | |
it's just the ergonomics sucks | |||
for both | |||
luqui | or you use Perl6::Binding | ||
luqui thinks that's the name of that module | |||
nothingmuch | btw, Array::RefElem is the most wonderfully wonderful aliasing module | ||
audreyt looketh | 09:10 | ||
nothingmuch | it allows you to glue the data of different data structures | 09:11 | |
on numerous occasions i used it to make views of structures | |||
audreyt | wow, very syck | ||
nothingmuch | that can be updated and queried from two different lookup structures | ||
one was good for updating, the other for lookup | |||
audreyt | mm it's almost like zipper | 09:12 | |
except rather destructively | |||
nothingmuch | yeah =) | ||
luqui | zipper? | 09:13 | |
nothingmuch | haskell.org/hawiki/TheZipper | ||
luqui | ahh yes, that | ||
I used that when we were brainstorming about the tree transformation language | 09:16 | ||
it went over everybody's head (including mine, partially) | |||
nothingmuch | btw, what's the status of that thing? | ||
will perl 6 have zippers and AGs? | |||
audreyt prefers case classes over explict AGs, btw. | |||
luqui is brainstorming about language-level constructs like that | |||
under the name "data comprehensions" | |||
but i haven't come up with much | |||
and neither has anyone else | |||
audreyt, what's a case class? | |||
audreyt | luqui: so case classes (tagged unions, or what have you) is not yet designed? | 09:17 | |
luqui | oh | ||
audreyt | case class is what Scala calls OO-happy tagged unions | ||
their implementation is wonderful. | |||
nothingmuch | btw, if we do get AGs, please make them be inheritence friendly | ||
cm | in which way? | ||
(wonderful) | |||
audreyt | "classes that have enumerated subclasses that you can case from" | ||
luqui | nothingmuch, of course | ||
nothingmuch | and have support for N-ary children | ||
luqui | nothingmuch, L::AG 0.07 has both of those | ||
audreyt | cm: because the usual OO interospection and machinary are all available | ||
nothingmuch | (@ and % variants) | ||
audreyt | cm: it's just they get an extra constructor form ClassName(...) | 09:18 | |
luqui | albeit the latter is a little awkward | ||
nothingmuch | ooh | ||
i ought to update blondie to it | |||
audreyt | and extra deconstruction form in case | ||
cm | audreyt, what does the case-syntax look like? | ||
luqui | audreyt, yeah, that pretty much sums up my union type proposal | ||
:-) | |||
you can derive from the individual cases | |||
and you can "derive" from the case type as a whole, but it makes it bigger, not smaller | 09:19 | ||
audreyt | cm: scala.epfl.ch/intro/caseclasses.html | 09:20 | |
luqui: look at that link and see if we can get them into Synopses? | |||
luqui: I _really_ want that in p6, as you know :) | |||
cm | *links* | ||
luqui too | 09:21 | ||
don't worry | |||
Larry has already designed half of it | |||
nothingmuch | audreyt: please say "case classes are to AGs what x are to y" | ||
i need to learn scalar, dylan, ruby and python in that order | 09:22 | ||
luqui | audreyt, is the set of cases closed? | ||
cm | doesn't appear so | 09:23 | |
luqui | that's a problem for static typing | ||
nothingmuch | luqui: we have 'is closed' etc | 09:24 | |
static typing where we can get it | |||
not everywhere | |||
audreyt | luqui: yes, in scala they are closed | ||
because you can't construct new classes at runtime | |||
luqui | I've already addressed this in theory.pod. If you don't close the cases, then covariant typing breaks, and you have to do that nasty trick in the expression problem paper | ||
audreyt | nothingmuch: case classes are just haskell "data" types. | ||
luqui: yes and yes. | |||
nothingmuch | audreyt: so what has that got to do with AGs? | 09:25 | |
and why are they cooler? | |||
luqui | AFAICT, they are related, but one is not a substitute for the other | ||
nothingmuch | isn't AGs a control flow paradgim on top of the data types? | ||
audreyt | nothingmuch: AGs are just ways to write "fold" functions over tagged unions | ||
nothingmuch | right | ||
cm | audreyt, and you can't add a new case in a different module? | ||
audreyt | nothingmuch: if you have tagged unions but not AG, it's trivial to add an AG system | ||
nothingmuch | i'll have to see exactly how, without lazy evaluation | ||
luqui | with naming convenience built in | 09:26 | |
nothingmuch | oh | ||
audreyt | cm: I don't think you could | ||
nothingmuch thinks about an AG module that fudges the grammar, and creates a AG meta class | |||
audreyt | nothingmuch: and you can also write your own folds by hand | ||
nothingmuch | audreyt: without lazy evaluation? | 09:27 | |
luqui is thinking about reviving theory.pod from a not-so-haskellish perspective | |||
I think a lot of it is redeemable | |||
just not the strong typing, undecidable stuff | |||
audreyt | nothingmuch: sure, I don't see why not... | ||
s/strong/static/ | |||
will perl6 have weak typing? ;) | |||
nothingmuch | audreyt: well, with the fact that data comes from two "directions" in theory | ||
luqui | and you could also write an attribute grammar module | 09:28 | |
audreyt | aka unsafeCoerce | ||
nothingmuch | i mean you could, but the way you pass params would be ugly | ||
luqui | which was so extremely hard that it took almost three days of work! | ||
:-) | |||
nothingmuch | luqui: i'm just wondering on how well integrated perl 6 will make an ag module feel | ||
luqui | audreyt, sorry, my tongue keeps slipping there | ||
audreyt | nothingmuch: yes, but the ugliness is well understood and can be hidden under eg. luqui's L::AG treatment | ||
nothingmuch | L::AG is not well integrated (syntax or otherwise) - it simply can't be | ||
audreyt: oh | |||
in that sense, err, yeah | |||
=) | |||
luqui | nothingmuch, it's very hard to make AG's integrated | 09:29 | |
nothingmuch | i have to go to univ now | ||
luqui | because of memory issues | ||
you have to be sure that you'll never access an attribute again so you can clean it up | |||
audreyt | in any case... AG-based multipass compiler writing is fun | ||
luqui | if you have ideas, I'd be delighted to hear them, though | ||
audreyt | hopefully punie will move again | ||
luqui | I hear it almost has conditionals | 09:30 | |
nothingmuch | luqui: compile time integration can mean we can use graph reduction | ||
potentially directly | |||
luqui | nothingmuch, you have to be careful how much you assume about compile time knowledge | ||
we're still talking about perl | |||
nothingmuch | right | ||
luqui | I find it easy to forget that | ||
except for when I start writing in perl | |||
audreyt | luqui: excellent, then you just need loops, assignments and all the Structured Programming is yours! | ||
luqui | then I remember why I like dynamic typing | ||
nothingmuch | if i were going to write an AG module i'd make it kinda compile-time-ish | ||
luqui | basically L::AG, but without having to create a string... | 09:31 | |
the hardest part is coming up with syntax... | |||
nothingmuch | i wonder if allison should be spending more time on punie | ||
luqui | that's not already taken | ||
nothingmuch | i think it's more important than some people think | 09:32 | |
luqui | more important to what? | ||
nothingmuch | to getting her tools pushed out the door | ||
luqui | oh yeah, I guess so | ||
nothingmuch | the tools she said she wanted | ||
luqui | I just think it's important to demonstrating that PIR is not a viable compiler-writing language | ||
audreyt | indeed, a working minilanguage is probably the best way to get there | ||
nothingmuch | luqui: i envision compile time AGs as more of a DSL inside perl | ||
that compiles to PIL | 09:33 | ||
audreyt | luqui: heh ;) | ||
nothingmuch | and has embedded perl | ||
luqui: yeah, that too | |||
it sounds like she spends ~2hrs a week on it | |||
luqui | so basically L::AG but at compile time | ||
audreyt | luqui: I think I can parse P6 rules in haskell within today | ||
nothingmuch | luqui: yes | ||
audreyt | luqui: then I'll compile it to Parsek | ||
nothingmuch | luqui: but with the benefit of saying "no, this is not runtime" | ||
luqui | audreyt, make sure you can output to my combinators, too | 09:34 | |
nothingmuch | anyway, i'm off | ||
luqui | nothingmuch, yeah :-) | ||
nothingmuch | ciao | ||
luqui | bye | ||
audreyt | luqui: Parsek's combinators is I think isomorphic to yours | ||
nothingmuch | Parsek? | ||
luqui | what's with the k? | ||
nothingmuch | we need a purl on the channel | ||
cm | Parsec without try | ||
(or rather, parallel parsing, to avoid the need for try) | |||
audreyt | cvs.coverproject.org/marcin/cgi/vie...cvs-markup | ||
cm | (afaik..) | ||
nothingmuch | btw, oh | ||
oh | 09:35 | ||
audreyt | what cm said. | ||
because p6 rules default to try | |||
and PGE doesn't have "commit" yet anyway | |||
nothingmuch | btw, how do p6 rules relate to parrow? | ||
audreyt | so it makes sense to use a try-based thing | ||
luqui | can Parsek do sane error messages? | ||
I find that backtracking parsers have a hard time with that | |||
audreyt | luqui: sure, same as parsec | ||
nothingmuch | is it viable to eval p6 rules using parrow techniques? | ||
audreyt | parsek doesn't backtrack | ||
luqui | er, yeah | 09:36 | |
cm | what's parrow? :-) | ||
nothingmuch | www.cs.helsinki.fi/u/ekarttun/PArro...nator.html | ||
luqui | audreyt, my PGE does | ||
nothingmuch | shit, i should just shutup | ||
audreyt | luqui: I know | ||
nothingmuch | afk | ||
luqui | :-) | ||
audreyt | luqui: it's still possible | ||
and remember, whatever you do, you are better than p5's regex ;) | 09:37 | ||
(which offers no errmsg whatsoever) | |||
except for the position information in //gc | |||
luqui | heh | ||
okay, time to start on OPP | |||
after three hours of saying that i will | 09:38 | ||
audreyt | what is OPP anyway? | ||
luqui | ... | ||
operator-precedence parser? | |||
audreyt | oh ok | ||
yeah, I hope OpTable.hs is of use to you | |||
should be a very straightforward port | |||
luqui | I don't really do straightforward ports though... | ||
Instead I try to understand the problem really well and come up with my own design | 09:39 | ||
audreyt | oh, you'd like to work out the dispatch from shift/reduce rules yourself | ||
luqui | makes for frustrating modularity | ||
audreyt | cool... have fun then :) | ||
luqui | but I'll use OpTable.hs for ideas certainly | ||
audreyt, oh, one thing | 09:40 | ||
instance Eq DynStr where _ == _ = False | |||
instance Ord DynStr where compare _ _ = EQ | |||
those two lines seem to contradict each other | |||
audreyt | lol | ||
fixed. | |||
thanks! | |||
svnbot6 | r8479 | audreyt++ | * Text.Parser.OpTable: a DynStr is "eq" not "ne" to any other DynStr. | 09:41 | |
r8479 | audreyt++ | Spotted by luqui++. | |||
audreyt | dinner, bbl & | ||
Alias_ | It's oh so quiet... | 11:08 | |
nnunley | shhhhh shhhh | 11:10 | |
svnbot6 | r8480 | audreyt++ | * Text.Parser.OpTable: Allow returning of arbitrary data types | 11:11 | |
r8480 | audreyt++ | as parser results instead of fix it on "Match" type. | |||
Alias_ | Ah, she is around | 11:12 | |
svnbot6 | r8481 | audreyt++ | * Text.Parser.PArrow, modified to work on FastPackedString | 11:13 | |
r8481 | audreyt++ | and return location info on error. | |||
Alias_ | audreyt: ok, so I've finished SMS::Send and my person driver for it, going to pick off some more doc stuff in M:I for a bit | ||
audreyt: You aren't doing anything with it atm are you? | |||
s/person/personal/ | |||
asavige | i have a couple of simple haskell questions. anyone want them or should i go to #haskell? | 11:36 | |
gaal | asavige: still need a hand? | 11:53 | |
asavige | hi gaal! isDigit applies to chars but what if you want to that each char in a String is a digit? | 11:54 | |
I tried isSDigit xs = and (map isDigit xs) | |||
seemed to work ok but what is recommended way to do it? | |||
gaal | that looks reasonable to me | 11:56 | |
asavige | k. thanks. i search the haskell libraries and it seems there is not much String libs | 11:57 | |
i guess the haskell way is just to use generic list functions for Strings? | |||
svnbot6 | r8482 | luqui++ | Subrule support. | ||
nnunley | asavige: Could change it to pointless style | ||
asavige | is there a haskell regex library? | ||
nnunley | asavige: ie, you could drop xs completely. | ||
asavige | k | ||
gaal | asavige: yes, there is, haskell.org/ghc/docs/latest/html/li...#t%3ARegex | 11:58 | |
svnbot6 | r8483 | luqui++ | The (* 1%2) (* 3%2) precedence relation was broken. Fixed it. | ||
luqui | I know I already committed that (Subrule support). It's still in my IRC log. | ||
gaal | I don't know how nice these regexes are compared to perl's. | ||
afk & | 11:59 | ||
nnunley | More complicated things should probably done with something like Parsec. | ||
asavige | hmmm looks like they are not using PCRE, they talk of posix regexes :-( | 12:00 | |
integral | hmm, aren't we already embedding PCRE? | ||
luqui | there is a pcre for haskell | ||
integral | see RRegex.PCRE and RRegex | 12:01 | |
svnbot6 | r8484 | luqui++ | "Ratio Int" is dangerous; you can only raise the precedence 31 times. | 12:10 | |
r8484 | luqui++ | Changed to "Ratio Integer". | |||
Alias_ | Any particular reason they roll the R? | ||
nnunley | Alias_: Looks like the first R is for Reusable. | 12:25 | |
Alias_ is reaching his daily limit of Module::Install doc boredom | 12:34 | ||
Juerd | rafl_: pong | 13:08 | |
Alias_ | audreyt: OK, more docs committed, managed to get through the _from series, and finished at no_index | 13:11 | |
Debolaz | Good morning Vietnam. | 13:34 | |
Has anybody in here been able to compile pugs on FreeBSD? I'm getting "ghc-6.4.1: unrecognised flags: -Wl,-R/usr/pkg/lib" errors. While it's obvious to me why it isn't working, it's not quite obvious how to fix it. I'm using ghc 6.4.1 trying to compile pugs 6.2.10. | 13:43 | ||
rafl_ | Juerd: Already at 22c3? | 13:57 | |
Juerd: I'm near the kitchen currently. | 14:03 | ||
Juerd: Oh, you don't know me. I'm sitting next to Timo, which you should know. | 14:04 | ||
lisppaste3 | avar pasted "overloading" at paste.lisp.org/display/15056 | 15:21 | |
avar | operator overloading of doom! | 15:22 | |
svnbot6 | r8485 | audreyt++ | * Tweaks to OpTable.hs and PArrow to support proper choice | 15:26 | |
r8485 | audreyt++ | combinator and empty strings. | |||
audreyt dances a little victory dance | 15:29 | ||
svnbot6: ?check | |||
svnbot6 | r8486 | audreyt++ | * Ladies and gentlemen, I present you... Text.Parser.Rule! | ||
r8486 | audreyt++ | Fast, pure Haskell Perl6 Rules implementation, based on PArrows. | |||
r8486 | audreyt++ | Currently only handles quantification, alternation and concat, | |||
r8486 | audreyt++ | but it's just a 20mins hack -- much more support planned soon. | |||
clkao | yikes | ||
gaal | 3wow. | 15:30 | |
audreyt | and it's easy to hack as well :) | ||
avar | what was that thing that was changed in p6 so that if look mommy, no paranthesis { ... wouldn't be ambiguous? | ||
audreyt | in 33 lines of code :D | ||
avar: this is made illegal | 15:31 | ||
$ENV {PATH} | |||
now you have to write | |||
%ENV .{PATH} | 15:32 | ||
to get whitespace | |||
that's it | |||
I doubt many people use that form in perl5 anyway. | |||
Odin-LAP | Have you ever seen it? | ||
audreyt | nope | ||
avar | %ENV<PATH> or %ENV{"PATH"} though? | ||
audreyt | sure | ||
both works | 15:33 | ||
avar | since PATH would be a bareword | ||
audreyt | yeah | ||
and <PATH> is so that it looks more distinct than the now-always-a-closure {} | |||
so... I wonder if we should ship a 6.28.0 _without_ requiring PGE :) | |||
I don't see why not. | 15:34 | ||
Odin-LAP | Might be neat. | ||
audreyt | and that will finally allow callbacks from rules to code | ||
hm, PGE doesn't handle listfix and chainfix. | 15:35 | ||
we need that to support fast alternation (a|b|c|d) | |||
audreyt goes adding it to OpTable | 15:36 | ||
and the neat thing is PArrow provides common head optimization for free | |||
gaal | I just noticed that a smoke I'd left running has plenty of memory problems at runtime | ||
pugs: internal error: evacuate: strange closure type 11432 | |||
etc. | |||
Odin-LAP | Riddle me this, though. Once you get rules support in pugs, wouldn't it be possible to write the Perl6 implementation of Perl6? | ||
audreyt | (add|ant) becomes (a(dd|nt)) | ||
Odin-LAP: yes. | |||
and once luqui finishes his Rules port in Perl6, that bootstrap can parse itself with itself. | 15:37 | ||
and there will be much joy, etc. | |||
avar | \o/ | ||
Odin-LAP | But that's a couple of decades away, by any reasonable estimate? >:p | ||
audreyt | if your year is my month, then sure :) | ||
Odin-LAP | I'm just sayin'... | 15:38 | |
gaal | I hate it when this happens: | 15:43 | |
gaal> ghc errors | |||
* time passes | |||
BSOD | |||
nnunley | Mmm. Windows heap corruption. | 15:44 | |
gaal | last time I had to have my CPU replaced :/ | ||
GHC is my canary | |||
that was just a few months ago, and I don't overclock. wtf? | 15:46 | ||
nnunley | Did you check your system memory? | ||
gaal | I'm sure the shop did when they replaced the CPU... | ||
say, what's involved in emitting yaml via syck? | 15:50 | ||
audreyt | gaal: see YAML::Syck | ||
avar | a ha! | 15:52 | |
gaal | audreyt: is it on svn somewhere too? | ||
audreyt | there's a syck_emit_* sequence -- also see ext/ directory in syck's source tree -- the latest svn has Lua examples; also Ruby ones is worth taking a look at | 15:53 | |
svn.kwiki.org/audreyt/YAML-Syck/ | |||
also, code.whytheluckystiff.net/svn/syck/ | |||
gaal | cheers | 15:54 | |
audreyt | in particular, code.whytheluckystiff.net/svn/syck/...README.EXT | ||
if you'd like to learn Haskell FFI, coding up emitter support for Data.Yaml.Syck might be just the ticket :) | 15:55 | ||
ingy | audreyt: how is Y::S coming? | ||
audreyt | ingy: I ported Perl6 Rules to Haskell | ||
so nothing on Y::S front yet | |||
someone sent me a patch, I released it as 0.03 | |||
so it can build in a perl built with debug flag on | 15:56 | ||
gaal | audreyt: and just what I had in mind, seeing as all that variable stuff is giving me the brain-jello-syndrome. | ||
audreyt | gaal: cool! | ||
it should be pretty straightforward. | |||
ingy | okie, I'll keep my eyes on it. maybe we can get a pair of YAML releases by the end of the year | ||
audreyt | since you already have the parser part as demos | ||
gaal | audreyt: in your p5 module, it's the c Dump() I should be looking at? | 15:57 | |
audreyt | aye | ||
and for the first pass, you can ignore the mark_ part | |||
just assume nonrecursion | |||
consult haskell.org/ghc/docs/latest/html/us...sc2hs.html for enlightenment | 15:58 | ||
ingy: sounds good | |||
Odin-LAP points out that the "end of the year" is a handful of days off... | 16:00 | ||
audreyt | ingy works in nanosecond units anyway | ||
gaal | good thing ghc is pico-ready | 16:01 | |
audreyt | :) | ||
ingy | audreyt: read this and thought of you ;) www.paulgraham.com/paulgraham/procr...ation.html | 16:02 | |
Juerd | rafl_: I'm at 22c3, yes, but only very ^H^H^H^H^H^H^Hrafl: Im | ||
gaal is stunned by how short Pugs.Prim.Yaml is | 16:03 | ||
rafl_ | Juerd: I'm in room 2 now. | ||
Juerd: And there's a free place to my right. ;-) | |||
Juerd | rafl_: I have approx 1 minute per bootup | 16:05 | |
rafl_: So not online much. Will come to s2 | |||
audreyt | gaal: why should it be any longer? this is not XS you know... :) | ||
Juerd | Where in s2 are you? | ||
rafl_ | Juerd: Quite on the left side in the back. | 16:06 | |
Juerd | rafl_: ok; leaving s1 now. | ||
rafl_ | Juerd: Two empty chairs right to me. | ||
gaal | audreyt: :-) | ||
wheee TDD in syck's c code :-) | 16:08 | ||
audreyt | :D | 16:09 | |
allow me to quote Why in syck/ext/ruby/ext/syck/rubyext.c | 16:10 | ||
* Emitter callback: assembles YAML document events from | |||
* Ruby symbols. This is a brilliant way to do it. | |||
* No one could possibly object. | |||
end of quote. | |||
it's very... poignant. | 16:11 | ||
gaal | suitable adjective for Why | 16:12 | |
but... how's it brilliant? isn't that exactly what it's there for? | |||
audreyt | luqui: hi. interested in hacking Text.Parser.Rule? :) | ||
luqui | uh, not terribly much so. I'd like to get the Perl6 version nice and pretty | 16:13 | |
audreyt | that's going to be more important in the long run anyway :) | ||
svnbot6 | r8487 | luqui++ | Capture with no capture targets no longer dies, but introduces | ||
r8487 | luqui++ | a new scope and discards the match object. | |||
audreyt | but just thought you might be interested in taking a look | ||
luqui | I'll have a look at least | ||
audreyt | I'm very happy with how it's done :) | ||
33 lines, with 2 more lines for each new construct | |||
luqui | nice | 16:14 | |
Juerd | re :) | ||
svnbot6 | r8488 | luqui++ | Implemented "numerator" and "denominator" for Rats. | ||
r8489 | luqui++ | Hacked in some dumb support for "our class". | |||
r8490 | luqui++ | Switched over to using "our class" in PGE. That would have felt good on the fingers. | |||
r8490 | luqui++ | Still craving some kind of proper lexical exportation of class names. | |||
Juerd | rafl_: Is this the NX bit talk? | 16:15 | |
luqui | audreyt, does it use list monad? | ||
or no... what does it use? | |||
audreyt | it justs PArrows | ||
gaal | what's this "bonus" stuff in Syck? | ||
luqui | ahh... arrows | ||
those things that I still don't grok | 16:16 | ||
... at all | |||
audreyt | I think I grok now | ||
it's really extremely simple | |||
a >>> b -- do a, then do b | |||
a >>^ b -- do a, then lift pure function b and do it to the result | |||
a *** b -- do a and b in parallel | |||
luqui | a >>> b <=> a >> b ; a >>^ b <=> fmap b a ? | 16:17 | |
audreyt | yup | ||
luqui | is there a >>= ? | ||
I heard that all monads were arrows... | 16:18 | ||
audreyt | yup | ||
so no | |||
a &&& b -- do a and b in parallel with the same input (*** would split the input in two) | |||
luqui | oh.. right. I'm thinking backwards | ||
integral | the monad itself isn't the arrow though | ||
audreyt | yeah, you need to apply Kleisli to it | ||
anyway... PArrows has a quite similar interface to Parsec | 16:19 | ||
and unlike Parsec, I tweaked it to work on FastPackedStrings easily | |||
luqui | hmm... what does "split the input in two" mean? | ||
audreyt | it means that the input source has to provide a pair as input | 16:20 | |
luqui | ahh | ||
audreyt | and then each side of *** processes one | ||
and then it's recombined | |||
(***) :: a b c -> a b' c' -> a (b, b') (c, c') | |||
luqui | pair meaning tuple? | ||
yep | 16:21 | ||
audreyt | yeah | ||
note that a function is an arrow, so that type can read | |||
(***) :: (b -> c) -> (b' -> c') -> ((b, b') -> (c, c')) | |||
which is straightforward as of what it does. | |||
luqui | yeah, that part I did actually get when I first read about the | ||
m | |||
audreyt | and &&& is even easier | ||
(&&&) :: a b c -> a b c' -> a b (c, c') | |||
luqui | why isn't that nice haskell syntax supported at the type level? | ||
(***) :: b `a` c -> b' `a` c' -> (b,b') `a` (c,c') | 16:22 | ||
audreyt | yup | ||
Juerd | audreyt: Three character operators? Are they as desperately looking for free glyphs as we are? :) | ||
audreyt | so *** implements alternation | ||
Juerd: yup :) | |||
luqui | what is the input to a parser? | ||
audreyt | and they don't even have unicode. | ||
Juerd | Neither do we | ||
luqui | Juerd, ? | ||
audreyt | luqui: a list of anything | ||
luqui | oh | ||
Juerd is still in denial | |||
luqui | but PArrow is a library :-) | 16:23 | |
audreyt | luqui: which I had hacked to be FastPackedString, pretending it's a [Char] | ||
luqui | *** is alternation? Wouldn't that be &&& ? | ||
oh, and on a related topic, Juerd, how do you pronounce your name? | 16:24 | ||
audreyt | &&& is simultaneous parse on the same position | ||
hm, actually no | 16:25 | ||
luqui | sounds the same as <|> to me... | ||
audreyt | &&& in PArrow is "followed by" | ||
many1 x = (x &&& MStar x) >>> pure (\(b,bs) -> (b:bs)) | |||
so, parse "x" first, then parse "x*", get each's result as (b,bs) | |||
then cons them | |||
I think it makes perfect sense | |||
luqui | hmm... okay, that makes sense | 16:26 | |
how can *** afford to take two different input types? | |||
audreyt | between open close real = open >>> (real &&& close) >>^ fst | ||
again, very cute | 16:27 | ||
oh, you can't use *** as a normal combinator | |||
it's only used internally | |||
Juerd | luqui: Much like as if it were German | ||
luqui | what's alternation then? | ||
luqui isn't familiar with German's phonology wrt the "J" | 16:28 | ||
audreyt | alternation is implemented as a node | ||
MChoice :: [MD i o] -> MD i o | |||
see pugs/src/Text/Parser/PArrow/MD.hs | |||
(and yes, it depends on GADT to function well) | |||
luqui | how uncool | 16:29 | |
you mean the arrow formalism doesn't map 1-1 onto the parser combinator formalism? | |||
what good is it then? | |||
:-) | |||
Juerd | luqui: Like english y. | ||
audreyt | luqui: er, that's why Arrow is a class | 16:30 | |
it's impossible to write parsers using >>= and >> alone, you know :) | |||
s/>>/return/ | |||
luqui | what's return= ? ;-) | ||
okay, enough silliness | 16:31 | ||
audreyt | arr | ||
luqui | do you mean "pure"? | ||
audreyt | synonym | ||
luqui knows... | |||
luqui will have to play with arrows sometime | |||
Juerd knows nothing about assembler and hardly understands German, and is listening to a German talk about assembly... | 16:32 | ||
My luck :) | |||
luqui | Juerd, are you at a conference? | ||
Juerd | luqui: Yep | ||
rafl_ | Juerd: Timo told me you obligated yourself to hack on sixpan? | ||
Juerd | rafl_: Oh? | ||
luqui | there's a conference going on? | ||
which? | |||
rafl_ | Juerd: He told me. | ||
Juerd | rafl_: He knows more than I do then :) | ||
rafl_: He asked me if I had anything to do with sixpan, and through feather, yes I did :) | 16:33 | ||
luqui: 22C3, in Berlin | |||
rafl_ | Juerd: Does feather have anything to do with sixpan (yet?)? | ||
Juerd | rafl_: Just hosting. | ||
; | 16:34 | ||
s/;// | |||
luqui | cool. /me likes cryptography | ||
.. at least | |||
Juerd | luqui: Why aren't you at CCC then? | ||
luqui | <luqui> there's a conference going on? | ||
(not to mention, I don't really have the $$ to fly to berlin) | |||
(and I'm not gonna drive) | 16:35 | ||
Juerd | I'm here, without flying. So why couldn't you? :) | ||
Oh. I didn't mind driving | |||
Though it was very tiresome | |||
luqui | yeah. might be a bit wet for me, too. | ||
Juerd | luqui: Woher kommst du? :) | ||
Someone wants to know :) | 16:36 | ||
luqui | Colorado | ||
Juerd | That's not quite drivable anyway... | ||
luqui | thus a bit wet... | ||
Juerd | Yea | ||
luqui | German is the most Englishish foreign language I've heard | ||
Alias_ | Which would make sense, since English started as a dialect of German | 16:37 | |
luqui | heh yeah... that happens | ||
Alias_ | Then had a bunch of other people's words dumped on it | ||
Juerd | It's frozen-wet outside here. Quite white. | ||
luqui | like Perl as a dialect of C | ||
Alias_ | Then had an ever larger bunch of French words dumped on it | ||
Juerd | And the DHCP for wifi sucks. | ||
I think there may be extra access points out there. Fake ones, perhaps. | 16:38 | ||
Alias_ | Perl is English, the second language of the computer world | ||
luqui | it's like 65 degrees outside here. Amazing weather for the middle of december. | ||
Juerd | luqui: English is Germanic, German isn't Englishish | ||
rafl_ | Juerd: It's even harder for me as I smoke.. :-( | ||
Alias_ | Juerd: Thank god | ||
luqui | But Englishish is a way cooler word than Germanic | ||
Juerd | luqui: But Deutsch-achtig beats Englishish. | 16:39 | |
luqui | point | ||
Juerd | luqui: 65 Fahrenheit, I hope for you. | ||
luqui | heh yeah | ||
we don't go by reasonable scales | |||
Juerd | I have no idea how cold Berlin is on any scale, but it's COLD. | 16:40 | |
luqui | as cold as canada was at yapc? | 16:41 | |
Juerd | I have no idea. | ||
Wasn't there | |||
luqui | well, it was beautiful there | ||
if there's one month I would live in canada, it would be july | |||
Juerd will go to Saal 3 after this hourslot; There's a talk titled "Writing better code". | |||
I wonder what the angle is. | 16:42 | ||
And I hope my DECT is safe in Saal 1, where it's charging :) | |||
rafl_ | Juerd: The full title is "Writing better code (in Dylan)". WTF is Dylan? | ||
Juerd | rafl_: What or who? :) | ||
luqui | rafl_, Dylan is a language | ||
Juerd | luqui: Worth an hour? | 16:43 | |
luqui | it's a hybrid language like Perl | ||
Juerd | Sounds good enough | ||
luqui | but it uses the opposite concepts | ||
Juerd | Opposite? | ||
One way to do it, no modularity, strict OO? | |||
audreyt | Dylan is a wonderful "dynamic when needed, static when possible" language | ||
Juerd | Hmm | ||
rafl_ | "combines the best aspects of smalltalk and lisp" Urgh.. | ||
luqui | apparently it's cool | ||
audreyt | starts as fully dynamic like smalltalk, but as you add type annotations, it can eventually produce very efficient code. | ||
luqui | I was put off by it's linguistic unappeal | ||
audreyt | sounds familiar? :) | ||
Alias_ | Is there a DPAN? :) | 16:44 | |
Juerd | Alias_: Sounds almost like a C++PAN | ||
audreyt | sadly no, but they reliably win 2nd place at ICFP contests | ||
Juerd | Alias_: And what's Dentral? :) | ||
luqui | the Dylprehensive Pointy Archive Network? | ||
Alias_ | Juerd: Good Question! | ||
Juerd | Alias_: Thought so :) | 16:45 | |
Alias_ | Do you know the answer? | ||
Juerd | No | 16:47 | |
rafl_: I want an 8 cell battery too. | |||
And something that finds out what's in the air here that slurps my battery empty. | |||
rafl_ | Juerd: Buy one? | ||
Juerd | Less than an hour it lasts :( | ||
rafl_ | Juerd: And no: I wont sell mine. | 16:48 | |
Juerd | rafl_: Had ordered one, but it'd be delivered to Sven's two days after the event, so I cancelled it. | ||
Hehe | |||
rafl_ | Juerd: jacks are everywhere.. | 16:49 | |
Juerd | Oh, really? Not in this saal | ||
rafl_ | Juerd: They were just behind us. | 17:06 | |
audreyt | journal up... sleep :) | 17:14 | |
*wave* & | |||
generalhan | whats going on everyone ? | 17:28 | |
Alias_ | world domination... slowly | ||
generalhan | ... but surely ! | ||
give it some time ! lol | |||
Odin-LAP | World domination has already been achieved. The controllers are just very, very careful not to let you see it. | 17:29 | |
Alias_ | _my_ world domination | ||
generalhan | haha | ||
anyone in here really good with Perl scripts ? i have a pretty newbish question | 17:30 | ||
Odin-LAP | Alias_: Good luck with that. Last time I tried, they had assassins all over the place. Had to be on the run for a number of years. | ||
Alias_ | yes, and you have one minute before we send you to #perl | ||
generalhan | lol | ||
k | |||
i need to "find" any file in a directory that starts with an alpha char. can i do that ? | |||
Alias_ | search.cpan.org/perldoc?File::Find::Rule | 17:31 | |
NEXT! | |||
generalhan | sweet thanks ! | ||
integral | man 1 find # uses less RAM and CPU | ||
Alias_ | and it forks | ||
which does use ram and CPU | 17:32 | ||
svnbot6 | r8491 | audreyt++ | * Support for "./pugs -B JS-Perl5 -e ...". | 17:42 | |
Alias_ | audreyt: Sleep my ass | ||
Juerd | rafl_: Oh, heh. | 17:44 | |
BTW, how do you think this was meant: "That's not standard Dylan, but something that works." | |||
petdance | generalhan: See also File::Find::Wanted. | 17:45 | |
Juerd | The examples used in this talk are quite contrived :| | 17:46 | |
rafl_ | Juerd: Where are you? | 17:49 | |
Juerd | Sitting onthe ground, close by the door that is closest to the screen. | ||
rafl_ | Juerd: I think dylan doesn't have an interface for calling c stuff defined. | ||
Juerd: But the compiler that he's talking about can do it in its own way. | 17:50 | ||
Juerd | It has "for" (foreach) implemented as a macro. Heavy desugaring. | ||
rafl_ | Juerd: Why? There are lots of free chairs. | ||
Indeed. | |||
Juerd | rafl_: No specific reason. | ||
rafl_: I just entered this room a few minutes ago. | |||
rafl_: When I left room 2, I almost fainted, so I decided to eat and drink first. | |||
There's not enough oxygen in the talk rooms | 17:51 | ||
(unrelated) | |||
rafl_ | Juerd: There's not enough caffeine inside you. | ||
Juerd: You missed something. Dylan is pretty cool. | 17:52 | ||
Juerd | I've already got a headache because of the low oxygen (open a window, !@#@#%!), cafeine would make it worse. | ||
rafl_: I see | |||
Now there's a complex description of the old "Abort, Retry, Ignore?" | 17:53 | ||
rafl_ | Juerd: Over here there's fresh air. It's even windy a bit. | ||
Juerd | Where's "here"? | ||
rafl_ | Juerd: Near the camera. | ||
Juerd | Hi | 17:54 | |
Dylan has lots of parens :( | 17:57 | ||
Bracketing operators suck when overused | |||
rafl_ | Well, much less than usual lisp languages.. | ||
Juerd | Sure, but that's natural :) | ||
Only a paren based brainfuckish language could ever have more parens than the usual lisp-alike | 17:58 | ||
:P | |||
rafl_ | :-) | ||
sili | hooray lisp | ||
Juerd | afk # saal1 | 17:59 | |
rafl_ | Juerd: ping | 19:19 | |
Juerd: In mood for some pugs hacking? I'm in the hack centre and want to hack on XML-SAX.. | 19:21 | ||
kane-xs: ping | 19:26 | ||
Juerd: Or maybe SmokeServ v2? | 19:27 | ||
Alias_ | Might want to wait a bit on the smoke stuff | 19:34 | |
I have a basic version of the PITA::Report XML stuff almost done | |||
Once it's rolling you'd have something new to target :) | |||
s/new/new and interesting/ | 19:35 | ||
rafl_ | Alias_: What's PITA::Report? | 19:36 | |
Alias_ | Where's purl when you need her... | 19:37 | |
Go read ali.as/pita/ | |||
After talking to audreyt, it's going to be Perl 6 compatible too | |||
rafl_ | What's the perl 6 way of doing require "/path/to/Foo.pm"? | 20:00 | |
nothingmuch | audreyt++ | 20:18 | |
luqui++ | |||
svnbot6 | r8492 | iblech++ | * Usual svn props. | 20:40 | |
r8492 | iblech++ | * Parse-Rule: Architecture.pod: Typo fix. | |||
gaal | rafl_: I should think temping @INC and requiring Foo. | 20:54 | |
you also have evalfile, if you don't need load-once. | |||
rafl_ | gaal: Well, I want to load parser modules at runtime. | 21:03 | |
nothingmuch | out of curiousity - why was the pugs blog moved? | 21:09 | |
gaal | rafl_: parser modules? | 21:26 | |
dduncan | not sure exactly ... | ||
but I would guess that the new host offers a better experience | 21:27 | ||
rafl_ | gaal: Something needs a parser and those are implemented in modules. I want to load such modules on demand. | 21:29 | |
gaal | how is this distinct from wanting a random other module of functionality? | 21:30 | |
I'm off to bed. later & | 21:31 | ||
svnbot6 | r8493 | Darren_Duncan++ | r1666@Darren-Duncans-Computer: darrenduncan | 2005-12-27 15:39:54 -0800 | 23:44 | |
r8493 | Darren_Duncan++ | /ext/Rosetta-Incubator : in KeyedText.pm, changed all non-BUILD submethods to methods; in multiple files, removed any 'submethod' refs in documentation, changed any 'hash()' to '{}' in code |