»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg p6eval perl6: ... | irclog: irc.perl6.org/ | UTF-8 is our friend!
Set by sorear on 4 February 2011.
00:01 popl joined 00:03 lawrmcfa left 00:23 dayangkun joined 00:30 fgomez joined 00:38 thou left 00:44 hash_table left 00:53 hash_table joined 01:06 hypolin joined 01:11 anuby joined 01:16 dayangkun left
[Coke] lessee, no test. 01:22
01:47 hash_table left 01:50 raiph left, hash_table joined 01:58 MikeFair left
[Coke] phenny: tell supernovus I tried to write a test that this passed and rakudo failed, and failed. Can you add a test to the ticket or to roast? 02:01
phenny [Coke]: I'll pass that on when supernovus is around.
02:04 MikeFair joined 02:16 cognominal left 02:19 tokuhiro_ left
dalek ast: a7ab785 | coke++ | S02-types/nan.t:
Add a test for rakudo RT #103500
02:23
[Coke] phenny: ask pmichaud if we can close rt.perl.org/rt3/Ticket/Display.html?id=68854 02:27
phenny [Coke]: I'll pass that on when pmichaud is around.
02:36 fgomez left 02:37 leprevost joined 02:38 orafu left 02:39 orafu joined 02:40 lawrmcfa joined
[Coke] std: my @a = 1, 2, 3, given 42; say @a 02:51
p6eval std 77327a4: OUTPUT«ok 00:00 44m␤»
masak rn: say given 42 02:52
p6eval niecza v22-7-g7df6137: OUTPUT«===SORRY!===␤␤Unsupported use of bare 'say'; in Perl 6 please use .say if you meant $_, or use an explicit invocant or argument at /tmp/jSlezIXNSc line 1:␤------> say⏏ given 42␤␤Unhandled exception: Check failed␤␤ at /h…
..rakudo f0aced: OUTPUT«␤»
masak rn: say 1, 2, 3, given 42
p6eval niecza v22-7-g7df6137: OUTPUT«123␤»
..rakudo f0aced: OUTPUT«===SORRY!===␤CHECK FAILED:␤Undefined routine '&given' called (line 1)␤»
masak heh. 02:53
diferent parsers indeed.
sorear r: say 02:55
p6eval rakudo f0aced: OUTPUT«␤»
sorear r: print 02:56
p6eval rakudo f0aced: ( no output )
sorear nr: my $niecza = !try eval 'print'; say $niecza
p6eval rakudo f0aced: OUTPUT«False␤»
..niecza v22-7-g7df6137: OUTPUT«True␤»
[Coke] nqp: True.HOW.say 02:57
p6eval nqp: OUTPUT«Method 'say' not found for invocant of class 'NQPClassHOW'␤current instr.: '' pc 92 ((file unknown):165529781) (/tmp/XyNZxhccTb:1)␤»
sorear p: my $niecza = !try eval 'print'; say $niecza
p6eval pugs: OUTPUT«*** Cannot cast from VBool True to VCode (VCode)␤ at /tmp/NH_AY3vMLR line 1, column 9-31␤»
02:57 fgomez joined
TimToady p: try 42 02:57
sorear p: print
p6eval pugs: OUTPUT«*** Cannot cast from VInt 42 to VCode (VCode)␤ at /tmp/EMn54408k8 line 1, column 1 - line 2, column 1␤»
pugs: ( no output )
TimToady pugs doesn't have statement form of try
02:58 skids left
[Coke] r: True.HOW.say 02:58
p6eval rakudo f0aced: OUTPUT«Null PMC access in get_bool()␤ in attributes at src/stage2/gen/nqp-mo.pm:1151␤ in method perl at src/gen/CORE.setting:791␤ in method gist at src/gen/CORE.setting:786␤ in sub say at src/gen/CORE.setting:7250␤ in method say at src/gen/CORE.setting:781␤ in block…
[Coke] n: True.HOW.say
p6eval niecza v22-7-g7df6137: OUTPUT«ClassHOW.new(...)␤»
[Coke] RT-- 02:59
RT: 640 open tickets, 80 blocking on tests. 03:03
03:08 raiph joined
raiph hi all 03:08
sorear yo 03:11
TimToady yo² 03:12
raiph what about: parse the irclog. pull out lines beginning nr:, std: etc., plus maybe bits inside {} on a line, parse it using a Perl 6 syntax parser, and link bits to doc.perl6.org/whatever? 03:13
(or have the eval bots annotate the irc log file, but that seems wrongish to me) 03:14
diakopter irc is logged in a database 03:17
raiph diakopter: right. a Perl 5 script constructs a day's worth view, and search results, and annotates it a bit, linking things like S01. I see all these evals, and responses, and think 03:19
.oO( Wouldn't it be cool if I could click on that keyword? Wonder what more there is to say about this error? )
03:20
Invite beginners to learn on channel. The channel log becomes an anarchist tutorial farm. That might suck after a while, but would be a great problem to have. 03:21
Especially in combination with doing daily log summaries (as is now happening, with relative ease). 03:24
03:25 lawrmcfa left 03:33 fridim_ joined
raiph Hmm. It could be you have to view the relatively lightweight (10% of full?) summary page to see those links. 03:42
(Lightweight also reflects my guess that few folk currently use the summary view, so server load is light.) 03:46
04:11 thou joined 04:22 leprevost left 04:23 fridim_ left 04:26 telex left 04:31 kaleem joined 04:35 cognominal joined 04:39 telex joined 04:49 cognominal left 05:04 kevouze joined 05:07 lawrmcfa joined 05:10 raiph left
kevouze Hi. Anyone keen to help out for a survey about newcomer experience in the Perl community? 05:11
blogs.perl.org/users/kevin_carillo/...urvey.html
It would interesting be able compare Perl6 practices with other perl projects. You just need to have joined Perl within the last 2 years. 05:12
05:20 birdwindupbird joined
moritz I'm afraid I can't serve with that trait 05:20
kevouze no problem, thanks.for considering to help out. 05:23
05:24 GlitchMr joined
sorear kevouze: I joined p6 in feb 10, not good enough? 05:25
kevouze yes, all good! 05:27
05:30 popl left 05:37 SamuraiJack joined 05:59 simcop2387 left 06:01 simcop2387 joined 06:10 wamba joined 06:12 hash_table left 06:15 wamba left
dalek kudo/nom: 584f19e | jnthn++ | src/Perl6/Actions.pm:
Optimize double-quoted string literals in regexes.

Those can just emit a literal node, not go through !LITERAL.
06:35
06:36 wamba joined
jnthn phenny: tell colomon 584f19e may help a little too; feel free to mail me an updated profile if you want me to dig some more 06:40
phenny jnthn: I'll pass that on when colomon is around.
jnthn commutes
06:43 kurahaupo left 06:48 aharoni joined 07:02 brrt joined 07:07 mucker joined 07:10 xinming joined, GlitchMr left 07:13 xinming_ left 07:18 kevouze left, flightrecorder joined 07:23 FROGGS joined 07:30 orafu left 07:36 hoelzro|away is now known as hoelzro 07:41 wamba left
Woodi morning everyone :) 07:56
brrt \o woodi 07:57
07:57 mucker left, mucker joined 07:58 integral left
sorear o/ 07:58
08:00 Su-Shee_ joined, Su-Shee left 08:01 Su-Shee_ is now known as Su-Shee, integral joined, integral left, integral joined
Woodi I got some futuristic probably idea :) : there is libpcre (in C) but maybe/probably one day someone will want libpgram[mar] in C... this cycle can be avoided - a) having faster grammar engine as lib in C can be performance improvement and b) it can bring World closer to Perl6 :) 08:01
brrt in short, you want to port p6 grammar to c? 08:02
more power to you
08:02 fhelmberger joined
brrt its quite another thing to say rakudo will use it, rather than their current version 08:02
but sure
Woodi brrt: I want have it :)
sorear Woodi: I can't tell whether you're arguing for or against p6grammars in C 08:03
Woodi sorear: of course I want p6 grammar engine in C in lib form usable in other projects...
brrt i personally think it is not a /really/ bad idea 08:04
sorear I agree
sleep&
brrt well, you can also help fix parrot, then other languages can run on parrot and use the grammar engine too
bye soreer
sorear
Woodi but someone can tell me how to call C macros from NativeCall ? and how "struct timeval *timeout" should be called on v6 side ? 08:06
brrt c macros can't be 'called' as such 08:07
they are translated by the compiler into textual c source code
they do not exist at runtime
Woodi brrt: ok for details :) but lots of libraries use macros, how to use it ? 08:08
08:09 odoacre joined
brrt Woodi: basically, I imagine you have some struct 08:09
and then your library has LIBFOO_QUIX(x) defined
which gets some values from the struct, right
? 08:10
Woodi do not know exactly :)
08:12 wamba joined 08:13 mucker left 08:14 mucker joined
Woodi makro is simple: #define VERSION3 3 :) but I must pack it into const void *invalue.... 08:18
brrt if it is stored anywhere in an exported symbol, you should be able to access it, i do not know if NativeCall exposes that functionality however 08:19
otherwise, you might get away with reading the header files
i'd even say, if you could make a header-file-reader to work together with NativeCall, that would be usefull 08:20
Woodi I read it myself and trying to complet single v6 view :)
and how char *attrs[] should be named in NativeCall language ? 08:21
brrt i do not know that :-) i'm sorry 08:22
i'm pretty sure its possible though
Woodi no problem :) i hear there are still problems with some parts of "translation" :) 08:25
brrt has used parrot nci, rather than NativeCall 08:26
NativeCall is considerably more powerful, though
Woodi I wonder how it works... if it do not tucg gcc or something then what to do with macros ? write some intermediate code maybe ? 08:28
*touch...
FROGGS Woodi: you could write C-functions that return a numeric #define 08:29
Woodi: you really just can "use" macros from within C 08:30
jnthn Aye, macros have no corespondence in the compiled library 08:31
FROGGS think of: #define MAX(a, b) (a > b ? a : b)
jnthn So they "don't exist" by the time NativeCall gets it, and there's no symbol to look up and so on.
FROGGS if you use MAX() somewhere in your C code, it will be replaced by the (a > b ? ...)
jnthn So, like enums, they need manual translation 08:32
FROGGS it is really just text replacement in C files, it vanishes when it becomes a lib
08:32 mucker left
jnthn aye 08:32
Woodi FROGGS: I do not ask how C work :)
FROGGS thats the point where Inline C might come handy ;o)
Woodi: but you need to know, obviously 08:33
Woodi but is not enough...
I need NativeCall *notation* for things... 08:34
jnthn r: macro MAX($a, $b) { quasi { {{{$a}}} > {{{$b}}} ?? {{{$a}}} !! {{{$b}}} } }; say MAX(1, 2)
p6eval rakudo 584f19: OUTPUT«2␤»
Woodi I must add I am lazy (or not) here and trying to avoid rewriting all macros in I can found .h files... 08:36
08:36 Su-Shee left
FROGGS Woodi: thats the point where a C-wrapper might come handy, so you just can return the result from C-macro 08:37
jnthn Woodi: Write something that translates header file macros etc into Perl 6 then :P
FROGGS this wrapper function will then be a symbol you can call using NativeCall
jnthn++
Woodi: I give you 50$ for a working code ;o)
and another 20 bucks for parsing enums right 08:38
Woodi I thinked about automatic and massive .h translation too :)
brrt woodi: now you have a reason, get at it :-) 08:39
FROGGS well, it might work for some piece of code, but dont expect to get it to work for every header file there is
jnthn I believe the Parrot folks wrote a fairly advanced C grammar, fwiw.
That could be quite stealable.
So you don't have to grammar from scratch
08:40 dakkar joined
Woodi still there is problem how things should be named on NativeCall side. eg. how translation of "char *attrs[]" should look like ? OpaquePointer or OpaquePointer CArray ? and "struct somestruct **sctrls" ? 08:43
FROGGS CArray[OpaquePointer] ?
jnthn char *attrs[] could be guessed as CArray[Str]
FROGGS ohh, you are right
Woodi :)
FROGGS had no coffee so far
jnthn is at the client with the awesome coffee machine today and is probably drinking enough of it for half the channel... 08:44
Woodi jnthn: what is name of that machine ? :) 08:45
jnthn Hm, not sure... :)
I'll ask it when I go for the next cup
brrt jnthn: isnt that CArray[CStr] or something 08:49
because you don't really have Str objects
jnthn brrt: It knows what to do with Str 08:50
brrt oh, thats nice
arnsholt Woodi: Well, that's a problem with C in general, really 08:56
char * can be either a string (zero terminated), or a byte array (with arbitrary bytes) 08:57
You'll just have to make an arbitrary choice and let the end user figure it out 08:58
09:02 wamba left, wamba joined
jnthn Yeah, any header to NativeCall code tool will have to be "best guess" 09:02
Maybe it should have a mode where it adds comments saying "I guessed here, review" or something. :)
arnsholt Yeah, was just thinking the same thing =) 09:03
Woodi actually I want just a bindings to library to have db connectivity... but wonder how would look C done on top of Perl6 ? :) C grammar can be googled, was probably done by few projects... 09:06
maybe pointless but maybe unknown unknown is hiding ? :) 09:08
09:09 leont joined
brrt having a c header reader is really useful 09:16
Woodi ok, I have situation like this: function is "int cfunc(*val)" and I must send int so in C I use &intvalue. how '&' looks in NativeCall ? :) 09:21
I try sending Int but it is too smart with checks :) 09:22
09:23 daxim joined
jnthn Woodi: Best way at the moment is to do CArray[int] and pass it a 1-elem array 09:23
Woodi ook :) 09:24
09:33 cognominal joined 09:45 kaleem left
lumi__ r: macro MAX($a, $b) { quasi { my $a := {{{$a}}}; my $b := {{{$b}}}; $a > $b ?? $a !! $b } }; say MAX(1, 2); 09:48
p6eval rakudo 584f19: OUTPUT«2␤»
lumi__ Is that right? The binding thing? 09:49
jnthn yes 09:50
lumi__ (Also, yay, macros!)
jnthn I was just translating teh C macro literally :)
masak++ is to thank for those :) 09:51
lumi__ jnthn: Oh, OK, there's no way to do it right in C...
jnthn Still some work to go on them yet
lumi__ masak++
jnthn: What's missing? I messed with them a bit in ancient times 09:52
jnthn Making declarations (e.g. subs) inside macros, the COMPILING:: pseudo-package support.
09:54 kaleem joined
jnthn lunch & 09:54
09:54 Psyche^ joined 09:57 kaleem left, Patterner left, Psyche^ is now known as Patterner 10:01 brrt left 10:02 kaleem joined 10:05 hypolin left 10:08 anuby left 10:16 wamba left, wamba joined 10:24 wk left 10:26 aharoni left 10:37 mucker joined 10:51 kaleem left 10:54 kaleem joined 11:09 leont left
grondilu btw has anyone been writing a C grammar in Perl6? 11:19
11:24 wamba left
moritz there's an incomplete C grammar in NQP in the parrot repo 11:24
for parsing the .ops files
11:25 wamba joined 11:26 am0c joined
grondilu ok I'll have a look. 11:31
11:41 wamba left, wamba joined 11:42 shlomif joined, shlomif is now known as rindolf
colomon jnthn++: that shaved another 20s off the running time. 11:53
phenny colomon: 06:40Z <jnthn> tell colomon 584f19e may help a little too; feel free to mail me an updated profile if you want me to dig some more
colomon jnthn: I'll get you an updated profile ASAP
jnthn: e-mailed. 12:00
jnthn colomon: I am tied up with $client for the next couple of hours anyway 12:05
colomon: How long is it taking now?
colomon jnthn: on the linux box, 3m47s 12:08
12:08 rhr left 12:09 _jaldhar left
jnthn colomon: What did all the .s you added win? 12:09
Did that help with memory also?
colomon The .s got me 45s or so. I haven't checked memory usage. 12:10
jnthn OK, so we need to win another 47s to have halved the runtime... :) 12:11
12:11 am0c left
colomon r: say (5*60+52)/2 12:12
12:12 orafu joined
p6eval rakudo 584f19: OUTPUT«176␤» 12:12
colomon yes. :) 12:13
jnthn There may be a win from making the to/from in the match object native ints. 12:16
That's how NQP has it.
flussence ooh, regex speedups? 12:25
jnthn flussence: combination of Rakudo improvements and colomon++ tweaking his grammar :)
colomon sorear suggested adding :: to places where LTM might be causing issues. dunno if that will help rakudo performance or only niecza performance.... 12:28
12:29 wamba left, wamba joined
moritz I don't think rakudo implements :: 12:31
r: /a :: b/
p6eval rakudo 584f19: OUTPUT«===SORRY!===␤:: not yet implemented at line 2, near " b/"␤»
jnthn Evaluating the NFA didn't seem to be unusually expensive in the profile, fwiw. 12:33
Turning that bit alternation I mentioned into a char class may help but probably only a little. 12:34
12:35 gootle left
colomon jnthn: token special, you mean? I was under the impression that '!' | '"' | '*' versus <[ ! " * ]> was just a notational convenience... 12:40
jnthn colomon: They compile rather differently. 12:41
moritz in the end they have the same semantics, but rakudo still does LTM for the | case 12:42
jnthn Right
colomon guess I can give that a try. was mostly avoiding it because I thought it would make for too long a line. :)
but probably have to do a preschool dropoff first.
jnthn Who said you have to put the char class all one one line? :)
colomon ooooooo 12:43
moritz old p5 think, I think 12:44
12:45 tokuhiro_ joined
jnthn r: say "ooh look spaces count" ~~ m:P5/ooh look/ 12:45
p6eval rakudo 584f19: OUTPUT«「ooh look」␤␤»
jnthn :)
12:48 killbot left 12:51 rindolf left
jnthn BTW, if some enterprising soul wants a relatively easy P5Regex task, implement \A and \Z and stuff :) 12:51
12:51 wamba left
jnthn (there's a load of tests for it) 12:52
12:52 wamba joined
moritz \A is just the same as ^ in Perl 6 regex 12:54
moritz takes a look
12:55 zipf joined
arnsholt \A and ^ are different under /m (or was it /s?) though 12:55
moritz \A is always the same 12:56
^ depends on /m
12:56 zipf left
arnsholt Right, that. 12:56
jnthn Yeah, I already did the m-varying ^ semantics I think 12:57
moritz \z is also easy 12:58
\Z is a bit more tricky
\Z is \n?\z
jnthn Because \n semantics?
Oh, but $ does that too and I did $ already
so you can nab that :)
moritz do I need to put that in p5backaslash:sym<A> etc? 12:59
jnthn yes, you'll need something in the grammar and an action method 13:00
13:01 flightrecorder left, killbot joined, hash_table joined, FROGGS left
moritz tries 13:02
13:07 rindolf joined 13:13 PacoAir joined 13:19 wamba left 13:23 flightrecorder joined, FROGGS joined, GlitchMr joined
colomon is <[ ! " * ]> the same as <[ !"* ]> ? 13:24
jnthn Yes 13:29
It matches \s* as meaningless between things in the char class
Thus why multiple lines are also fine :) 13:30
colomon "Unsupported use of - as character range" 13:31
how do I escape that?
(in <[ ]>
jnthn \- 13:32
colomon now I get "regex assertion not terminated by angle bracket"
that's with token special { <[ !"*$%&.#+,\-()?/:;<=>@[]{|}^`~ ]> }
jnthn Need to escape the ] in there too 13:33
colomon and now it works! jnthn++
jnthn
.oO( but will it be faster... )
colomon jnthn: running my tests first, to make sure it's still correct. ;) 13:34
13:35 bluescreen10 joined, hash_table left
colomon which it is! \o/ 13:39
timing... 13:41
13:43 cognominal left 13:44 Pleiades` left 13:47 wamba joined 13:51 Pleiades` joined
[Coke] <spongebob>3 hours later</spongebob> 13:59
colomon whoops! got sidetracked. (checks) no performance improvement at all with that change. can't say I'm wildly surprised by that. 14:00
jnthn Tells us that alternations are relatively cheap I guess :) 14:01
colomon well, I don't know that they're called all that often on a regular file.
according to the last profile I did before this, the time taken in special is trivial 14:02
jnthn ah, ok 14:03
colomon 12% of the execution time is in <ws>?
jnthn Wow
14:03 cognominal joined
jnthn Sounds plausible though 14:03
Do you have a custom ws? 14:04
Or is this the default one?
If the default one then there's certainly room for some improvement...
colomon That's the default one, and I never even call it explicitly. 14:05
must be in the rules, I guess?
jnthn Yes 14:06
That's surprisingly pricey.
14:06 stopbit joined 14:11 dayangkun joined 14:12 dayangkun left 14:13 kaare__ joined 14:14 birdwind1pbird joined 14:16 aharoni joined 14:17 Pleiades` left 14:19 Pleiades` joined 14:23 tokuhiro_ left
colomon jnthn: I'm looking at token untyped_parameter { '$' | <real> | <integer> | <string> 14:26
| <entity_instance_name> | <enumeration> | <binary> | <list_of_parameters> }
at the moment.
would there be value to using || instead of | here? 14:27
(would it even work in Rakudo?)
jnthn That's likely to make it slower. 14:28
arnsholt At a guess, || would make it slower than | 14:29
jnthn || tries things one by one
arnsholt Yeah, what jnthn said
With | you get LTM to find the right branch
jnthn | tries them "in parallel" using an NFA
And it can trim out impossible ones without having to call the subrules.
colomon would reordering them make any difference, given that? 14:30
14:30 lawrmcfa left
jnthn No 14:30
It's || where re-ordering would help 14:31
colomon then the overall set of parameter tokens/rules may qualify as "surprisingly slow"
hard to say, because they are called a LOT
14:32 cognominal left 14:38 kaleem left, Shozan joined 14:40 rjbs- joined, avarab joined, avarab left, avarab joined 14:41 literal_ joined, estrai_ joined, ranguard_ joined 14:44 Pleiades` left, crazed- joined 14:45 SHODAN left, estrai left, Khisanth left, ranguard left, rjbs left, literal left, avar left, crazedpsyc left, crazed- is now known as crazedpsyc 14:46 hash_table joined
[Coke] rjbs++ 14:51
14:51 zby_home_ joined
rjbs- is saving up his karma for IRC, The Home Game. 14:52
14:53 Khisanth joined 14:55 rhr joined 14:57 Pleiades` joined
jnthn decommute & 15:02
15:02 skids joined
TimToady the new sigspace policy minimizes the number of calls to <ws>; don't think rakudo implements that yet... 15:04
(the new policy only calls <ws> if something else matched first, basically)
oh, and you should be able to cut down LTM analysis with {}, which also stops the token like :: 15:06
it just doesn't change the backtracking rule, if there happens to be degrees of freedom in the token's regex 15:07
which there usually isn't, at least in parsing a language
data files might be a different story
colomon Is that just {} or do you mean wrapping things in { } brackets? 15:12
colomon fears he is behind the curve in grammar comprehension.... 15:13
15:18 birdwind1pbird left, MayDaniel joined
lumi__ colomon: I think he means that just having a block breaks LTM even if it's empty 15:19
colomon lumi__: that's what I'm thinking too, but I'd like to make sure I'm not going astray. 15:23
jnthn An empty block would do it 15:39
But as I said, Rakudo doesn't seem to be suffering much on the LTM front.
colomon jnthn: sure, but if it provides drastic improvements for Niecza performance without hurting Rakudo performance, that would be worthwhile 15:41
jnthn I'll probably slow Rakudo down a bit since it doesn't optimize away empty blocks. 15:44
perigrin *It'll ... otherwise ... jnthn is a meenie ... punnishing poor rakudo for not optimizing away empty blocks. 15:45
jnthn er, yes :D 15:46
I should do that optimization at some point. I seem to recall that last time I tried it didn't work out for some reason. 15:47
15:47 fgomez left
jnthn colomon: Hm, in the latest profile you sent me it seems ws is only 6.5%, but you mentioned 12% earlier. 15:48
colomon :( 15:50
will try to sort it out in a minute.
jnthn Wow, that initial .subst got way cheaper 15:51
15:52 rindolf left 16:00 fgomez joined 16:04 hoelzro is now known as hoelzro|away
dalek kudo/nom: fb0b115 | jnthn++ | src/core/ (2 files):
Use native ints for Match $!to/$!from.

This will certainly save a good amount of memory, but it also saves the MATCH method from having to do two object boxings too. Of course, we do them later in some cases, but I suspect this will be an overall win.
16:13
grondilu Test Summary Report 16:14
-------------------
t/spec/S32-io/IO-Socket-INET.t (Wstat: 0 Tests: 16 Failed: 2) Failed tests: 6, 9
Files=701, Tests=25653, 7101 wallclock secs (19.85 usr 2.67 sys + 6578.06 cusr 156.14 csys = 6756.72 CPU)
Result: FAIL
jnthn colomon: Maybe fb0b115 helps a bit. 16:15
colomon jnthn: will check!
16:18 cognominal joined
colomon will also get back to paying his taxes, as that is on a deadline of sorts. 16:19
16:24 brrt joined 16:27 fglock joined
colomon jnthn: 11 seconds gone, not bad! 16:28
I've started a new profile run.
16:32 SamuraiJack left 16:36 Celelibi left 16:39 Celelibi joined 16:40 SamuraiJack joined 16:48 mucker left 16:52 cognominal left 16:53 dakkar left 16:54 fgomez left 16:55 spider-mario joined 16:57 cognominal joined 16:59 bluescreen10 left 17:03 fgomez joined 17:04 brrt left 17:07 leont joined 17:10 birdwindupbird left 17:34 brrt joined 17:35 lawrmcfa joined
felher r: my Int @array = 1,2,3; say @array eqv [1,2,3] 17:38
p6eval rakudo fb0b11: OUTPUT«False␤»
felher Is it expected behaviour that the Type-Information of that array makes eqv return false? 17:39
moritz yes 17:40
nr: say 1.0 eqv 1 17:41
p6eval rakudo fb0b11, niecza v22-7-g7df6137: OUTPUT«False␤»
moritz same case
17:42 integral left
felher I see. Whats the nicest way to get what i wanted, then? [&&] @array Xeqv [1,2,3]? Or Array.new(@array) eqv [1,2,3]? 17:46
(i know that for 1,2,3 i could use ==) :)
(X== that is) 17:47
jnthn Zeqv more likely 17:48
felher jnthn: yeah, of course :)
jnthn And all
felher all @array Zeav [1,2,3]?
jnthn r: my Int @a = 1,2,3; say all [1,2,3] eqv @a 17:49
p6eval rakudo fb0b11: OUTPUT«all(False)␤»
jnthn r: my Int @a = 1,2,3; say all([1,2,3] eqv @a)
p6eval rakudo fb0b11: OUTPUT«all(False)␤»
jnthn grr
r: my Int @a = 1,2,3; say all([1,2,3] Zeqv @a)
p6eval rakudo fb0b11: OUTPUT«all(True, True, True)␤»
jnthn r: my Int @a = 1,2,3; say so all [1,2,3] Zeqv @a
p6eval rakudo fb0b11: OUTPUT«True␤»
jnthn There we go :)
r: my Int @a = 1,2,4; say so all [1,2,3] Zeqv @a
p6eval rakudo fb0b11: OUTPUT«False␤»
felher jnthn: yeah, that looks kinda nice. Thanks :) 17:50
17:51 leont left 17:54 brrt left 17:59 integral joined, integral left, integral joined 18:01 brrt joined
moritz (off topic) does anybody know of a generalization of the Nested Sets model to store arbitrary DAGs (and not just trees) in SQL? 18:01
PerlJam
.oO( How can that possibly be off topic *here*? )
18:09
18:18 _edwin joined 18:21 integral left, japhb_ joined
japhb_ jnthn, can any of the optimizations you've been making to improve colomon++'s parsing use case be applied to NQP, so its parsing will be faster as well? 18:22
sorear good * #perl6 18:23
moritz I'm pretty sure that NQP already uses native ints for match attributes
18:23 kaare__ is now known as kaare_
_edwin filed rt.perl.org/rt3/Ticket/Display.html?id=115212 18:23
18:24 fhelmberger left
japhb_ moritz, he's done a couple more too ... double-quote literal handling, method cache authority ... 18:24
But given what you said, I now wonder how many NQP optimizations can be moved over to Rakudo. ;-) 18:25
brrt moritz: I do not know, but i'm very interested 18:26
brrt is actually really close to giving up on the whole #perl6 thing 18:28
moritz brrt: may I ask why? 18:30
18:30 integral joined, integral left, integral joined
brrt "Positional arguments implicitly come in via the @_ array, but unlike in Perl 5 they are readonly aliases to actual arguments:" 18:31
honestly, why?
sorear THAT is why you're leaving?
also, I think that document is out of date, @_ isn't used at all unless you mention it now 18:32
moritz brrt: because most modifications of arguments are unintended
doy and all existing implementations do read-only copies, as nicholas clark pointed out
brrt i'm not leaving, i'm nearly turning mad
well, why can't they just be copies then? 18:33
moritz because copies of big stuff can be expensive 18:34
and there's the question of how deeply/shallow you copy
and so on
brrt fine; i'm not suggesting php4 deep-copy-on-write (that was hilarious madness that hurt so bad) 18:35
but shallow pointer copy is pretty much what you'd 'want', isn't it?
PerlJam brrt: not me. 18:36
brrt why not, why isn't that enough
PerlJam unintended second order effects
18:37 daxim left
jnthn japhb_: NQP already has the method cache authority thing for a long while, I'd just not gotten around to porting it over to Rakudo. 18:38
japhb_ jnthn, ah so
brrt PerlJam: please explain :-)
japhb_ jnthn, I was wondering a few weeks ago how often optimizations only make it into NQP or Rakudo but not both (when they make sense in both) ... and now I have my answer. ;-) 18:39
jnthn japhb_: And it's double-quoted strings in regexes don't actually allow interpolation or anything that would preclude literals.
dalek ast: 920c5be | (Edwin Steiner)++ | S14-roles/stubs.t:
Add test for RT #115212: [BUG] accessor method does not count as implementation of required method.
ast: 7673df5 | (Edwin Steiner)++ | S0 (10 files):
Merge branch 'master' of github.com:perl6/roast
PerlJam brrt: I wouldn't want to accidentally affect a change in the caller's environment because I made a change to a parameter passed to my subroutine.
jnthn japhb_: Well, NQP doesn't yet have an optimizer :) 18:40
japhb_ There's a biggie. ;-)
jnthn japhb_: So there's some fun to be had there too :)
japhb_ is looking forward to that improvement, as he is currently back to working on his benchmarking tool and thus seeing just how slow some things are. 18:41
brrt PerlJam: which doesn't happen if you copy pointers to the subroutine enviroment
18:42 integral left, integral joined, integral left, integral joined
japhb_ 18:42
brrt wait. 18:44
i'm fearing i'm misunderstanding the issue here
18:44 rindolf joined
sorear brrt: there are reasons why I often wonder if perl6 is a good idea, and that @_ thing is never one of them 18:45
japhb_ D'oh! Ran the benchmark for several minutes only to discover I'd forgotten to send the timing data to a file. BAH.
brrt p6: sub foo(*@a is rw) { @a[0,1] = @a[1,0] }; my ($a, $b) = 0, 1; foo($a, $b); say $a;
p6eval niecza v22-7-g7df6137: OUTPUT«1␤»
..rakudo fb0b11: OUTPUT«0␤»
brrt ok, which one is right
sorear brrt: in the real world, you'd never use @_, always rw parameters 18:47
p6: sub foo($x is rw, $y is rw) { ($x,$y) = ($y,$x) }; my ($a,$b) = 0,1; foo($a,$b); say $a
p6eval rakudo fb0b11, niecza v22-7-g7df6137: OUTPUT«1␤»
brrt so, niecza got it right 18:48
right
jnthn Does the spec say one way or the other? 18:49
brrt the spec suggests niecza's behavior
jnthn Reference?
brrt which i find maddening but is apparantly the correct behavior
jnthn I think Rakudo pays no attention at all to "is rw" in a slurpy, fwiw...
Unless Pm implemented it to do so and I didn't notice. :)
brrt s06, Note: the rw container trait is automatically distributed to the individual elements by the slurpy star even though there is no actual array or hash passed in. More precisely, the slurpy star means the declared formal parameter is not considered readonly; only its elements are. See "Parameters and arguments" below. 18:50
sorry for copying, btw
18:52 spider-mario left
jnthn ah, ok 18:52
Yeah, Rakudo probably should pay attention to the "is rw" there then and do something different.
diakopter p6: sub foo(*%a is rw) { say %a{'a'}; %a{'a'} = 2; say %a{'a'} }; my $a = 4; foo(|{'a' => $a}); say $a; 18:53
p6eval rakudo fb0b11, niecza v22-7-g7df6137: OUTPUT«4␤2␤4␤»
brrt and, that doesn't make you very nearly insane? this meant in a non-inflammatory matter, by the way
diakopter brrt: one tends to get accustomeed to glaring inconsistence. also non-inflammatory. 18:54
*around here
jnthn brrt: huh, I've worked on Rakudo since about December 2007, I've been insane for ages. :)
brrt :-) good, i'm not alone, then 18:55
jnthn The glaring inconsistencies are at least better than the subtle, unnoticed ones... 18:56
I've learend not to worry too much about such things though. They tend to get worked out, as the implementations push for them to be.
sorear brrt: is rw is pretty much the sanest part of perl 6. I am baffled by the fact that you seem to have a problem with it 18:58
brrt sorear: my problem,if anything, is that it prohibits a clean separation between caller and callee 18:59
PerlJam brrt: prohibits?!?
brrt well, yeah, suppose i have a scope containing a, and b, i must effectively pass the location of a and b to a subroutine, not their values 19:00
$a, and $b
jnthn brrt: I think you're missing a level
grondilu rn: constant foo = do given %*ENV<FOO> { when .defined { m:i/^ bar $/ }; default { False } }; say foo;
brrt because - the way i'm reasoning - the caller cannot know if the callee things its arguments are read-writeable
p6eval rakudo fb0b11, niecza v22-7-g7df6137: OUTPUT«False␤»
jnthn my $a = 42;
brrt yeah, probably
jnthn Means that the lexpad contains a Scalar which contains 42.
brrt s/things/thinks/
jnthn You pass the Scalar.
brrt .... 19:01
yes, obviously
grondilu rn: constant foo = do given %*ENV<HOME> { when .defined { m:i/^ home $/ }; default { False } }; say foo; 19:02
p6eval niecza v22-7-g7df6137: OUTPUT«False␤»
..rakudo fb0b11: OUTPUT«===SORRY!===␤Cannot assign to a non-container␤»
brrt so in a weird way you're always pushing pointers, it isn't an exception 19:03
jnthn er...what... 19:04
brrt yeah that wasn't intelligeble
i mean
jnthn brrt: That was at Rakudo's response to grondilu's program, not to you! :)
brrt ok
(i didn't understand that program either, btw)
so, youre basically always dealing with a container, and a value 19:05
19:05 fgomez left
jnthn grondilu: I'm, er, confused now because I just ran what you pasted locally and it worked 19:06
19:07 fgomez joined 19:08 Playb3yond joined
grondilu jnthn: is the ENV var defined ? 19:08
flussence jnthn: fails here
diakopter sorear: my last snippet above - should it behave the same as the *@a ?
grondilu nr: constant home-is-in-home = %*ENV<HOME>.defined ?? (%*ENV<HOME> ~~ m:i/ home /) !! True;
p6eval niecza v22-7-g7df6137: ( no output )
..rakudo fb0b11: OUTPUT«===SORRY!===␤Cannot assign to a non-container␤»
jnthn grondilu: No
oh wait, surely home is... 19:09
oh, no it's not
If I change it to HOMEPATH I get the error
grondilu it's rakudo bug, right? 19:10
jnthn Seems like
19:11 nyuszika7h left
grondilu nr: constant foo = %*ENV<HOME> ~~ /home/; 19:12
p6eval rakudo fb0b11: OUTPUT«===SORRY!===␤Cannot assign to a non-container␤»
..niecza v22-7-g7df6137: OUTPUT«Use of uninitialized value in string context␤ at /home/p6eval/niecza/lib/CORE.setting line 1289 (warn @ 5) ␤ at /home/p6eval/niecza/lib/CORE.setting line 266 (Mu.Str @ 15) ␤ at <unknown> line 0 (ExitRunloop @ 0) ␤ at /home/p6eval/niecza/lib/CORE.setting…
jnthn nr: constant foo = (%*ENV<HOME> ~~ /home/);
p6eval rakudo fb0b11: OUTPUT«===SORRY!===␤Cannot assign to a non-container␤»
..niecza v22-7-g7df6137: OUTPUT«Use of uninitialized value in string context␤ at /home/p6eval/niecza/lib/CORE.setting line 1289 (warn @ 5) ␤ at /home/p6eval/niecza/lib/CORE.setting line 266 (Mu.Str @ 15) ␤ at <unknown> line 0 (ExitRunloop @ 0) ␤ at /home/p6eval/niecza/lib/CORE.setting…
jnthn nr: constant foo = %*ENV<HOME>.match(/home/); 19:13
p6eval rakudo fb0b11: ( no output )
..niecza v22-7-g7df6137: OUTPUT«Unhandled exception: Unable to resolve method match in type Any␤ at /tmp/UC83ubgjc2 line 1 (foo init @ 2) ␤ at <unknown> line 0 (ExitRunloop @ 0) ␤ at /home/p6eval/niecza/src/NieczaBackendDotnet.pm6 line 76 (downcall @ 4) ␤ at /home/p6eval/niecza/src/Ni…
diakopter jnthn: my last snippet above - should it behave the same as the *@a ? 19:14
jnthn diakopter: afaik 'is rw' does nothing on slurpy hashes either 19:15
19:15 Playb3yond left 19:16 SamuraiJack left
grondilu r: constant foo = %*ENV<HOME>.match(m:i/ home /); 19:16
p6eval rakudo fb0b11: OUTPUT«===SORRY!===␤Method 'match' not found for invocant of class 'Mu'␤»
19:17 Playb3yond joined
jnthn grondilu: m/.../ matches immediately on $_ 19:17
19:18 \n joined
grondilu jnthn: oh, ok 19:18
dalek kudo/nom: dbf3478 | jnthn++ | src/core/Cursor.pm:
Small optimization to Match construction.
19:19
jnthn So far as I can tell, the thing it fails to assign to is actually $/
Woodi bbkr: given my understability of problem :) I think I yesterday hit something you can read with this context in mind: en.wikipedia.org/wiki/Mutable_object and CoW is involved too 19:23
jnthn colomon: Not sure how much dbf3478 will help; it's hard to tell from the benchmark. It *should* make things a bit faster. 19:25
colomon jnthn++: will time...
jnthn I'm seeing if I can improve CAPHASH a little also 19:26
19:29 fibo joined 19:35 wk joined
colomon jnthn: looks like that is another 7secs off 19:38
jnthn colomon: What're we at now? :)
colomon 3.5 min
so 30 seconds to go for an overall halving of execution time. :) 19:39
jnthn should probably be working on debugger improvements, but hey, optimizing is fun... 19:40
flussence
.oO( optimising for the "fail fast" pattern )
19:46 am0c joined 19:47 wk left 19:50 Playb3yond left 19:54 birdwindupbird joined 20:00 brrt left 20:01 fibo left 20:02 fibo joined
moritz r: sub f() { nqp::substr("foo", 0, 1) }; say f 20:02
p6eval rakudo fb0b11: OUTPUT«f␤»
20:03 GlitchMr left 20:05 fglock left 20:10 wk joined 20:12 avarab is now known as avar, kaare_ left, kaare_ joined
_edwin rosettacode.org/wiki/Permutations_b...ing#Perl_6 20:18
cognominal nqp: say(%*A) 20:19
p6eval nqp: OUTPUT«Hash[0x9e9de88]␤»
cognominal r: say(%*A) 20:20
p6eval rakudo dbf347: OUTPUT«Dynamic variable name not found␤ in method gist at src/gen/CORE.setting:9934␤ in sub say at src/gen/CORE.setting:7250␤ in block at /tmp/Tl17ixHqyY:1␤␤»
cognominal What is the semantic for dynamic variable in NQP?
20:20 birdwindupbird left
moritz nqp: say($*A) 20:21
20:21 literal_ is now known as literal
p6eval nqp: OUTPUT«␤» 20:21
moritz nqp: say($*A.WHAT)
p6eval nqp: OUTPUT«␤»
moritz nqp: say($*A.^name)
p6eval nqp: OUTPUT«Confused at line 2, near "say($*A.^n"␤current instr.: 'panic' pc 20029 (src/stage2/gen/NQPHLL.pir:7321) (src/stage2/gen/NQPHLL.pm:324)␤»
cognominal It seems it is autovivied. how to test it has been declared?
moritz nqp: say($*A.HOW.name($*A))
p6eval nqp: OUTPUT«NQPMu␤»
20:23 kaare_ left 20:24 arlinius joined
cognominal nqp: my %*B; say(%*B.HOW.name(%*B)) 20:24
p6eval nqp: OUTPUT«Can only use get_how on a SixModelObject␤current instr.: '' pc 151 ((file unknown):79) (/tmp/tBHlIAD6nr:1)␤»
moritz probably a Parrot Hash 20:25
jnthn yeah, it will be
moritz nqp: say(nqp::typeof__SP(%*B))
p6eval nqp: OUTPUT«Error while compiling block : Error while compiling op call: Error while compiling op typeof__SP: No registered operation handler for 'typeof__SP'␤current instr.: '' pc 43434 (src/stage2/QAST.pir:15060) (src/stage2/QAST.nqp:2253)␤»
jnthn I guess it is auto-viving in some way
pir::
moritz nqp: say(pir::typeof__SP(%*B)) 20:26
p6eval nqp: OUTPUT«Hash␤»
cognominal nqp: my %*B := Hash.new; say(%*B.HOW.name(%*B))
p6eval nqp: OUTPUT«NQPMu␤»
20:28 xinming left 20:29 hash_table left 20:30 aharoni left
grondilu made a interface to OpenSSL (so far, only a few digests): [email@hidden.address] 20:30
20:30 kurahaupo joined, xinming joined
cognominal jnthn, I am trying to get %!, %? and $_ to live from one shell evaluation to another in the Perl6 shell. In nqp/src/HLL/Compiler.pm, I replace %interacitve_pad with %*INTERACTIVE_PAD and I want to test it in finishpad in src/Perl6/Action.pm to set $BLOCK. Is it cargo cult? if now how to do it? 20:31
s/now/no/ 20:32
jnthn cognominal: That feels like an odd kinda way to do it. 20:34
cognominal I thought you would find a better way! 20:35
jnthn Well, it's an issue for the debugger also, it seems.
I think it's getting $!, $_ etc wrong if you try to introspect them
cognominal if the debugger includes a shell, I bet
jnthn So I think it's perhaps more general that just interactive. 20:36
20:36 fgomez left
TimToady r: my Int @array = 1,2,3; say @array ~~ [1,2,3] 20:37
p6eval rakudo dbf347: OUTPUT«True␤»
TimToady felher: but note ^^ 20:38
jnthn oh!
TimToady++
felher TimToady: oha, nice. Thanks! 20:39
felher looks up the smart-match-table once again :)
20:39 bruges_ left
_edwin std: gist.github.com/3868275 20:40
p6eval std 77327a4: OUTPUT«ok 00:01 53m␤»
20:41 bruges joined
dalek osystem: a594e55 | grondilu++ | META.list:
Update META.list

