»ö« | perl6.org/ | nopaste: paste.lisp.org/new/perl6 | evalbot usage: 'perl6: say 3;' or rakudo:, alpha:, pugs:, std:, or /msg p6eval perl6: ... | irclog: irc.pugscode.org/ | UTF-8 is our friend! Set by lichtkind on 5 March 2010. |
|||
sorear | TimToady: don't typical phone OSes mmap all files? | 00:00 | |
I've got this idea for a data structure that might work well here - it's the bastard child of a B+ tree and an inversion list, tuned to a node size of the P4 cache line (64 bytes) :> | 00:01 | ||
pmichaud | (Will make negative subscripts fail.) | ||
00:04
solarion left,
solarion joined
00:05
masonkramer_ joined
|
|||
pugssvn | r31278 | sorear++ | [dfa/Cursor] Implement protoregexes | 00:06 | |
sorear | TimToady: What are the FILE and NAME fields of lexers used for? | 00:08 | |
00:08
sorear sets mode: +o diakopter
|
|||
TimToady | FILE is the name of the cache file, iirc | 00:09 | |
sorear | Yeah, I see that, but AFAICT it's a dead store. | ||
00:10
macdaddy left
|
|||
TimToady | could well be; we've gone through many iterations of caching | 00:12 | |
and name just remembers the key under which we are stored | |||
more for debugging than anything | |||
pugssvn | r31279 | sorear++ | [dfa/Cursor] Disconnect the old regex LTM; establish full control in the hands of NFA | 00:18 | |
TimToady | ooey! | 00:19 | |
diakopter curiuos about speed diffs | 00:21 | ||
curious | |||
sorear: can I kick off the std rebuild on p6eval early? | |||
sorear | no | 00:22 | |
diakopter | k | ||
sorear | [dfa/Cursor] | ||
I'm still workign in a branch | |||
diakopter | oh | ||
sorear | and a lot of features need to be forward ported | ||
diakopter | didn't realize it was a branch | ||
sorear | right now I'm adding \s | ||
TimToady | plus he only just removed the comparison instrumentation | 00:24 | |
00:24
lest_away is now known as lestrrat
|
|||
TimToady | so speed was not easily measurable before | 00:24 | |
sorear | there are enough ambiguities in the handling of fate chains that it wasn't doing anything useful | ||
What's \s in unicode props? | 00:25 | ||
Space/Y ? | |||
diakopter working on adding grammar/token/rule/regex keywords to perlesque | 00:26 | ||
TimToady | dunno, the long names were invented after I hacked unicde into p5 | 00:28 | |
00:33
skids joined
|
|||
diakopter longs for sixperl minutes | 00:36 | ||
00:40
masonkramer left,
masonkramer__ joined,
masonkramer__ is now known as masonkramer
|
|||
snarkyboojum | oh yeah, there haven't been sixperl minutes for ages | 00:41 | |
00:42
whiteknight left
|
|||
sorear | \x0d is considered \h? | 00:43 | |
TimToady | it moves the carriage to the left :) | 00:44 | |
so yeah | |||
00:46
ciphertext left,
snarkyboojum left
|
|||
TimToady | and VT is matched by \v, but \v won't get you one :) | 00:47 | |
pugssvn | r31280 | sorear++ | [dfa/Cursor] Implement backslash escapes for character classes | 00:49 | |
00:54
mikehh left,
mikehh joined
|
|||
pugssvn | r31281 | sorear++ | [dfa/Cursor] Implement before and after zero-width assertions | 00:57 | |
sorear | I've switched to testing on STD.pmc... ws_0 is now correctly DFAed | ||
TimToady | hopefully you find more bugs in the old stuff than the new stuff :) | 00:59 | |
dinner & | |||
01:11
arthur-- left
01:13
arthur-- joined
01:15
Chillance left
|
|||
dalek | meta: r333 | diakopter++ | trunk/Sprixel/ (5 files): [perlesque] add the first declarative (via API) grammar test. syntax to follow. |
01:15 | |
diakopter | perlesque: say(IO::File.ReadAllText("../../t/grammar1.t")) | 01:19 | |
p6eval | perlesque: OUTPUT«say('1..1'); | ||
..return Either.D… | |||
diakopter | erm | ||
perlesque: use "../../t/grammar1.t" | 01:21 | ||
p6eval | perlesque: OUTPUT«1..1ok 1» | ||
diakopter | perlesquel: use "../../t/grammar1.t" | ||
p6eval | perlesquel: OUTPUT«1..1ok 1real 0.30user 0.28sys 0.02» | ||
diakopter | perlesquel: use "../../t/grammar1.t" | ||
p6eval | perlesquel: OUTPUT«1..1ok 1real 0.32user 0.30sys 0.01» | ||
diakopter | hm | ||
sorear | cute. how does it work? | 01:25 | |
diakopter | see grammar1.t .. | 01:26 | |
working on adding the inline-code thing | |||
sorear | yeah, I'm looking at grammar1.t | ||
but it doesn't look like assemblies are getting generated much | 01:27 | ||
diakopter | it should've emitted a Foo.exe | ||
sorear | hmm. | ||
ok. | |||
ISTR something in the .NET docs about needing to use a nonsaved assembly to reference stuff from the current one? | 01:28 | ||
diakopter | o wait | ||
odd | |||
it put the perlesque parser in Foo.exe | 01:29 | ||
looking.. | |||
oh; lol | |||
no it didn't | |||
I have some non-re-entrant static/globals I need to fix | |||
namely it emitted a totally superfluous N0,000-entry jumptable/switch-case block | 01:30 | ||
sorear: I'll clean up the API so it's actually sane | 01:31 | ||
it's currently, um, not. | |||
afk& | 01:32 | ||
sorear | hmm. I'm generating a LTM automaton for <opener> | 01:52 | |
I suspect this is not right. | |||
colomon | pmichaud: ping? | 01:53 | |
pmichaud | colomon: pong | ||
colomon | rakudo: my @a = 1; @a.push({ 'a' => 3, 'b' => 4 }); say @a.perl | 01:54 | |
p6eval | rakudo 272191: OUTPUT«[1, {"b" => 4, "a" => 3}]» | ||
01:54
jaldhar joined
|
|||
colomon | huh. | 01:54 | |
sorry, may have called you too early on this one. | |||
pmichaud | np :) | ||
colomon | I'm trying to get hyper.t working. | ||
pmichaud | +1 | 01:55 | |
colomon | my local version makes it to test 160 with no fails, then trips up over a mixed array / hash test | ||
pmichaud | I've just been implementing lazy splices :) | ||
colomon | oooooooo +1 | ||
getting ["1a", "b" => "3b", "a" => "2b", "4c"] | |||
should be getting ["1a", {"b" => "3b", "a" => "2b"}, "4c"] | 01:56 | ||
pmichaud | what line is test 160? | ||
colomon | I figured it must be a push issue, but maybe not. | ||
532 | |||
pmichaud | mine must be different numbers | 01:57 | |
sorear | TimToady: What NFA should be generated for ^, ^^, $, $$? | ||
pmichaud | oooh, splice.t passes! | 01:58 | |
colomon | \o/ | ||
01:58
plobsing joined
|
|||
colomon | I think the source of the problem is probably (from hyper on arrays): | 01:58 | |
if Associative.ACCEPTS($l) || Associative.ACCEPTS($r) { | |||
@result.push(hyper(&op, $l, $r, :$dwim-left, :$dwim-right)); | |||
pugssvn | r31282 | sorear++ | [dfa/Cursor] Anonymous character classes, some special methods | ||
pmichaud | that hyper doesn't look like it's likely to return an item | ||
so yes, the result will flatten. | 01:59 | ||
colomon | at what point? | ||
pmichaud | rakudo: my @a = 1,2,3; my @b = 5, 6; @a.push(@b); say @a.perl; | 02:00 | |
p6eval | rakudo 272191: OUTPUT«[1, 2, 3, 5, 6]» | ||
pmichaud | @b is flattening, so each element of @b gets added to @a | ||
the hyper() function seems very likely to return a flattening object | |||
such that each element returned by hyper gets flattened into @result | 02:01 | ||
colomon | it's supposed to preserve structure, not flatten. | ||
pmichaud | I'd need to see the test itself to be able to trace it better. | ||
if it needs to preserve structure, then you might not want to be using .push (which tends to flatten) | 02:02 | ||
colomon | search on "hash in array - result array is the correct length" | ||
what could be used instead of push? | |||
pmichaud | not sure, but in general things like push, array assignment, etc. aren't conducive to preserving structure | 02:03 | |
generally you want to keep things from going into variables. | |||
my @r = @a <<~>> @b; | |||
is +@r, 3, 'hash in array - result array is the correct length'; | |||
this one? | |||
colomon | It's that block | 02:04 | |
it's all one logical test | |||
pmichaud | I need to read the latest on hypers | ||
colomon | I'm not sure that particular behavior is spec'd yet, discussed it with TimToady last week. | 02:05 | |
pmichaud | well, I see that the first element should be "1a", and the last element should be "4c" | 02:06 | |
I'm not sure what that middle element should be. | |||
colomon | rakudo: say ((1, { a => 2, b => 3 }, 4) <<~>> <a b c>).perl | ||
p6eval | rakudo 272191: OUTPUT«["1a", {"a" => "2b", "b" => "3b"}, "4c"]» | ||
colomon | that is, it's { a => 2, b => 3 } <<~>> b | 02:07 | |
pmichaud | what would you expect from... | 02:08 | |
my @a = (2,3); say ((1, @a, 4) <<~>> <a b c>).perl | 02:09 | ||
? | |||
oh, nm, that's not a good example. | |||
my $a = [2,3]; say ((1, @a, 4) <<~>> <a b c>).perl | 02:10 | ||
arggh | |||
my $a = [2,3]; say ((1, $a, 4) <<~>> <a b c>).perl | |||
colomon | rakudo: my $a = [2,3]; say ((1, $a, 4) <<~>> <a b c>).per | ||
p6eval | rakudo 272191: OUTPUT«Method 'per' not found for invocant of class 'Array' in main program body at line 11:/tmp/TPzcfDudDF» | ||
colomon | rakudo: my $a = [2,3]; say ((1, $a, 4) <<~>> <a b c>).perl | ||
p6eval | rakudo 272191: OUTPUT«["1a", ["2b", "3b"], "4c"]» | ||
colomon | faster than typing in the result, but yeah, that's what I expected. | ||
pmichaud | and then | 02:11 | |
02:11
patspam joined
|
|||
pmichaud | rakudo: my @a = 2,3; say ((1, @a, 4) <<~>> <a b c>).perl | 02:11 | |
p6eval | rakudo 272191: OUTPUT«["1a", "2b", "3c", "4a"]» | ||
pmichaud | hmmmm. | ||
trying adding .item after your hyper() | |||
that might work. | |||
colomon | testing | 02:12 | |
pmichaud | but that might have the effect of itemizing things that weren't items in the original list. | ||
pugssvn | r31283 | sorear++ | [dfa/Cursor] Zero-width assertion metacharacters are now treated as nulls at LTM | 02:13 | |
pmichaud | aha | 02:14 | |
my suggestion would be use .map instead of for in the hyper helper | |||
and avoid putting things into @result | |||
that way things remain parcelized properly instead of being forced into item or flattened | 02:15 | ||
pmichaud scribbles | |||
we can get back to using for() once we have it set up to translate to .map | |||
colomon | ooooo, interesting | 02:16 | |
.item makes the test pass, for what it is worth. | 02:17 | ||
pmichaud | can go with .item for now. It might make other flatten-y things fail. | ||
pugssvn | r31284 | sorear++ | [dfa/Cursor] RE_double | 02:18 | |
colomon | up to 218 passing hyper tests, and I think another .item will fix the next failure. | ||
sorear | I now have STD itself minimally functional on dfa/Cursor | ||
pmichaud | nopaste.snit.ch/21280 # avoiding @result array, for colomon++. Also makes the hyper results lazy. :) | 02:19 | |
there might be better ways to do this, too. | 02:20 | ||
but in general, for any type of operator (especially pipelines) it's best to avoid containerizing things if at all possible. | |||
because putting something in a container tends to say something about how it behaves. | |||
colomon | hmmm.... worth changing? I've got hyper.t 100% passing with @result version at the moment. | 02:21 | |
pmichaud | if it's working, don't change it. | ||
or, better stated: commit a working version, and then if you want to play with the other one that's up to you :) | |||
colomon | let me check it in like this, with a note about your suggestion. | ||
yeah. :) | |||
pmichaud | but if you look at the core methods I write you'll see that I tend to want to avoid sticking things into variables | 02:22 | |
(variables also tend to make values stick around longer) | |||
in this example, for example, if the result of the hyper is being consumed by an iterator, all of the previous values end up sticking around in the @results array even though we don't use them | |||
thus (@a <<~>> @b).map(...) | 02:23 | ||
map will lazily request items from hyper(), but after map processes each they end up staying around in the @results array (because it's bound) | 02:24 | ||
well, more to the point, using @results means that the whole hyper() thing isn't at all lazy. it eagerly computes all of the results, and then keeps all of them around as long as any are being used. | |||
pmichaud kicks himself off the soapbox. :) | 02:25 | ||
someday as I'm doing code reviews I'll undoubtedly note places where things aren't written lazily that ought to be :) | 02:26 | ||
02:26
skangas joined
|
|||
colomon | +1 to a general lazy approach, but of course hyper isn't supposed to be lazy. :) | 02:26 | |
lue | afk | ||
pmichaud | ah, yes, if hyper isn't lazy then it doesn't matter :) | ||
colomon | I'm not sure there's any reason we shouldn't make it lazy at the moment, but in the long run... | 02:27 | |
pmichaud | and I'm still fond of the notion that our hypers should do things out-of-sequence. | ||
colomon | +1 out-of-sequence | ||
pmichaud | maybe when I get tired of other stuff I'll randomize hyper() a bit. :-) | 02:28 | |
can the repeating-array sub be rewritten as @a xx * at some point...? | 02:29 | ||
colomon | pmichaud: I think so. | ||
there was a good reason to do it as repeating-array, but I don't remember why now. | 02:30 | ||
munch($n) is in place already, right? | |||
pmichaud | well, previously &infix:<xx> probably didn't know how to preserve parcels | ||
but now it probably can :-) | 02:31 | ||
oh, I guess not yet. :-| | |||
rakudo: say ((1,2,3) xx 4).perl | 02:32 | ||
p6eval | rakudo 272191: OUTPUT«[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]» | ||
pmichaud | that looks wrongish. | ||
colomon | I dunno | ||
I think I'd worry about the | |||
rakudo: say ([1, 2, 3] xx 4).perl | 02:33 | ||
p6eval | rakudo 272191: OUTPUT«[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]» | ||
colomon | case | ||
I mean, in the hyper context. | |||
pmichaud | right | ||
anyway, list branch seems to behave same as rakudo at the moment. | 02:34 | ||
02:34
ciphertext joined
02:35
Targhan_ left
|
|||
pmichaud | ah, yes, &infix:<xx> is also doing the @results array trick | 02:35 | |
fixing. | |||
02:35
Wolfman2000 joined,
ggoebel left
|
|||
pmichaud | our multi infix:<xx>(Mu \$item, $n) { (1..$n).map( { $item } ) | 02:36 | |
} | |||
.... and now it's lazy. :) | |||
colomon | \o/ | ||
ah, if it wasn't lazy, that's definitely why I wasn't using it there! | 02:37 | ||
though of course it doesn't necessarily explain why I didn't just make it lazy. | |||
pmichaud | would've been hard to make it lazy prior to the branch. | ||
I suppose it could've been done with gather/take | |||
I tend to prefer using map for laziness these days :) | 02:38 | ||
colomon | map++ | 02:39 | |
pmichaud | > say ((1,2,3) xx 5).perl | ||
((1, 2, 3), (1, 2, 3), (1, 2, 3), (1, 2, 3), (1, 2, 3)) | |||
and it's no longer flattening the parcels. :) | |||
colomon | is ^* okay? | 02:41 | |
(errr... not that you used it here!) | |||
pmichaud | I don't know. Right now a lot of the *'s are being turned into closures | ||
for example, I tried (1,2,3) xx * and it thinks it's a Block | |||
colomon | ouch. | ||
pmichaud | so we need a Whatever version too I guess. | ||
colomon | I can fix that. | ||
pmichaud | I just pushed my version. | ||
colomon | heh, having trouble getting caught up here. :) | 02:42 | |
pmichaud | I'll be taking a short break in just a bit | ||
also running a full spectest run to see what else needs fixing. | |||
colomon | pmichaud: actually, we just need to modify the list of exclusions to the Whatever closure code. | 02:43 | |
*exceptions | |||
pmichaud | okay, that works too. | ||
colomon | I'll have to poke around to remember how to do it, but it's not hard. | ||
rakudo: say (1 ..^ *).perl | 02:44 | ||
p6eval | rakudo 272191: OUTPUT«{ ... }» | ||
colomon | embarrassing, can't believe I forgot to check that. | ||
fixing | 02:45 | ||
rakudo: say (^*).perl | 02:47 | ||
p6eval | rakudo 272191: OUTPUT«{ ... }» | ||
colomon | rakudo: say (^10).perl | ||
p6eval | rakudo 272191: OUTPUT«0..^10» | ||
pugssvn | r31285 | sorear++ | [dfa/Cursor] First cut of implementing all remaining RE_xxx | 02:49 | |
02:55
pronik` joined
02:58
pronik left
03:03
[mark] joined
03:10
skids left
03:12
masonkramer_ left
|
|||
sorear | much as I am enamored with the idea of compiling NFAs down to optimal machine code, statically, I'm starting to think lazy might work better after all... | 03:13 | |
03:14
meppel joined
03:17
meppl left
|
|||
pugssvn | r31286 | colomon++ | Test that Range operators with Whatevers are not mistakingly turned into closures. | 03:20 | |
03:26
patspam left
|
|||
TimToady | sorear: traditionally, edges get extra constraints that are tested for 0-width assertions, but you can just ignore them and let LTM backoff handle the constraint failure for now | 03:39 | |
sorear: the nice thing about lazy is that it tends to cache the states you'll need next time you see the same thing, since there's usually an amount of redundancy | 03:40 | ||
it also saves you from exponential state space to make it data driven | |||
03:41
JimmyZ joined
|
|||
TimToady | however, some hotspot analysis could make it worthwhile to compile some of 'em down to the metal | 03:41 | |
03:44
mikehh left
|
|||
sorear | just what I needed, /more/ complexity in edges | 03:45 | |
it's bad enough that they have to be able to represent arbitrary Boolean functions of Unicode properties | |||
Perl 5 is really not ideal at managing complicated graphy data structures | |||
TimToady | anyway, you can ignore the 0-widths with (I believe) the same semantics | 03:46 | |
03:46
mikehh joined
|
|||
TimToady | assuming we aren't trying to solve the Halting Problem with our engine | 03:47 | |
we certainly don't make a lot of use of anchors in grammars, so I don't think we lose much by letting the grammar do the tests instead | 03:48 | ||
general regex might be dicier though | |||
some 0-width assertions can be emulated, such as looking for non-\w after » | 03:49 | ||
trick there is not to count the next character in LTM unless it would be matched otherwise | 03:50 | ||
but you'd really like to run your machine just by looking at things with width | 03:51 | ||
I wonder how much syntax relief you'd get writing it in P6 and translating it... | 03:53 | ||
03:54
Schwern joined
|
|||
sorear | yay, now I've gotten to the "bugs without backtraces" stage | 03:55 | |
$lang is not predeclared at STD.pm6 line 96 | 03:56 | ||
TimToady | is it still breaking ties in the same order as the old LTMer? | 03:59 | |
sorear | no | 04:01 | |
that's next... after I figure out how that worked | |||
TimToady | some of what the old LTM calculated on the fly can actually be determined in advance, such as how many literal chars there are on the front | 04:02 | |
04:03
lestrrat is now known as lest_away
|
|||
TimToady | we can probably pre-gen a Schwartzian comparison string that is just used to sort equal-length cohorts | 04:03 | |
04:03
lest_away is now known as lestrrat
|
|||
sorear | I think nfastar is broken, anyway | 04:04 | |
TimToady | instead of push a flat list you might want to push @[][] where the first ix is token length | ||
sorear | I'm translating character classes wrong too | ||
I have <[ \s ]> matching 's' | 04:05 | ||
TimToady | then it's easy to sort the longest set lazily, and you never have to sort the shorter cohorts you don't use unless relex requests it | ||
sorear | What do you mean by @[][] where the first ix is token length ? | ||
What's relex? | 04:06 | ||
TimToady | when it fails a longer token match in the parser, it comes back and looks for the next "shortest" token, or one that lost in the tie sorter | ||
@candidates[$ltm_length][@order_pushed] | 04:07 | ||
if you look at the old anonymous sub returned by gen, it actually had a three level, @candidates[$ltm_length][$literal_len][$push_order] | 04:08 | ||
but as I say, the literal length doesn't need to be there | |||
if @candidates[] top level is indexed by LTM length, then all the candidates at that length can be sorted by a predefined comparsion string that encodes longest literal match, order of declaration | 04:09 | ||
sorear | the current run engine does push @fates, @{ $dfanode->[0] }; every iteration, then pop @fates in the returned sub | 04:10 | |
TimToady | basically, tie-breakers 2..5 at S05:45 | ||
sorear | so the order of fate return on a given dfa node is controlled by the dfa generator | ||
TimToady | hmm, and a dfa state can represent more than one position, eh? | 04:11 | |
hmm | |||
well, but we know the position in the buffer | |||
so there is only one current token length | 04:12 | ||
that's the first index of the candidates, and you push all those fates in there | |||
sorear | the trick is that fates are added to the fate pool in order of increasing high water | ||
which is the same as the order of increasing token length | |||
TimToady | but you don't necessarily have to have sorted all those fates in advance | ||
it can be done lazily, is what I'm saying | |||
sorear | so when we pull from the end, we always get the longest token first | ||
TimToady | sure, but what about ties? | 04:13 | |
that's what 2-5 are for in S05:45 | |||
either the fates are presorted in that order, or post-sorted | 04:14 | ||
if we can presort them, then your current approach is fine | |||
sorear | tiebreaking will be done by sorting the fates in _nfa_to_dfa | ||
#2 can be done by adding extra info to the fates | |||
a literal length field | |||
TimToady | yes, almost did that myself | ||
so if you can presort them, that's probably best, especially if the particular fate-set gets reused | 04:15 | ||
sorear | #3 and #4 fall out of stable ordering for free | ||
NFA nodes are added in the order of RE_ast nodes | |||
TimToady | maybe, or can be forced with a sort key | ||
sorear | I don't really understand #5 but it probably falls out from the same logic, if augmented definitions go on ends of lists | 04:16 | |
what, precisely, constitutes a literal prefix? | |||
TimToady | an exact character, possibly with canonicalization | 04:17 | |
so abc\w\w\w is 3 | |||
and maybe :i abc | |||
w | |||
:i abc\w\w\w | |||
but not abc<[de]> | |||
that's still 3 | 04:18 | ||
sorear | what about ab[d|e] ? | ||
what about :!s a b c ? | |||
TimToady | that's 2 | ||
sorear | what about "a""b""c"? | ||
TimToady | those are both 3 | ||
sorear | what about token x { abc } f <x> ? | ||
TimToady | that's 4 | 04:19 | |
sorear | a b [c] ? | ||
TimToady | looks like 3 | ||
gets a little dicey with a quantified literal / abc? / | 04:22 | ||
the current engine might actually put that either into [2] or [3] | |||
dunno exactly | |||
I could argue it should just be counted as 2 | 04:23 | ||
would like to keep the definition statically discernable without data | 04:24 | ||
but the idea is to privilege 'print' over \w+ | |||
does this make some sense to you? | 04:25 | ||
btw, when #5 says 'uses' it means 'use statements', not 'usages' | 04:27 | ||
szabgab | rakudo: (5...1).perl.say | ||
p6eval | rakudo 272191: OUTPUT«(5, 4, 3, 2, 1)» | ||
szabgab | rakudo: (5...^1).perl.say | ||
p6eval | rakudo 272191: OUTPUT«(5, 4, 3, 2, 1, 0, 0)» | ||
TimToady | "How many use statements did we traverse to get to the definition?" | ||
szabgab | the former is nice, the latter seem a bit double negative? | 04:28 | |
TimToady | it's being parsed as 5 ... ^1 I think | ||
rather than 5 ...^ 1 | |||
szabgab | rakudo: (5 ... ^1).perl.say | ||
p6eval | rakudo 272191: OUTPUT«(5, 4, 3, 2, 1, 0, 0)» | ||
szabgab | rakudo: (5 ...^ 1).perl.say | ||
TimToady | though it still shouldn't give two 0's | ||
p6eval | rakudo 272191: OUTPUT«(5, 4, 3, 2, 1, 0, 0)» | ||
TimToady | rakudo: (5 [...^] 1).perl.say | 04:29 | |
p6eval | rakudo 272191: OUTPUT«===SORRY!===Unable to parse infixish, couldn't find final ']' at line 11» | ||
TimToady | rakudo: (5 [...]^ 1).perl.say | ||
p6eval | rakudo 272191: OUTPUT«(5, 4, 3, 2, 1, 0, 0)» | ||
szabgab | what should be the difference between 5 ...^ 1 and 5 ... ^1 ? | ||
TimToady | yes, it doesn't know ...^ yet | ||
the first should make 5...2 and the second 5 ... 0 | 04:30 | ||
szabgab | ok | ||
sorear | yes, it makes sense | 04:31 | |
offtopic: In what ways is rakudo superior to pugs? | 04:32 | ||
TimToady | pugs: say 5...0 | ||
p6eval | pugs: OUTPUT«***  Unexpected "0" expecting operator, ":", "," or term postfix at /tmp/nqgOiM3aqI line 1, column 9» | ||
PerlJam | sorear: it's got an active developer community | ||
sorear | PerlJam: does pugs need a developer community? Every time I've run a perl6:, pugs is on top of the pack | 04:33 | |
TimToady | rakudo actually does lazy lists | ||
pmichaud | ...and soon it will even do them well. :) | ||
TimToady | it's much more developed on hyperoperators | ||
er, metaoperators | |||
and much better at regexen | 04:34 | ||
ciphertext | szabgab: related rt.perl.org/rt3/Ticket/Display.html?id=75674 | ||
TimToady | pugs sent most of its regexen off to P5 to evaluate | ||
04:35
Visitor99 joined
|
|||
sorear | I see. | 04:35 | |
sorear wonders what <[a..w]> means | |||
TimToady | std: /<[a..\w]>/ | 04:36 | |
p6eval | std 31286: OUTPUT«ok 00:01 109m» | ||
TimToady | hmm | ||
I thought that would give an error | |||
std: /<[\w..a]>/ | |||
p6eval | std 31286: OUTPUT«ok 00:01 109m» | ||
TimToady | std: /<[..a]>/ | 04:39 | |
p6eval | std 31286: OUTPUT«===SORRY!===Range missing start character on the left at /tmp/zo6bBIX1B5 line 1:------> /<[..⏏a]>/Check failedFAILED 00:01 105m» | ||
TimToady | std: /<[a..]>/ | ||
p6eval | std 31286: OUTPUT«===SORRY!===Range missing stop character on the right at /tmp/dF8MX70_fG line 1:------> /<[a..⏏]>/Check failedFAILED 00:01 105m» | ||
pugssvn | r31287 | sorear++ | [dfa/Cursor] Fix $var crash, handle \s and \w in character classes correctly | ||
TimToady | and \d? | 04:40 | |
sorear | \d is not used in STD.pm6; also, I'd like to gut the whole thing | 04:41 | |
RE_ast currently has to reparse character classes | |||
not good | |||
TimToady | nod | ||
pugssvn | r31288 | sorear++ | [dfa/Cursor] Debug information as fates are added to the fate pool | 04:49 | |
sorear | according to the automaton for statement_0, "" can be the prefix for alts 2, 4, and 5 | ||
this seems wrong | |||
well, 5 makes sense, but not 4 | 04:50 | ||
and *probably* not 2 | |||
TimToady | 4 makes sense if <stopper> is <!> | 04:51 | |
I don't know offhand what's making 2 nullable | 04:53 | ||
unless perhaps termish isn't getting promoted to EXPR | |||
sorear | "foomoo" ~~ / $<foo>=(foo) | $<id>=(...) [ .. » . ] /; # ??? | 04:54 | |
er | |||
"foomoo" ~~ / $<foo>=(foo) | $<id>=(...) [ .. » . ]? /; # ??? | 04:55 | ||
TimToady | term:miscbad is nullable | ||
sorear | ah | 04:56 | |
pmichaud | down to 368 failing tests in list branch | ||
sorear | OK, my current issue is bad tiebreaking | ||
r31288 allows me to see that "my" is being fated as a term:name | 04:57 | ||
04:58
mjk left
|
|||
pugssvn | r31289 | pmichaud++ | [t/spec] Change a reduce.t test to work slightly better in list branch. | 04:58 | |
TimToady | yes, 'my' is tiebroken on declaration order currently | 04:59 | |
that's why term:name is pretty far down | |||
# bare identifier without parens also handled here if no other rule parses it | 05:00 | ||
tiebreaker #4 | |||
sorear | dfa/ currently tiebreaks on reverse declaration order :/ | 05:03 | |
OH! | |||
That's why you have __S_\d\d\d | 05:04 | ||
TimToady | I think the old LTM managed to do #1..#4 | ||
yes, those are for #4 within protos | |||
other than that, they're pretty useless | |||
it would be nicer to just know the position where a rule was declared in each file, and sort on that, presumably by some kind of introspectoin | 05:06 | ||
but p5 isn't terribly good at that | |||
and \d\d\d is an arbitrary limit of 1000 functions, which is bogus too | 05:07 | ||
05:11
snarkyboojum joined
05:15
kaare joined,
kaare is now known as Guest71658
|
|||
sorear | TimToady: What does 'use' have to do with monkey patching? (#5) | 05:15 | |
If a grammar is subclassed, and a subclass provides a new multi token with the same long name, is the original one still used? | 05:16 | ||
05:16
meppel left
|
|||
TimToady | I don't remember my chain of reasoning, other than there was some way monkey patching could make it fall through the cracks of the other rules | 05:17 | |
certainly the subclass's name hides the superclasses | |||
I wouldn't worry about it for now | 05:18 | ||
#5 that is | |||
oh, I remember. suppose a class comes from two different files due to augmentation; you can't use #4 in that case | 05:19 | ||
that probably implies a #6, two equally distant use-chains use the earlier use first | 05:21 | ||
otoh, I suppose it could be argued that an augmentation should take precedence over the basic class | 05:25 | ||
05:25
supernovus joined
|
|||
sorear | what does "use" have to do with it first? | 05:30 | |
s/first/though/ | |||
supernovus | Well, having been working on a day-job that doesn't involve Perl 6, I seem to have missed a few great commits. IO::Socket::INET works again, and along with it, the SCGI library. Now that it works on the master branch again, how would I go about adding it to proto's projects.list? | 05:31 | |
TimToady | if you use something, it's presumably something more basic, so "use" distance is a proxy for genericity | 05:32 | |
and in general we want the more specific rule to take precedence | 05:33 | ||
hmm, actually, 'my' should be taking precedence by longest literal token (2) over the <ident> of term:name, which is 0 literal chars | 05:34 | ||
so that one is broken by #2 | |||
not by #4 as I surmised earlier | |||
sorear | well, use doesn't have to be involved at all | 05:35 | |
snarkyboojum | supernovus: get someone with commit access to the proto repo on github to add it to projects.list | ||
sorear | what if you're augmenting GLOBAL::something | ||
I would combine #4 and #5 into "all remaining ties are broken in the logical order of compilation" | 05:36 | ||
or equivalently "the order the rules were added to the alternation or class" | |||
TimToady | which is insane, when two different used files both use something else | ||
05:37
orafu left
|
|||
TimToady | or we could be like the C folks and just throw up our hands :) | 05:37 | |
05:37
orafu joined
|
|||
TimToady | and logical order of compilation puts used code in front of using code, which is backwards at least some of the time | 05:38 | |
snarkyboojum | supernovus: and if you add tests in a t/ directory you'll get another badge when it goes up on proto.perl6.org :) | ||
supernovus | snarkyboojum: Sounds like a good idea. I see you made the last commit (to that file from the looks of it). I still have to figure out how to write tests that don't involve setting up a web server with an SCGI module loaded... | 05:39 | |
snarkyboojum | supernovus: good point re tests - also, if you put your module in a lib/ directory, you can get ufo to generate a Makefile for you (if you want to do it that way) | 05:40 | |
TimToady | perhaps augment can have some way of marking its new methods as "unshifted" rather than "pushed" so they're logically in front of that particular class's methods | 05:42 | |
05:42
Visitor99 left
05:44
Meldrake_ left
|
|||
supernovus | snarkyboojum: Sounds good. I have moved SCGI.pm into a lib/ folder. I shouldn't need proto.deps as it has no external dependencies. | 05:44 | |
TimToady | almost makes you want to change #4 to latest one wins, then everything would be more consistent | 05:45 | |
supernovus | Anyway, the SCGI can be found at github.com/supernovus/SCGI Not sure if anyone is really interested in it, but it is MUCH faster than trying to call Perl 6 scripts through traditional CGI. | 05:49 | |
TimToady | <sorear> S05 and Cursor slightly disagree on how to handle zero-width positive lookahead assertions | 05:52 | |
Cursor is correct, the handling of <?before foo> has nothing to do with where it is in a rule | 05:53 | ||
<?before foo> is the same as 'foo' {} | |||
as far as lexing is concerned | |||
sorear | ok. | 05:54 | |
what about <ww> == <?before \w> <?after \w> | |||
TimToady | equiv to \w | ||
lookbehinds are ignored, as are negative lookaheads | 05:55 | ||
in any case, the after if after a before, so would be ignored anyway | |||
s/if/is/ | |||
since the <?before> terminates the declarative area after itself | 05:57 | ||
snarkyboojum | supernovus: ufo will generate a default make rule to compile your module to *.pir and test targets etc - just tried it locally on your project and work well :) | 05:58 | |
TimToady | (the others are simply transparent to LTM, and do not terminate the declarative area) | ||
they're just extra constraints to be checked afterwards | |||
sorear | does » turn into [ \W | $ ] {} ? | ||
supernovus | snarkyboojum: cool, I haven't tried ufo yet, but will definitely be adding it to my toolkit. :-) | 06:00 | |
TimToady | I'm inclined to think not | ||
probably best to leave it transparent too | |||
in general \w* will pick the rule that doesn't match » anyway if there's more \w after | 06:03 | ||
snarkyboojum | supernovus: I've added your module to proto.. I'm sure masak won't mind :) | ||
supernovus | I still have an interesting bug related to pre-compiling into .pir files. I have a certain library that compiles fine if the rest of the libraries are .pm, but bails out with a blockoid error if you pre-compile the other libraries. | 06:04 | |
snarkyboojum: thanks! | |||
snarkyboojum | supernovus++ :) | 06:05 | |
supernovus | snarkyboojum: I have a few other projects, but none of them have been fully weened from the 'alpha' branch yet... | ||
TimToady | it's also possible we should differentiate <?before foo> into two constructs, one of which is transparent like other 0-width, and the other of which is instruction to ltm that doesn't have to be rematched at parse time | ||
snarkyboojum | supernovus: I think there's quite a few projects listed in proto that aren't running against master (well there used to be) | ||
supernovus: I'm sure masak can give you a commit bit to proto anyway so you can add them as you see fit :) | 06:06 | ||
TimToady | <?ltm foo> or some such would finish off the current token, and always say "true" later since it knows it matches already | ||
sorear | as I'm currently doing this, [foo]+ is counted as a literal prefix length of 3 | 06:07 | |
since it's getting desugared to foo[foo]* | |||
TimToady | there's a good argument for that interpretation too | ||
I'm fine with that | 06:08 | ||
06:09
justatheory left
|
|||
TimToady | splitting <?before> is probably a bad idea really | 06:11 | |
the whole point of the strange rules is to hide the transition from declarative to procedural most of the time | |||
and you can always write <!!before> to get the transparent assertion | 06:12 | ||
moritz_ | good morning | ||
TimToady | o/ | ||
sorear | currently I have the nontransparent form for <?foo>, <before <foo>>, and <?before <foo>> | 06:14 | |
because viv optimizes them all to the same code | |||
TimToady | is fine for LTM | 06:17 | |
06:18
uniejo joined
06:19
uniejo left
|
|||
supernovus | I think it's time for bed. Have a good night/day everyone! | 06:30 | |
06:31
supernovus left
06:34
mjk joined
06:35
Zapelius joined
06:37
Guest14600 joined
|
|||
sorear | I should probably do something about DFA nodes which list the same fate several tiems | 06:38 | |
06:41
Guest14600 left,
Mowah joined,
Su-Shee joined
06:51
uniejo joined
|
|||
sorear | I seem to have broken something; EXPR__PEEK isn't getting generated | 06:54 | |
moritz_ is happy at the TODO passed in S32-list/map.t in rakudo's list branch | 07:09 | ||
pmichaud | yeah, I pretty much have everything S29 and up working now. | 07:10 | |
Tene | :D | 07:11 | |
pmichaud | where "working" means "passing tests", but perhaps not completely efficiently or correctly | 07:12 | |
szabgab | rakudo: if "ac" eq "de"|"ef" { say 1 } | 07:14 | |
p6eval | rakudo 272191: ( no output ) | ||
szabgab | in a junction of strings the " are just too noisy | ||
pmichaud | if "ac" eq any(<de ef>) { # maybe } | ||
szabgab | is there a way to write that nicer? | ||
rakudo: if "ac" eq any(<de ef>) { say 1 } | |||
p6eval | rakudo 272191: ( no output ) | ||
szabgab | rakudo: if "de" eq any(<de ef>) { say 1 } | ||
p6eval | rakudo 272191: OUTPUT«1» | 07:15 | |
szabgab | hmm | ||
sorear | to process a NFA with 3000 nodes (termish!), it needs ~5 minutes | ||
pmichaud | if "de" eq <de ef>.any { say 1 } | ||
sorear | I'm definitely making this lazy | ||
07:16
am0c joined
|
|||
Su-Shee | juppdideldi. good morning everyone! :) | 07:19 | |
07:26
JimmyZ left
|
|||
pmichaud | down to 167 failing tests. | 07:28 | |
pugssvn | r31290 | sorear++ | [dfa/Cursor] Implement the EXPR/termish hack in a more robust place. Implement tiebreaker rules #2, #3, and #4. Add diagnostics for runaway DFA generation. | 07:29 | |
07:31
mjk left
|
|||
pugssvn | r31291 | pmichaud++ | [t/spec]: Fudge and correct some tests based on list branch work. | 07:34 | |
07:34
pronik` left,
wallberg joined
|
|||
sorear | after 25 minutes, statementlist_0 DFA has reached 4650/10000 nodes | 07:35 | |
needs more lazy. | |||
one thing I've been thinking about is that the NFA generation *itself* could potentially be lazy | 07:38 | ||
that means no AUTOLEXgen | |||
07:38
plobsing left
|
|||
szabgab | junctions just drive me crazy | 07:46 | |
rakudo: if 1 eq any(<1 2 3>) { say 1 } | |||
p6eval | rakudo 272191: OUTPUT«1» | ||
szabgab | rakudo: if 4 eq any(<1 2 3>) { say 1 } | ||
p6eval | rakudo 272191: ( no output ) | ||
szabgab | rakudo: if 4 ne any(<1 2 3>) { say 1 } | ||
p6eval | rakudo 272191: OUTPUT«1» | ||
szabgab | rakudo: if 1 ne any(<1 2 3>) { say 1 } | ||
p6eval | rakudo 272191: ( no output ) | ||
pmichaud | rakudo currently has ne implemented not according to spec (recent spec change) | 07:47 | |
07:47
sdo_ left
|
|||
szabgab | interesting, that's not what I saw in my REPL | 07:47 | |
pmichaud | in the future, 1 ne any(<1 2 3>) will be equivalent to !(1 eq any<1 2 3>) | ||
rakudo: if !(1 eq any(<1 2 3>)) { say 1 } | 07:48 | ||
p6eval | rakudo 272191: ( no output ) | ||
pmichaud | yes, I'm not sure what the local rakudo is doing there. | ||
szabgab | it seems to do that now in the evalbot | ||
rakudo: if (1 ne any(<1 2 3>)) { say 1 } | |||
p6eval | rakudo 272191: ( no output ) | ||
pmichaud | maybe rakudo's already been fixed :-) | 07:49 | |
szabgab | rakudo: say 1 ne any(<1 2 3>) | ||
p6eval | rakudo 272191: OUTPUT«0» | ||
szabgab | rakudo: say 4 eq any(<1 2 3>) | 07:50 | |
p6eval | rakudo 272191: OUTPUT«any(Bool::False)» | ||
szabgab | rakudo: say !(1 eq any(<1 2 3>)) | ||
p6eval | rakudo 272191: OUTPUT«0» | ||
szabgab | I guess that should bee Bool::False ? | ||
pmichaud | yes. | ||
szabgab | oh I am so proud of myself now, I understood something, :) | 07:51 | |
07:51
azawawi joined
|
|||
azawawi | std: say "Hello"; | 07:51 | |
p6eval | std 31290: OUTPUT«ok 00:01 107m» | 07:52 | |
azawawi | std: use v6; my $x = Mu; $x.say; | ||
p6eval | std 31290: OUTPUT«ok 00:01 105m» | ||
mathw | Morning | 07:53 | |
07:55
gfx joined
07:57
azawawi left
08:06
wallberg left
|
|||
Tene | morning! | 08:06 | |
mathw | Hey Tene | 08:08 | |
sorear | 1 hour of CPU time and only up to 20,000 nodes. | 08:14 | |
in other news, I now have a workable design for lazy NFA building | 08:15 | ||
pugssvn | r31292 | pmichaud++ | More rakudo list-branch related updates. | 08:17 | |
ciphertext | rakudo: say (^5)[0]; | 08:19 | |
p6eval | rakudo 272191: OUTPUT«Method 'postcircumfix:<[ ]>' not found for invocant of class 'Range' in main program body at line 1» | ||
pmichaud | needs test, needs fixing. | ||
ciphertext | in the list branch, that returns "maximum recursion depth exceeded" | 08:20 | |
pmichaud | yes, needs fixing :) | 08:21 | |
fixing now. | |||
mathw | pmichaud++ | ||
08:27
dakkar joined
|
|||
pmichaud | > say (^5)[1,2,0] | 08:29 | |
120 | |||
pushed as 5202fa7 (into list branch) | 08:30 | ||
08:30
sorear left
08:31
rob-_- joined,
sorear joined
|
|||
pmichaud | ...but apparently it broke a bunch of other stuff. | 08:31 | |
(not the range fix, but the other "fix" I threw in there as well) | 08:33 | ||
Tene | yay, breaking! | ||
pmichaud | pushed as 50b982a | 08:35 | |
okay, time for sleep here | 08:36 | ||
08:36
am0c left
|
|||
pugssvn | r31293 | sorear++ | [dfa/Cursor] Sketch of a design for the lazy NFA generator | 08:47 | |
cosimo | AWESOME | 08:48 | |
08:48
jhuni left
|
|||
cosimo | just got perl6 to connect to a MySQL database! \o/ | 08:48 | |
mberends: FakeDBI works for me, yea! | |||
arnsholt | Cool | 08:50 | |
08:50
am0c joined
|
|||
Su-Shee | cosimo: shiny. what else did you use? :) | 08:53 | |
szabgab | rakudo: class Abcd { method y() {} }; Abcd.y(); | 08:54 | |
p6eval | rakudo 272191: ( no output ) | ||
cosimo | Su-Shee: zavolaj | ||
08:54
rob-_- left
|
|||
szabgab | rakudo: class Abcd { method y() {} }; say Abcd.y(); | 08:54 | |
p6eval | rakudo 272191: OUTPUT«Null PMC access in type() in main program body at line 11:/tmp/5iKbK2u6oD» | ||
cosimo | NativeCall.{pir,pm6} | 08:55 | |
and FakeDBI/DBD | |||
szabgab | cosimo, you do seriously crazy stuff! | ||
Su-Shee | cosimo: hopefully, I'll have some more methods finished by the end of the week. | 08:56 | |
or at least one. ;) | |||
cosimo | Su-Shee: maybe you meant what methods? just connect for now, and DROP TABLE.. the test scripts basically :) | ||
Su-Shee | cosimo: use something else and tell us how it went. :) | 08:57 | |
cosimo | szabgab: i don't understand | ||
Su-Shee: I was stuck on compiling/installing NativeCall. Now that that is done, I can try something else... | 08:58 | ||
moritz_ | szabgab: that's a known bug (that empty statement list return parrot Null PMC, not Nil) | ||
szabgab | cosimo, just appreciation | ||
08:58
rob-_- joined
|
|||
cosimo | szabgab: not doing anything special really, but thanks | 08:58 | |
snarkyboojum | rakudo: class Abcd { method y() {...} }; say Abcd.y(); | 08:59 | |
p6eval | rakudo 272191: ( no output ) | ||
Su-Shee | cosimo: I think, I just threw the pm6 module into @*INC. (~/.perl6/lib) | 09:00 | |
moritz_ | img267.imageshack.us/img267/2687/booka4.pdf | 09:02 | |
that's what pronik++ did to the book... awesome | 09:03 | ||
snarkyboojum | moritz_: yeah - looks v. nice :) | ||
Su-Shee | ery clean and readable. | 09:04 | |
arnsholt | Nice. I like the sans serif for headers and such | ||
Su-Shee | uhm, very. | ||
pmichaud | list branch down to 146 failing tests | 09:05 | |
sorear | TimToady: azawawi in #padre wants E-numbers in STD.pm6 error messages... opinions? | ||
moritz_ | I think the last consensus was that we'll standardize printf formats for error messages | ||
and make them available in the exception object | 09:06 | ||
so that one can rely on those for i18n, catching certain expressions etc. | |||
Su-Shee | hrgh, I need a rakudo in the office. | ||
sorear | he's hacking on an IDE autofixer | ||
snarkyboojum | pmichaud++ that's about 400 errors less than several hours ago :O | 09:07 | |
arnsholt | Su-Shee: I'm spectesting an office Rakudo right now =D | ||
Not sure I'll get to use it though | |||
Su-Shee | arnsholt: I need a perl6 in reach, otherwise I don't feel safe. ;) | 09:08 | |
arnsholt | Yeah, that's more or less my reasoning as well | ||
Su-Shee | also, I have to transfer some data from one db into another in 2 weeks and I want to do it with rakudo and fakedbi I've just decided. | 09:09 | |
arnsholt | Make sure to write it up afterwards =) | ||
Su-Shee | I reserved the entire july for "evaluating future frameworks and technologies" :) | 09:10 | |
moritz_ | wow, seems like a nice job if you can do that :-) | 09:11 | |
(that said, currently my whole job consists of evaluating future technologies, and maybe invent some of my own :-) | |||
Su-Shee | moritz_: well there is the other side of the medal - the perl 5 code I have to enhance, debug and extend. ;) | ||
09:12
samlh joined
|
|||
Su-Shee | moritz_: no, it's really simple -> company is commited to perl -> someone has to have an eye on perl's future in terms of moose and perl 6 -> I'm pressuring and prodding that we actually do that for real and not just say "yes, let's have a look into new things." | 09:12 | |
also this f**** code has to be rewritten entirely and I'm not willing to old school bless 5 my ass off by hand for the next version. | 09:13 | ||
pmichaud | just fixed a bug that recovered another 56 tests, so down to 90ish. | 09:14 | |
moritz_ | pmichaud: Match.pair uses take $key => $value | 09:15 | |
09:15
gfx left
|
|||
samlh | moritz_: re book, the code on page 55 and a couple other pages looks messed up | 09:15 | |
moritz_ | pmichaud: and the resulting list contains a a Capture of Pair, not a Pair directly | ||
szabgab | rakudo: my $x = Mu; $x = "3$x"; say $x.perl; say $x ~~ Mu; | ||
p6eval | rakudo 272191: OUTPUT«"3Mu()"1» | ||
szabgab | rakudo: my $x = Mu; $x = "3$x"; say $x.perl; say $x.defined | ||
p6eval | rakudo 272191: OUTPUT«"3Mu()"1» | ||
moritz_ | samlh: yes, it still has a few rough spots | ||
pmichaud: is that correct/expected? | 09:16 | ||
and if yes, how do I lazily return a List of Pair objects? | |||
pmichaud | moritz_: which method is this? | ||
moritz_ | pmichaud: Match.caps | 09:17 | |
pmichaud | try to write it without storing in @caps | ||
anytime you store the results in an array, it's non-lazy | |||
(i.e., @caps) | 09:18 | ||
moritz_ | uh right | ||
pmichaud | looking. | ||
moritz_ | it's not going to be lazy anyway, since I need to sort | ||
so there's no need for gather/take really | |||
pmichaud | well, storing in an array also has the effect of itemizing the elements | ||
which means they no longer flatten | 09:19 | ||
I think X=> isn't quite working right, or that could be shortened | 09:20 | ||
i.e.,: | |||
if $p.value ~~ Array { ($p.key X=> $_).map( { take $_ } ) } | 09:21 | ||
arnsholt | Has anyone tried to write something along the lines of perl6doc yet? | ||
09:22
lestrrat is now known as lest_away
|
|||
pmichaud | didn't get that quite right | 09:22 | |
anyway | |||
moritz_: you probably want some flat() or .flat in there | |||
moritz_ | pmichaud: I'm trying a very simple version that uses @caps.push | 09:23 | |
mathw | 'no need for gather/take' - maybe not for laziness, but it makes for some very nice coding patterns even if you're eager | ||
moritz_ | since I need to sort by .from anyway | ||
hm | 09:24 | ||
sorear | arnsholt: there's App::Grok. go ask literal if ey would add a --skip-ambient-code option | ||
moritz_ | mathw: agreed | ||
seems to work | 09:26 | ||
now the only problem left in .caps is that it's returning a Parcel, not a List | |||
but I think that's OK too | |||
we should really test that it returns something Positional | 09:27 | ||
and leave it to the implementation to return the most-suitable Positional type | |||
pmichaud | Parcel is often more correct than List. | ||
(and there's some speculation that Parcel may in fact be ~~ List) | |||
09:30
wallberg joined
|
|||
arnsholt | sorear: Thanks! | 09:31 | |
pmichaud | what I ended up with: | ||
(self.list.pairs, self.hash.pairs).map( { .value ~~ Array ?? .key X=> .value.list !! $_ }).sort( { .value.from } ); | |||
arnsholt | Even though a Perl 6 documentation reader written in Perl 5 is a bit sad =) | 09:32 | |
pmichaud | actually don't need .list on .value there -- we already know it's a list. | 09:33 | |
ah, but we might need to de-itemize it | |||
so need .list | |||
09:34
am0c left
|
|||
pmichaud | another better-formatted version: nopaste.snit.ch/21288 | 09:34 | |
anyway, I'm not sure that X=> is working quite right yet. | |||
and might want a .flat before the .sort | 09:35 | ||
ciphertext | does anybody know what (1,1...5) should return? currently it's an infinite list of 1's. | 09:36 | |
mathw | arnsholt: then port it | ||
arnsholt: could be fun, and would give Rakudo a good workout | |||
arnsholt | mathw: Well, I -am- thinking about it =) | 09:38 | |
Is literal == cpan:hinrik? | 09:39 | ||
09:40
samlh left
|
|||
Tene | ciphertext: S03 doesn't *quite* say what should happen, but almost does. | 09:40 | |
09:40
gbacon joined
|
|||
Tene | "For intuited numeric generators that don't involve geometric sign changes, all values are assumed to be monotonically increasing or decreasing, as determined by the (up to) three values used above; if a supplied limit value is on the "wrong" side of the first of those values, Nil is returned, even though the limit value never matches, and never falls between two generated values." | 09:40 | |
ciphertext: I'd recomment an addition to the spec after this para: "If $ab == $bc and $ab is not zero, then we deduce an arithmetic progression determined by the function *+$ab. If $ab is zero, and the three values look like numbers, then the function is *+0. If they do not look like numbers, then the function selected is either *.succ or *.pred depending on whether $b cmp $c appears to be Increasing or Decreasing. If cmp returns Same then an ... | 09:42 | ||
... identity function is assumed." | |||
09:43
tadzik joined
|
|||
Tene | or by the other | 09:43 | |
ciphertext: So, it should probably return Nil, according to the spec. | 09:44 | ||
ciphertext | Tene: that's what I was leaning towards. thanks | ||
cognominal | rakudo: say gather for 1 { take 1,2,3 } | 09:46 | |
p6eval | rakudo 272191: OUTPUT«too many positional arguments: 3 passed, 1 expected in 'say' at line 1 in 'say' at line 4724:CORE.setting in main program body at line 11:/tmp/81DBCiqTuF» | ||
cognominal | is there a reason why take accepts only one argument? | ||
09:46
zamolxes left
|
|||
moritz_ | not really | 09:48 | |
Tene | I expect that the behavior of what that would mean isn't specified. | ||
moritz_ | it should take a raw capture, and pass that on | ||
Tene | Sounds reasonable. | ||
pugssvn | r31294 | sorear++ | [dfa/Cursor] Implement lazy DFA generation. Time to parse a Stash.pm6 from >>1 hour to 6 seconds | ||
sorear | one of the most effective optimizations I've ever done. | ||
09:48
zamolxes joined
|
|||
colomon | sorear++ | 09:49 | |
pmichaud | > say gather for 1 { take (1,2,3) } | 09:50 | |
123 | |||
moritz_ | that's not the same | ||
take (1, 2, 3) vs take 1, 2, 3 | |||
pmichaud | yes, I know. | ||
take should have the same signature as return | 09:51 | ||
cognominal | should I masak that? I mean, file a bug? | ||
moritz_ | yes, please | 09:52 | |
pmichaud | src/builtins/control.pir, line 220 | ||
.param pmc value | |||
should be | |||
.param pmc value :slurpy | |||
and then do the same processing as in &return above | 09:53 | ||
in many ways, both &return and &take are the same, what differs is the type of exception thrown. | 09:54 | ||
mathw | hah 'should I masak that' :) | ||
moritz_ | so... return doesn't treat its argument list lazily? | 09:55 | |
pmichaud | okay, I'm definitely doing sleep for a bit. bbiaw | ||
moritz_ | good night | ||
pmichaud | sure, it's lazy | ||
moritz_ | $I0 = elements retvals | ||
pmichaud | :slurpy just means that all of the arguments are captured into an RPA | ||
it's an RPA, not a Parcel or List | 09:56 | ||
moritz_ | that doesn't look very lazy to me | ||
ok | |||
pmichaud | it's saying how many things are in the RPA. That doesn't do any flattening. | ||
for example, if I have | |||
return 3, @a, %h, @b[4,5] | |||
then the number of elements in retvals will be 4 | |||
(an Int, an Array, a Hash, and a Parcel) | 09:57 | ||
moritz_ | so it's quite different from the from a slurpy in Perl 6 signature | ||
s | |||
pmichaud | yes | ||
it's much more like a slurpy in p5 | |||
but no, Parrot doesn't have natively lazy or flattening structures :) | |||
mathw | which makes sense really :) | 09:58 | |
pmichaud | only 90 tests to go | ||
mathw | I thought you'd gone to bed, pmichaud | ||
pmichaud | whoever fixes S12-introspection/methods.t will gain another 35 tests :) | ||
mathw: I'm having too much fun cleaning up bugs :) | 09:59 | ||
mathw | Fair enough :) | ||
pmichaud | and I think this test may be wrong: | ||
S02-builtin_data_types/array_extending.t 19 - join on extended array | |||
(test #19 in array_extending.t) | 10:00 | ||
if anyone wants to look at that, that'd be great. | |||
okay, I'm gone | |||
later | |||
mathw | bye! | 10:01 | |
sorear | Will 'list' be able to add any entirely new tests? | 10:03 | |
moritz_ | not sure | ||
pugssvn | r31295 | sorear++ | [dfa/Cursor] Fix a little fossillized bug | 10:04 | |
moritz_ | pmichaud: I think S02-builtin_data_types/array_extending.t 19 - join on extended array looks fine; I don't think our arrays are specced to be sparse | 10:14 | |
pugssvn | r31296 | moritz++ | [t/spec] be less strict about return types from $/.caps and .chunks | 10:16 | |
10:18
gbacon left
|
|||
Tene | how to run spectest in parallel? | 10:19 | |
10:20
tadzik left
|
|||
sorear is reading ECMA-335 "Common language infracstructur" | 10:20 | ||
Tene | ah, TEST_JOBS=4 | ||
10:22
tadzik joined
|
|||
cognominal | rakudo: say < .. . > >>~~>> :d | 10:23 | |
p6eval | rakudo 272191: OUTPUT«11» | 10:24 | |
cognominal | rakudo: say < .. . > ~~ :d | ||
p6eval | rakudo 272191: OUTPUT«Method 'd' not found for invocant of class 'Parcel' in 'Enum::ACCEPTS' at line 4577:CORE.setting in 'infix:<~~>' at line 347:CORE.setting in main program body at line 11:/tmp/t5_MpJg3oj» | ||
cognominal | hum, I thought it would return if either any or all elements matched in the list. | 10:25 | |
moritz_ | well, that's exactly the problem - any or all? | 10:27 | |
cognominal | Also I naively expected that, in list context, ~~ with a Positional in the left would act as a grep. | ||
moritz_ | which is why we force any() or all() from the user | ||
cognominal | rakudo: say all( < .. . > ) ~~ :d | 10:28 | |
p6eval | rakudo 272191: OUTPUT«all(Bool::True)» | ||
10:33
azawawi joined
|
|||
cognominal | that leads to the problem of error messages, an helpful error message in term of ACCEPTS would not so helpful | 10:34 | |
ciphertext | rakudo: say (*..5).WHAT; | 10:35 | |
p6eval | rakudo 272191: OUTPUT«Range()» | ||
azawawi | sorear: ping | 10:36 | |
hi moritz_ | |||
pugssvn | r31297 | sorear++ | [dfa/Cursor] Tiebreak in favor of the _longest_ literal prefix... | 10:40 | |
ciphertext | rakudo: my @a = 1..5; say @a[0..*]; | ||
p6eval | rakudo 272191: ( no output ) | ||
sorear | azawawi: pong | 10:41 | |
TimToady: I may have found a bug in STD.pm6... look at mod_internal:oops, it has a literal prefix of length 1, look at mod_internal:sym<:i>, 0, dfa/Cursor tiebreaks in favor of oops... | 10:48 | ||
sorear -> sleep | |||
10:54
ggoebel joined
11:01
xabbu42 joined
11:05
azert0x joined
11:06
broquaint left
11:09
rgrau_ joined
11:18
rv2733 joined
|
|||
moritz_ | hi azawawi | 11:18 | |
11:20
rv2733 left
|
|||
moritz_ | rakudo: my $x = 3; repeat { $x++ } until $x > 5; say $x | 11:25 | |
p6eval | rakudo 272191: OUTPUT«6» | ||
11:33
azawawi left
11:37
TiMBuS joined,
envi^home joined
11:43
[Coke] joined
11:44
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42,
arthur-- left
11:45
am0c joined
11:55
rob-_- left
|
|||
takadonet | morning all | 11:56 | |
11:59
rob-_- joined
12:00
arthur-- joined
|
|||
szabgab | my $fh = open 'README', :r; for $fh.get -> $line { say $line } | 12:02 | |
only reads the first line | |||
for lines('README') -> $line { say $line } | |||
worked | 12:03 | ||
12:03
bluescreen joined
|
|||
moritz_ | for $fh.lines -> ... | 12:03 | |
.get is one item only | |||
szabgab | what does .get do ? | ||
12:03
bluescreen is now known as Guest37981
|
|||
szabgab | my $fh = open 'README', :r; while (my $line = $fh.get) { say $line } | 12:03 | |
also just one line | |||
moritz_ | that's dangerous | 12:04 | |
because i autochomps | |||
*it | |||
szabgab | which one? | ||
moritz_ | so if i's an empty line or zero, the loop terminates | ||
szabgab | .lines autochomps as I can see | 12:05 | |
moritz_ | both .get and .lines | ||
szabgab | ok | ||
aha | |||
so it won't work as in p5 | |||
moritz_ | so while (my $line= $fh.get) is not nice | ||
right | |||
12:05
[Coke] left
12:06
dual left
|
|||
szabgab | my $fh = open 'README', :r; while (my $line = $fh.get).defined { say $line } | 12:06 | |
worked :) | |||
moritz_ | that's so p5 | ||
szabgab hides | |||
but that helped understanding | |||
for lines('README') -> $line { say $line } | 12:07 | ||
looks the best so far | |||
moritz_ | aye | ||
12:07
[Coke] joined
|
|||
Su-Shee | hm, say for lines('README')? :) | 12:08 | |
moritz_ | .say please | ||
szabgab | when opening a file do we now check return values? as in if my $fh = open 'README', :r { ... } ? | ||
tadzik | btw, is there any neat while(<>) equivalent in Perl 6? | ||
moritz_ | szabgab: the paradigm is not to check the return value | 12:09 | |
szabgab | or we just let it die (or not) | ||
moritz_ | szabgab: but just use it, and it will die if used and the open did't work | ||
Su-Shee | tadzik: readlines or getlines or something for starters. | ||
moritz_ | though it might not yet throw the right exception in rakudo | ||
colomon | wait, does that mean open or die doesn't work anymore? | 12:15 | |
moritz_ | I think it should still work, but it should be redundant | 12:18 | |
btw I have a fix for .match with :g and :nth in the list branch | 12:19 | ||
spectesting now | |||
12:20
rob-_- left
|
|||
colomon | moritz_: I just pushed a fix for that. | 12:20 | |
moritz_ too slow | |||
actually I fixed before lunch, and forgot to spectest an push | 12:21 | ||
colomon | doh! sorry about that. | ||
moritz_ | my own fault entirely | 12:22 | |
I did't about it before, so you couldn't have known | 12:23 | ||
12:23
skids joined
|
|||
moritz_ | s/missing verb/talk/ :-) | 12:24 | |
12:25
rob-_- joined
12:27
mjk joined
|
|||
colomon | gist.github.com/440594 is my list of failing tests (pre-match fix) | 12:27 | |
moritz_ | colomon: your fix is nicer than mine | ||
colomon | seems like main-usage.t (for instance) is probably just lagging behind the master branch? | ||
thank you. | |||
moritz_ | when was the last merge from trunk? | 12:28 | |
12:28
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
|
|||
colomon | hmmm, just seven hours ago? | 12:28 | |
moritz_ | then it's something else | 12:29 | |
colomon | well, bother. so much for that theory. | ||
Can you take a look at that one? I think you know that stuff infinitely better than I do. | 12:30 | ||
moritz_ | will do | ||
12:31
[Coke] left
|
|||
moritz_ | might not be able to do it now, I'm in a meeting | 12:31 | |
colomon | no worries | 12:32 | |
12:32
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
|
|||
moritz_ | seems like a flattening problem in MAIN_HELPER | 12:34 | |
12:39
masonkramer left
12:40
masonkramer joined
12:44
clintongormley joined,
mjk left
|
|||
colomon | .trans bugs seem to be yet another Range issue. :( | 12:48 | |
obviously the Range tests are less than great. | |||
I've already got improved ones I'm not pushing since I think they won't work in master. | |||
moritz_ ponders a github branch of the spectests for list | 12:49 | ||
12:50
pmurias joined
|
|||
pmurias | hi | 12:50 | |
tadzik | hi | ||
pmurias | tadzik: which city in Poland are you from? | ||
tadzik | Warsaw | ||
well, near Warsaw, but you wouldn't probably recognise Izabelin anyway :) | 12:51 | ||
pmurias studies in Wroclaw | |||
12:52
dlm joined
|
|||
dlm | perl6: 3+3 | 12:52 | |
p6eval | elf 31297, pugs, rakudo 272191: ( no output ) | ||
dlm | perl6: 3+3.perl | ||
p6eval | elf 31297, pugs, rakudo 272191: ( no output ) | ||
dlm | perl6: 3+3.perl.say | ||
p6eval | elf 31297, pugs, rakudo 272191: OUTPUT«3» | ||
dlm | perl6: (3+3).perl.say | ||
p6eval | elf 31297, pugs, rakudo 272191: OUTPUT«6» | ||
moritz_ | wow, all three agree | ||
dlm | perl6: (3 div 3).perl.say | 12:53 | |
p6eval | rakudo 272191: OUTPUT«1» | ||
..pugs: OUTPUT«***  Unexpected "div" expecting operator or ")" at /tmp/18o_S0iUeC line 1, column 4» | |||
..elf 31297: OUTPUT«Undefined subroutine &GLOBAL::infix_div called at (eval 124) line 3. at ./elf_h line 5881» | |||
12:53
dual joined
|
|||
pmurias | would it be possible to take elf out of the evalbot? | 12:54 | |
dlm | perl6: (3..*).perl.say | ||
p6eval | elf 31297: OUTPUT«Undefined subroutine &GLOBAL::whatever called at (eval 126) line 3. at ./elf_h line 5881» | 12:55 | |
..pugs: ( no output ) | |||
..rakudo 272191: OUTPUT«3..*» | |||
moritz_ | pmurias: sure, should be a simple patch | ||
mildew: say (1..3).perl | |||
12:55
sorear left
|
|||
p6eval | mildew: OUTPUT«Can't open perl script "mildew": No such file or directory» | 12:56 | |
12:56
sorear joined
|
|||
dlm | perl6: sub x(Whatever $x) { say $x.perl } x(*) | 12:56 | |
p6eval | rakudo 272191: ( no output ) | 12:58 | |
..pugs: OUTPUT«\Inf» | |||
..elf 31297: OUTPUT«syntax error at (eval 130) line 3, near "(sub x""my" variable $Call::Api can't be in a package at (eval 130) line 3, near "($Call::Api"syntax error at (eval 130) line 6, near ")}" at ./elf_h line 5881» | |||
colomon | rakudo: sub x(Whatever $x) { say $x.perl }; x(*) | 12:59 | |
moritz_ | I think there's a ticket for that in RT | ||
12:59
perlygatekeeper joined
|
|||
colomon | k. | 12:59 | |
p6eval | rakudo 272191: OUTPUT«!whatever_dispatch_helper» | ||
colomon | errr, except it works. :) | 13:00 | |
moritz_ | rakudo: sub f($x) { say $x.WHAT }; f * | ||
slooow | 13:01 | ||
p6eval | rakudo 272191: OUTPUT«Whatever()» | ||
huf | .oO(say $x.WHAT.AGAIN) (i know it's old...) |
13:02 | |
cono | rakudo: %*VM.perl.say | ||
p6eval | rakudo 272191: ( no output ) | 13:05 | |
cono | %*VM removed? | 13:06 | |
moritz_ | rakudo: say %*VM<config><revision> | ||
p6eval | rakudo 272191: OUTPUT«47640» | 13:07 | |
cono | ah :) | ||
moritz_: in REPL I have: Method 'postcircumfix:<{ }>' not found for invocant of class 'Failure' | 13:09 | ||
but perl6 -e 'say %*VM<config><revision>' works fine | |||
moritz_ | huh | ||
please submit rakudobug | |||
cono | ok, thanks ) | 13:10 | |
13:10
xabbu42 left,
xabbu42 joined
|
|||
tadzik | rakudo: {"hash" => {"three" => "four", "one" => "two"}, "foo" => "bar"}.say | 13:11 | |
p6eval | rakudo 272191: ( no output ) | ||
tadzik | oh you. Works for me | ||
moritz_ | seems like the load on that server is too high | 13:12 | |
cono | rakudo: ("hash" => ("three" => "four", "one" => "two"), "foo" => "bar").perl.say | ||
p6eval | rakudo 272191: OUTPUT«("hash" => ("three" => "four", "one" => "two"), "foo" => "bar")» | ||
moritz_ | one of the pugs processes hang | 13:13 | |
don't know why the CPU time limit didn't work :( | |||
tadzik | rakudo: my $x = 5; $x.say.WHAT | ||
p6eval | rakudo 272191: OUTPUT«5» | ||
tadzik | what does WHAT do in this case? | 13:14 | |
moritz_ | it returns the type object of the return value of say | ||
in void context | |||
so it has no effect | |||
tadzik | mhm | ||
rakudo: my $x = 5; $x.say.WHAT.say | |||
p6eval | rakudo 272191: OUTPUT«5Bool()» | ||
colomon | Okay, Range works better, and so trans.t works again (on list) | 13:16 | |
moritz_ | \o/ | 13:17 | |
mathw | rakudo: enum Alignment <top middle bottom>; my Alignment $a = Alignment::top; $a.WHAT.say; | 13:18 | |
p6eval | rakudo 272191: OUTPUT«Type check failed for assignment in '&infix:<=>' at line 1 in main program body at line 11:/tmp/CJvSM8MB8Q» | 13:19 | |
pugssvn | r31298 | pmurias++ | [smop] changed %mold to %yeast | ||
13:19
Guest71658 left
13:20
JimmyZ joined
13:22
JimmyZ left
|
|||
Zapelius | any progress on this one ? rt.perl.org/rt3//Public/Bug/Display...l?id=74078 | 13:22 | |
13:23
JimmyZ joined
|
|||
colomon | rakudo: role Animal { method speak() { say "Blah"; } }; role | 13:23 | |
Canine does Animal { method speak() { say "Howl"; }}; class Dog does | |||
Canine { }; Dog.new.speak | |||
p6eval | rakudo 272191: OUTPUT«===SORRY!===Malformed package declaration at line 11, near ""» | ||
colomon | rakudo: role work { method x {say 'hello'}}; class me does work {}; me.new.x() | ||
p6eval | rakudo 272191: OUTPUT«Could not find sub &say in 'x' at line 11:/tmp/aE2qOewgnJ in main program body at line 11:/tmp/aE2qOewgnJ» | ||
Zapelius | it's kind of nasty to have lines like << our &bug_sprintf = &sprintf; >> :) | ||
colomon | no resolution, anyway. :( | ||
13:28
sawyer_ left
13:34
gbacon joined,
sdvsdvsdv joined
13:35
arthur-- left
13:38
cdarroch joined,
cdarroch left,
cdarroch joined,
uniejo left
13:39
sawyer_ joined
13:40
araujo left
13:41
araujo joined
13:42
araujo left
13:57
wallberg left
13:59
Zapelius left
14:09
Guest23195 joined
|
|||
pmichaud | good morning, #perl6 | 14:13 | |
colomon | o/ | ||
you're awake already?! | |||
I figured we wouldn't see you for another six hours or so.... | 14:14 | ||
14:16
rob-_- left
|
|||
pmichaud | I'm awake already. :-) | 14:16 | |
I want to finish the branch. :-) | 14:17 | ||
moritz_ | does parallel dispatch and Z=> work in the branch? | ||
pmichaud | 10:14 <moritz_> pmichaud: I think S02-builtin_data_types/array_extending.t 19 - join on extended array looks fine; I don't think our arrays are specced to be sparse | ||
I agree, arrays aren't sparse. | |||
So, with | |||
my @a; @a[2] = 'x'; say @a.join(':'); | 14:18 | ||
14:18
plobsing joined
|
|||
pmichaud | I would expect that to be the same as @a[0] ~ ':' ~ @a[1] ~ ':' ~ @a[2] | 14:18 | |
and then question then becomes, what are the values of @a[0] and @a[1]? ;-) | 14:19 | ||
[particle] | Nil | ||
moritz_ | Any | ||
pmichaud | ...and how does Any stringify? | ||
rakudo; say Any | |||
rakudo: say Any | |||
p6eval | rakudo 272191: OUTPUT«Any()» | ||
pmichaud | so I would expect "Any():Any():x" as the result. | 14:20 | |
moritz_ | pmichaud: it ~es to '', and .Stres to Any | ||
pmichaud | okay. | ||
[particle] | rakudo: say Any.Str | ||
p6eval | rakudo 272191: OUTPUT«Any()<0x23b4c70>» | ||
moritz_ | it needs the Stringy vs. Str distinction for type objects | ||
colomon | pmichaud: I'm running spectest (well, test_summary.pl) on the latest, unless you or moritz_ have very recent changes | ||
pmichaud | colomon: I'm about to do the same. :0 | ||
:) | 14:21 | ||
moritz_ hasn't | |||
since we don't have that distinction yet, I'd be fine with regressing on that test | |||
colomon | moritz_++ and I fixed a number of things while you were sleeping. :) | ||
pmichaud | colomon: this is what I was hoping for :) | ||
moritz_: I agree, we'll regress. | |||
colomon | pmichaud: still plenty to go, of course. | ||
pmichaud | I think there were only 90 failing tests when I went to sleep a few hours ago | 14:22 | |
pmurias | diakopter: hi | ||
colomon | pmichaud: that count doesn't actually get entire files that fail, does it? | 14:23 | |
pmichaud | colomon: well, it does if it can. | ||
i.e., if it doesn't have 'plan *' | |||
colomon | I'll have a current error list in a couple of minutes (it's currently testing cotanh.t) | ||
A number of the remaining issues seem to involve junctions. | 14:24 | ||
pmichaud | excellent. I know there's a bug with list assignment that is affecting S06-parameters | ||
yeah, I'm not quite sure what's up with junctions yet | |||
14:25
ash__ joined
|
|||
pmichaud | afk for a short bit | 14:26 | |
14:30
macdaddy joined
|
|||
colomon | gist.github.com/440780 | 14:32 | |
(failures) | |||
14:32
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
|
|||
colomon | 31 by count, but it looks like that includes about seven files without plans. | 14:32 | |
[particle] | yeah, i count 31 too | 14:34 | |
colomon | one of those files is range-iterator.t, which is completely 100% wrong in the new system. | ||
just going to disable it. | |||
lue | hai | ||
colomon | o/ | 14:35 | |
moritz_ | if it's wrong, delete it | ||
dlm | perl6: Nil.say | ||
p6eval | pugs: OUTPUT«*** No such subroutine: "&Nil" at /tmp/5nYZ8f6OGd line 1, column 1 - line 2, column 1» | ||
..elf 31298: OUTPUT«Can't locate object method "say" via package "Nil" (perhaps you forgot to load "Nil"?) at (eval 122) line 3. at ./elf_h line 5881» | |||
..rakudo 272191: OUTPUT«» | |||
dlm | perl6: Nil().say | ||
p6eval | elf 31298: OUTPUT«Undefined subroutine &GLOBAL::circumfix_N_32_41 called at (eval 123) line 3. at ./elf_h line 5881» | ||
..pugs: OUTPUT«*** No such subroutine: "&Nil" at /tmp/0k7XPUjT_6 line 1, column 1 - line 2, column 1» | |||
..rakudo 272191: OUTPUT«» | |||
dlm | perl6: say Nil | ||
p6eval | pugs: OUTPUT«*** No such subroutine: "&Nil" at /tmp/XMMEZB0Wb6 line 1, column 5 - line 2, column 1» | ||
..elf 31298: OUTPUT«Nil» | |||
..rakudo 272191: OUTPUT«» | |||
dlm | perl6: say perl 3 | 14:36 | |
p6eval | elf 31298: OUTPUT«Undefined subroutine &GLOBAL::perl called at (eval 123) line 3. at ./elf_h line 5881» | ||
..rakudo 272191: OUTPUT«Could not find sub &perl in main program body at line 11:/tmp/K4EqJ0eh3Y» | |||
..pugs: OUTPUT«3» | |||
dlm | perl6: say 3.perl | ||
p6eval | elf 31298, pugs, rakudo 272191: OUTPUT«3» | ||
colomon | moritz_: well, at some point someone should probably go in and re-write it. but the Spec hasn't finalized yet... | ||
dlm | rakudo: say 3 + Nil | ||
p6eval | rakudo 272191: OUTPUT«3» | ||
dlm | rakudo: say(3 + Nil) | 14:37 | |
p6eval | rakudo 272191: OUTPUT«3» | ||
dlm | rakudo: say(3 * Nil) | ||
p6eval | rakudo 272191: OUTPUT«0» | ||
dlm | rakudo: say(3 * Nil.Num) | ||
p6eval | rakudo 272191: OUTPUT«0» | ||
dlm | rakudo: say Nil.Num.perl | ||
p6eval | rakudo 272191: OUTPUT«0» | ||
dlm | rakudo: say Nil.WHAT | 14:38 | |
p6eval | rakudo 272191: OUTPUT«Parcel()» | ||
dlm | rakudo: say *.WHAT | ||
p6eval | rakudo 272191: OUTPUT«Whatever()» | ||
14:42
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
|
|||
moritz_ | $ ./perl6 -e 'sub x { my @a = 4, 5; return @a, 6 }; my (@b, $x) = x(); say @b.perl' | 14:42 | |
[[4, 5, 6]] | |||
I think it's not a new bug | 14:43 | ||
pmichaud | if it's not a new bug, that makes me feel better then :) | 14:44 | |
(because it should be an easier fix) | |||
moritz_ | I think I know what's wrong with MAIN/USAGE | ||
it assumes that %hash isn't flattening in return() argument lists | 14:45 | ||
14:47
thebird joined,
thebird left
|
|||
moritz_ | push fixed | 14:48 | |
one failing test remaining in there | 14:49 | ||
uhm | |||
that might be failing due to debug output to STDERR, which Test::Util captures :-) | 14:50 | ||
bingo | 14:52 | ||
14:52
thebird joined
|
|||
moritz_ | all tests pass | 14:52 | |
without further changes | |||
so my commit message was a lie | |||
14:54
plobsing left
|
|||
moritz_ | so, 7 failures down | 14:54 | |
colomon | \o/ | ||
moritz_ | cross.t seems a junction infinite recursion | 14:56 | |
pmichaud | .oO( cross is using junctions? ) |
14:57 | |
moritz_ | the tests | ||
14:57
ash__ left
|
|||
moritz_ | ok 15 - all @list1 X<= @list2 | 14:57 | |
is the one before the loop | |||
pmichaud | I'm looking at junctions now. | ||
moritz_ | the test that loops is | 14:58 | |
ok ( ? [|] 1, 2 X<= 0, 3), '[|] @l1 X<= @l2'; | |||
colomon | ambitious test. :) | 15:00 | |
cono | anyone here booked my one hotel galilei for yapsi already? | ||
moritz_ | precdence issue? | ||
> say ? [|] (1, 2 X<= 0, 3).perl | |||
colomon | moritz_: seems unlikely, grammar hasn't changed, has it? | ||
moritz_ | 1 | ||
colomon: I mean in the test... even then it still exhibits a rakudo bug wrt autothreading | |||
> [|] 1 | 15:01 | ||
1 | |||
> [|] 1, 2 | |||
maximum recursion depth exceeded | |||
colomon | moritz_++ | ||
15:02
thebird left
|
|||
colomon | rakudo: say [|] 1, 2 | 15:02 | |
15:02
thebird joined
|
|||
p6eval | rakudo 272191: OUTPUT«any(1, 2)» | 15:02 | |
pmichaud | that's either a reduce or a junction bug. | ||
(unless we short-circuit [|] to any) | |||
colomon | reduce seems to be working in general and junctions have known issues... ;) | 15:03 | |
pmichaud | sure, I agree | ||
just didn't want the other path to be unobserved :) | |||
colomon | indeed. | ||
let me dump what I'm looking at here, then I'll take a look at that. | |||
called from Sub '!postcircumfix:<[ ]>' pc 11868 (src/gen/RoleToInstanceApplier.pir:142) | |||
called from Sub 'postcircumfix:<[ ]>' pc 404238 (src/gen/core.pir:35506) (CORE.setting:1074) | |||
pmichaud | ah | 15:04 | |
anytime postcircumfixes are involved, it often means that it's being called on something that isn't p6opaque | |||
colomon | is the infinite recursion I'm seeing, doing @x.unshift(2), where my Int @x. | ||
(in a typed arrays.t test) | |||
moritz_ | and S03-junctions/misc.t aborts with "Method 'map' not found for invocant of class 'ResizablePMCArray'" | ||
pmichaud | in this case, I think the problem is that postcircumfix:<[ ]> is being called on the $.eigenstates attribute of the junction, which is a RPA | 15:05 | |
("this case" == both what colomon++ and moritz++ observed) | |||
I suppose the easiest thing to do would be to promote $.eigenstates to a Parcel. | |||
that would make.... a lot of sense. | 15:06 | ||
in src/builtins/Junction.pir, line 77 | 15:07 | ||
add | |||
eigenstates = '&infix:<,>'(eigenstates :flat) | |||
right before the setattribute | 15:08 | ||
and then see if that fixes anything | |||
moritz_ would kinda expect the fix to go into the uniq_helper | 15:09 | ||
pmichaud | sometimes uniq_helper isn't called. | ||
see the 'if' condition a few lines earlier. | |||
moritz_ | right | 15:10 | |
moritz_ tries | |||
pmichaud | I wonder how it is that method 'new' knows that eigenstates is already an RPA, though. | 15:11 | |
that seems bogus. | 15:12 | ||
oh! | |||
it is bogus. | |||
colomon | fail. | ||
15:12
ash__ joined
|
|||
colomon | flattened parameters must be a hash or array | 15:12 | |
current instr.: 'perl6;Junction;new' pc 17316 (src/builtins/Exception.pir:93) | |||
called from Sub 'infix:<^>' pc 348420 (src/gen/core.pir:0) (CORE.setting:392) | |||
pmichaud | right | ||
that whole Junction construction logic needs a serious rework. | 15:13 | ||
colomon | that's running t/spec/S03-junctions/misc.t | ||
pmichaud | it makes quite a few bad assumptions. | ||
for one, it prevents Junction.new() from being called with multiple positional arguments | |||
moritz_ tests if adding :slurpy to eigenstates helps | 15:15 | ||
pmichaud | that will just cause other issues, alas | ||
because then the eigenstates will end up being an array of (unflattened) lists | |||
it's a non-trivial change to fix this | 15:16 | ||
I'll work on Junctions real quick -- I can get to the list assignment bug in a bit | |||
15:17
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
|
|||
pmichaud tries running his fixes | 15:26 | ||
15:28
constant left
15:29
pmurias left
|
|||
pmichaud | aha | 15:31 | |
with that fix, S03-junctions/misc.t passes | |||
colomon | \o/ | 15:32 | |
pmichaud | pushed as 5e523b1 | ||
15:32
constant joined,
constant left,
constant joined
|
|||
colomon | errr... why does yapc::na have a kilt vendor coming? | 15:35 | |
I mean, I've nothing against it, but I expected that at the Highland games I'm going to on Saturday, not the Perl conference next week. :) | 15:36 | ||
pmichaud | there are quite a few attendees who like to wear kilts :) | ||
[particle] | utilikilt pulled out | 15:37 | |
or we could have had seattle kilts at yapc | |||
colomon | my wife just informed me that if I'm going to get a kilt, it has to be a real one, no utilikilts allowed. | ||
pmichaud | yapc2010.com/yn2010/wiki?node=Utilikilts | ||
(to judge the level of interest :) | 15:38 | ||
15:41
Ross joined
15:43
justatheory joined
15:44
PacoLinux left
|
|||
TimToady | do we need a .lazypush, or is .push already lazy? | 15:45 | |
15:45
PacoLinux joined
|
|||
pmichaud | it's lazy. | 15:45 | |
15:45
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
|
|||
pmichaud | in the Rakudo implementation, it's lazy. | 15:45 | |
(the new one) | |||
so is splice :-) | |||
(splice is lazy after $offset or $offset+$size elements) | 15:46 | ||
15:48
Gothmog_ left
|
|||
colomon | can we do @a, @b if @a and @b are lazy? | 15:48 | |
pmichaud | you mean make a parcel of @a and @b? | ||
TimToady | okay, so we can initialize the lazy part of any array with: my @x.push: 1...* | ||
colomon | pmichaud: a flat parcel, I mean. | ||
pmichaud | well, I'm testing lazy push now and it doesn't seem to be working. | ||
It's supposed to be lazy, at any rate. I don't see any blockers to that. | 15:49 | ||
colomon: sure | |||
TimToady: yes, that makes sense to me | 15:50 | ||
oh, wait | |||
we might want a lazy push | |||
right now @a.push(@b) eagerly evaluates @b | |||
because we don't want subsequent changes to @b to show up in @a | 15:51 | ||
I suppose we could try to make @a.push(lazy @b) work somehow | |||
TimToady | but you can't overcome the eagerness with @a.push(lazy @b), hence the need for a different method | ||
I don't see how it can work | 15:52 | ||
colomon | if we just pushed the iterator, wouldn't it automatically not reflect subsequent changes to @b? | ||
pmichaud | okay | ||
colomon: it still gets eagerly evaluated by the .push | |||
colomon | oh, not if we are iterating an Array @b. | ||
15:52
literal left
|
|||
pmichaud | TimToady: yeah, I can see why it won't work. | 15:53 | |
TimToady | @a.queue(@b) | ||
15:53
Gothmog_ joined
|
|||
TimToady | @a.cue(@b) | 15:53 | |
pmichaud | anyway, the splicing is non-lazy for the same reason. | ||
moritz_ | @a <<== @b | ||
pmichaud | my *Lists* have lazy push and splice, but *Array* does not. | ||
TimToady | @a.push vs @a.lean :) | 15:54 | |
pmichaud | my @a := List.new.push(1...*); # initializes lazy part | ||
TimToady | perhaps push should always imply eager, and we use something else when we want to be less pushy | ||
$x.queue $x.spec $x.add $x.connect $x.extend ... | 15:55 | ||
p5 programmers will certainly expect .push to be eager | 15:56 | ||
$x.more | |||
$x.cont | 15:57 | ||
pmichaud | .lazypush really isn't so bad :) | ||
it's at least explicit :) | |||
colomon | @a ,= @b | ||
TimToady | .feed | 15:58 | |
Juerd | push :lazy not an option? | ||
TimToady | my @a <== 1...* | 15:59 | |
15:59
araujo joined
|
|||
TimToady | possibly with .feed underneath | 15:59 | |
@a.feed: 1..* | 16:00 | ||
seems to read pretty well, and feeds are known to be lazy/async-ish | 16:01 | ||
16:01
JimmyZ left
|
|||
pmichaud | Something gives me a twinge about .feed, but I'm okay with it | 16:02 | |
PerlJam | $news.feed | 16:03 | |
16:03
sdvsdvsdv left
|
|||
TimToady | @a.fed: 1...* | 16:03 | |
makes it somewhat subjunctive | 16:04 | ||
PerlJam | TimToady: hey, can you answer a language question for me? (or at least take a stab at it) | ||
TimToady | sure, it just won't be correct | ||
16:05
am0c left
|
|||
PerlJam | TimToady: maybe it's not so much a language question ... but you know how some people say "deaf" when they're trying to pronounce the word "death" ... I was wondering if there is an equivalent of "mispronunciation but the message comes across anyway" in perl | 16:06 | |
TimToady | .oO(twoo wuv...) |
16:07 | |
most of our dwimmery is semantic, such as Cool | 16:08 | ||
and, of course, a written language doesn't have phonology | |||
about the closest we come is gently correcting a P5 accent | 16:09 | ||
std: my @foo; say $foo[1] | |||
p6eval | std 31298: OUTPUT«===SORRY!===Variable $foo is not predeclared (did you mean @foo?) at /tmp/Zs6bpBHkde line 1:------> my @foo; say $foo⏏[1]Check failedFAILED 00:01 108m» | ||
TimToady | but we don't try to keep running | 16:10 | |
PerlJam | ah. okay. | ||
16:10
azert0x left
|
|||
TimToady | std: /[a-z]/ | 16:10 | |
p6eval | std 31298: OUTPUT«===SORRY!===Invalid regex metacharacter (must be quoted to match literally) at /tmp/ZjugtU1J4O line 1:------> /[a-⏏z]/Potential difficulties: [a-z] appears to be an old-school character class; please use <[a..z]> if you mean a character | ||
..cla… | |||
TimToady | so it's doing accent guessing, but pragmatically speaking that results in diagnostics rather than execution | 16:11 | |
PerlJam | right. | 16:12 | |
TimToady | std: say Int.new(42) | ||
p6eval | std 31298: OUTPUT«ok 00:01 104m» | ||
TimToady | std: say new Int(42) | ||
p6eval | std 31298: OUTPUT«===SORRY!===Unsupported use of C++ constructor syntax; in Perl 6 please use method call syntax at /tmp/lBZtNvyiN8 line 1:------> say new Int⏏(42)Parse failedFAILED 00:01 104m» | ||
TimToady | std: say new Int: 42 | ||
p6eval | std 31298: OUTPUT«ok 00:01 106m» | 16:13 | |
PerlJam | I was thinking this morning that Perl is big enough that there has to be some instances where people have code that accidentally executes properly even though they didn't say the right words. | ||
but I guess that's how @foo[1] worked in Perl 5 too | |||
er, works :) | 16:14 | ||
TimToady | I suppose if we detect that an input file is in Latin-1 instead of UTF-8 and autotranslate, that's like pervasively compensating for an accent | 16:15 | |
accent compensation requires the detection of consistent inconsistency | 16:16 | ||
PerlJam | in a way perhaps I'm just describing a specific form of dwimmery | ||
16:17
meppl joined
16:18
sdvsdvsdv joined,
literal joined
|
|||
lue | .oO(now, what needs doing in the rakudo world today?) |
16:19 | |
16:19
hercynium left,
am0c joined
16:21
pmurias joined
16:23
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
16:25
pyrimidine joined
16:27
gbacon left
|
|||
tadzik | What is the reason of rakudo/parrot slowness today? Is this the side-effect of being in-development? I've seen the post on perl6-users ML complaining about that, but just adding numbers 1..1000 takes almost 20 seconds in Perl6 (about 0 on Perl 5) | 16:27 | |
Tene | tadzik: Pretty much. The focus has been on completeness and correctness so far, with very little focus on performance. | 16:28 | |
jnthn made it home o/ | 16:29 | ||
Tene | yay! | ||
colomon | \o/ | ||
lue | :D | 16:30 | |
tadzik | Tene: I see. But isn't it like rakudo is generating PIR for parrot and then parrot runs this low-level stuff itself, or does it work somewhat another way? | 16:31 | |
jnthn | I loved Kiev, but I must say the temperature here in Sweden is rather more to my liking. | ||
pmichaud | tadzik: it's a large number of reasons for the slowness. We have a lot of additional type checking and dispatch overhead that takes place that P5 doesn't have to contend with. | 16:32 | |
Also, P5 has had many years of optimization, we're really just starting. | |||
yes, rakudo generates PIR for Parrot, but it's an awful lot of PIR at the moment. | |||
tadzik | I see | ||
pmichaud | lue: I think we're mostly working on getting the list branch merged today. I think we're down to ~30 failing tests. | 16:33 | |
jnthn: \o/ welcome home | |||
jnthn | pmichaud: Thanks :-) | ||
lue | ah | 16:34 | |
jnthn | pmichaud: Down to 30?! | 16:35 | |
pmichaud++ # and probably some others ++ too :-) | 16:36 | ||
pmichaud | ah, but I just broke something. | ||
so back to 251 failing tests | 16:37 | ||
(most of that is from an aborted test file) | |||
jnthn: I know we're sub-100. | |||
what is going to be fun (and what I'm really looking forward to) is reviewing and closing rt tickets and todo/skipped tests | 16:38 | ||
I'll probably spend a day on that before I tackle closures. Also gives the compiler a day to settle down for tomorrow's release. | |||
(also going to write a blog post) | |||
jnthn | pmichaud: OK, good plan. | 16:39 | |
pmichaud | if I have | ||
($a, $b, $c) = (1, 2) | 16:40 | ||
what should happen with $c ? | |||
more generally, if I have | |||
($a, $b, $c) = @x; | |||
what should happen if @x has less than three elements? | |||
16:41
pmurias left
|
|||
lue | I think, for my ($a, $b $c) = (1,2), $c would be left alone, as if you did my $c [don't know what the spec says though] | 16:41 | |
TimToady | same as $c = () | ||
jnthn guessed Nil | |||
pmichaud | okay, no warning or anything like that? | 16:42 | |
jnthn | iirc, Nil is now defined as () ? | ||
TimToady | yes | ||
pmichaud | jnthn: my ($a, $, $b) ends up generating a parcel with ($a, *, $b) ?? | 16:43 | |
jnthn | pmichaud: Correct. | 16:45 | |
pmichaud | that seems wrongish | ||
I would've expected an anonymous scalar variable | 16:46 | ||
jnthn | pmichaud: Well, assigning to * throws away the value. | ||
pmichaud | so would assigning to an anonymous scalar container :-) | ||
jnthn | I think there may be another reason it's *...thinking... | ||
TimToady | my $x := my ($a, $, $b)[1] | ||
pmichaud | I'd also be concerned ... right | ||
(my ($a, $, $b))[1] # should be Any or Mu, not * | 16:47 | ||
also, having my ($a, @, $b) would seem to dtwt | 16:48 | ||
jnthn | pmichaud: Oooh, I know why. | ||
TimToady | I was wondering earlier today whether vars should be born Cool instead of Any | ||
jnthn | pmichaud: We used to emit an anonymous scalar. | ||
Then Parrot started whining "oh ffs you have two .lex '$', $Pxxx". | |||
pmichaud | oh, then it's not anonymous. :) | 16:49 | |
jnthn | Yeah | ||
pmichaud | I'm thinking we should create the viviself portion and not bind it to a name. | ||
but otherwise it acts like a normal scalar container. | |||
jnthn | Looking at it, I think I shoved * in to get us able to actually build against Parrot again. | ||
Line 154 onwards, src/Perl6/Compiler/Signature.pm | |||
You should be able to change it there and have it work out. | |||
pmichaud | okay. | 16:50 | |
colomon | gist.github.com/440780 -- updated list branch error list | ||
jnthn | I'm not sure if I had other reasons for * | ||
pmichaud | I'll leave it on the todo list... I have to get whatever assignment working anyway. | ||
jnthn | But I suspect it was "oh noes, Parrot just broke Rakudo again" at a point where I didn't have a lot of time on my hands and we needed a fix. | ||
pmichaud | ooc, does * always act like an item? | 16:51 | |
TimToady | it seems the "everything must have a name" meme is rather entrenched into Parrot at various levels | ||
pmichaud | (sounds like the answer ought to be "no", since * is "whatever") | ||
jnthn | TimToady: When I first re-did a bunch of the object system I had it divorced from the class registry quite nicely. | 16:52 | |
TimToady: Then allison went and reassociated them again. :-| | |||
Yet another of the design decisions I made right and was overruled on. | |||
</hubris> | 16:53 | ||
(and a little irritation too...) | |||
TimToady | "namespaces" == "packages" is the same kind of NameThink | ||
jnthn | Yeah, that's been deeper baked in. | ||
pmichaud | not to mention the fact that the PMC type is "NameSpace". Why the capital 'S'? | 16:54 | |
I guess it's "name space", but I never see it written that way. | |||
"namespace" has no space. :) | |||
TimToady | parrot would be in much better shape if they adopted the model that everything is born anonymous, and names are always created by poking a ref into a random namespace (and I *don't* mean package) | 16:56 | |
but they made the P5 mistake, only harder | |||
16:57
supernovus joined
|
|||
jnthn | TimToady: Right, which is what I tried to do with classes. | 16:57 | |
17:03
gbacon joined
17:06
thebird left
17:09
TiMBuS left
17:13
supernovus left
17:17
dakkar left
17:19
frooh left
|
|||
[particle] | the parrot team hates the NameSpace design and implementation | 17:19 | |
does that make anyone feel any better? | 17:20 | ||
lue | (hrm, where are custom circumfix operators defined?) | 17:21 | |
17:21
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
|
|||
lue | as in, the ability to make them. | 17:21 | |
pmichaud | jnthn: ping | 17:22 | |
jnthn | pmichaud: pong | ||
moritz_ | that was a decent round trip time | 17:23 | |
pmichaud | is there a way from PIR that I can easily determine if a potential call will find a matching multimethod? | ||
jnthn | pmichaud: .cando | ||
pmichaud | ....on a foreign object. :-) | ||
moritz_ | implemented during that awesome hackathin | ||
jnthn | pmichaud: oh tssssk | ||
pmichaud: Well, that's rather harder. | 17:24 | ||
pmichaud | let me rephrase the question | ||
jnthn | pmichaud: I think we cna though. | ||
pmichaud | I have a foreign object, like a hash. | ||
jnthn | pmichaud: Can you give me a step back on what you're wanting to do? | ||
17:24
envi^home left
|
|||
pmichaud | I want to know if any of the methods defined in Associative will bind to the argument I currently have. | 17:24 | |
(if not, then I'm going to do something else) | 17:25 | ||
jnthn | pmichaud: But didn't you say all of Associative is in the setting now? | ||
pmichaud: Wait, what's foreign? | |||
pmichaud | like a Parrot Hash | ||
jnthn | pmichaud: The multisub? | ||
Or the arguments? | |||
pmichaud | the invocant | ||
jnthn | Ah. | ||
Let me think a moment, I think the answer is "yes, there's a way" | 17:26 | ||
pmichaud | let me phrase it a different way, then | ||
can I .cando on Associative (from PIR)? | |||
jnthn | .cando is a method on a Routine, not a class/role. | ||
pmichaud | okay | ||
can I look up the multisub from Associative and use .cando on it? | 17:27 | ||
jnthn | So I guess there's a particular method? | ||
Yes. | |||
pmichaud | perfect. | ||
$P0 = get_hll_global ['Associative[::T]'], 'postcircumfix:<{ }>' | |||
$I0 = $P0.cando(args) | |||
jnthn | If you put it in the namespace, yes | ||
*but* :-( | |||
pmichaud | it's in the namespace | ||
(we use this now.) | |||
jnthn | We have a problem at the moment. | ||
(more) | |||
.cando currently doesn't work on Multi, even though Multi ~~ Routine and it's defined in Routine. :-( | 17:28 | ||
The reason is that we type-map Multi to Perl6MultiSub | |||
But at the moment, methods added during augment aren't getting shoved thorugh to the Parrot namespace for the mapped PMC. | |||
pmichaud | that's actually okay | 17:29 | |
there's no augmenting taking place here. | |||
jnthn | There is. :-( | ||
We augment Routine { method cando ... } | |||
pmichaud | ohhhhh | ||
jnthn | Yeah. :-| | ||
pmichaud | can I do a method lookup on Associative? | ||
jnthn | It won't do quite what you want. | 17:30 | |
pmichaud | okay. | ||
jnthn | If you find_method on a role, then it needs to pun the role. | ||
So it hands back the "punner" | |||
pmichaud | isn't there something that does that already? | ||
jnthn | That's for Parrot's find_method | ||
You can of course do .^methods on the role. | |||
And pull it out of there. | 17:31 | ||
pmichaud | that's a hash? | ||
rakudo: say Associative.^methods | |||
p6eval | rakudo 272191: OUTPUT«postcircumfix:<{ }>of» | ||
jnthn | A list iirc | ||
(per spec) | |||
lue is on a quest to find the code that allows custom/overloading operators | |||
pmichaud | rakudo: say Associative.^methods.perl | ||
p6eval | rakudo 272191: OUTPUT«Method 'perl' not found for invocant of class 'ResizablePMCArray' in main program body at line 11:/tmp/Z2O9_kkFKv» | ||
jnthn | Eww. | ||
pmichaud | yeah, list. | ||
jnthn | But yes, it's a list. | 17:32 | |
pmichaud | needs to become a Parcel. | ||
anyway | |||
so, I can't really use .^methods to find it by name | |||
jnthn | You can, you just gotta go through a list. | ||
Which is hardly efficient. :-( | |||
I do wonder if we should spec a :name argument to .^methods | |||
pmichaud | it's okay, this is for foreign objects | ||
jnthn | Like we have for .WALK | 17:33 | |
pmichaud | it's okay if it's not terribly efficient. What we're describing will undoubtedly end up being more efficient than what we have now. | ||
and foreign objects "you get what you ask for" | |||
also, once I find it, I could probably cache the result | |||
jnthn | True. | ||
Whatever you do, please don't go looking at the Parrot class though. | |||
pmichaud | I try to never do that. | 17:34 | |
jnthn | OK, good. :-) | ||
pmichaud | this refactor is systematically eliminating our use and reliance on Parrot objects, except for RPA | ||
jnthn | I'm really trying to ween us off that. | ||
pmichaud | (we won't complete it anytime soon, but we're a lot closer) | ||
okay, I'm being called to lunch | |||
jnthn | I want to swap out pretty much all of the meta-model internals in the not too distant future, and having everything using the metamodel rather than poking into guts is a big help. :-) | 17:35 | |
pmichaud | so, answer is to use Associative.^methods to find the postcircumfix method, cache that, and then use .cando on the method to see if it will bind | ||
jnthn | pmichaud: OK - catch me later if you need some more hints. | ||
pmichaud | I like that answer a lot better than what we have now. | ||
jnthn | pmichaud: Yes, correct. Let me see if I can fix up .cando so it actually works on Multi. | ||
pmichaud | no rush.. right now I just need something that works. | ||
jnthn | pmichaud: Well, it won't quite work without a hack at the moment. :-/ | ||
e.g. you can $P0 = find_method type_object_of_multi, 'cando' of course. | 17:36 | ||
We should probably just instantiate Multi rather than Perl6MultiSub though. | |||
pmichaud | ohhhh! | ||
I have an easier answer | |||
muuuuch easier | |||
the methods defined in associative are finite and known | 17:37 | ||
there's only, like, two | |||
so I can just do my own checking of args via .does | |||
(or .ACCEPTS) | |||
I think the only one I need to check is .does(Positional) | |||
I'll do that. | 17:38 | ||
jnthn | OK. :-) | 17:39 | |
(I'm gonna try and fix .cando on multis anyway now though.) | |||
lue | I think my finding skills are broken :/ | 17:40 | |
17:41
justatheory left
|
|||
arnsholt | I'm thinking of writing a fuzzer (or rather, fuzzer generator) for Perl 6 grammars, but would like to solicit some opinions on how to approach the problem | 17:41 | |
17:41
felipe left
|
|||
diakopter | arnsholt: sure | 17:41 | |
arnsholt | Up front I can see two possible approaches to do this: | 17:42 | |
1) Write my own grammar and use that. Pro: low entry cost, easy to keep track of (at first at least); Con: I'd essentially be writing yet another Perl 6 grammar | |||
2) Use Perl6::Grammar (or possibly the Grammar grammar from NQP) with custom action methods. Pro: Excellent coverage; Con: Higher entry cost, harder to get a handle on | 17:43 | ||
diakopter | do you want a false negative fuzzer of a false positive fuzzer | ||
(-generator) | |||
arnsholt | Good question, actually | 17:44 | |
Both would certainly be useful | 17:45 | ||
diakopter | one that creates a tool for testing the backend (to see whether the grammar is actually correct in the first place), or ... | ||
one that assumes the grammar is correct and tries to break the parser that was generated from the grammar to see if it will accept invalid inputs or otherwise give an unexpected response from a slightly-invalid/degenerate input | 17:46 | ||
arnsholt | The second is what gave me the idea in the first place | ||
diakopter | yeah, that's the one crackers use | 17:47 | |
17:47
justatheory_ joined
|
|||
diakopter | but one that tests for input-permutation coverage is also quite useful | 17:47 | |
arnsholt | Indeed | 17:48 | |
At any rate, my question is: which of the two approaches looks the most sensible to you guys? | 17:49 | ||
(A third option would be if there was information about the grammar's rules available at runtime, but I don't think that's the case) | |||
diakopter | I wrote one (of the first type above) that does a breadth-first search (shortest/emptiest alternations first) of the grammar, but also exploring all the edge cases of repetitions. | ||
... with a limit on left recursion | 17:50 | ||
17:50
rv2733 joined
|
|||
arnsholt | Sounds sensible | 17:51 | |
lue | Can someone help me find where the code that allows custom operators (infix, circumfix, etc.) is? I think I'm not grepping the right search terms... | 17:52 | |
ash__ | lue: what do you mean? like how they are defined? | 17:54 | |
17:55
justatheory_ left
|
|||
lue | yes. Where does this work: multi sub infix:<+> . . . | 17:55 | |
where *is the code that makes* this work, sorry | 17:56 | ||
17:56
Guest37981 left,
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
|
|||
diakopter | arnsholt: I'd use the 2nd approach, but using STD and viv | 17:56 | |
17:59
pronik` joined,
jferrero joined
|
|||
ash__ | lue: well i know its based off of the sub name all ops are really just subs in perl 6 | 17:59 | |
sub infix:<+> can be called by saying '4 + 3' or infix:<+>(4, 3) | 18:00 | ||
rakudo: say infix:<+>(4, 3) | |||
p6eval | rakudo 272191: OUTPUT«7» | ||
ash__ | i think it probably is expanding, for instance, infix ops into the full sub name "infix:<sym>" | 18:01 | |
arnsholt | diakopter: STD and viv is certainly an even better idea. Thanks! | 18:02 | |
lue | I actually looked into pmc/Perl6MultiSub.pmc , and that didn't help :D It's hard to find where the magic happens. | ||
arnsholt | lue: The magic is in Perl6::Actions, IIRC | ||
Custom operators are recognised at parse time, and code is generated to handle it | 18:03 | ||
jnthn | lue: It'll be in the actions.pm I think. | ||
lue: Unless you mean adding new custom operators, in which case that's in grammar.pm, somewhere near the bottom iirc. | 18:04 | ||
lue | I looked in both those files (using grep). Hm, let's check again. | ||
(I'm trying to get circumfixes working, IIUC) | |||
18:07
pronik` is now known as pronik
|
|||
jnthn | lue: Well, you'll only find it if you grep for the right thing ;-) | 18:07 | |
lue | :D Apparently, I've been grepping for 'operators' when grepping 'ops' would've gotten me to the bottom of Grammar.pm :D | ||
jnthn | Oh, you just found it | 18:08 | |
I was gonna tell you to grep for gen_op_if_needed ;-) | |||
lue | Now I can start from there and find out why circumfix is the most miserable failure of the entire family :) | 18:10 | |
18:10
am0c left
|
|||
lue | rakudo: multi sub circumfix:<[ ]>(Complex $a) { $a.re;}; say [3]; say [1+2i]; | 18:11 | |
p6eval | rakudo 272191: OUTPUT«No applicable candidates found to dispatch to for 'circumfix:<[ ]>'. Available candidates are::(Complex $a) in main program body at line 11:/tmp/lSgPvQQazs» | ||
18:11
Guest37981 joined
|
|||
lue | rakudo: say [3]; | 18:12 | |
p6eval | rakudo 272191: OUTPUT«3» | ||
lue | now THAT is interesting... | ||
PerlJam | what is? | 18:13 | |
18:13
patrickas joined
|
|||
pmichaud | currently circumfix:<[ ]> is defined in the builtins, so it can't be multied/overloaded yet | 18:14 | |
lue | that fact that redefing [ ] thru multi sub completely wipes its original functionality | ||
18:14
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
|
|||
lue | is it because it's in builtins, or because the custom circumfix code just doesn't work? | 18:14 | |
pmichaud | builtins | 18:15 | |
jnthn | I think it's a Rakudo bug. | ||
pmichaud | see if you can define a different circumfix | ||
18:15
tadzik left
|
|||
jnthn | I know that's NYI in terms of the parsing side of things. :-) | 18:15 | |
PerlJam | rakudo: multi sub circumfix:<[ ]>(Complex $a) { "woot" } ; say [2i] | ||
p6eval | rakudo 272191: OUTPUT«woot» | ||
PerlJam | looks like it works modulo the multi issue | 18:16 | |
jnthn | PerlJam: Yeah, the multi issue is the bug I ment. | ||
*mant | |||
pmichaud | and circumfix:<[ ]> is pretty fundamental -- not sure that we can easily move it into setting just yet. | ||
jnthn | oh ffs, I'm off to buy the pizza I very obviously need. | ||
*meant | |||
:-) | |||
lue | Meponders... could the space in, say, circumfix:<` `> be the issue? | 18:17 | |
pmichaud | shouldn't be. | ||
18:17
alester joined
|
|||
lue | After all, it *is* wrong for other types of operators. Hmm | 18:17 | |
pmichaud | rakudo: multi sub circumfix:<` `>(Complex $a) { "xyz" }; say `2i` | 18:18 | |
p6eval | rakudo 272191: OUTPUT«error:imcc:syntax error, unexpected '\n' in file 'EVAL_1' line 866166138===SORRY!===syntax error ... somewhere» | ||
pmichaud | that looks like a rakudo bug | ||
like it's not recognizing the need to create a new circumfix: token. | |||
jnthn | pmichaud: NYI... | ||
pmichaud: It's still in the ROADMAP | |||
lue: It may just be a case of some hacking in that gen_op_if_needed method. | 18:19 | ||
lue | That's what I'm looking at. The one time $opname is used is to generate a piece of the $parse variable, which is where the spaces came into mind. | 18:20 | |
jnthn: pizza travels fast in your neck of the woods, no? :) | |||
pmichaud | .oO( wouldn't it be jnthn++ that travelled fast? ) |
||
lue | Depends. It could be he stays in place and the rest of the universe moves around him :) | 18:21 | |
PerlJam | or ... he could have invented a time machine! | ||
18:21
sunnavy joined
|
|||
lue | I would have grown one ;) | 18:21 | |
jnthn | pmichaud: Actually, jnthn just forgets where he puts his keys fast :-) | 18:22 | |
Found 'em...really going now. :-) | |||
PerlJam | jnthn++ (fail fast) | 18:23 | |
:-) | |||
lue | rakudo: multi sub circumfix:<``>($a) { say $a;} ` 3 ` | ||
p6eval | rakudo 272191: OUTPUT«error:imcc:syntax error, unexpected '\n' in file 'EVAL_1' line 58===SORRY!===syntax error ... somewhere» | ||
lue | rakudo: multi sub circumfix:<``>($a) { say $a;}; ` 3 ` | ||
p6eval | rakudo 272191: OUTPUT«error:imcc:syntax error, unexpected '\n' in file 'EVAL_1' line 58===SORRY!===syntax error ... somewhere» | ||
lue | I think the space between the start and end is required. If that's the case, there's obviously a different problem. | 18:24 | |
PerlJam | interesting ... I just ran my perl6 binary from inside src/builtins and it said: Null PMC access in find_method('new_class') | 18:25 | |
lue | OH! Should there be a default precedence for circumfix? | ||
PerlJam | gist.github.com/441074 | 18:26 | |
seems to work fine in other dirs. | |||
pmichaud | for aggregates, is there a way to retrieve an element from the aggregate by key/index that isn't postcircumfix:<{ }> ? | ||
and if not, could we define one? | |||
PerlJam | pmichaud: you mean like an alternate method name? | ||
pmichaud | PerlJam: yes, exactly. | 18:27 | |
18:27
dju left
|
|||
lue | what would the default precedence for circumfix be? /me gets exicted and hopes the spec is willing to part with info. | 18:27 | |
pmichaud | but that only handles single item lookups | ||
18:27
dju joined
|
|||
pmichaud | lue: I'd expect it to be term precedence, myself. | 18:27 | |
it would be really really helpful if the postcircumfix operators could be defined in terms of a simpler, non-postcircumfix method | 18:28 | ||
(a class could still overload postcircumfix if it wants to do something special) | |||
lue | well, because $prec appears to be unset for circumfix | ||
PerlJam | what would be the damage in using .index() for that purpose on aggregates? | 18:29 | |
lue | i.e if you define an infix, then $prec := '%additive'; | ||
pmichaud | is there already a .index method somewhere? Would we be punning? | ||
lue: '%term', I think. | |||
lue | OK. trying... | ||
pmichaud | ah, Rakudo doesn't define a %term | 18:30 | |
so that's not it. | |||
doesn't appear to be an \.index already. | 18:31 | ||
18:31
xabbu42 left
|
|||
lue | ah! (^C ^C) | 18:31 | |
18:31
xabbu42 joined
|
|||
pmichaud | maybe .at | 18:32 | |
maybe .elem($key) | |||
PerlJam | @foo.at(5), %bar.at('key') ? | ||
pmichaud | PerlJam: yeah, something like that. | 18:33 | |
PerlJam | I guess @foo.at('blah') too? | ||
lue is looking at list of operators defined @ top of Grammar.pm | |||
pmichaud | .elem is bad, because .elems doesn't give back a list of .elem | ||
it's okay for it to be de-huffman, as it won't be commonly used | 18:34 | ||
[particle] | i think that means it's properly huffmanized if it's long | ||
PerlJam | @foo.at('blah') doesn't jibe with being "simpler" perhaps | 18:35 | |
@foo.thing_at_position(5); # :-) | |||
pmichaud | ah, that's a good point, I also need to distinguish positional and associative | 18:36 | |
(for match objects and captures) | |||
so it can't be the same for both. | |||
18:36
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
|
|||
PerlJam | .at_index() .at_key() | 18:37 | |
pmichaud | at_position, since it's "Positional" | 18:38 | |
but I could go with index | |||
PerlJam | index feels PDLy | ||
pmichaud | I'll go with those for now. | ||
it simplifies a ton of stuff. | |||
lue | it's not a method postfix, is it? | ||
pmichaud | might even enable us to get rid of the "!postcircumfix" helper methods. | ||
lue: you mean circumfix, or what I'm talking about? | 18:39 | ||
maybe .at_pos and .at_key (so they're the same length :-) | |||
lue | circumfix. | 18:40 | |
pmichaud | looking | ||
lue | term does seem the best candidate, but that (obviously) won't work /me scratches imaginary Unix Beard | ||
pmichaud | lue: use %term and add it to Perl6::Grammar | ||
that will be close to STD.pm6 | |||
PerlJam | .at_pos & .at_key definitely then :) | 18:41 | |
pmichaud | Just before the line that reads | ||
Perl6::Grammar.O(':prec<y=>, :assoc<unary>', '%methodcall'); | |||
add | |||
Perl6::Grammar.O(':prec<z=>', '%term'); | |||
lue | arigato. | ||
pmichaud | then you can use that as the precedence. | ||
oh, I can't get rid of the helpers entirely | 18:42 | ||
but it does simplify them a lot | |||
okay | |||
PerlJam | pmichaud: the order of those declarations doesn't matter does it? (precedence) | ||
pmichaud | PerlJam: only for code readability | ||
operationally, no, it doesn't matter | |||
PerlJam | okay. | ||
pmichaud | it was just the easy way to say where it should be located :) | ||
(and also show the pattern) | 18:43 | ||
small break, bbiab | |||
18:44
Mowah left,
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
18:50
patrickas left
18:51
[Coke] joined
18:52
lue left
18:55
lue joined,
ab5tract joined
|
|||
lue | > multi sub circumfix:<☃ ☄>($a) { Regex.new(<$a>); }; say ("3" ~ ☃<digit>+☄) | 18:55 | |
Unable to parse postcircumfix:sym<( )>, couldn't find final ')' at line 1 | 18:56 | ||
> multi sub circumfix:<Ω Ω>($a) { say $a;}; Ω3Ω | |||
Confused at line 1, near "\x{ce}\x{a9}3\x{ce}\x{a9}\n" | |||
now the problem is what the default precedence should be... (it seems) | |||
afk a bit for nomming, and then Part II in this problem. | 18:58 | ||
jnthn back | 19:00 | ||
Tene | hallo, jnthn_pizza | 19:01 | |
jnthn | omnomnom | ||
PerlJam | I could use some more food myself. My lunch wasn't quite enough | ||
19:02
bjarneh joined,
foodoo joined
|
|||
jnthn | ... | 19:02 | |
:-) | |||
19:04
cono left
|
|||
pmichaud | I -definitely- like this new factoring for associative/positional better | 19:05 | |
Very clean. | |||
also, the two follow the same pattern. | |||
jnthn | \o/ | 19:06 | |
pmichaud | now if only the tests will pass... :-P | ||
19:06
cono joined
19:10
Mowah joined
19:11
hercynium joined,
masak joined
|
|||
masak | ahoy, #perl6! | 19:11 | |
pmichaud | is %hash<> really a zen slice? | 19:12 | |
I would think it'd be more like %hash{()} | |||
which isn't a zen slize | |||
foodoo | perl6: say hello masak | ||
pmichaud | *slice | ||
p6eval | pugs: OUTPUT«*** No such subroutine: "&hello" at /tmp/80gUh7q3kj line 1, column 5 - line 2, column 1» | ||
..elf 31298: OUTPUT«Undefined subroutine &GLOBAL::masak called at (eval 124) line 3. at ./elf_h line 5881» | |||
..rakudo 272191: OUTPUT«Could not find sub &masak in main program body at line 11:/tmp/uHpt4NZOxS» | |||
masak | interesting that pugs looks for &hello first... | 19:13 | |
or maybe it has a sub &masak :P | |||
foodoo | perl6: say "hello masak" | ||
p6eval | elf 31298, pugs, rakudo 272191: OUTPUT«hello masak» | ||
pmichaud | I'll make %hash<> a zen slice for now... but I'm not sure that's really right. :) | ||
[particle] | i think that people would expect %hash<> to be a zen slice, because they'll be using <> a lot when writing hashes | 19:14 | |
jnthn | pmichaud: I'd thought it was one. | ||
PerlJam | indeed | ||
masak | pugs: our sub g { our sub f($g) {} }; f g | ||
p6eval | pugs: ( no output ) | ||
PerlJam | me too | ||
jnthn | masak: ahoj! | ||
[particle] | however, there's something to using the canonical postcircumfix for a zen slice | ||
masak | pmichaud: I've never thought about it, but it sounds right. | ||
[particle]: oh, that one *must* be a zen slice. | 19:15 | ||
PerlJam | pmichaud: S03:4900 | ||
masak | [particle]: the question was whether .<> was also. | ||
[particle] | for an array... will people do @array<> ? | ||
masak: yes, i mean *only* the canonical postcircumfix, sorry | |||
it's zen, it should truly be nothing | 19:16 | ||
masak | [particle]: @array<> will only work on those special arrays in S09. | ||
pmichaud | PerlJam: S03:4900 doesn't seem relevant .... how does the line read? | ||
ah, :4921 has it. | 19:17 | ||
thanks. | |||
PerlJam | ah, my copy must be out of date a little | ||
(or yours) | |||
masak | (or both) | 19:18 | |
[particle] | so, you'll have to write <()> in order to get that, just as you'll have to write {()} or [()] | ||
PerlJam | no, mine is defintely out of date (updating now :) | ||
jnthn | erm, <()> would be {'()'}, no? | ||
[particle] | heh, yeah, it would | 19:19 | |
[particle] is rusty | |||
jnthn | :-) | ||
Tene | "zen slice"? | 19:20 | |
PerlJam squirts some oil on [particle] so that he doesn't squeak | |||
masak | Tene: so, a *syntactically* empty slice means "everything". that's the zen. | ||
Tene | ah | 19:21 | |
masak | Tene: the big emphasis on "syntactically" is that this doesn't yield everything: my @a = (); my @b = 1, 2, 3; @b[@a] | ||
Tene | right | ||
masak | it did once. around New Year 2008. :) | ||
guess who found that bug. :P | |||
Tene | was it... you? | 19:22 | |
masak | ...yes. | ||
Tene | Oh. I guess I guessed right. | ||
masak | you answerd like a true Bayesian. | ||
Tene | I am not a member of the bayesian conspiracy. | 19:23 | |
masak | s/d/ed/ | ||
I'm still undecided. to me, it feels like one of those "sides of coin" issues. | |||
Tene | What's your prior for that decision? | 19:24 | |
masak | dunno. life, I guess. | 19:25 | |
Tene | :) | ||
masak | cognominal: lol at "should I masak that?". I'm currently seeking a worldwide patent on "Reporting shortcomings, infelicities and/or possible improvements in digital computer applications." | 19:27 | |
cognominal | :) | 19:28 | |
masak | I'm glad someone is already respecting that patent. | ||
Tene | masak: I recently encountered the idea of "US Patent #1 is not a patent for a time machine" as evidence against anyone ever creating a time machine. | 19:29 | |
masak | uh. | ||
strangely, I might even agree. but I'd like to see the proof. | 19:30 | ||
19:30
xabbu42 left,
xabbu42 joined
|
|||
Tene | Not proof, just a suggestive idea inspiring a board game: www.cheapass.com/products/boardgames/cag034.html | 19:31 | |
masak | nice! | 19:32 | |
yes, I think I grok the idea now. I'm a bit slow today. :) | |||
19:34
Mowah left
|
|||
colomon | ah, cheapass games.... :) | 19:34 | |
literal | arnsholt: yes | 19:35 | |
masak | I'm running spectests now. Release Day tomorrow. the release guide says I should encourage people to update the ChangeLog and the ROADMAP. | ||
masak looks encouraging | |||
:) | |||
pmichaud | masak: do you want me to hold off on merging the list branch to trunk, or try to get it in before the release? | 19:37 | |
(all spectests will pass before merging to master) | |||
I'm in favor of getting this merged. :) | |||
masak | by all means, merge. | 19:38 | |
pmichaud | okay. I'm hoping to have that done by tonight, but it might be late tonight. When were you planning to cut the release? | ||
masak | tomorrow. | ||
pmichaud | when tomorrow? ;-) | ||
(your "tomorrow" is sometimes offset from mine :) | |||
masak | my guess is at around 20:00 UTC. | 19:39 | |
pmichaud | oh, excellent. | ||
so, about this time tomorrow then. No problem. | |||
If I don't have the list stuff merged by around 08:00 UTC I'm not likely to try to merge before release. | |||
masak | ok. | ||
pmichaud | oh, we may also end up swapping "Atlanta" and "Kiev". | 19:40 | |
dalek | ok: a1d008e | (Hinrik Örn Sigurðsson)++ | (2 files): Remove Module::Install::AuthorTests |
||
ok: f16ad94 | (Hinrik Örn Sigurðsson)++ | (9 files): Bump version to 0.20 |
|||
ok: a99c023 | (Hinrik Örn Sigurðsson)++ | (15 files): Add -U/--update to download latest versions of documents from the web |
|||
ok: eca6538 | (Hinrik Örn Sigurðsson)++ | (9 files): Bump version to 0.21 |
|||
pmichaud | anyway, I'll take care of that today. | ||
literal | is dalek's source in pugs svn? | ||
its output can be made much more concise | 19:41 | ||
masak | literal: ISTR it's on github. | ||
19:41
frew joined,
frew left
|
|||
pmichaud | literal: what would you do to make it more concise? I kind of like it as it is. | 19:41 | |
19:42
patspam joined
|
|||
PerlJam | he could shorten the URLs | 19:42 | |
literal | I'll show you | ||
masak | PerlJam: using an URL shortener on -every- github URL reported on-channel feels... a bit wasteful. :/ | 19:43 | |
s/an/a/ | 19:44 | ||
literal | pmichaud: paste.scsys.co.uk/44927 | ||
pmichaud | literal: I don't like that. I like having the urls easily clickable in my window. | ||
PerlJam | masak: just contemplating what could be done to make the output more concise. I'm not saying it's a good idea :) | ||
literal | pmichaud: it is easily clickable there | ||
pmichaud | and I like seeing the full commit messages. | ||
literal | the compare url gives you a list of all the commits | ||
and shows you a complete diff | 19:45 | ||
e.g. see github.com/hailo/hailo/compare/34d7f7c...b617711 | |||
pmichaud | oh, that might work. | ||
what about full commit messages? | |||
literal | that could be added | ||
PerlJam | and looking at the existing messages I suppose the SHA1 prefix is a little redundant if we also give the URL | 19:46 | |
19:46
masak left
|
|||
pmichaud | anyway, as long as the urls are present in some easily clickable form, I'm not opposed too strongly. | 19:46 | |
yay, all hash tests pass in the new design! | |||
19:46
masak joined
|
|||
PerlJam | that was quickish | 19:47 | |
(quicker than I was expecting anyway) | |||
pmichaud | that's how "right" the design is :) | ||
sorear | What is elf and why do we want to remove it from the evalbot? | ||
literal | hm, github.com/cmaujean/dalek, "Nothing to see here yet. Move along." | ||
PerlJam | who wants to remove elf? | 19:48 | |
does someone have something against Ronnie James Dio? | |||
pmichaud | sorear: svn.pugscode.org/pugs/misc/elf/README | ||
literal | sorear: by the way, you can try upgrading to grok 0.21 and doing grok --update | ||
nix.is/grok-0.21.tar.gz # in case it's not on CPAN yet | 19:49 | ||
19:50
Mowah joined,
foodoo left
|
|||
colomon | rakudo: say 2 == (2 + 0i) | 19:51 | |
p6eval | rakudo 272191: OUTPUT«0» | ||
colomon | rakudo: say (2 + 0i) == (2 + 0i) | ||
p6eval | rakudo 272191: OUTPUT«1» | ||
masak | rakudo: say (2 + 0i) == 2 | 19:52 | |
p6eval | rakudo 272191: OUTPUT«0» | ||
masak | at least it's reflexive. | 19:53 | |
sorear | literal: How hard would it be to make grok DTRT when fed Perl6 source? I mean, discarding ambient code and not try to format it as pod | 19:56 | |
masak | jnthn, pmichaud: after having read jnthn++'s blog post, I also want to change the name of tomorrow's release to "Kiev". can I do it right away? | 19:58 | |
alternatively, we'll name it "Wasabi" :P | |||
pmichaud | masak: I need to check with the person who requested (and paid for) Atlanta | 19:59 | |
(paid at a TPF auction) | |||
TimToady | phone | 20:00 | |
pmichaud | I'll check now. | ||
masak | ok. | ||
jnthn | masak: :P | ||
masak: Yes, that will probably forever remain as one of the most memorable things I've ever drunk. :-) | |||
masak googles for 'Wasabi Vodka'. planetsix.perl.org is in third place :P | 20:02 | ||
sorear | TimToady: ping | 20:03 | |
jnthn feels a weird sense of achievement | |||
TimToady | pong | ||
sorear | TimToady: I think I've uncovered a STD bug; mod_internal:sym<:i> starts with $<sym>=[':i' | ':ignorecase'], which is a literal prefix of 0 | ||
should be [':i'['gnorecase']?], yes/no? | 20:04 | ||
20:04
Psyche^ joined
|
|||
TimToady | hmm | 20:04 | |
either that, or we do token splitting in such cases, both of which end up with the same fate | 20:06 | ||
literal | sorear: hm, I guess Perl6::Perldoc would need to be updated to handle it | ||
TimToady | but your solution is fine for now | ||
or we just go ahead and let it be 0, and rely on normal LTM | |||
literal | sorear: can you point me to a p6 file with Pod which shows the problem? | 20:08 | |
20:08
Patterner left,
Psyche^ is now known as Patterner
|
|||
lue | ohai | 20:08 | |
sorear | TimToady: the problem with relying on normal LTM is that mod_internal:oops has a prefix length of 1 | ||
and wins | |||
masak | lue: \o | 20:09 | |
lue | methinks I have a problem with precedence... | ||
sorear | (yes, dfa/Cursor has parsed enough of STD to reach a :i and die) | ||
literal: no, because chicken and egg. there's no tool that can extract pod from perl6 so nobody puts pod in perl6 | 20:10 | ||
masak | sorear: that's only 90% true :) | ||
sorear | poor mockup: pastie.org/1007472 | ||
lue | what does the N in the precedence chart in S03 stand for? | 20:13 | |
20:13
mikehh left
|
|||
moritz_ | the precedences are enummerated alphabetically | 20:13 | |
so it stands for "after L and before M" :-) | 20:14 | ||
TimToady | sorear: that should be solved by starting oops with {} | ||
masak | lue: "no associativity" | ||
lue: in other words, not using parentheses in `$a op $b op $c` is illegal for such an op. | 20:15 | ||
lue | Ok. | ||
moritz_ | oh, I thought you meant the prec levels in STD.pm | ||
moritz_ too tired for proper reading | |||
lue | Problem is, some things marked N in S03 have associativity in the Grammar. | 20:16 | |
i.e. Perl6::Grammar.O(':prec<x=>, :assoc<unary>', '%autoincrement'); | |||
masak | lue: could you exemplify with a well-placed p6eval call? | ||
moritz_ | lue: unary operators are special in that regard | ||
lue | I'm trying to figure out why my circumfix fix is not quite working. | ||
masak | whoa. proto has a version number, and I didn't even know. :P | 20:17 | |
moritz_ | there are no two sane ways to parse +~$thing | ||
(+~)$thing doesn't make sense | |||
[particle] would be pleased if all modules included in R* had version numbers and authorities | 20:18 | ||
lue | thanks to pmichaud, I place a line specifying %term , but w/o any associativity [I guess I don't know much. Just trying to fix it] | ||
moritz_ | only +(~$thing) | ||
lue | masak: did you see the results of what I've done so far? | ||
masak | moritz_: I'm still surprised 'unary' counts as an associativity. PGE has no such exception. | ||
moritz_ | somhow Match.postcircumfix:<{ }> is b0rked in 'list' branch | 20:19 | |
20:19
sorear left
|
|||
masak | lue: no, what should I be looking for? | 20:19 | |
20:19
Mowah left
|
|||
lue | > multi sub circumfix:<☃ ☄>($a) { Regex.new(<$a>); }; say ("3" ~ ☃<digit>+☄) | 20:19 | |
Unable to parse postcircumfix:sym<( )>, couldn't find final ')' at line 1 | |||
20:19
sorear joined
|
|||
lue | I got closer, there's no parse error now :) | 20:20 | |
TimToady | std: multi sub circumfix:<☃ ☄>($a) { Regex.new(<$a>); }; say ("3" ~ ☃<digit>+☄) | ||
p6eval | std 31298: OUTPUT«===SORRY!===Bogus term at /tmp/UsasH1RrZF line 1:------> Regex.new(<$a>); }; say ("3" ~ ☃<digit>+⏏☄)Parse failedFAILED 00:01 113m» | ||
lue | I think the precedence is screwing it up though. | ||
TimToady | there *should* be a parse error :) | ||
lue | > multi sub circumfix:<Ω Ω>($a) { say $a;}; Ω3Ω | 20:21 | |
Confused at line 1, near "\x{ce}\x{a9}3\x{ce}\x{a9}\n" | |||
TimToady | circumfixes are not quotes | ||
std: multi sub circumfix:<Ω Ω>($a) { say $a;}; Ω3Ω | |||
p6eval | std 31298: OUTPUT«===SORRY!===Undeclared routine: 'Ω3Ω' used at line 1Check failedFAILED 00:01 109m» | ||
20:21
jrtayloriv joined
|
|||
TimToady | std: multi sub circumfix:<Ω Ω>($a) { say $a;}; Ω 3 Ω | 20:21 | |
p6eval | std 31298: OUTPUT«===SORRY!===Two terms in a row at /tmp/L3aKEKXlAL line 1:------> sub circumfix:<Ω Ω>($a) { say $a;}; Ω 3 ⏏Ω expecting any of: bracketed infix infix or meta-infix statement modifier loopParse failedFAILED 00:01 110m» | ||
20:22
[Coke] left,
[Coke] joined
|
|||
lue | well, at least I got rid of the part where it didn't understand what a custom circumfix was :) | 20:22 | |
TimToady | can't really use alphanumerics for circumfixes, since they're ambiguous with normal names | ||
20:22
justatheory joined
|
|||
lue | I thought it was, just needing spaces. | 20:23 | |
TimToady | std: multi sub circumfix:<` `>($a) { say $a;}; `3` | ||
p6eval | std 31298: OUTPUT«===SORRY!===Confused at /tmp/1TbcOKRuc5 line 1:------> i sub circumfix:<` `>($a) { say $a;}; `3⏏` expecting any of: POST bracketed infix infix or meta-infix postfix postfix_prefix_meta_operator | ||
..statement modifier loopParse failedFA… | |||
20:23
xabbu42 left,
xabbu42 joined
|
|||
TimToady | and that's a known bug in STD :) | 20:23 | |
masak | TimToady: huh? why can't normal names be used in circumfixes, when they can in infix operators? | 20:24 | |
lue | Confused at line 1, near "`3`\n" is what I get with what you put up, TimToady | ||
sorear | TTIAR? | ||
TimToady | because we have term:ident, but not infix:ident | ||
masak | lue: did you catch the "circumfixes are not quotes" part that TimToady said? | 20:25 | |
lue | yes. | ||
TimToady | no, the bug in STD is confusion between starters and stoppers | ||
masak | lue: goodie. just checking. | ||
TimToady | probably due to cursor reuse | ||
lue | I don't necessarily see why it's relevant, but I caught it, and can infer what he means :) | 20:26 | |
while you're here TimToady, circumfixes *are* terms, are they not? | |||
TimToady | yes, they're terms on the outside, but EXPR on the inside | 20:27 | |
masak | lue: it's relevant, because <digit>+ in your code isn't valid Perl 6. | 20:28 | |
lue | I meant for it to be a regex. | ||
masak | lue: and if a circumfix doesn't quote... then you've written something invalid. | ||
TimToady | you might have meant that, but the parser can't read your mind | 20:29 | |
lue | seems like it needs to be more than just simply adding a definition for %term then… | 20:31 | |
TimToady | std: multi sub circumfix:<「 」>($a) { say $a;}; 「3」 | 20:32 | |
p6eval | std 31298: OUTPUT«===SORRY!===Confused at /tmp/5Cb0diuN6F line 1:------> i sub circumfix:<「 」>($a) { say $a;}; 「3⏏」 expecting any of: POST bracketed infix infix or meta-infix postfix postfix_prefix_meta_operator statement | 20:33 | |
..modifier loopParse failedFA… | |||
TimToady | hmm | ||
pugssvn | r31299 | sorear++ | [dfa/Cursor] When a subregex which generates nontrivial fates is quantified, the fates must be discarded, as the runtime quantifier cannot know how to correctly route them. | 20:34 | |
rokoteko | circumfix? really? why not just lhs-fix + rhs-fix ? | ||
szabgab | rakudo: my $c = [["name", 42], ["verbatim", "abc"]]; say $c[0].perl; for $c -> $x { say "z", $x.perl } | 20:36 | |
p6eval | rakudo 272191: OUTPUT«["name", 42]z[["name", 42], ["verbatim", "abc"]]» | ||
szabgab | so I thought $z is an array here | 20:37 | |
masak | rokoteko: because there's no such thing as lhs-fix and rhs-fix? :) | ||
pugssvn | r31300 | sorear++ | [STD] Don't rely on old-Cursor's buggy token splitting in mod_internal | ||
szabgab | $c I mean | ||
masak | rokoteko: seriously, I don't see how they could be made to work the same as a circumfix. the latter imposes precedence. | ||
szabgab | as $c[0] works | ||
masak | just like parens do. | ||
szabgab | but how can I loop over the elements? | ||
lue | because for lhs-fix and rhs-fix you'd still have to tell it the matching delimiter. | ||
szabgab | rakudo: my $c = [["name", 42], ["verbatim", "abc"]]; say $c[0].perl; say $c.elems | 20:39 | |
p6eval | rakudo 272191: OUTPUT«["name", 42]2» | ||
szabgab | rakudo: my $c = [["name", 42], ["verbatim", "abc"]]; say $c[0].perl; for 0..say $c.elems-1 -> $i { say $c[$i] } | 20:40 | |
p6eval | rakudo 272191: OUTPUT«["name", 42]1name 42verbatim abc» | ||
TimToady | std: ( 42 ] | ||
p6eval | std 31298: OUTPUT«===SORRY!===Unable to parse parenthesized expression at /tmp/pz3mwLMlZS line 1:------> <BOL>⏏( 42 ]Couldn't find final ')'; gave up at /tmp/pz3mwLMlZS line 1:------> ( 42 ⏏] expecting statement modifier loopParse | ||
..fail… | |||
lue | so interval notation isn't standard to the core it seems :) | 20:41 | |
masak | szabgab: I usually do `for $c.list -> $x { ... }` | ||
szabgab | rakudo: my $c = [["name", 42], ["verbatim", "abc"]]; for $c.list -> $x { say $x.perl } | ||
p6eval | rakudo 272191: OUTPUT«["name", 42]["verbatim", "abc"]» | ||
rokoteko | lhs-fix and rhs-fix maybe you'd like to call the beforefix, afterfix.. as opposite to prefix and postfix, but they have to come in pairs. | ||
szabgab | masak, thanks | ||
TimToady | rokoteko: what does that buy you? | 20:42 | |
rokoteko | masak: circumfix sounds more silly to me. | ||
TimToady | we don't care if things sound silly here | ||
masak says "Mu"! | 20:43 | ||
lue | <JOKE> .oO(twigil sounds silly. Let's call it secondarygil) </JOKE> | 20:44 | |
rokoteko | TimToady: sub beforefix<`> ( "bread" ); sub afterfix<xB4> ( "milk" ); `rokoteko.buys()xB4 | ||
I buy bread an milk! | 20:45 | ||
TimToady | how do you know they go together? | ||
circumfixes have to match | |||
std: ( 42 ] | |||
p6eval | std 31298: OUTPUT«===SORRY!===Unable to parse parenthesized expression at /tmp/s4GEMsNW8k line 1:------> <BOL>⏏( 42 ]Couldn't find final ')'; gave up at /tmp/s4GEMsNW8k line 1:------> ( 42 ⏏] expecting statement modifier loopParse | ||
..fail… | |||
rokoteko | TimToady: well, you obviously don't know that with circumfix either. | ||
lue | that's what I was wondering. You'd have to state that anyway. Circumfix makes it easy. | ||
TimToady | yes, we do!!! | ||
masak | yes, exactly. | ||
TimToady | or we couldn't give that error message there | ||
szabgab | rakudo: (1,2,3).map(-> $x { say $x } ); | 20:46 | |
masak | ¡¡¡yes, we do!!! | ||
p6eval | rakudo 272191: ( no output ) | ||
szabgab | hmm, this works in the REPL | ||
jnthn | circum means "around"; circumfixes are things that go around other things. The name seems pretty fitting to me. :-) | ||
szabgab | printing both 1 2 3 and 1 1 1 | ||
jnthn | szabgab: The REPL probably sinks it. | ||
lue | It might not be english, but hey. | ||
masak | lue: it's Latin. :) | 20:47 | |
jnthn | lue: There's plenty of words with that prefix that made it into English. | ||
lue is reminded of the quest to find a word for %_ | |||
jnthn | circumference, circumscribe, circumsize... | ||
masak | lue: "Holy Grail"? :P | ||
szabgab | jnthn, just don't go there ... | ||
lue | I meant the whole word circumfix | ||
rokoteko | TimToady: I dunno. maybe the programmer should be responsible for choosing the before- and afterfix operators, in such way that there is no afterfix in between. | 20:48 | |
lue | QUICK! Give me a pronoun describing a hash like structure. Any language! | ||
szabgab | זוג | ||
rokoteko | to *me* circumfix sounded like silly (which I now have learnt that is not possible on this channel). :) | ||
PerlJam | lue: %_ | 20:49 | |
lue | szabgab: you broke the continuity with RTL! That's Cool! :) | ||
any *natural* language :) | |||
szabgab | it actually looks much better in had writing where the word pair looks symmetric | ||
lue | .u ג | 20:50 | |
phenny | U+05D2 HEBREW LETTER GIMEL (ג) | ||
lue | ah, hebrew. | ||
masak | S03-operators/range-basic.rakudo fails over here. lots of TODO passes, for some reason. gist.github.com/441245 | ||
colomon | "over here"? | 20:51 | |
Util | masak: same here (03-operators/{assign,range-basic} FAIL, lots of TODO passing) | 20:52 | |
jnthn | colomon: Yeah, over there, somewhere to my north east, the test is failing. ;-) | ||
Util | (Max OS X 10.5) | ||
rokoteko | anyhow. to me sub circumfix <'> ( foo() ); sounds more difficult to parse than a after- and beforefix, becuase in the former you cant blame the programmer for not thinking which pairs to choose. :) | ||
Util | s/Max/Mac/ | ||
lue | Maybe masak was referring to his location IPv4 space... | ||
colomon | probably my fault, I know I've got a custom range-basic running okay here. | ||
TimToady | rokoteko: I'm curious as to why you think circumfix sounds silly. it's all perfectly good Latin roots, used in their appropriate meanings | ||
rokoteko | or s/blame/trust/ and s/not// :) | 20:53 | |
colomon | I was more curious about which branch of rakudo... | ||
TimToady | or is it just that all neologisms sound silly to you? | ||
lue | that's not how circumfix works. | ||
rokoteko | TimToady: should I look up neologism or are you planning to explain before I think of my answer? | ||
TimToady | a "coined" word | 20:54 | |
rokoteko | as in coins have two sides? | ||
lue | A word that's not standard but used anyway. 'Bling' used to be one, I believe. | ||
It's a new word. | |||
rokoteko | ahh. then I have nothing against circumfix as a word. | ||
lue | .oO( sub circumfix:<' '>($parameter) { say $parameter; }; ) |
20:55 | |
rokoteko | it's probably how I have taught me neurons. easier to gasp the idea of anti-postfix and anti-prefix vs the opposites than infix vs circumfix. how on earth would you use circumfix in practise? | 20:56 | |
20:56
bjarneh left
|
|||
masak | my productivity index is at 0 today, it seems. that's what I get for getting fresh air all day. I'll try sleeping for a few hours and then returning. see you, #perl6. | 20:56 | |
20:56
masak left
|
|||
rokoteko | I find it very hard to grasp how to chain if it's always the same char at both ends. | 20:56 | |
20:56
bjarneh joined
|
|||
lue | We use them for things like ( ), [ ], and { } | 20:56 | |
20:56
sorear left
|
|||
lue | doesn't always need to be the same character :) | 20:57 | |
20:58
sorear joined
|
|||
PerlJam wonders what chaining has to do with it | 20:58 | ||
20:59
whiteknight joined
|
|||
pmichaud | back to hacking | 20:59 | |
jnthn: I didn't mention yet, but the new Associative refactoring is awesome (and clean) | 21:00 | ||
21:00
jrtayloriv left
|
|||
rokoteko | I was thinking in the lines of: "a (circumfix b) circumfix c d" .. where the circumfix op is "circumfix" :) | 21:01 | |
jnthn | pmichaud: :-) | 21:02 | |
lue | You should never need to do that, unless b) is a string. | ||
jnthn | pmichaud: Meanwhile, s/Perl6MultiSub/Multi/...is fail. :/ | ||
jnthn digs into why | |||
rokoteko | lue: ah. ok. | 21:03 | |
maybe I should spend some time reading the synopses instead of asking weird questions here. :) | |||
21:03
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
|
|||
pmichaud | jnthn: I don't need that feature at all now, fwiw. | 21:03 | |
I found an even cleaner mechanism than what I was looking at earlier. :) | 21:04 | ||
lue | if it were a string, it wouldn't matter. Then It would look like a (circumfix "b)" circumfix c d) | ||
rokoteko | Anyhow, cool to hear that perl6 has circumfix! :) that was something new for today. | 21:05 | |
szabgab | some Rakudo code question: | ||
I see pir::open__PSS mentioned 3 times in the src/ tree of Rakudo, one is the definition of open() and two other places, should the two other places actually use the open() function?? | |||
21:06
diakopter sets mode: +o sorear
21:08
diakopter left
|
|||
jnthn | pmichaud: I know, it was high on my "fix this" list anyway | 21:08 | |
21:09
diakopter joined
|
|||
jnthn | pmichaud: So can have .cando work on multis, so an RT can be resolved. :-) | 21:09 | |
pmichaud | okay. | ||
21:09
sorear sets mode: +o diakopter
|
|||
pmichaud | szabgab: I think I would prefer that, yes. | 21:09 | |
dalek | ok: 11a5774 | chromatic++ | src/preface.pod: Edited preface; left in one author note. |
21:10 | |
ok: 2535b58 | chromatic++ | src/basics.pod: Edited basics chapter, leaving one author note. |
|||
szabgab | pmichaud, then I'll try to do that tomorrow as my first attempt at rakudo itself | 21:11 | |
pmichaud | szabgab: woo hoo! | ||
21:11
rv2733 left
|
|||
lue | The worst part is that circumfix is bothering me enough to make me want to fix it, but I don't know enough to do so without a _lot_ of help. :) | 21:11 | |
pmichaud | szabgab++ | ||
szabgab | is the RT submission critical or a push request on my github fork is sufficient for patches? | 21:12 | |
or maybe pull request. | |||
lue | afk | 21:13 | |
pmichaud | szabgab: I haven't been able to make pull requests (github's fork queue) work well for me, so we've gone with patch emails | 21:15 | |
or you can send us the pull request information directly in an email or ticket | |||
or catch someone here to do it | |||
but I personally find github's fork queue to be "not understandable or usable." (Maybe someone can give me a tutorial sometime about how it's supposed to work.) | 21:16 | ||
PerlJam | or just give szabgab commit access :) | ||
szabgab | ok, let me first try to make the change and then I catch someone to see how to do it to make it easy for tou | ||
PerlJam, I don't want to run around with open scissors | 21:17 | ||
but thanks :) | |||
pmichaud | phenny: tell masak it's official, tomorrow's release is "Kiev" | ||
phenny | pmichaud: I'll pass that on when masak is around. | ||
dalek | kudo: c9ee2eb | pmichaud++ | docs/release_guide.pod: June release is now "Kiev", July release is "Atlanta". |
||
jnthn | \o/ | 21:18 | |
21:18
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
|
|||
szabgab | anyway, night & | 21:18 | |
Tene | szabgab: really, the pir::open in open() should instead make a new Filehandle and call its 'open' method. | 21:19 | |
szabgab: ah, g'night | |||
21:23
Guest23195 left
21:24
felipe joined
21:31
clintongormley left,
Su-Shee left
21:32
silug left
21:36
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
21:38
Guest37981 left
21:43
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
22:02
hercynium left
22:04
sdvsdvsdv left
22:06
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
22:07
sdvsdvsdv joined
22:08
pyrimidine left
22:10
bjarneh left,
kda joined
|
|||
pugssvn | r31301 | sorear++ | [dfa/Cursor] Rearrange quantifier handling to avoid NFA node population explosions | 22:12 | |
diakopter | r31301 :) | 22:17 | |
sorear | it's not even a palindrome | 22:19 | |
22:19
ewilhelm joined
|
|||
sorear | variable_2 generates over 1500 dfa nodes | 22:21 | |
*nfa | |||
this needs investigating | |||
desigilname itself makes >300, most with only epsilons | 22:25 | ||
22:28
hudnix left,
macdaddy left
|
|||
skids | www.abrij.org/~bri/camelia_ifs.svg <--- you'll need opera. Or the adobe SVG+SMIL plugin. | 22:29 | |
And a lot of cpu cycles. | |||
22:30
literal left
22:32
literal joined,
literal left
22:33
literal joined
22:34
macdaddy joined
22:36
Ross left
22:38
tedv joined
22:41
skids left
|
|||
pugssvn | r31302 | sorear++ | [dfa/Cursor] Fix handling of imperative nodes in nfaopt and nfastar | 22:49 | |
22:51
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
|
|||
sorear | \o/ | 22:54 | |
dfa/Cursor just successfully and without misparsings bootstrapped STD.pm6 | 22:55 | ||
and in 10 seconds less than the old Cursor, before I've even started microoptimizing | |||
22:58
Transformer joined
23:00
Transformer left
23:03
broquaint joined
|
|||
sorear runs the profiler and opts to optimize a bit before the mergeback | 23:05 | ||
23:11
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
23:13
Transformer joined
23:16
Transformer left
23:18
broquaint left
|
|||
sorear | the annoying thing about NYTProf is that it makes your program 10x slower | 23:19 | |
not good if it's too slow | |||
I'd love to see a proper low-overhead Perl profiler | |||
maybe with parrot and ponie we'll get one. | |||
23:20
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
|
|||
Tene | is ponie not-dead now? | 23:28 | |
23:29
patspam left
|
|||
jnthn | Aanyone know if anything happened recently that may have resulted in Rakudo's spectests no longer running in parallel for me? | 23:30 | |
It makes things...epicly slower. :/ | |||
Tene | jnthn: I successfully ran spectests in parallel in the list branch last night. | 23:31 | |
I'll update master right now and try | |||
updating parrot... | |||
updating rakudo... | 23:34 | ||
23:34
snarkyboojum left
23:35
yinyin joined
|
|||
sorear | Tene: One ponie is dead | 23:37 | |
Tene | spectesting... | ||
sorear: is there another one? | |||
TimToady | sorear: 10 sec less is about what I expected from old NYTProf | ||
and \o/ too | |||
sorear | jnthn: Rakudo spectests are no longer parralel by default, because it hoses newbies with small computers | ||
Tene: TimToady has used "ponie" to refer to what STD_P5.pm6 is going to become | 23:38 | ||
TimToady | I did? | 23:39 | |
sorear | I thought you did | ||
jnthn | sorear: :/ | ||
sorear: Any idea off hand how one re-instates it locally? | 23:40 | ||
23:40
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
|
|||
sorear | look in scrollback, someone asked the same thing | 23:41 | |
Tene | jnthn: TEST_JOBS=4 make spectest | ||
is what I'm using | |||
jnthn | Thanks, I'll work out how to win32-ify that. :-) | ||
23:41
mikehh joined
|
|||
sorear | make spectest TEST_JOBS=4 | 23:41 | |
? | |||
Tene | sorear: what did it use previously? if you only have one cpu, did it still do parallel? | 23:42 | |
23:42
gbacon left
|
|||
sorear | Tene: yes | 23:42 | |
and 3 | |||
Tene | Oh. I can understand the problem. | 23:43 | |
jnthn | Ah...yes, spawing 3 in parallel on a single-processor box is unfriendly. | 23:44 | |
sorear | especially if you have less than the needed 3*150 MB ram | ||
as expected, NFA generation is very high up for time used parsing 2 + 2 | |||
unexpectedly, Class::MOP is actually at the top of the list | 23:45 | ||
23:46
mberends left
|
|||
TimToady | is that with uncached lexers? | 23:46 | |
Tene | 150MB is down from several months ago, yes? I seem to remember ~400MB once... or was that for compiling? | ||
TimToady | looking up all the methods to PEEK can be expensive | 23:47 | |
Tene | jnthn: get parallel testing working for you? Just finished for me on my laptop, but I don't know if these test failures are normal or not. | 23:49 | |
Files=456, Tests=32404, 601 wallclock secs (15.42 usr 1.93 sys + 1860.99 cusr 49.96 csys = 1928.30 CPU) | |||
jnthn | Tene: No, got bogged down in debugging something. | 23:50 | |
23:51
xabbu42_ joined,
xabbu42 left,
xabbu42_ is now known as xabbu42
|
|||
sorear | TimToady: yes; I'm hoping to get rid of the on-disk lexer cache | 23:52 | |
23:53
jferrero left
|
|||
mikehh | rakudo (c9ee2eb) builds on parrot r47666 - make test PASS, spectest_smolder -> #34441 (pugs r31302) FAIL - Ubuntu 10.04 i386 (g++ with --optimize) | 23:55 | |
pmichaud | finally found the problem with S03-metaop/cross.t | ||
Tene | I saw an infinite loop back and forth between junction.bool and failure.bool, but it looked like the stack trace was missing something there, or otherwise inaccurate. | 23:56 | |
pmichaud | the junction ended up storing a reference back to itself. | 23:57 | |
i.e., $result = &infix:<|>($result, $value) | 23:58 | ||
the junction wasn't properly dereferencing the $result container, and therefore was keeping a reference to $result instead of its value | |||
so then when you tried to use it... infinite loop :-| | |||
Tene | ah | 23:59 | |
pmichaud | (parallel testing) - I think I'd be in favor of having a parallel test target | ||
make jtest or something | |||
sorear | TimToady: have you considered making DEBUG a constant, so if DEBUG & DEBUG::foo lines can be optimized out by the constant folder? |