perl6 interface to openssl, so far only a few digests.  Needs small modification of code for big-endian hosts.
20:47
osystem: 3e78dba | (Ahmad M. Zawawi)++ | META.list:
Merge pull request #15 from grondilu/patch-1

Update META.list
grondilu cool 20:51
karma grondilu 20:53
aloha grondilu has karma of 6.
grondilu :)
cognominal grondilu++ 20:56
r: say UNIT.WHO.keys 21:02
p6eval rakudo dbf347: OUTPUT«GLOBALish EXPORT $?PACKAGE ::?PACKAGE $_ $/ $! $=pod !UNIT_MARKER␤»
cognominal ::?PACKAGE ?
21:05 zby_home_ left
japhb_ cognominal, current package's stash? 21:06
ingy jnthn: do you know of a good demo p6 webapp? 21:07
21:08 _edwin left
jnthn ingy: Not off hand 21:08
ingy jand wants to add p6 support to ActiveState's Stackato
jnthn cognominal: Like ::?CLASS - it can be used as a type name.
ingy just needs something to show off 21:09
jnthn ingy: tadzik has made Bailador, so may have some suggestions.
cognominal I don't get the difference between $?PACKAGE and ::$?PACKAGE
jnthn cognominal: They contain the same thing, but you can't write $?PACKAGE where a type name is expected
ingy I think I asked about this before
dalek rl6-bench: dc0fc43 | (Geoffrey Broadwell)++ | bench:
WIP: Pass config and overall per-run info to summarizers; display benchmark rev and overall run start time in summary outputs; save all config and per-run info in JSON output
21:10
rl6-bench: 5ed43bd | (Geoffrey Broadwell)++ | bench:
Fixes for previous WIP commit
rl6-bench: 872ccf1 | (Geoffrey Broadwell)++ | bench:
Stop testing Perlito6/perl5 on rc-forest-fire
rl6-bench: 7c25a88 | (Geoffrey Broadwell)++ | bench:
Fix braino in HTML style output
rl6-bench: 6f48049 | (Geoffrey Broadwell)++ | bench:
Improve default HTML styling
21:11 skids left
cognominal r: my $?PACKAGE $a 21:16
p6eval rakudo dbf347: OUTPUT«===SORRY!===␤Redeclaration of symbol $?PACKAGE␤at /tmp/wgkzzFw3GJ:1␤»
cognominal r: my ::$?PACKAGE $a
p6eval rakudo dbf347: OUTPUT«===SORRY!===␤Cannot use :: as a type name at line 2, near "$?PACKAGE "␤»
japhb_ r: my ::?PACKAGE $a
p6eval rakudo dbf347: ( no output )
cognominal oops 21:17
thx jnthn and japhb_
21:18 wk left
cognominal I should read closely before attempting any interpetation 21:18
21:21 rindolf left
dalek rl6-bench: 0d7bba5 | (Geoffrey Broadwell)++ | TODO:
A few more thoughts added to TODO
21:29
21:30 telex left 21:32 telex joined 21:43 cognominal left
japhb_ nr: my ($s) = now.to-posix; 1 for 1..100_000; my ($e) = now.to-posix; ($e - $s).say; 21:44
p6eval niecza v22-7-g7df6137: OUTPUT«6.40090799331665␤»
..rakudo dbf347: OUTPUT«0.8622609␤»
japhb_ sorear, Any idea why niecza is unusually comparatively slow for the above trivial loop? 21:45
sorear japhb_: niecza's Range.iterator has seen much less love 21:47
japhb_ sorear, Also, it would be really nice if Instant would coerce to Num. ;-)
sorear, Ah, OK, got it.
sorear r: say now.Num
p6eval rakudo dbf347: OUTPUT«1349905682.03435␤»
21:48 MayDaniel left 21:51 wamba left 21:54 cognominal joined 21:59 PacoAir left 22:02 PacoAir joined 22:10 daniel-s left 22:11 whiteknight joined, daniel-s joined 22:14 am0c left
dalek p: 71afc92 | jnthn++ | src/QRegex/Cursor.nqp:
Optimize CAPHASH a bit.

Avoids some boxing/unboxing and also an iterator allocation.
22:27
p: 885cc4c | jnthn++ | src/NQP/Actions.pm:
Nameds should not be involved in multi-dispatch.
p: 9ef6b1b | jnthn++ | src/stage0/ (9 files):
Update bootstrap.
p: 00bb439 | jnthn++ | src/QAST/Compiler.nqp:
Try to better convey void context.
p: a2cbfa4 | jnthn++ | src/QAST/Compiler.nqp:
Some more void context cleanups.
p: 6247a45 | jnthn++ | src/QAST/Operations.nqp:
Generate better code for void if/unless.
p: 5a60f40 | jnthn++ | src/NQP/ (2 files):
Generate better code for NQP's prefix:<!>.
22:33 mtk left
jnthn 'night o/ 22:39
22:42 mtk joined
dalek rl6-bench: cae05bc | (Geoffrey Broadwell)++ | bench:
Add Niecza as a (partial) NQP compiler
22:46
rl6-bench: 9983ad1 | (Geoffrey Broadwell)++ | / (2 files):
Begin documenting expected results and analysis of the various tests
rl6-roast-data: e98769f | coke++ | p (2 files):
today (automated commit)
perl6-roast-data: fc4e5fb | coke++ | / (3 files):
perl6-roast-data: today (automated commit)
22:46 dalek left 22:47 dalek joined, ChanServ sets mode: +v dalek 22:50 hash_table joined, bbkr_ joined 22:58 fgomez joined 23:10 erkan left 23:25 tokuhiro_ joined
[Coke] I've gotten to the point in partcl-nqp where I now have a circular dependancy that won't work due to the compile to pir step. 23:25
time to start combining perl files. 23:26
23:27 PacoAir left
TimToady rosettacode.org/wiki/Zeckendorf_num...ion#Perl_6 23:32
23:32 Pleiades` left 23:37 MikeFair left 23:39 Pleiades` joined
[Coke] TimToady: why is the constant inside the multi? 23:39
(just for scoping?)
23:42 popl joined, MikeFair_ joined
japhb_ is intrigued by the idiom in TimToady++'s code of a finite sequence built by clipping an infinite sequence 23:47
(As opposed to just generating a finite sequence immediately.)
23:48 dalek left 23:49 skids joined 23:50 thou left 23:51 hugme left, PerlJam left, topo_ joined, tadzik left, dalek joined, ChanServ sets mode: +v dalek, PerlJam joined, sergot left 23:52 Juerd left, sergot joined, Juerd joined, hugme joined, ChanServ sets mode: +v hugme, [Coke] left, [Coke] joined 23:53 topo left 23:54 topo_ is now known as topo 23:58 dayangkun joined 23:59 p6eval left