»ö« | perl6.org/ | 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 moritz_ on 25 June 2010. |
|||
00:00
Psyche^ joined
00:05
Psyche^ is now known as Patterner,
tylercurtis left,
lest_away is now known as lestrrat
00:07
daemon joined
|
|||
sorear | interesting that Pm no longer uses feathe | 00:11 | |
Tene | How is that interesting? | 00:12 | |
sorear | it means people don't tend to trust feather anymore | 00:13 | |
the person who theoretically is supposed to be available to manage feather, uses it for IRC | 00:14 | ||
so I can't even use proper channels to complain | |||
Tene | I don't know that one person choosing to use something else for his personal IRC needs is necessarily representative of a sea change in general attitudes. | 00:15 | |
Juerd using IRC on feather is a problem, however. | |||
sorear | TimToady: What's the right way to handle Any.WHICH in a compacting environment? | 00:18 | |
TimToady | compacting? | 00:20 | |
are you asking for a small serializable repr for type objects? | |||
sorear | no | 00:21 | |
I mean that Mono is allowed to move objects at any time for any reason | |||
so an (address space, address) pair is unsuitable | 00:22 | ||
TimToady | then (symbol-generator-space, symbol) will have to do, I imagine | ||
or (unlikely-to-collide-type-space, unique-derivable-value) | 00:23 | ||
which is the spirit of the ObjAt type, even if "at" is meaningless | 00:24 | ||
even a sufficiently large, sufficiently random number is usually good enough for an identity | 00:25 | ||
pmichaud_ | I still use feather -- my connection to feather died. | 00:26 | |
in the middle of the conversation. | |||
so I had to connect with a different client. | |||
(my connection to feather is still dead) | 00:27 | ||
TimToady | pugs repo is timing out | 00:28 | |
jnthn | pmichaud_: Just discovered that some nqp tests use a plan/ok and others don't. :-) | ||
pmichaud_: Also, I have 05-comments.t failing with parrot-nqp | |||
pmichaud_: Do you get that also? | |||
(thought something was screwed up in the cross-compiler, then found I got it on Parrot NQP too...) | 00:29 | ||
TimToady | sorear: of course, value types are immutable and don't care if they get moved, since their .WHICH is their value | 00:30 | |
does Mono not provide any sort of object identity? | |||
wolverian | I wonder why perl5(.12.1) make test says "Failed 1 test out of 1695", and a few lines later "scripts=1695 tests=350092" | 00:31 | |
00:31
cotto_work joined,
ruoso joined
|
|||
wolverian | for a moment I thought I was missing a lot of tests. :) | 00:31 | |
sorear | TimToady: it provides a reference equality operator and a reference -> int32 hash code function | 00:32 | |
TimToady | hmm, 32 bits seems a bit skimpy | 00:33 | |
sorear | you think hash tables with >4G buckets are going to be important soon? | ||
oh, you mean for WHICH.Numeric | 00:34 | ||
TimToady | no, but if there's some chance of collision, and .WHICH is used to distinguish objects that fall in the same bucket, you're somewhat at the mercy of the hash algorithm | ||
don't care about numeric, only unique | 00:35 | ||
00:35
fod left
|
|||
TimToady | or unique enough | 00:36 | |
and performance, if you use a symbol generator, it's a multi-thread bottleneck | 00:37 | ||
in such a case, random numbers may be more performant | |||
assuming enough available multi-threaded entropy, of course | |||
sorear | is $a.WHICH === $b.WHICH allowed to ever return True for distinct objects? | 00:38 | |
TimToady | well, I suppose per-thread symbol generators would work | ||
sorear | if not, then I think the sane thing to do is to use lazy symbol generation | 00:39 | |
the first time WHICH is called on an object, create an ObjAt object and bind it to the object | |||
perhaps using weak references so that the ObjAt can be collected | |||
TimToady | do weak refs have some kind of internal identity? maybe make a weak ref from obj to itself. :) | 00:41 | |
sorear | simultaneously, and unrelately, I'm asking #mono how to implement WHERE (integer memory address, you are at the mercy of the GC) and getting the classic "why would you possibly want to do that" | ||
pmichaud_ | jnthn: 05-comments.t passes for me, last I checked. | 00:42 | |
pmichaud_ checks. | |||
sorear | to which I realize... I don't know | ||
pmichaud_ | yes, it passes for me. | ||
jnthn | pmichaud_: OK, I'll try and fathom what's going on. | 00:43 | |
pmichaud_: Thanks. | |||
pmichaud_ | is feather still up? I seem to be unable to reach it from here. | ||
TimToady | can't see it from here | 00:44 | |
pmichaud_ | twitter.com/TimToady/status/21444365173 # I could never get along with this guy :-) | 00:46 | |
jnthn | ;-) | 00:47 | |
00:48
plobsing joined
|
|||
pmichaud_ | just converting Nil to be undefined is having some interesting implications for the code :) | 00:49 | |
nothing serious yet, but definitely interesting. | |||
00:49
drbean joined
|
|||
sorear is vaguely bothered by the current definition of Nil | 00:50 | ||
TimToady: Weak references have no more identity than any other object, sadly | 00:51 | ||
TimToady | it's always a bit hard to define something negative as something positive... | ||
sorear | TimToady: How are .WHICH values compared? | ||
TimToady | eqv or ===, shouldn't matter, since .WHICH is always supposed to return a value type | ||
sorear | How is === defined? | 00:52 | |
TimToady | $a.WHICH === $b.WHICH :) | ||
or eqv | |||
one can see either eqv or === as the more primitive notion... | 00:53 | ||
sorear | 1 === 1 -> 1.WHICH === 1.WHICH -> 1 === 1 -> ... | ||
TimToady | hence the smiley | ||
sorear | How does eqv interact with user-defined types? | 00:54 | |
TimToady | I tend to think of eqv as more primitive, at least here | ||
eqv is defined in terms of "would these objects canonicalize to the same serialization", assuming a sufficiently smart canonicalizer that, say, hashes don't have to be stored in exactly the same order to be eqv | 00:56 | ||
of course, a really stupid way to implement eqv would be to serialize both halves and then use eq | |||
you're like to do it piecemeal such that it will falsify rapidly without all that work | 00:57 | ||
chances are this gets somewhat incestuous with the responder interface for the actual repr | 00:58 | ||
sorear | it also needs to work with stuff that can't be serialized, like ObjAt in some environments... | ||
TimToady | eqv is snapshot equivalence; two objects that are eqv right now might not be in the future | ||
sorear | what is the point of WHERE? | 00:59 | |
TimToady | no much, just spec the api if it is ever wanted | ||
*not much | |||
in any case, probably relatively meaningless under NUMA (or compacting GC) | 01:00 | ||
=== is not snapshot equivalence, but comparing the "essence" of an object that determines its eternal identity | |||
jnthn | ...and before I stay up eternally...goodnight o/ :-) | ||
TimToady | \o | ||
so unless you want identity theft, it's better if .WHICH values don't collide accidentally | 01:01 | ||
non-serializability of ObjAt is not a problem insofar as the .WHICH of such an object does not participate in eqv | 01:03 | ||
since the main point of eqv is to be able to compare objects with different identities | 01:04 | ||
01:08
dalek joined
01:09
ChanServ sets mode: +v dalek
|
|||
TimToady | ohh, featheration | 01:10 | |
dalek | ecza: b4ad6c2 | sorear++ | /: Resolve lexicals as a separate pass before to_anf |
||
ecza: a6dcd31 | sorear++ | /: Add a storage class for ro names like classes |
|||
ecza: 2fa3d4e | sorear++ | /: Handle type objects as true-readonlies -36K testsuite (and 13s -> 9s) |
|||
ecza: c766146 | sorear++ | /: Handle named subs as readonlies -20K testsuite |
|||
01:10
pmichaud joined,
dukeleto joined
01:11
PerlJam joined,
Util joined
01:12
dalek left,
chromatic left,
dalek joined,
ChanServ sets mode: +v dalek,
Infinoid joined
01:13
pmichaud_ left,
pugssvn joined,
ChanServ sets mode: +v pugssvn
01:15
redicaps joined,
Juerd joined
|
|||
pugssvn | r32028 | lwall++ | [STD] add clone as reasonable method to use .= on | 01:19 | |
01:35
_madmax_ joined
01:39
ShaneC joined
01:47
ash_ joined
01:52
whiteknight left
01:53
drbean left
01:56
justatheory joined
01:59
justatheory left,
justatheory joined
02:00
drbean joined
02:01
Italian_Plumber left
02:09
ShaneC left
|
|||
dalek | p-rx: a528b79 | pmichaud++ | build/PARROT_REVISION: Bump PARROT_REVISION to 2.7.0 release. |
02:09 | |
02:10
alc joined
|
|||
dalek | kudo: 67778a6 | pmichaud++ | build/PARROT_REVISION: Bump PARROT_REVISION to Parrot 2.7.0 release, freeze until Rakudo release. |
02:11 | |
rcfox | I'm having some trouble with a grammar. | 02:12 | |
gist.github.com/533111 | |||
I'm trying to parse sentences based on the lexical categories of the words. | 02:13 | ||
Some words might be a noun in some case, or a verb in other cases, etc. | |||
sorear | you're aware rules don't backtrack, right? | ||
rcfox | :\ | ||
I am not. | |||
How does STD work then? | 02:14 | ||
sorear | when you say rule you are giving an explicit instruction to turn off backtracking | ||
the basic form is "regex" | |||
rcfox | Oh. | ||
I thought they were the same thing. | 02:15 | ||
And that fixed it. | 02:16 | ||
Thanks! | |||
Hm, so pinging Wordnet for every word that I haven't recorded a lexical category for seems to be a bad idea. | 02:31 | ||
It works, but it's very slow. | 02:32 | ||
sorear | perl6: my %a = (x => 2); my %b = (x => 5); sub foo(:$x) { say $x }; foo(|%a, |%b); | ||
p6eval | pugs: OUTPUT«*** No compatible multi variant found: "&foo" at /tmp/joV6FWb8zg line 1, column 62-75» | ||
..rakudo 037f68: OUTPUT«5» | |||
02:33
alc left
02:34
drbean left
02:40
alc joined
02:44
Eevee joined
|
|||
dalek | p-rx: 8b38129 | pmichaud++ | src/ (4 files): Refactor cursor_debug output a bit to allow some simple profiling. |
02:55 | |
02:57
lestrrat is now known as lest_away
02:58
japhb joined
|
|||
rcfox | In case anyone's interested, here's my English parser: github.com/rcfox/Perl-6-English-Parser | 02:58 | |
02:59
tylercurtis joined
|
|||
nperez | rcfox, how successful is it? | 03:02 | |
If I split an infinitive will it gripe? :) | |||
rcfox | nperez: I haven't thrown a whole lot at it yet. | ||
github.com/rcfox/Perl-6-English-Par...1-basics.t | |||
nperez | How does it handle unknown words? can it infer from context what part of speech it is? | 03:03 | |
rcfox | nperez: It looks up unknown words on WordNet. :D | ||
nperez | fancy | ||
rcfox | But it does figure out which version of the words to use based on context though. | ||
ie: 'dog' can be a noun or a verb. | |||
03:04
Holy_Cow joined
|
|||
nperez | that's slick | 03:04 | |
rcfox | The problem with looking up the words on WordNet is that it's really slow. | ||
03:04
Holy_Cow left
03:05
molaf joined
|
|||
nperez | Maybe cache a database? | 03:05 | |
rcfox | Yeah, I'm planning to do that. | ||
sorear | I can't help but think Perl6 grammars are the wrong tool for the job | 03:06 | |
rcfox | I just finished a linguistics course, and we learned so BNF for sentence structure. (Of course, we didn't call it BNF, but it looks very much like it.) | 03:09 | |
I don't expect to parse every conceivable sentence with it. It's just a toy. :P | |||
03:10
drbean joined
|
|||
ingy | rcfox: have a look at pegex | 03:11 | |
sorear | have a look at marpa too ;) | ||
ingy | super fast adaptation of p6r for other langs | ||
rcfox | "MARPA is the non-profit trade association that represents the Parts Manufacturer Approval (PMA) community." | 03:12 | |
ingy | yeah, what's marpa? | ||
sorear | #10 | 03:13 | |
search.cpan.org/dist/Marpa/ | |||
ingy | i wonder if marpa has a test suite I can borrow... | 03:15 | |
03:15
jhuni left
|
|||
rcfox | I've used this before: search.cpan.org/perldoc?Parse::Yapp | 03:16 | |
03:28
leprevost joined
03:34
estrabd joined
03:47
lest_away is now known as lestrrat
03:52
molaf left
|
|||
dalek | ecza: 1ad3b55 | sorear++ | / (3 files): Binder support for named parameters |
03:59 | |
ecza: a5cebf1 | sorear++ | Niecza/Actions.pm: Implement parsing of named parameters |
|||
ecza: 055d9ad | sorear++ | / (3 files): Codegen support for named and flat arguments |
|||
sorear | Infinoid++ 2 second response time, wow | ||
04:03
agentzh joined
04:04
am0c joined
04:06
am0c left
04:07
jhuni joined
04:08
rgrau__ joined
04:24
am0c joined
04:47
alc left
05:08
drbean left
05:18
alc joined
05:19
drbean joined
05:26
lue joined
05:28
Guest23195 joined
|
|||
dalek | ecza: 5eb127a | sorear++ | / (4 files): Implement named arguments |
05:38 | |
rcfox | Does longest-token matching work? | 05:39 | |
In Rakudo, that is. | |||
sorear | No. | 05:41 | |
05:46
justatheory left
|
|||
sorear | Could somebody with a Win32 Perl 5 install run q< use Data::Dumper; print Dumper(\%INC) > for me and tell me the key and value path syntaxes? | 05:50 | |
For the purposes of STD's orientation code | |||
05:53
wtw joined
|
|||
sorear | in particular, I think that $INC{'STD/CursorBase.pm'} will always return a native path | 05:54 | |
05:59
jhuni left
06:00
Italian_Plumber joined
06:03
Italian_Plumber left
|
|||
pugssvn | r32029 | sorear++ | [CursorBase] Find uniprops more robustly | 06:09 | |
r32029 | No longer depends on $PERL6LIB or any other environment variable; simply | |||
r32029 | relies on the file being alongside an uninstalled CursorBase.pmc or in | |||
r32029 | the File::ShareDir otherwise. | |||
06:23
uniejo joined
06:37
am0c left
06:39
jfried joined
06:41
masak joined
|
|||
masak | oh hai, #perl6! | 06:41 | |
rakudo: subset Foo of Mu where Str | Int; my $foo = Foo.new; say $foo.WHAT | 06:42 | ||
p6eval | rakudo 67778a: OUTPUT«Mu()» | ||
moritz_ | good morning | 06:43 | |
tylercurtis | rakudo: subset Foo of Mu where Str | Int; my Foo $foo .= new; say $foo.WHAT | 06:44 | |
p6eval | rakudo 67778a: OUTPUT«Type check failed for assignment in '&infix:<=>' at line 1 in main program body at line 22:/tmp/n1KWJoIu36» | ||
masak | tylercurtis: aye, that's part of the problem. | 06:45 | |
tylercurtis: or at least a symptom. | 06:46 | ||
I don't think subset types should be instantiable. | |||
jnthn: I'd argue that one can't actually polish things 'shiniLY'. that's one reason we have both adjectives and adverbs. :P | 06:51 | ||
sorear | hi masak! | 06:52 | |
masak | o/ | 06:53 | |
sorear | TimToady: what considerations do I need to consider when redoing syml/ ? | ||
06:53
simcop2387 joined
|
|||
masak invests two more hours on studying | 06:54 | ||
sorear | TimToady: I'm trying to come up with a better way to manage the caches, that's usable from installed code | ||
07:01
plobsing left
07:05
Tene joined
|
|||
tylercurtis is also opposed to subset types being instantiable. | 07:06 | ||
Good night, #perl6. | 07:07 | ||
sorear | good night | ||
The main choices I see are: | |||
07:07
tylercurtis left
|
|||
sorear | * .syml files live alongside .pm files | 07:07 | |
07:07
drbean left
|
|||
sorear | * There is one syml database in each @*PERL6LIB root | 07:07 | |
* There is one global syml database which STD can find (perhaps in $HOME/.perl6/std) | 07:08 | ||
07:08
foodoo joined
|
|||
TiMBuS | code.google.com/p/gerrit/ has anyone seen or tried this? | 07:16 | |
a few people are migrating to it from github because it works better than pull requests | 07:18 | ||
07:19
_madmax_ left
07:24
[particle] left
07:26
[particle] joined
07:27
nadim_ joined
|
|||
nadim_ | moring, is there a method (by which I mean an URL with an example) that shows how to globally override .perl? | 07:31 | |
I, and I guess other Dat::Dump* authors, want to port a dumper module to p6 | 07:33 | ||
Tene | nadim_: Please don't do that. | 07:34 | |
rcfox | perlcabal.org/syn/S12.html#Open_vs_...ed_Classes | ||
Tene | nadim_: You really don't want to do that. .perl already has a meaning. If you want to write a dumper, just write a function. | 07:35 | |
There's no need to take your dumping function and stomp all over other classes. | |||
nadim_ | Tene: please is polite and nice but not a reason. and yes there are reasons | ||
Tene | erm, what? What are your reasons? | 07:36 | |
moritz_ | you can't globally override methods, because they are defined in many different places | ||
nadim_ | Tene: I'd ask what's the reason not to do it then | 07:37 | |
moritz_: this is going to send us back to the time where we couldn't override some core function in p5. bad! | |||
Tene | nadim_: because .perl already means something. If you're wanting to do something else, call it something else. | 07:38 | |
nadim_ | Tene: and thats a very bad reason because you think that the meaning would be changed. Did I ever say that I wanted .perl to print the weather in London? | 07:39 | |
Tene | nadim_: Why do you want to take away existing behavior to add your own behavior? | ||
mathw | Good morning | 07:40 | |
nadim_ | morning | ||
Tene | You want to write a serialization library, and you also want to forcibly mutate all other existing uses of the standard serialization library in other code that might happen to be included or called from any other libraries you might use? | 07:41 | |
nadim_ | Tene: there are many dumpers available in p5, whatever they do, and that's something we probably want to do in p6 too, is something deemed good by the person using the module. | ||
Tene | I don't see how those two are tied together at all? | ||
nadim_ | Tene: that was a valid example or it could be that I want the format to be different | ||
Tene | nadim_: You can certainly reimplement any of the dumpers from Perl 5. Nothing at all is stopping you from writing a library that exports a function called "Dumper", just like Data::Dumper, for example. | 07:42 | |
nadim_ | I'd rather still have enough rope to shoot myself in p6. even a little bit more rope | ||
Tene | You do not need to stomp on all uses of .perl just to write a function that serializes. | ||
nadim_ | the difference is that when a module I don't have contol over uses .perl, I can't force the module author to use another dumper | 07:43 | |
in anycase, this is more about the possibility to override core functionality (as much as possible) | 07:44 | ||
I'd be hard pressed to find a single p5 dev that never wanted to override print | |||
I'd rather see an universal, clean, method than a proliferation of hacks | 07:46 | ||
Tene | nadim_: to poke into another otherwise-closed class, you first have to use MONKEY_TYPING; | 07:47 | |
rcfox | nadim_: Every class implements .perl. You're free to override all of them, but it won't be very much fun. | ||
Tene | Well, if you're going to use augment, which I don't think you are. | 07:48 | |
nadim_ | we've got a grammar that is hackable, right? | ||
Tene | rakudo: Array.WHAT.^methods.perl.say | ||
p6eval | rakudo 67778a: OUTPUT«[{ ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... }, { ... | ||
..}, { … | |||
Tene | rakudo: Array.WHAT.^methods.join(', ').say | 07:49 | |
p6eval | rakudo 67778a: OUTPUT«perl, delete, at_pos, splice, new, Bool, pop, rotate, Num, perl, Capture, of, elems, Str, munch, list, shift, map, exists, push, unshift, batch, ACCEPTS, hash, eager, at_pos, fmt, flat, sort, new, iterator, Int, list, elems, fmt, item, Num, Str, asin, split, match, exp, cosh, | ||
..acosh… | |||
Tene | Oh, that's not helpful. :P | ||
rakudo: Array.WHAT.^methods(:local).join(', ').say | |||
p6eval | rakudo 67778a: OUTPUT«at_pos, splice, new, perl, delete» | ||
Tene | Also not helpful. | ||
mathw | nadim_: .perl is supposed to produce something which, if fed back to the compiler, reproduces the original value. Overriding it to do something else would be immensely confusing. Better to add another method that serialises how you want to, surely. | ||
sorear | nadim_: .perl is not a generic dumper, it is an anti-eval | 07:50 | |
Tene | mathw: there are multiple formattings that could produce the original value. | ||
sorear | nadim_: eval $x.perl === $x | ||
mathw | Tene: as long as it does, does it matter which exact one it is? | ||
Tene | mathw: not as far as I can tell from the specs. | ||
sorear | nadim_: if you want to break Perl, you certainly can; augment class Mu { method perl() { ... } } | 07:51 | |
but I *strongly* recommend using a different name | |||
.perl is taken | |||
you wouldn't call a new arithmetic operator + | |||
Tene | Sure, but that's declarative. If you're going to walk over a bunch of classes, that's less-appropriate. I'm not sure of what the actual meta-model calls are, though. | 07:52 | |
nadim_ | I think you have to factor in what context dumpers are used in, inclusive .perl. There are, probably many, times where the result of .perl is supposed to be re-evaluated at later times but many dump data because they are debugging. That a very valid use case and if there are so many different dumpers on cpan its because there is a need for them | ||
so maybe it is breaking things up but in that context things are already broken and the facility of changing the default dumper is useful | 07:53 | ||
and temporary | |||
sorear: its nto a new operator + I'd need but an enhanced one | 07:54 | ||
rcfox | Dude. 1) What you want would require a significant redesign for little gain. 2) Why can't you do that with a Dump() function? Why are you so set on using .perl? | ||
Tene | If you *really* want it in the method 'perl', I'd suggest adding multi variants to the method. | ||
augment class Mu { multi method perl(:$lang! where { $lang eq 'json' }) { ... } } | 07:55 | ||
sorear | it's not our business to stop newbies from hanging themselves | ||
nadim_ | Tene: I have nothing agains using a function. I just want to know how I can override .perl would it be necessary | ||
Tene | Then call .perl(:lang<json>) | ||
sorear | nadim_: I already told you. | ||
rcfox | nadim_: perlcabal.org/syn/S12.html#Open_vs_...ed_Classes | ||
sorear | Tene: that's spelled .json | ||
Tene | sorear: I mostly agree. There's something ot be said for the paralell to eval(..., :lang<json>) though | 07:56 | |
sorear | eval doesn't have the word "perl" in it | ||
rcfox | .perl *means* give me Perl code for this. | 07:57 | |
sorear | .deparse(:lang<json>) I could go along with | ||
Tene | sorear: Sure. Like I said, I agree. | ||
Huh. No instances of 'add_method' in the specs. | 07:58 | ||
07:59
lestrrat is now known as lest_away
|
|||
nadim_ | Then .perl should be sold as an universal dumper! But it doesn't matter. I'm sorry guys but there's too much Java mentality going on. If someoe wants to break perl (temporarely or not) by overriding something, so be it. | 07:59 | |
sorear | nadim_: If you don't want to read the example I gave, that's your problem. | ||
Not ours. | |||
Tene | nadim_: We're just making sure you understand what you're breaking, exactly. :) | ||
nadim_ | The one thing that defines our community is that we don't want someone to hold your hand all the time. | ||
rcfox | nadim_: Listen! | 08:00 | |
Tene | nadim_: We've answered your question more than once, I thought? What is still unanswered? | ||
rcfox | We're telling you you can break Perl. | ||
08:00
[particle] left
08:01
alc left
|
|||
moritz_ | btw I don't see why a dumper needs to be a method | 08:02 | |
08:02
[particle] joined
|
|||
moritz_ | you can do the same with multi subs equally fine | 08:02 | |
08:02
jhuni joined
|
|||
sorear | moritz_: You must have missed this: 02:43 < nadim_> the difference is that when a module I don't have contol over uses .perl, I can't force the module author to use another dumper | 08:02 | |
08:02
mmmpork joined
|
|||
moritz_ | and have the benefit of not needing to introduce methods to everybody's objects, just in the namespace you import into | 08:03 | |
08:03
alc joined
|
|||
moritz_ | you can't either way | 08:03 | |
nadim_ | and that most of the time dumper are just temporarly used for debugging purpose not breaking perl | ||
sorear | nadim_: I apologize for the popular reaction here; I for one beleive rope is a great thing to share | ||
08:03
Grrrr joined,
drbean joined
|
|||
nadim_ | no problems, it's just a discussion | 08:04 | |
sorear | Who should I talk to before adding .pretty to the spec a la recentish Haskell threads? | ||
nadim_ | you got used to .perl meaning something and got the impression I wanted it to be something else 8all the time). | 08:05 | |
moritz_ | sorear: just do it. pmichaud and I are your side. | ||
sorear | Heh. S29:798 is completely wrong | 08:07 | |
moritz_ | not surprising for S29 | ||
sorear | it calls .perl the replacement for perl5 CORE::dump | ||
nadim_ | hehe! | 08:08 | |
Tene | heh | ||
moritz_ | std: my $1 | ||
p6eval | std 32029: OUTPUT«===SORRY!===Can't declare a numeric variable at /tmp/vYcoWRBLB2 line 1:------> my $1⏏<EOL>Parse failedFAILED 00:01 112m» | ||
08:09
thebird joined,
Grrrr left
|
|||
pugssvn | r32030 | sorear++ | [S29] An entry for CORE::dump's *actual* purpose | 08:11 | |
nadim_ | anyone having a link to the haskell/pretty discussion (was it here or via mail?) I can't seem to find it. | 08:13 | |
moritz_ | we had a discussion in here some days ago, in the context of dumping match objects | 08:14 | |
08:15
Grrrr joined
|
|||
sorear | nadim_: it was on one of the haskell lists, long ago | 08:17 | |
2-3 years | |||
not a perl6 forum | |||
nadim_ | ah, a few days ago or 2-3 years ago? | ||
sorear | not less than 6mo | ||
not more than 4y | |||
moritz_ | turns out we were talking about different things :-) | ||
sorear | Haskell has a deparser interface, Show | 08:18 | |
a big discussion of overriding like this one, eventually came to the conclusion that having a single method for serialization and pretty printing was a tragic mistake | |||
nadim_ | I agree | ||
mathw | Show is mostly useful for debugging | 08:19 | |
I always thought | |||
08:19
ash_ left
|
|||
Tene | sorear: Just commit a spec change, IMO | 08:20 | |
nadim_ | although sometimes you want to override the serialization for debugging purpose. | ||
08:22
jferrero joined
08:27
uniejo left
|
|||
pugssvn | r32031 | sorear++ | [S02] Split .pretty's role off from .perl, includes a lot of conjectural ideas for .pretty functionality | 08:28 | |
08:29
uniejo joined,
azawawi joined
|
|||
azawawi | hi | 08:29 | |
phenny | azawawi: 17 Aug 19:34Z <sorear> tell azawawi make dist should probably be retired | ||
08:34
_madmax_ joined
|
|||
sorear | azawawi: would you complain if I pulled out make dist entirely? | 08:38 | |
azawawi | sorear: no problem if you provide me with an alternative :) | 08:39 | |
sorear | azawawi: search.cpan.org/~pmurias/STD-0.05/ | 08:40 | |
azawawi | sorear: will see it. thx | 08:41 | |
azawawi tests it | |||
08:42
dakkar joined,
autin joined
08:43
drbean_ joined
08:45
ash_ joined
|
|||
nadim_ | rakudo: class A {} class B is A {} say A.perl | 08:46 | |
p6eval | rakudo 67778a: OUTPUT«===SORRY!===Confused at line 22, near "class A {}"» | ||
nadim_ | rakudo: class A {}; class B is A {}; say A.perl; | ||
p6eval | rakudo 67778a: OUTPUT«A» | ||
nadim_ | yup we definitely need a .pretty or .show | 08:47 | |
sorear | mm? | ||
you wanted to see more? | |||
nadim_ | yes, I am reading about the introspection in S12 | 08:48 | |
but I need to see more without typing too much code (keepin mind that this would be a typical debug session) | |||
azawawi | sorear: STD works perfectly even on win32. I will re-use it. Thanks (pmurias++). | 08:49 | |
pugssvn | r32032 | sorear++ | [STDeco] Simplify build again, removing quite a few outdated optimizations | 08:51 | |
nadim_ | sorear: I wonder if information about where roles are coming from are kept somewhere. That is an interresting information piece. | 08:52 | |
08:56
azawawi left
|
|||
pugssvn | r32033 | sorear++ | [STDeco] Retire make dist and associated Makefile complexity - Dist::Zilla::Plugin::STD does the same job better | 09:06 | |
sorear | moritz_: what command does 'std: ' use? | 09:08 | |
moritz_ | github.com/moritz/Mu/blob/master/mi...ot.pl#L188 | 09:09 | |
tryfile | |||
sorear | in a snap? | ||
moritz_ | in a snap | 09:10 | |
sorear | I see | ||
moritz_ should put all the build scripts into svn | |||
09:15
drbean_ left
09:20
kiffin joined,
drbean left
|
|||
pugssvn | r32034 | sorear++ | [STDeco] Move rarely used tools to a subdirectory and kick vill out of src/perl6 entirely. | 09:21 | |
moritz_ | sorear++ # kennel cleaning | 09:22 | |
09:22
ruoso left
|
|||
pugssvn | r32035 | moritz++ | [bench] ignore sql data file | 09:25 | |
r32036 | moritz++ | remove outdated build script | |||
r32037 | sorear++ | [STDeco] Fix snap & snaptest for new build | 09:26 | ||
r32038 | moritz++ | [lib] remove more pugs fossiles | 09:29 | ||
09:31
Infinoid left
09:36
justatheory joined
|
|||
pugssvn | r32039 | moritz++ | [utils] update URL in IRC log fetcher | 09:37 | |
r32040 | moritz++ | [util] remove more outdated tools | |||
09:40
hexagon06 joined
|
|||
pugssvn | r32041 | sorear++ | [STDeco] Don't rely on the ability to pass environment variables down from make (diakopter says this doesn't work on Strawberry's dmake.exe) | 09:42 | |
09:42
hexagon06 left
09:43
M_o_C joined
|
|||
pugssvn | r32042 | moritz++ | remove empty dirs and parrot_pge_tests, which are maintained elsewhere | 09:46 | |
sorear | moritz_: Think we could conspire to free Mu from the shackles of svn.pugscode.org? | 09:50 | |
std: 2 + 2 | |||
p6eval | std 32032: OUTPUT«ok 00:01 114m» | ||
moritz_ | sorear: I'd love to | ||
daxim | hopefully, then, with a git conversion worthy the praise of nothingmuch | 09:51 | |
moritz_ | since the pugs repo has no branches, that's easy | 09:52 | |
github.com/moritz/Mu/ # that's the current git mirror | 09:53 | ||
daxim | you can say it's easy once you've collection the identities of the committers ;) | ||
09:53
redicaps left
|
|||
moritz_ | daxim: commitbit.pugscode.org/admin/project/Pugs/people | 09:53 | |
a nick name and email address for every committer | 09:54 | ||
daxim | I can't login there, but if you have the data, that's splendid | ||
moritz_ | daxim: you don't have a commit bit? | 09:55 | |
same login as pugs svn | |||
daxim | ah ah | ||
. o O (what was the damn password) | |||
moritz_ | just grep for pugs in .subversion/auth/ | 09:56 | |
or I can re-send you the password, if you want | |||
anyway, that data comes from an sqlite3 database, to which I also have access | |||
daxim | that helped moritz_++ | ||
anyway, see conferences.yapceurope.org/gpw2010/talk/2544 | 09:57 | ||
moritz_ | daxim: I didn't attend that talk | 09:58 | |
daxim | then follow the outline from padre.perlide.org/trac/wiki/GitMigration | ||
moritz_ | and I don't see a link to slides or to a video | ||
09:58
autin left
10:00
meppl joined
10:01
Italian_Plumber joined
|
|||
moritz_ | anyway, there are other questions that need to be answered first | 10:01 | |
like, if we want to split the repo or not | |||
how to handle handing out commit bits | |||
daxim | split: yes, it didn't really make sense for svn either, but convenience trumped sanity. with git, you can't argue for one massive repo anymore | 10:02 | |
give bits to trusted people, anyone else can send pull requests first to establish trust | 10:03 | ||
moritz_ | well, you can still argue for a massive repo | ||
because some of the projects in the pugs repo rely on the spectests being in the same repo | 10:04 | ||
and they would need to have an alternative way of obtaining it first | |||
masak | traditionally, the wonderful thing about the Pugs repo was the liberal handing-out of commitbits. but maybe that time is past. | ||
moritz_ | I don't see why it should. | 10:05 | |
10:05
Grrrr left
|
|||
daxim | svn's model made that necessary, with git people can publish their changes without approval | 10:05 | |
moritz_ | daxim: and risk fragmentation | 10:06 | |
masak | daxim: it's not so much about git/svn as I see it. it's about a direct route to the actual repo. | ||
moritz_ | anyway, I don't see drawbacks of liberal commit bit policies, even for DCVS | ||
daxim | the linux kernel is doomed, then. shub-internet help us | ||
moritz_ | daxim: don't troll. There's a huge difference between the pugs repo and the linux kernel | 10:07 | |
masak | daxim: I'm not really sure why you're arguing against a model that's worked well for five years. | ||
moritz_ | for example that there are several people working basically full time on merging stuff for linux | ||
daxim | hey, you guys want to migrate | ||
masak | migrate while keeping the good bits. | ||
moritz_ | I just forsee that if we don't hand out commit bit, but tell people to pull, nobody will feel responsible for merging their commits back in | 10:08 | |
and their commits get lost, in the sense that nobody knows where to find them | |||
that has happened to rakudo, because we decreed that the canonical way to submit patches is RT. people still use pull requests, and sometimes I apply them, but often they are just ignored | 10:09 | ||
and since the number of people feeling responsible for the repo is rather low, that's a dangerous route | |||
I'd rather have everybody feel responsible for the integration | |||
10:16
Grrrr joined
|
|||
sorear | Alias_: Any chance you could show up for the weekly #perl6 core team meeting next Wednesday at 19:00 UTC in #phasers irc.freenode.net? We need a proper discussion of these issues | 10:23 | |
re. #p5p discussion | |||
10:23
leprevost left
|
|||
sorear | crossposting here in case any rakudodevs want to object | 10:23 | |
Perl6 CPAN design for reals | |||
10:24
timbunce joined
|
|||
masak | sorear: it's on Wednesday next week, rather than Tuesday as usual? | 10:24 | |
sorear | masak: #phasers was today, so I looked at my clock. (it's 3am) | 10:25 | |
Alias: sorry, Tue | |||
masak | sorear: doesn't work that way :P | 10:26 | |
pugssvn | r32043 | sorear++ | [CursorBase] Factor out the syml-cache to one file section | 10:30 | |
10:31
agentzh left
|
|||
jnthn | afternoon, #perl6 | 10:33 | |
sorear | hello jnthn | 10:35 | |
masak: you're in charge of cpan6 right? can you make next week's phasers? | 10:36 | ||
masak | sorear: not in charge of any such thing. I should be able to make next week's phasers. | ||
as far as I'm aware -- and I'm not very aware in this case, I think -- there's no single person "in charge" of cpan6, whatever cpan6 happens to be when the question is asked. | 10:39 | ||
jnthn | masak: My grammar isn't so shinily pollished. :P | ||
masak | jnthn: :) | ||
10:42
Italian_Plumber left,
timbunce left
10:43
M_o_C left
|
|||
pugssvn | r32044 | sorear++ | [CursorBase] Remove support for Perl-initializer settings and make NULL the special case it should be | 10:52 | |
sorear | mildew is going to be very broken after I get done with this | ||
:( | |||
10:54
jhuni left
10:57
Italian_Plumber joined
11:02
Italian_Plumber left
|
|||
sorear | phenny: tell pmurias I'm redesigning STD's syml cache and I'd like your input on what mildew needs (expect breaking changes in any case) | 11:08 | |
phenny | sorear: I'll pass that on when pmurias is around. | ||
masak | jnthn: the 'shiny' in 'to polish sth shiny' ought to qualify as a sort of resultative complement, methinks. | 11:11 | |
jnthn | masak: In English I guess those are normally done with like "until it's" or "in order that it's" or "so that it'll be" and things like that. But I couldn't be bovvad. :-) | 11:14 | |
pugssvn | r32045 | sorear++ | [CursorBase] split out sys_find_module from sys_load_module | ||
11:14
wamba joined
|
|||
sorear | std: 2+2 | 11:16 | |
p6eval | std 32044: OUTPUT«ok 00:01 114m» | ||
sorear out. | 11:17 | ||
sorear wants to see pmurias' thoughts before much more anyway | |||
masak | jnthn: not always. cf 'scared stiff', 'elected chairman', 'painted red'. | ||
sorear | phenny: tell pmurias in particular, I'm trying to get some kind of real search path thing going | ||
phenny | sorear: I'll pass that on when pmurias is around. | ||
arnsholt | Those are predicatives to the object, probably, not complements | ||
jnthn | masak: Oh, troo. | 11:18 | |
arnsholt | Except they're subject predicatives, not object predicatives >.< | 11:19 | |
jnthn | masak: That's probably why it didn't feel so wrong to me. ;-) | ||
masak | jnthn: neither 'painted shiny' nor 'painted shinily' are gramatically incorrect. it's just that the latter makes no sense to me. | 11:20 | |
er, s:g/painted/polished/ | 11:21 | ||
good thing moritz_++ implemented the :g adverb :) | |||
jnthn | masak: It made enough sense for you to correct it. :P | 11:22 | |
But yes, it shoulda been an adjective, not an adverb. :-) | |||
arnsholt | Probably because the adverb (like in the second example) often tend to describe the process | ||
masak | right. | ||
'in a shiny way'. | |||
arnsholt | And I'm not sure what polishing something in a shiny manner is ^^ | ||
masak | maybe it's doing it with a shiny smile :) | 11:23 | |
jnthn | It might be that I wear brightly coloured clothing whenever I work on it. :-) | ||
masak | clothes with those blue diode lights in them. | ||
arnsholt | But I'm a bit curious why English doesn't use the "polish something shiny" construction | 11:24 | |
Possibly more restricted use of object predicatives | |||
masak | arnsholt: I think I'd use it without hesitation. I'm not a native speaker, though. | 11:27 | |
arnsholt: I think it's analogous to 'paint something red'. | |||
arnsholt | Yeah, which is why I'm not sure why the polish version isn't as normal | ||
jnthn | I didn't write it to deliberately be awkward. :-) | 11:28 | |
arnsholt | Could just be lexical, I suppose | ||
jnthn | It didn't feel weird to me. :-) | ||
masak | arnsholt: that's just a cop-out. :P | ||
masak loves to pretend he knows this stuff :) | 11:29 | ||
arnsholt | Yeah, "it's lexical" is a cop-out. But sometimes it's the only viable option | ||
11:30
thebird left
|
|||
masak | anyway, in Mandarin, complements are explicitly marked with the particle 得. so it's easy to see what's a complement there. :) | 11:30 | |
arnsholt | Unless you start doing things like "9 is a prime on some underlying level of representation" =) | ||
masak .oO( base 12... ) | |||
11:31
thebird joined
|
|||
masak | oh wait :) | 11:31 | |
jnthn | masak: That sound skinda neat. :-) | ||
masak | no, I can't find such an underlying representation. | ||
jnthn | s/sk/k/ | ||
11:31
rcfox left
|
|||
masak | jnthn: it is. that's how I became aware of complements in the first place :) | 11:32 | |
arnsholt | Yeah, it's a quite sane way to do it | 11:33 | |
Unlike complex synthetic morphology =) | |||
11:34
rcfox joined
|
|||
Alias | sorear: Backl | 11:35 | |
11:37
pmurias joined
|
|||
masak | jnthn: If I input 'He runs fast' into Google Translate en->ch, it gives me back 他跑得快 -- 'he run 得 fast'. | 11:37 | |
Alias | sorear: So basically, 5am Wednesday | ||
It's no wonder I've never been at one of these | |||
masak | :) | ||
moritz_ | I kinda expected en->ch to produce "er rennt schnell" :-) | ||
Alias | I'll be at Microsoft TechEd on the Gold Coast that week | ||
masak | Alias: there's also the option of preposting. | 11:38 | |
moritz_: ah. no. en->cn, of course. | |||
masak is too sloppy with language codes | |||
moritz_ | masak: yes, I figured :-). Still I won't miss an option to make fun of you :-) | ||
Alias | masak: Preposting probably not a good idea | ||
masak | moritz_: it's ok -- I'd have done the same. :P | 11:39 | |
Alias | masak: The core ideas are somewhat tricky and hidden, it's better to be present and able to clear up mistunderstanding and clarify things | ||
masak | Alias: nod | ||
11:39
codyFendant joined
|
|||
Alias | Let me check when I'm "speaking" | 11:40 | |
11:40
pmurias left
|
|||
Alias | (I use air quotes because it's not a conventional presentation, it's in the internal microsoft-only track and only a 3-4 minute talk) | 11:40 | |
codyFendant | hi | 11:41 | |
is there any official way to write to the authors of the perl6 book, does anyone know? | |||
nadim_ | Alias: you slacker! do you do anything else but go to conferences? | ||
Alias | nadim_: It was spontaneous | ||
nadim_ | Alias: found anything watcheable in my list? | 11:42 | |
Alias | "Hey, if we sent you free tickets, plane tickets and found you a hotel, could you come to TechEd next week and talk to us" | ||
nadim_: On the list I saw, Donnie Darko | |||
nadim_ | alright, I'd be spontaneous too | ||
Alias | Also, my HR department is bugging me to stop accumulating leave | ||
nadim_ | among 50 other | ||
arnsholt | codyFendant: Most of them hang out in here I think =) | ||
11:42
Italian_Plumber joined
|
|||
Alias | Donnie Darko is one of my top 10 sci fi movies | 11:43 | |
And it's hard sci-fi mindfuck'esk | |||
So not for all audiences | |||
moritz_ | codyFendant: there's #perl6book on freenode | ||
Alias | Don't watch the director's cut | ||
codyFendant | I never thought of Donny D as sci-fi some how. | ||
moritz_ | codyFendant: and the perl6/book project on github has a bug tracker | ||
Alias | It answers too many questions :) | ||
nadim_ | codyFendant: maybe because it is not | ||
moritz_ | codyFendant: and you can also write to [email@hidden.address] the authors read that list too, and it's not too off-topic there | 11:44 | |
Alias | codyFendant: Good science fiction is "Take the world, change one thing, hit play" | ||
codyFendant | Hah. The #perl6book channel is not mentioned in the perl 6 book... | ||
11:44
pmurias joined
|
|||
codyFendant | So ... if you change two things, that's not sci-fi? Got it. Maximum of one. | 11:44 | |
moritz_ | codyFendant: it's not *good* sci-fi anymore :-) | 11:45 | |
Alias | Indeed | ||
For example | |||
jnthn | .oO( I'd never considered the Perl 6 book to be sci-fi... ) |
||
Alias | 1. A giant comet is coming towards the earth | ||
codyFendant | I just changed 1.5 things in my book. Please clarify if it can only be an Int | ||
masak | jnthn: Perl 6: the future. today. | ||
Alias | 2. We can easily put some oil rig workers on a never-before tried space ship and they'll be able to survive and fly to the comet and drill into it and blow it up with a nuke | 11:46 | |
1. is deep impact | |||
nadim_ | masak: you mean today. today. | ||
Alias | 1 + 2 is that other about the same time | ||
masak | nadim_: doesn't quite have the same ring to it, does it? :) | ||
"Perl 6: today. today". nah. | 11:47 | ||
codyFendant | Deep Impact and ... damn, what was it. With Frodo, and Morgan Freeman. | ||
nadim_ | but is semantically correct | ||
Alias | codyFendant, heh... bruce willis | ||
jnthn | Armageddon had a similar plot. :-) | ||
Alias | That one! | ||
codyFendant | A black president! That used to be the signifier of an unimaginable future. | ||
masak | nadim_: well, sometimes you need a bit of semantic umami in there. | ||
jnthn | It's like "yeah right..." :-) | ||
nadim_ | and both were shit piles | ||
codyFendant | Hollywood did a whole lot of paired movies at that time. | ||
Volcano/Dantes Peak | |||
Alias | nadim_: Deep Impact was ok, just wasn't massively exciting | ||
nadim_ | euuu, no; it was shit. | 11:48 | |
Alias | nadim_: Being good sci-fi and a good movie in it's own right as well is hard | ||
Inception is the last movie I can remember that came close | |||
moritz_ | 1. There is this thing called "force", and Jedis that use it. Look ma, we have star wars | ||
codyFendant | Antz/Bugs Life | ||
Truman Show/Ed TV | |||
Dark City/Matrix | 11:49 | ||
nadim_ | OMG, I forgot that perl geeks tend to have poor taste in movies | ||
moritz_ | Alias: I liked it, because it used very few assumptions. Sadly it didn't quite stick to its own assumptions | ||
(inception, that is) | |||
Alias | moritz_, it did indeed bleed around the edges a bit | ||
But given how ambitious it was, it got as close as I think we're likely to ever see | |||
11:49
alc left
|
|||
nadim_ | codyFendant: DarkCity / Matrix on the same meaning is tasteless ;) | 11:50 | |
moritz_ | codyFendant: coming back to the book, is there anything you want to tell us? or does it not fit into IRC, or are you trying to contact all authors? | ||
Alias | nadim_: Name the last good movie you saw that was in English (so there's a chance I saw it too) | 11:51 | |
pmurias | nadim_: don't people in general tend to have a poor taste in everything? | ||
phenny | pmurias: 11:08Z <sorear> tell pmurias I'm redesigning STD's syml cache and I'd like your input on what mildew needs (expect breaking changes in any case) | ||
pmurias: 11:17Z <sorear> tell pmurias in particular, I'm trying to get some kind of real search path thing going | |||
Alias | I have a friend that's so snobby now I can't recall anything he's liked in 5 years | ||
nadim_ | pmurias++ | ||
codyFendant | I was just starting working through it, a couple of small things, like... | ||
Alias | ooo | 11:52 | |
District 9 | |||
Changed one thing | |||
codyFendant | They tell you to do $file.get which is the same as <FILE>? | ||
Alias | But it wasn't trying to ALSO be giant blockbuster | ||
nadim_ | Alias: The notebook (because the actress is hawt and talented) | ||
moritz_ | codyFendant: do they? | 11:53 | |
codyFendant | But then they tell you to continue by using $file.lines | ||
Alias | nadim_: You have to like the movie as well | ||
And yeah, the notebook was pretty good, as dramas go | |||
nadim_ | Alias: I was good 80% of the time | ||
codyFendant | I just think they should put in a couple of words about the difference, or the fact that you're on line 2 at the point or whatever. | ||
Alias | What else | ||
moritz_ | codyFendant: agreed | ||
nadim_ | US movies always self destroy in the last 10 mn | ||
Alias | how so | 11:54 | |
The search for the happy ending? | |||
nadim_ | completely crappy endings | ||
Alias | Fight Club? | ||
moritz_ liked the ending of Inception | |||
codyFendant | The actress in The Notebook is Rachel McAdams. She's really good. Seen "Red Eye"? Kind of a horror/thriller set on a plane. | ||
She's in that. | |||
Alias | moritz_, Inception also a rare movie worth watching twice | 11:55 | |
(Unless you saw the trailer, in which case your first time WAS your second time) | |||
nadim_ | khemir.net/http_share/movies_top/top_movies.html and I'll stop my noisy. | ||
Alias | This is your favourites, in order? | 11:56 | |
nadim_ | noisy contribution to this channel | ||
not ordered. you know that is impossible. | |||
Alias | So just your favourites? | ||
nadim_ | yeqp | ||
yeap | |||
codyFendant | Something else about the book. They tell you to split a line on spaces. I accidentally had a space at the end. | ||
Alias | oh, I thought it was your "Pick me a movie from this list to watch" | 11:57 | |
moritz_ | nadim_: there's a bit of mojibake on that page... you might need to fix your charset in the content-type header | ||
codyFendant | Turns out perl6 split doesn't dump trailing fields? | ||
nadim_ | sir, yes sir. | ||
moritz_ | codyFendant: no. The recommended way to do that is to use Str.comb instead | ||
nadim_ | moritz_: there is no charset in the page | ||
Alias | nadim_: So basically, you are a drama movie person, with dribblings of sci fi and action | ||
nadim_ | could say so | 11:58 | |
moritz_ | codyFendant: but we can't introduce that without telling about regexes | ||
Alias | No Wall E? | ||
moritz_ | nadim_: not having a charset declaration would explain the mojibake too | ||
nadim_ | crap movie | ||
codyFendant | What does mojibake mean? | ||
moritz_ | codyFendant: characters that appear when the encoding is messed up | ||
en.wikipedia.org/wiki/Mojibake | 11:59 | ||
nadim_ | like vietnamese :)) | ||
codyFendant | Well one result of having a trailing field is, I get a hash with an undef key, and when it looks up the value for the key, I get Any() | ||
Alias | Dark City, Donnie Darko, Gattaca, Brazil... there's still some fairly serious sci fi there though | ||
codyFendant | That came as a bit of a surprise. | ||
Alias | But clearly the darker and creepier stuff is what you like | ||
codyFendant | Mojibake! interesting new word | 12:00 | |
pmurias | sorear: the current scheme of having a search path for syml files and a way to specify where the new one are stored is enough for me | ||
codyFendant has a certificate in Vietnamese. | |||
takadonet | morning all | ||
nadim_ | Alias: and a few animations. Chasseurs de dragons is a must see. A piece of art. | 12:01 | |
Alias | nadim, lola rennt? | ||
codyFendant | Anyway, bedtime, thanks for your help on the book thing I will contact the authors some time. | ||
masak liked "Lola rennt" | |||
Alias | Might not be dark enough for him though | ||
nadim_ | it wasn't | 12:02 | |
Alias | ooo The Labirynth? | ||
spo | |||
www.imdb.com/title/tt0091369/ | |||
12:02
codyFendant left
|
|||
Alias | Dark children's sci fi'ish :) | 12:02 | |
Sting in all his 80s glory :) | 12:03 | ||
dalek | ok: a2ad884 | moritz++ | src/basics.pod: [basics] be more verbose about IO.lines. Noted by codyFendant++ |
||
nadim_ | OK but so old. Bowie you meant | ||
Alias | sorry, yes | ||
nadim_ | haha | ||
Alias | Have you tried the rotten tomatos method? | 12:05 | |
www.rottentomatoes.com/top/bestofrt_year.php | |||
Just work your way down till you see something you haven't seen that looks vaguely intersting | |||
12:07
envi^home joined
|
|||
nadim_ | Oh god, this start bad. | 12:07 | |
God even! | |||
Alias | You have to cross those ratings with the styles you like as well | ||
nadim_ | its about as bad as the top list at IMDB. Alias we can continue on FB, not the best channel. | 12:08 | |
Alias | It doesn't much help that you don't like funny, happy, unlifting or action movies | ||
Constrains your options a lot | |||
nadim_ | not a single one in the top 100. that's not good | 12:09 | |
12:09
Shillo joined
12:10
drbean joined
|
|||
Shillo | Hullo | 12:10 | |
moritz_ | hi | ||
Shillo | Hey, was just looking for someone familiar with parrot internal. :) | 12:11 | |
Er, internals | |||
moritz_ | Shillo: your chances are much better in #parrot on irc.perl.org | ||
some of us here know them a bit too, but #parrot is where the accumulated hackery is | 12:12 | ||
Shillo | Well, dunno. Maybe you know about this, too: I've actually ran rakudo through a profiler and saw something amazing | ||
12:12
meppel joined
|
|||
moritz_ | it spends half of the time in the GC? :-) | 12:12 | |
Shillo | valgrind --tool=callgrind ./perl6 -e 'for (1..1000) { my $a = $_ + 1; }' | ||
This was the test | |||
Not half, and not because the GC is slow | |||
pmurias | Shillo: so what's the interesting part? | 12:14 | |
Shillo | I'd normally expect this to construct a call activation (assuming that the block is a real closure), perhaps fill a small hashtable | ||
... on each loop pass | |||
So, maybe 10-20 objects that need to be boxed and allocated | |||
Surprise: this actually constructs over 3,000 PMCs on each loop pass | |||
Currently building 2.7, the relnotes mention hash improvements | |||
jnthn | o_O | 12:15 | |
Shillo | Maybe it will be different this time | ||
jnthn | That is...rather more than I'd have expected | ||
Shillo | jnthn: Right :) | ||
dalek | ok: a739ba4 | moritz++ | src/basics.pod: [basics] add a note that splitting on a single space is not very robust. codyFendant++ |
||
jnthn | I wonder if we can get any data on what types of PMCs they are. | ||
Shillo | Lemme rebuild and I'll regenerate a profile | ||
12:16
meppl left
|
|||
moritz_ | note that iterating over a range is implemented in Perl 6 code too; it's not a primitive in that sense | 12:16 | |
Shillo | Of course, I expected several function calls per pass | ||
But this was 2-3 order of magnitude worse | |||
moritz_ | I agree, it is | ||
jnthn | Shillo: How did you get to the 3000, ooc? | ||
Shillo: That is, this is just runtime yes - the compile time was factored out? | |||
Shillo | Number of calls to allocate PMC was 4,000,000. I rerun with a single loop pass, that yielded around 600,000 | 12:17 | |
So yes | |||
jnthn | OK, that sounds quite sound methodology | ||
12:17
meppel is now known as meppl
|
|||
Shillo | You can retry yourself, just install valgrind and kcachegrind to view results | 12:18 | |
pugssvn | r32046 | moritz++ | [docs] want() and wantarry() are gone | 12:19 | |
Shillo | I kinda thought that profile would be needed, as perl6 is currently much slower than I'd expect | ||
jnthn | Yes, profiling can help explain a lot of why and point to the optimizations we can do. | ||
Shillo | Realtime on the range loop is around 10,000 slower than Python and Python doesn't perform any magic on the code | ||
So I use that as a reasonable baseline for an interpreter | 12:20 | ||
moritz_ | what we really need is profiling at a higher level (eg Perl 6 statement level) | ||
Shillo | Well, not sure about that. I'm still amazed at the number of conses | ||
They have to come about in some crazy way. Does something copy an entire hash table on each indexing? Or box each string characteR? | |||
moritz_ | not each character | 12:21 | |
masak | there's hope for future Perl 6 performance, if for no other reason that it's so obviously abysmal as of today. | ||
Shillo | I agree, and there -has- to be something *really* easy to do about this problem, at least. | ||
moritz_ | but in Rakudo we have to box each parrot primitive, because the primitive types can't be stored in lexpads directly | ||
jnthn | It's actually worse than that too. | 12:22 | |
arnsholt | There's probably some overhead in lazy ranges as well? | ||
Shillo | Yes | ||
moritz_ | yes, that too | ||
masak | arnsholt: oh yes. | ||
Shillo | The problem is box each primitive + call into range iterator + call into loop block gives 10s of allocs, not 1000s | ||
jnthn | moritz_: Because of the fact that we wrap Parrot's Integer/Float etc PMC types (that will change). | 12:23 | |
Shillo | Which is why I used the word 'amazing' originally. It's 2 orders of magnitude off the mark. | ||
moritz_ | as is our performance, yes | ||
12:24
pmurias left
|
|||
arnsholt | Perhaps there's some compounding as well? Large parts of Rakudo are written in Perl 6, so unoptimized compilation can probably accumulate a bit | 12:24 | |
moritz_ | arnsholt: yes, that's part of it | ||
for example each scope has it's own $/, $_ and $! variables | |||
and a single iteration step for 1..10 probably involves at least 5 scopes | 12:25 | ||
12:25
JimmyZ joined
|
|||
Shillo | *grumble* I think I didn't properly wipe the old build. Rebuilding... | 12:27 | |
moritz_ About higher level profiling, I think you won't get much benefit from optimizations until the *highly* dominant profile item is sorted out | 12:28 | ||
I mean, the current prolific allocation just drawns every other profile contribution | 12:29 | ||
moritz_ | Shillo: well, a factor of 2 here and there would still be nice :-) | ||
Shillo | :) | 12:30 | |
JimmyZ | parrot needs more love :) | ||
moritz_ | rakudo too | ||
Shillo | moritz_: Well, sure, that helps performance, but I meant that it won't help -measuring- performance. | ||
baest hugs parrot and rakudo | |||
12:31
nadim_ left
|
|||
Shillo | Profiling now. That'll take a few mins. I want to see if 2.7 improves anything... | 12:31 | |
moritz_ wants to see huge green bars in niner.name/rakudo/benchmarks.png | 12:32 | ||
masak | moritz_: if we nuke a lot of tests... :> | 12:34 | |
colomon | it's supposed to be sensitive to that, isn't it? | ||
masak | I have no idea how it works, fwiw. | ||
moritz_ | masak: it measures only performance differences of test files that weren't changed between two runs | ||
masak | ooh | 12:35 | |
nine++ | |||
that's an excellent heuristic. why didn't I think of that? | |||
gfldex | you think this would help to make rakudo faster: www.fukung.net/v/15899/9e93c9cab7ef...973f31.jpg | ||
jnthn | masak: The scripts are in niner.name/rakudo/ | 12:36 | |
moritz_ | masak: because you're involved in way too many projects :-) | ||
masak | gfldex: wouldn't hurt to try. | ||
12:36
synth joined
|
|||
moritz_ | (just like me) | 12:36 | |
gfldex | :) | ||
masak | moritz_: no, that's not it. :) | ||
I generally have the ideas, but then don't act on them. | |||
this is a case of not having the idea at all. I must be getting old or something. :) | 12:37 | ||
pmichaud | good morning, #perl6 | 12:38 | |
masak | pmichaud: \o | ||
Shillo | Hullo! | 12:39 | |
jnthn | o/ pmichaud | ||
takadonet | pmichaud: morning | ||
colomon | \o | ||
12:39
thebird left
|
|||
colomon | pmichaud: what's the state of the series refactor? | 12:41 | |
pmichaud | 12:12 <Shillo> valgrind --tool=callgrind ./perl6 -e 'for (1..1000) { my $a = $_ + 1; }' | ||
Shillo | Profiling done. It's much, ****MUCH**** better this time | ||
pmichaud | very interesting stuff. | ||
12:41
ruoso joined
|
|||
Shillo | 495266 baseline, 770836 test | 12:41 | |
colomon | Shillo: you mean, the profile looks better now than it did a week or two ago? | 12:42 | |
Shillo | Congrats, 2.7.0 improves this by by a full order of magnitude :) | ||
Oh yes | |||
moritz_ | \o/ | ||
masak | that's great news. | ||
can't say I've felt that order of magnitude in my bones, though. | |||
pmichaud | you'd likely be very surprised at the number of PMCs being generated tehre :) | ||
*there | |||
Shillo | It's still 275 per loop pass, mind you | 12:43 | |
colomon | yeah, why is the benchmark graph only showing about 2% improvement? | ||
Shillo | So yeah, I'm still surprised, but no longer amazed ;) | ||
12:43
thebird joined
|
|||
pmichaud | 275 doesn't surprise me too much | 12:43 | |
Shillo | That is a good question | ||
masak | Shillo: it's our wish to amaze you, but preferably not in that way :) | ||
Shillo | get_new_pmc_header is 17% of the profile now, mostly called from pmc_new, but some are from new_init_int | 12:44 | |
Something else strange, 14% on hash_thaw, called from parrot_hash_visit. What is this? | 12:45 | ||
moritz_ | hm... maybe reading hashes from pack files? | ||
jnthn | 14% of our runtime is on hash_thaw? | 12:48 | |
Shillo | Yes | ||
However, good news; | |||
jnthn | Oh | ||
I wonder if somewhere we're cloning things a lot that are hashes | 12:49 | ||
Shillo | I just did normal time w/out valgrind. startup is now 75% of the test. > | ||
jnthn | The default clone implementation is to freeze, then thaw. | ||
pmichaud | jnthn: that wouldn't surprise me. hash clones are deep | ||
colomon | "startup is now 75% of the test" \o/ | ||
Shillo | 1.43 secs vs 2.00 secs (or so) | ||
12:50
_madmax_ left
|
|||
Shillo | Yes, this is a lot better than the last time. Lemme try to 10,000. That will take a while... | 12:50 | |
pmichaud | Shillo: what are you using to view the valgrind output, ooc? | 12:51 | |
Shillo | kcachegrind | ||
I'm open to better options, mind you. Wouldn't mind something that can draw a better call tree | |||
pmichaud | kcachegrind is good -- I'm just trying to duplicate on my system (so far so good) | ||
colomon | Can't use global $_ in "my" | 12:52 | |
12:52
uniejo left
|
|||
colomon | ??????? | 12:52 | |
line in question is my $a = $_ + 1; | |||
Shillo | ??? | ||
moritz_ | colomon: perl 5? | ||
colomon | doh! moritz_++ | 12:53 | |
Shillo | Uh... :> | ||
colomon | geez, that's a mistake I haven't made any time recently. most be tired than I think. | ||
12:53
javs joined
|
|||
colomon | huh. I've just updated to latest, and my 10,000 times loop run shows no performance improvement over the last time I ran it. | 12:54 | |
pmichaud | speaking of profiling -- here's a parsing/compiling profile I put together last night (this one is profiling time to compile src/NQP/Actions.pm in nqp-rx) | ||
gist.github.com/534606 # profile results | |||
colomon | pmichaud: better than 10% of the time is spent in <ws>? | 12:55 | |
pmichaud | yes, or things that ws calls that aren't being profiled | ||
but that doesn't surprise me too much, since most of a program is whitespace | |||
12:55
bjarneh joined
|
|||
pmichaud | it's not so much that <ws> is slow, as much as the fact that it gets called a lot | 12:56 | |
colomon wonders if switching spaces to tabs would significantly improve the performance. :( | |||
pmichaud | no, likely not | ||
anyway, I'm thinking of running this on core.pm and seeing what happens :-P | 12:57 | ||
colomon | you sure? seems like it would remove nearly 75% of the whitespace... | ||
Shillo | Reimplement <ws> in assembly.... ;) | 12:58 | |
12:58
wamba left
|
|||
pmichaud | well, I can go look at the code generated for <ws> and see why it might be taking so long | 12:58 | |
moritz_ | pmichaud: does <ws> cache like STD.pm does? | ||
pmichaud | yes | 12:59 | |
Shillo | Got profile up to 10,000 | ||
colomon | pmichaud: I assume the code for <ws> is pretty good already -- it certainly is called a lot! -- but it seems like a clear example where some love might make a significant difference. | ||
pmichaud | the cache is in the calls to MARKED | ||
Shillo | hash_thaw is now 4% of the time. So it -was- the startup | ||
runops_fast_core is 3%. Everything above that is pmc alloc, gc, delete and hash writes and lookups | 13:00 | ||
Oh, 4% on fill_params | |||
colomon | Shillo: are you still seeing a big performance improvement in the 10,000 version? I'm not seeing any since pmichaud++'s Range iterator patch from a few days ago. | 13:01 | |
might even be a touch slower. | |||
Shillo | I last checked before range iterator patch | ||
So I'm not sure what caused it | 13:02 | ||
At 10,000 passes: 3,250,000 calls to Parrot_pmc_new | |||
colomon | Shillo: that's almost certainly what you're timing, range iterator changes. | ||
pmichaud | well, and numeric math changes | ||
(which were part of range iterator changes, iirc) | 13:03 | ||
Shillo | Well, it aparently causes a lot fewer allocs for some reason. Anyway: major Pmc_new callers: PMCProxy_instantiate, pcc_build_sig_object_from_op, Sub_invoke, make_prop_hash and Class_instantiate | ||
colomon | pmichaud: you needed to make changes for the operators you were calling, but the old range iterator was already calling fast versions (after my post-R* changes) | ||
pmichaud | colomon: okay | 13:04 | |
colomon | (that is, it was using < and I made sure < was fast. you switched to cmp and then had to optimize cmp.) | ||
Shillo | And Proxy_Insantiate is called from Parrot_new_p_pc | ||
pmichaud | colomon: but I'm thinking some of those changes may have also affected &infix:<+> speed. | ||
Shillo | Wait, new_p_pc makes PMC from... what? | 13:05 | |
pmichaud | Shillo: a constant key, probably | ||
e.g., new $P0, ['Something'] | |||
13:06
amkrankruleuen joined
|
|||
colomon | pmichaud: it's been nine months since there were any changes to infix:<+>(Int, Int). I really think all the speedup came from switching your lovely PIR range iterator. | 13:08 | |
pmichaud | colomon: okay, I'll accept that then. It might also be parrot improvements. | ||
13:08
orafu joined
|
|||
Shillo | Checking hash_get calls. Major item is NameSpace_get_pmc_keyed_str, pointer_keyed_str and oo_find_vtable_override | 13:09 | |
Was PIC removed from Parrot? | |||
moritz_ | urks. It's a day before the release, and the number of "Non-zero exit status" tests has increased | ||
Shillo: yes. It was i386 only | |||
Shillo | pmichaud: A thing to keep in mind, I think that simpler implementation of range operator will become faster if Parrot gets function calls right | 13:10 | |
mathw | moritz_: ouch | ||
Shillo | pmichaud: And it needs to, given the number of single-expression methods that perl6 seems to encourage. | ||
moritz_ | pmichaud: should I fudge nil.t, or are you planning to fix rakudo before the release? | ||
pmichaud | moritz_: I'm planning to fix it today. | 13:11 | |
moritz_ | ok, then I'll stand back | ||
pmichaud | I have nil.t running, but the fix causes other spectests to fail, so I'm having to fix the fix (and the other tests) | ||
Shillo | pmichaud: Also, about reading kcachegrind, not sure if you noticed, but the timings are not cumulative up the call tree | ||
moritz_ | the last Nil change also required some changes sprinkled all over the test suite | 13:12 | |
Shillo | So a function can show at the bottom of the profile but can still be a problem if it calls some other, VERY popular function. | ||
pmichaud | moritz_: yes, and I have a few more. | ||
13:12
pmurias joined
|
|||
pmichaud | Shillo: noted, thanks! | 13:13 | |
moritz_ | Shillo++ # not only complaining about slowness, but actually doing something | ||
colomon | Shillo++ indeed | ||
moritz_ | if everybody who complained on twitter, reddit and perlmonks was that enthusiastic... :-) | 13:14 | |
Shillo | Well, just had to share. The main problems, currently, seem to be filling pads (causing gc to blow up), namespace lookups and, far below that, vtable lookups | 13:16 | |
masak | Shillo++ | ||
13:17
envi^home left
|
|||
pmichaud | I'm a bit surprised at namespace lookups | 13:17 | |
colomon | Shillo: is that for the 1,000 version or the 10,000 version? | ||
Shillo | Would it be very hard to inherit from parrot hash and make an object that has $/, $_ and whatever else is mandatory stored efficiently? | ||
colomon: 10,000 | |||
colomon | woah. I was thinking namespace lookups would all be at startup | 13:18 | |
Shillo | pmichaud: Could be, actually | ||
pmichaud | what's the namespace lookup? | ||
(I have the 10,000 callgrind results on my screen also) | 13:19 | ||
Shillo | Everything is so dominated by pads and GC blowup that it's all in single percentages | ||
13:19
javs_ joined
|
|||
Shillo | Clock parrot_hash_get_bucket | 13:19 | |
Then doubleclick on the first item on the caller lost | |||
list | |||
That's parrot_hash_get | |||
You see namespace lookups at the first two items on the caller list of parrot_hash_get. Itself, that's a fast function, but hash_get_bucket isn't | 13:20 | ||
pmichaud | oh | 13:21 | |
I bet those are isa checks. | |||
Shillo | It could still be startup time, mind you. Lemme run 100,000 | ||
But that could take an hour or whatever. | |||
pmichaud | at 10,000 it's 1,853,264 calls | ||
at 1 it's 200,877 calls | 13:22 | ||
Shillo | That helps :) | ||
13:22
pmurias left
|
|||
pmichaud | so I'm pretty sure that ~1.6 million calls are non-startup | 13:22 | |
jnthn | 1.6 million hash lookups?! | ||
pmichaud | sure | ||
Shillo | 160 calls per pass. | ||
jnthn | Still rather too many. | 13:23 | |
13:23
javs left
|
|||
Shillo | jnthn: It's still just 10% of the runtime | 13:23 | |
13:23
envi^home joined
|
|||
Shillo | Almost everything else is consing and gcing. | 13:24 | |
pmichaud | ultimately those are coming from Parrot_oo_get_class_str | ||
looks like about 35 calls to Parrot_Class_isa per iteration | |||
jnthn | pmichaud: eww, and we know that ain't too great. | 13:25 | |
pmichaud: Well, expect that to change drastically with the new metamodel-y stuff. | |||
13:25
thebird left
|
|||
moritz_ expects it to change | 13:25 | ||
sounds like the best thing since sliced bread :-) | 13:26 | ||
colomon | pmichaud: would it be possible to write a special version of the range iterator which always did Int cmp, without multi dispatch? sounds like that might be a biggish win.... | 13:28 | |
pmichaud | colomon: well, Ranges aren't required to be ints | 13:29 | |
more to the point, I'd be wary of assuming the bulk of the expense is still in the range iterator here | |||
colomon | pmichaud: right, that's why a special version. | ||
actually, now that I think about, those timings I did implied it wouldn't be better than a .2s improvement (in the 10,000 case) | 13:31 | ||
so that's maybe not worth pursuing. | |||
pmichaud | one could measure that by iterating over a 10000 element array instead of a 10000 element range | ||
that would give some indication as to how much of the expense is in the range generation versus the 10,000 iterations | |||
13:33
javs_ left,
perlygatekeeper joined
|
|||
Shillo | Heh, 100,000 test segfaulted. :) | 13:33 | |
pmichaud | that's probably the gc recursion limit. | ||
Shillo | Access not within mapped region at address 0xBE655FFC, at 0x4196D47: Parrot_Object_mark (object.c:3534) | 13:34 | |
pmichaud | maybe 50,000 | ||
or even 20,000 | |||
Shillo | Lemme try something else... | ||
13:35
thebird joined,
timbunce joined
|
|||
Shillo | time ./perl6 -e 'my $a = [1..10000]; for $a { my $x = $_ + 1; }' <-- 3.56 user | 13:36 | |
pmichaud | jnthn: I wonder if we'd get a huge win by caching (Parrot) cache objects in our calls to isa | ||
Shillo | time ./perl6 -e 'for (1..10000) { my $a = $_ + 1; }' <-- 7.48 user | ||
pmichaud | Shillo: the first does only one iteration | ||
Shillo | Oh, oops. | 13:37 | |
13:37
foodoo left
|
|||
pmichaud | try for $a.list | 13:37 | |
or my @a = 1..10000; for @a { ... } | |||
jnthn | pmichaud: Caching...what? | ||
:-) | |||
pmichaud | jnthn: right now we do things like $I0 = isa $P0, ['Something'] | ||
which means that Parrot goes through a lot of calls to find the class object for ['Something'] | 13:38 | ||
jnthn | pmichaud: Yeah. We could do with eliminating those. | ||
pmichaud: String isa in general needs to die. | |||
pmichaud | ooooh! ooooh! | ||
jnthn | It's going to hurt us in more ways that performance some day. | ||
pmichaud has a killer idea | |||
jnthn | I'm very happy to start killing it. | ||
Shillo | Ah, yes, used .list, got 8.95s user | ||
pmichaud | jnthn: we could come up with x_fast_isa opcode | 13:39 | |
and it can cache things for us | |||
Shillo | jnthn: Still, just to keep things in perspective, hash lookups were only 10% profile | ||
In that one example | |||
jnthn | Shillo: Yeah, but time spent in isa checks is more than just hash lookup I guess. | 13:40 | |
pmichaud | Shillo: how are you determining the 10% number, ooc? | ||
Parrot_hash_get_bucket? | 13:41 | ||
Shillo | Yep | ||
Or rather, by its placement on the list: everything above it is not related to hash lookups | 13:42 | ||
pmichaud | Parrot_pmc_new might have some hash lookups | ||
hmmm, maybe not | 13:43 | ||
anyway, would I be correct in saying that we still seem to be paying a lot for gc? | |||
Shillo | Oh, niiiice, found something cool | 13:44 | |
In kcachegrind, click on calee_map | |||
That's tab, top right | |||
pmichaud | yes | ||
13:45
Holy_Cow joined
13:47
javs_ joined
|
|||
pmichaud | fwiw, it might be worthwhile to compare for 1..00001 { ... } and for 1..10000 { ... } | 13:47 | |
just to make sure that we're more apples-to-apples in startup cost and compilation | |||
I suspect the cost of "00001" isn't quite the same as the cost of "1". (Yes, they should be trivially different, in reality there could be a difference with the way our constants are currently handled) | 13:48 | ||
or compare for 1..1000 with for 1..9999 | |||
anyway, probably not a significant difference, but worth noting | 13:49 | ||
masak | I'm building an offline mirror of the perl6 RT queue, so I can do queries on it. here's a simple summary that I can get out of it now: gist.github.com/534779 | ||
it'd be interesting to hear if people have suggestions for other pieces of data one could extract. | 13:50 | ||
jnthn | Who closed most? :-) | 13:52 | |
(moritz probably :-) | |||
masak | I'll see if I can get that out. shouldn't be too difficult. | ||
jnthn | number of tickets submitted by month? | 13:53 | |
masak | ooh | ||
jnthn | e.g. to see how fast we accumulate them over time | ||
pmichaud | number of open tickets by month, too. | ||
or by week | |||
masak | yes, I want to move towards a timeline-y interface. | ||
pmichaud | or by day | ||
jnthn | yeah | ||
masak | let me get back to you on that in a day or so :) | ||
13:54
timbunce_ joined
|
|||
masak | my ultimate dream is to build an interactive js interface, and do my 1024 talk using that :) | 13:54 | |
13:54
timbunce left,
timbunce_ is now known as timbunce
|
|||
jnthn | masak: Do you have a plan for when to do the 1024 talk? :-) | 13:55 | |
pmichaud | ooooh, I see a very nice optimization possibility in <ws> | ||
jnthn | \o/ | ||
13:55
javs_ left
|
|||
jnthn | I may have one for the binder but I need to do $dayjob bits first. :-) | 13:55 | |
masak | jnthn: I was thinking next YAPC::EU, but maybe I'll get to do it earlier to a smaller audience. | ||
jnthn | Nice | ||
Yes, it could make a nice ::EU one | |||
In Rigaaaa! :D | |||
masak | \o/ | 13:56 | |
13:57
timbunce left,
pmurias joined
|
|||
pmurias | ruoso: ping | 13:57 | |
jnthn | It'll be nice to see it in summer. :-) | ||
13:58
ash_ left
|
|||
pmichaud foolishly tries to run a parse/compile profile on core.pm. Expect epic fail. | 14:02 | ||
...wonder how long that will take, too. :-) | |||
masak | yes, moritz_++ wins among the *human* entities that close tickets :) gist.github.com/534779 | ||
then jnthn++, then pmichaud++, the [Coke]++ | 14:03 | ||
s/the>>/then/ | |||
14:03
sftp joined
|
|||
Shillo | OK, I've compared number of calls to PMC_new in 1..10,000 run and 1..1 run (substracted the number of calls, divided by 10,000) | 14:03 | |
None of the differences looks divisible by 10,000 and the numbers -could- be duplicated, but here's a quick breakdown: | 14:04 | ||
14:04
hercynium joined
|
|||
Shillo | Parrot_sub_invoke 69, PMCProxy_Instantiate 40, build_sig_object_from_op 60, make_prop_hash 7, alloc_context 15, build_call_from_varargs 15, autobox_pmc 10 | 14:04 | |
PerlJam just saw that valgrind stuff from earlier and finds it interesting how many "events" happen in rakudo as compared with perl5, python, and ruby | 14:05 | ||
pmichaud | afk for a bit | 14:06 | |
wait.... | |||
build_sig_object_from_op occurs 60 times per loop iteration? | |||
PerlJam | 10.5 million for perl5, ~16 million for ruby, ~30 million for both python, and ~19 BILLION for rakudo | 14:07 | |
s/both// | |||
pmichaud | okay, 60x looks about right, on second thought | ||
I was thinking something else | |||
Shillo | 716932 calls | ||
14:07
pnu joined
|
|||
Shillo | in the 10,000 run :) | 14:08 | |
pmichaud | right | ||
that's consistent with Parrot_sub_invoke being about 69 | |||
which also seems about right-ish | |||
Shillo | 69 sub calls still seems a bit excessive for a simple for loop | 14:09 | |
pmichaud | those are Parrot sub calls | ||
so, let's evaluate what's happening | |||
masak | correction: moritz_ wins, among humans and bots alike. the RT system doesn't close tickets, what was I thinking? :) gist.github.com/534779 | ||
pmichaud | for 1..10000 { my $x = $_ + 1; } is really | ||
14:09
Italian_Plumber left
|
|||
pmichaud | (1..10000).map( { my $x = $_ + 1; } ).eager | 14:09 | |
so .map first calls .iterator on the Range | 14:10 | ||
and then it starts to go through all of the elements of the iterator | |||
it has to call .munch(1) on the iterator to get each argument to pass to the block | |||
Shillo | I assume .iterator() is just a single call (not 1 per loop) | 14:11 | |
pmichaud | right, but .munch is one per loop | ||
Shillo | Yep | ||
pmichaud | and .munch then has to make a variety of calls to produce the elements of the range | ||
it has to call .succ and &infix:<cmp> | |||
each of which also result in a variety of subcalls | |||
Shillo | I'm kinda tempted to try and figure out how long does a sub call take in rakudo or parrot | 14:12 | |
pmichaud | so, just the fact of doing the iteration itself is likely reponsible for about 12 subcalls per iteration | ||
note that we're talking Parrot subs here, not Rakudo subs | |||
14:12
drbean left
|
|||
pmichaud | (it's not always a 1-1 mapping) | 14:12 | |
14:13
blogometer joined
|
|||
blogometer | Hello, Perl 6. | 14:13 | |
I see you are ready to build and run on my MacBook now. | |||
pmichaud | then within the loop, we have calls to &infix:<=> and &infix:<+> | ||
Shillo | Is it ever? I.e. does rakudo generate sub-calling boilerplate? | ||
[particle] | each rakudo scope is a parrot sub, for example | ||
blogometer | I've waited so long, and now you're here. I'm so happy! | ||
Shillo | [particle]: I saw that | ||
14:14
plobsing joined
|
|||
Shillo | Actually, does perl6 spec fundamentally preclude inlining? I.e. is it OK to ever prevent CALLER:: from working? | 14:14 | |
pmichaud | it's not precluded, but it's also not a trivial optimization | ||
and then problem isn't simply CALLER:: -- it's also the need to create lexpads for the nested blocks | 14:15 | ||
(or closures) | |||
Shillo | But do you need lexpads if it's okay to not be able to introspect lexical scopes? | 14:16 | |
(I mean, in that case, stuffing things into the registers becomes an option) | |||
pmichaud | as long as it's not a true closure, yes. | 14:17 | |
but in the case of the for statement... it's a closure | |||
i.e., it's an argument to .map() | |||
so it's not inlinable | |||
Shillo | Actually most LISPs flatten (map (lambda ..., but there scopes can be flattened if the closure isn't captured | 14:18 | |
Although, there (lambda..) can't get a reference to itself, and the optimizer knows that map doesn't store closure | 14:19 | ||
Which is why I asked my question as I did: aside from CALLER::, is there any other reason to make a closure if closure consumer isn't storing it? | 14:20 | ||
pmichaud | ...but the closure consumer (map) is storing it | ||
Shillo | By storing I mean outside its own variables. Yeah, it means that compiler needs to treat map specially | 14:21 | |
map in LISP is usually a macro, but Common LISP cheats | |||
Part of the standard is that you can't override certain symbols, map among them. | 14:22 | ||
pmichaud | anyway, the other reason for needing the lexpad is because of nested blocks | ||
again, optimizable, but only with a fair bit of analysis | 14:23 | ||
e.g.: | |||
if 1 { my $a = 5; { say $a; } } | |||
14:23
ash_ joined
|
|||
pmichaud | we can't inline the block to the 'if' unless we can also determine that it's perfectly safe to inline the nested block | 14:23 | |
14:25
Italian_Plumber joined
|
|||
Shillo | Better example: for @a { my $x = $_ + 1; @*B.push( { $^a + $x } } <-- this you can't actually inline | 14:25 | |
pmichaud | right | ||
gfldex | is there a way to define a method as not mutating the object it works with, nor any other object? | ||
like in c++ with void foo () const {} | 14:26 | ||
14:26
xinming_ joined
|
|||
Shillo | And you need to look into the nested block to see that $x is used. Or (which is what I intend to do in my pet compiler project), go upscope from any ref to lexicals and mark the symbols as need-to-malloc | 14:26 | |
Pet project: learning LLVM and type inference. Might end up with a working compiler for a pet language at some point, but don't count on it. | |||
14:28
Alias_ joined
|
|||
pmichaud | afk for a bit | 14:28 | |
Shillo | Laters! | ||
masak | jnthn++'s presentation and mine are now online! www.presentingperl.org/ye2010/ | ||
14:30
azert0x joined,
jferrero left
|
|||
Shillo | Anyway, laters, all, and thanks for your time! :) | 14:30 | |
Juerd | What a weird logo | ||
"resenting erl" | |||
juerd.nl/i/609555ee94a732cda67530080a416134.png | |||
Who let a Perl coder design a logo? :) | 14:31 | ||
14:31
Shillo left
|
|||
masak doesn't resent erl at all | 14:31 | ||
Juerd | I don't know erl :) | 14:32 | |
masak | it's a rogramming language :) | ||
ruoso | pmurias, pong | 14:33 | |
Juerd | Any rogrammers here, then? | ||
masak | robably. | ||
PerlJam | ro-ro-ro your grammer, gently down the parse | 14:34 | |
[particle] | more unsters than rogrammers | ||
masak | what's your oint, sir? | ||
Juerd | Are the slides of this resentation available in a more readable form? | ||
PerlJam | (I thought "gently down the arse" wouldn't quite come out right ;) | ||
Juerd | I can't make out the text in the video. | ||
PerlJam: :) | |||
masak | Juerd: if you're referring to mine, then yes. feather.perl6.nl/~masak/ | 14:35 | |
Juerd | PerlJam: down the arse is *in*, indeed, not out. | ||
masak | jnthn's should be up too. hold on. | ||
jnthn.net/articles.shtml | |||
Juerd | \o/ | ||
14:36
dudulz joined
14:43
wtw left
14:46
estrabd left
14:47
estrabd joined
14:48
plobsing left
|
|||
jnthn | ooh, my talk video is up? \o/ | 14:48 | |
14:49
JimmyZ left
14:50
pyrimidine joined
|
|||
pmichaud | jnthn: do you have a twitter id? | 14:51 | |
jnthn | yes | 14:52 | |
jnthnwrthngtn | |||
masak: Seems that being the person who writes the tests gives a large advantage in ticket closing. ;-) | 14:54 | ||
moritz_++ | |||
masak | indeed, moritz_++ | ||
pmichaud | lolitweeted: twitter.com/pmichaud/status/21496165520 | ||
masak RTs | |||
jnthn | I'm a little surprised I've closed so many directly though. :-) | 14:57 | |
masak | would be fun and a bit frivolous to pair up the most common submitter/closer pairs, too... | 15:00 | |
jnthn | hehe | 15:01 | |
masak | jnthn: I have a feeling many of the bugs you close were submitted by me, for example. | ||
15:02
foodoo joined
|
|||
jnthn | Statistically, that's likely :P | 15:04 | |
15:04
molaf joined
15:06
kiffin left
15:07
dudulz left
|
|||
jnthn | masak: It's too bad we don't have a status where it's "fixed, awaiting tests", so we could work out the top fixer as well as the top closer. :-) | 15:08 | |
masak | jnthn: I might be able to tease that out of the data. :) | 15:09 | |
15:09
blogometer left
|
|||
jnthn | .oO( Is it cruel to tease data? ) |
15:09 | |
15:11
blogometer joined
|
|||
masak | jnthn: the data started it! | 15:13 | |
15:14
justatheory left
15:16
azert0x left
15:17
Clem_Chong joined
15:25
blogometer left
|
|||
masak | jnthn is getting sweet re-tweets on Twitter. | 15:26 | |
jnthn | re-sweet | 15:27 | |
15:28
timbunce joined,
rlb3_ joined
15:33
amkrankruleuen left
15:34
alester joined
15:35
amkrankruleuen joined
15:38
blogometer joined
|
|||
Clem_Chong | Hello,I am new. | 15:39 | |
15:40
jferrero joined
|
|||
masak | Clem_Chong: welcome! | 15:40 | |
15:41
masak left
|
|||
takadonet | Clem_Chong: how are you? | 15:48 | |
15:52
timbunce left,
risou joined
15:55
tylercurtis joined
|
|||
pmichaud | "Twitter is over capacity." I blame jnthn++ | 15:58 | |
15:59
Clem_Chong left
16:00
charan joined,
rgrau___ joined
16:02
rgrau__ left
16:04
rgrau___ is now known as rgrau
|
|||
TimToady | I can't believe you guys spent that much time discussing AOP and never mentioned .wrap | 16:08 | |
16:11
ash_ left
|
|||
jnthn | pmichaud: :P | 16:11 | |
16:13
djburiedalive joined
16:14
patrickas joined,
djburiedalive left
|
|||
TimToady | sorear: re syml, another consideration is whether you can write the directory in question; I'm inclined to think we'll end up with meshed global and private databases | 16:15 | |
patrickas | ola | ||
TimToady | nadim: AOP is supposed to be done with .wrap, though we don't yet have a good interface for "find me all the methods named .perl" | 16:17 | |
patrickas | TimToady: is ( 1 , -2 , 4 ...^ -32) supposed to result in '2, -4, 8, -16' or '2, -4, 8, -16, 32' | ||
pmichaud | well, it should probably be 1, -2, 4, -8, 16 :-) | 16:18 | |
(note negatives are switched :-) | |||
pmurias | ruoso: sorry, for pinging and forgetting to mark that i went to lunch | ||
jnthn | Foo.^methods.grep(* eq 'perl')>>.wrap({ ... }) | ||
pmurias | ruoso: how is the evaluation of my project | 16:19 | |
? | |||
patrickas | sorry wrong copy pasta | ||
TimToady | that only finds the methods of Foo | ||
patrickas | (2, -4, 8 ...^ -32) | ||
should 32 be the last item or -16 | |||
jnthn | TimToady: ...oh, you want to do it on all objects? | 16:20 | |
TimToady: er, all types... | |||
TimToady | that was the request last night | ||
jnthn | TimToady: Yeah, we don't have a way to do that. But I'd rather that we didn't either. | ||
TimToady | this is more like AOP | ||
and that is what .wrap was put in for | |||
jnthn | Right. | ||
But just going and wrapping every method that happens to be named perl seems like some bizzare form of monkey typing. :-) | 16:21 | ||
TimToady | though we might well want to pull the declarative pessimization trick | ||
jnthn | We might well want to say that this isn't in 6.0.0 too. :-) | ||
TimToady | which is a good reason to make sure all .perl methods "do the same thing" | ||
jnthn | (.wrap is fine, but "find everything with a perl method" is less so) | 16:22 | |
TimToady | we don't have .wrap yet? | ||
jnthn | No no | ||
I'm not arguing against .wrap | |||
Just against being able to find every type in the system | |||
PerlJam | patrickas: I would think it would have to be -16 | ||
jnthn | .wrap is fine - we do have it at least partially in Rakudo. | ||
pmurias | jnthn: AOP is a more crafty and fancy form of monkey typing | 16:24 | |
mathw | o/ | 16:26 | |
pmurias | TimToady: do we need AOP much? | ||
TimToady | we need to make it possible | 16:28 | |
diakopter blinks back into participation | 16:29 | ||
PerlJam | so, AOP is a "hard thing"? :) | ||
mathw reads about AOP | 16:32 | ||
I see how .wrap helps | 16:33 | ||
charan | hey evry1 | ||
pmichaud | TimToady: could we do something to make '<?before>' special to the regex compiler? | 16:34 | |
either declare it to be non-overridable, or come up with a syntax that means the same thing but is much more optimizable? | 16:35 | ||
TimToady | sure, we can say it's a macro like .WHAT | 16:36 | |
pmichaud | that'd be fine | ||
TimToady | though it's mainly .HOW that must be a macro | 16:37 | |
pmichaud | and similar for ?after (which really does need to be a macro, in order to reverse the ast) | ||
TimToady | sure | ||
pmichaud | okay, great. | ||
that has the potential to greatly improve rakudo parse speed | |||
16:38
rlb3_ left
|
|||
TimToady | I'm fine with macroizing things into "keywords" as we discover the need; we're just against assuming everything as a keyword to make life easy for implementors | 16:38 | |
pmichaud | wfm | 16:39 | |
16:39
bjarneh left
|
|||
TimToady | helps us discover the true primitives | 16:39 | |
also, if <?before> participates in LTM, it doesn't really have to be rematched most of the time | 16:40 | ||
pmichaud | right... nqp currently doesn't get <?before> to participate in LTM | ||
TimToady | though STD still does the rematch | ||
pmichaud | I can do that, but it still ends up requiring two extra method calls to handle a <?before>, when in many cases it's not needed. | 16:41 | |
TimToady | well, you've got a decent parallel nfa prototype in STD now, thanks to sorear++ | ||
pmichaud | agreed | ||
and that may obviate the need altogether | |||
let me see if I can quickly get <?before> to at least participate in LTM | |||
that might not be too hard, and would be a win for other <?rule> forms. | |||
16:42
justatheory joined
|
|||
pmichaud | (and yes, it's an open question as to when it's just more efficient to start porting the nfa prototype :-) | 16:42 | |
TimToady | how efficient the automata will be depends greatly on how fast the primitives are that it is using. STD's isn't a big win, but that's because Perl 5 isn't designed for that kind of noodliness. | 16:43 | |
diakopter | +++++++++++++++++++++ | ||
pmichaud | my guess at the moment is that I want to hold on nfa porting until jnthn++ is a little farther along on object metamodel stuff. | 16:44 | |
for a variety of reasons | |||
diakopter | + | ||
Juerd | diakopter? | ||
diakopter | sorry | ||
TimToady | I believe he is expressing slight agreement :) | ||
jnthn | Or owns a cat. | ||
pmichaud | either that or trying to get back into his modem's command mode | ||
jnthn | :-) | ||
diakopter | '+' was evening out the prior msg | ||
pmichaud | that's not what my wife usually means by "evening out" :-P | 16:45 | |
jnthn | pmichaud: Is there anything specific you want to know along those lines? | ||
pmichaud | jnthn: no, not really. | ||
I'm just waiting to see how it turns out. | 16:46 | ||
jnthn | pmichaud: As my prototype comes along I get increasingly concrete ideas. :-) | ||
OK. :-) | |||
pmichaud | I know that a lot of PGE (and nqp) design was driven somewhat by knowledge of Parrot's underlying model; I expect this may end up being the same. | ||
PerlJam | jnthn: does your head get heavier and heavier? | ||
jnthn | pmichaud: I'm still pondering the Parrot mapping of this stuff. | ||
PerlJam: Yes, but I drink lots of beer, which makes the rest of me heavier and makes sure I stay well balanced. | 16:47 | ||
[particle] | ++ | ||
pmichaud | ...you're saying the beer doesn't go to your head? ;-) | ||
[particle] | all the dead brain cells make room for more concrete | ||
jnthn | pmichaud: Well...not immediately. :-) | ||
pmichaud: What I've got so far is essentially a small core and everything else defined in a kind of "setting". | 16:48 | ||
pmichaud | jnthn: that sounds like what we want :) | 16:49 | |
jnthn | pmichaud: Where "everything" is "really not a lot yet" :-) | ||
github.com/jnthn/6model/blob/master...Setting.pm is what I have so far. | |||
pmichaud: The various reprs there just know how to store a single natively typed value. So those are essentially describing the boxed forms of int/str/num. | 16:50 | ||
moritz_ backs | |||
erm, back :-) | |||
jnthn | moritz_: who are you backing? :-) | ||
PerlJam | jnthn: what does the knowhow declarator imply? | 16:51 | |
jnthn | PerlJam: It's a "pure prototype" | ||
PerlJam: It's also where the meta-model bottoms out. | |||
16:51
pmurias left
|
|||
jnthn | e.g. that's where we tie the "can introspect everything" knot. | 16:52 | |
A pure prototype knows rather little. | |||
TimToady | except for knowing all the methods named .perl :P | ||
jnthn | It can dispatch methods and have attributes. | ||
But that's about it. | |||
What I'm working towards is defining ClassHOW in there. Once we have that, we can haz exciting things like inheritance. :-) | 16:53 | ||
16:53
pmurias joined
|
|||
jnthn | It means that just the knowhow and reprs need to be ported though. | 16:54 | |
16:54
justatheory left,
charan left
16:57
isBEKaml joined
|
|||
mathw has done some bits of release prep, and hopes to not run out of time finishing off tomorrow, get those patches in! | 16:57 | ||
pmichaud | we likely need to update ChangeLog and the release announcement | 16:58 | |
oh! | |||
mathw | yes | ||
which I've been lookin gat | |||
might've missed some things | |||
pmichaud | nm... I think I did commit the release announcement draft | ||
mathw | yes | ||
pmichaud | lately I've been forgetting 'git push' :-) | ||
mathw | lol | 16:59 | |
is it better than th eone that I've just been trying to finish? | |||
pmichaud | mathw: just a reminder that we plan to only announce tomorrow's release to perl6-comiler | ||
*perl6-compiler | |||
mathw | yes I saw | ||
TimToady | what, you don't want to confuse the market? :) | 17:00 | |
17:00
envi^home left
|
|||
jnthn | No, just the meercat. | 17:00 | |
pmichaud | TimToady: our market is confused enough already, I fear. So are the product marketers. And the product engineers. :-) | 17:01 | |
mathw | pmichaud: have I got commit access yet? | ||
pmichaud | mathw: github id? | ||
mathw | mathw | ||
17:01
dakkar left
|
|||
pmichaud | until I get a cla, the commit access will be temporary for the release :) | 17:01 | |
mathw | yup | 17:02 | |
I'll sort it out... whenever I remember to | |||
there ar esome instructions for that somewhere I believe | |||
17:02
alester left
|
|||
pmichaud | they're out of date, I think. | 17:02 | |
dalek | ok: 84be67a | moritz++ | src/images/cover.jpg: [cover] correct masak's last name |
||
pmichaud | mathw: you're now a committer for the rakudo repo | 17:03 | |
mathw | thanks | ||
I will confine my activities purely to the release | |||
pmichaud | wfm | ||
mathw | unfortunately I lack the ability to go in and fix all the bugs with a gentle sprinkling of code | 17:04 | |
after the way today's gone I'd just introduce more :( | |||
so I shall now go and spend the evening being very silly with friends, which should cheer me up :) | |||
bye | |||
isBEKaml | OHHAI,#perl6! :-) | 17:05 | |
17:06
ash_ joined
17:07
thebird left,
ash_ left
|
|||
pugssvn | r32047 | lwall++ | [caps.t] old-school cclass warning suppression | 17:07 | |
r32048 | lwall++ | [STD] disallow foo:$x form of name extender as too confusing, esp inside quotes, e.g. "$x:$y" | 17:09 | ||
r32048 | delete xlex field that is redundant with inlex | |||
tylercurtis | jnthn: are you going to end up wrapping representations in Perl 6 classes? Will it be possible to write new representations in Perl 6/NQP? | 17:14 | |
jnthn | representations are "low level"-y things. Those are the place where we really do get down to the VM level. | 17:15 | |
tylercurtis: However, it will be possible to write a "forwarder" REPR that knows how to forward to methods on an object. | |||
And then people would write their own in Perl 6. | 17:16 | ||
But I don't plan on wrapping the current ones in any sense. | |||
tylercurtis is a little relieved that only most of his plans for Bennu would be better implemented as a native backend for Rakudo. | |||
jnthn | They're not available as type names. | ||
Well, maybe they're enum-ish | |||
I've gone with strings for now. | |||
17:17
leprevost joined,
leprevost left
|
|||
jnthn | We don't need to go looking it up on every object creation, so that's not a big deal. | 17:17 | |
17:18
risou_ joined
17:19
macroron joined
17:20
risou left
|
|||
isBEKaml | There was a wonderful discussion with chromatic++ lastnight about rakudo/parrot interaction and porting to other VMs. Too bad I crashed early. :/ | 17:22 | |
(backlogging) | |||
pmichaud | isBEKaml: that's right.... sleep is not an option here. :-) | 17:23 | |
17:28
wamba joined
|
|||
isBEKaml | Then I'll be sure to stay more alive! :) | 17:30 | |
17:30
Mowah joined
|
|||
isBEKaml | pmichaud: What I understand from the discussion is, in essence, porting to other VMs is not top priority but making it easy to port to other VMs is. Right? | 17:30 | |
17:31
risou_ left
|
|||
pmichaud | isBEKaml: I'm not sure that's exactly right. | 17:31 | |
We know that we want Rakudo to eventually run on more than just Parrot as it exists today | |||
pmurias | tylercurtis: the paper with object having a message pointer representations seems very similiar to how smop implements things | 17:32 | |
pmichaud | so, making Rakudo multiplatform is a priority but it's by no means our top priority (or even very close to the top) | 17:33 | |
17:33
sftp left
|
|||
pmurias | tylercurtis: look at search.cpan.org/~pmurias/SMOP-0.6/l...1_base.pod | 17:33 | |
pmichaud | making Rakudo run faster *is* a high priority, though, and exploring other VMs might be a way to make progress on that goal | ||
isBEKaml | pmichaud: We all want that. that's why I said "Not top priority". :) | ||
dalek | ok: 6d89859 | moritz++ | src/basics.pod: [basics] grammar nit by wolverian++ |
||
isBEKaml | pmichaud: Optimisations *is* the need at this time. Porting can wait until we have everything in place to do that. | 17:35 | |
s/(Optimisation)s/\1/ | |||
pmichaud | ...except that porting is really a form of optimization, the way we're approaching it. | 17:36 | |
we know that in many ways Rakudo as-it-exists-today is in response to what our platform (Parrot) provides. | |||
isBEKaml | right. | 17:37 | |
pmichaud | by looking at what we would want/need from other platforms, we can determine how we would want to optimize Rakudo when it's multi-platform, and use that to feed into Parrot design/development to make it faster | ||
also, prototyping features on other platforms is proving to be faster than prototyping them on Parrot | |||
isBEKaml | then that means porting should be an early goal (should never be left until late) | ||
pmichaud | right, porting is an early goal, and atm there are a total of two people working on it, afaik | 17:38 | |
so we're making progress, but it's not the majority of our current efforts | |||
isBEKaml | so we have an idea what exactly is needed to port to the target platform and drive parrot development towards it. | ||
17:39
jaldhar joined
|
|||
tylercurtis | pmurias: slightly different from P&W in that in P&W, the vtable is before the object, so, if you can allocate sizeof(vtable *) more than you need for an object, you can easily wrap any object from an alternate object system and pretend it's the same by passing around a pointer to just the object data. Whether that actually really provides much benefit I don't know. | 17:40 | |
pmichaud | I should rephrase that. | ||
Porting is not an early goal, but knowing what we might want/need in order to port is. | |||
tylercurtis | pmurias: I'll look at it some more in a bit. | ||
pmichaud | so, since there's a nice opportunity to test NQP on a different backend while also redesigning a core object metamodel (for Parrot), we're taking advantage of that opportunity. But as yet we've made no decision that says that what we do now will be the basis for porting Rakudo to other platforms. | 17:41 | |
(it will be very nice if it is, but that's not something we're committed to yet) | |||
isBEKaml | pmichaud: so we concur with the second point I made early on "Making it easy to port to other VMs" though not necessarily top priority, more as a driving force for development. | ||
pmichaud | it's a driving force for exploration, I think. | 17:42 | |
anyway, we're putting some limited resources towards that end, at any rate. | |||
17:42
sftp joined
|
|||
dalek | kudo: 7f39959 | pmichaud++ | docs/announce/2010.08: Update release contributors. |
17:43 | |
kudo: 72f5b8b | pmichaud++ | src/Perl6/Grammar.pm: Refactor handling of $*QSIGIL in token variable to avoid 'return ()'. |
|||
kudo: e260f09 | pmichaud++ | build/Makefile.in: Add 'make parsetrace' target for internal profiling/debugging. |
|||
isBEKaml | pmichaud++ # thanks for taking the time to explain Rakudo's goals atm. | 17:45 | |
pmichaud ♥ git. | 17:46 | ||
Two people who have made my life far simpler and more fun: Larry Wall (Perl, patch, rn) and Linus Torvalds (Linux, git) | |||
17:47
lue left,
jaldhar left
|
|||
pmichaud | ...although TimToady is losing points with Perl 6... while definitely more fun, it's also more complicated :-P | 17:47 | |
huf | you're just saying that because you have to write it ... ;) | ||
pmichaud | no, it's an explicit Perl goal | 17:48 | |
"Perl exists to torment the implementors on behalf of the users" | |||
I don't remember seeing that mentioned in the original call for pumpkings :-) | |||
17:48
sftp left
|
|||
isBEKaml | I can only hope we don't turn into a bunch of grouchos. :P | 17:48 | |
TimToady | obviously, it'll be funner later when you can stop implementing and start using. | ||
dalek | kudo: 56c8464 | pmichaud++ | docs/ROADMAP: Move "port to other VMs" to a priority 3 level -- I think priority 2 overstates it a bit. |
17:49 | |
pmichaud | yeah, when we're finished. :-P | ||
actually, it's funner now. I'm already getting ready to set up a hotkey to open rakudo instead of my calculator :) | |||
rakudo's REPL makes for a much better bc than bc | |||
gist.github.com/535620 # An initial guess at where rakudo spends its time compiling src/gen/core.pm | 17:53 | ||
now time to do some optimizing :) | |||
17:53
ruoso left
|
|||
pmichaud | well, walk first. then lunch. | 17:53 | |
then I should probably go ahead and get Nil fixed. | |||
[particle] | obviously whitespace is significant in perl6 | 17:54 | |
jnthn | Wow, ws is a pig. :-) | ||
pmichaud | I looked through the ws generated code and found a couple of places where I can improve the codegen | ||
Tene | OBVIOUSLY we just need to strip all unnecessary whitespace from the core!! | ||
pmichaud | ws is big largely because it's called so often | 17:55 | |
jnthn | Aye | ||
Heh. We spend more time failing than we do passing. | |||
I guess real LTM will help us with that? | |||
pmichaud | maybe | ||
the real cost is the <-quoteescape> in quoted strings. | 17:56 | ||
jnthn | We seem to fail that rule a lot too. | ||
pmichaud | right | ||
TimToady | LTM in the nibbler might help with that one | ||
moritz_ | that's only parsing time, not compilation time, right? | ||
pmichaud | well, it includes the time needed to generate PAST | 17:57 | |
since that's done as part of the parse | |||
[particle] | ww is called a lot, too, while you're looking at ws | ||
pmichaud | ww gets called from ws | ||
although it really shouldn't be that slow. | |||
TimToady | STD hardwires the ww there | ||
well, it uses before/after | |||
pmichaud | STD uses before/after? | ||
(for ww?) | 17:58 | ||
<ww> in Rakudo/NQP is a handwritten PIR sub | |||
TimToady | | \h+ <![\#\s\\]> { @*MEMOS[$¢.pos]<ws> = $startpos; } # common case | ||
| <?before \w> <?after \w> ::: | |||
pmichaud | ah | ||
in rakudo/nqp, <ww> will definitely be faster. | |||
TimToady | it almost always falsifies on the <?before \w> I think | 17:59 | |
except between a prefix and an ident | 18:00 | ||
but yeah, if Cursor actualy defined ww, it might be faster yet | 18:01 | ||
18:01
mberends joined
|
|||
TimToady | in fact, it never gets to that alternative unless there's a \w, since it's using LTM there | 18:01 | |
bbl & | 18:03 | ||
pmichaud | I bet I can improve quote_expr a bit. | ||
18:04
sftp joined,
Mowah left
|
|||
pmichaud | afk, walk | 18:05 | |
18:06
macroron left,
lue joined
18:09
tadzik joined
|
|||
sorear | good * #perl6 | 18:09 | |
tadzik | hello | 18:10 | |
18:10
hugme joined,
ChanServ sets mode: +v hugme
18:16
Mowah joined
18:18
rgrau left
|
|||
pyrimidine | pmichaud: is <?after> or <!after> implemented in nqp-rx? | 18:18 | |
moritz_ | it is not | 18:21 | |
pyrimidine | moritz_: ok, thx. I recall running into this a while back | ||
sorear | pmurias: How does mildew use the syml search path + syml output path? | 18:23 | |
18:25
molaf left
|
|||
pmichaud | pyrimidine: I can re-implement the slow, cheating form of !after though. | 18:25 | |
er, ?after | |||
er <.after> | |||
er... :-) | |||
pyrimidine | pmichaud: ok | 18:26 | |
it's not pressing, though | |||
s/pressing/a pressing issue/ | |||
was looking at trying to implement a few bioinformatics-related grammars, like a GenBank grammar | 18:27 | ||
18:29
tadzik left
|
|||
dalek | p-rx: d304887 | pmichaud++ | src/Regex/Cursor-builtins.pir: Add debugging/profiling to <ww> builtin. |
18:30 | |
p-rx: 1408049 | pmichaud++ | src/cheats/hll-grammar.pir: Add debugging/profiling for <EXPR>. |
|||
p-rx: f49a206 | pmichaud++ | tools/analyze-parse: Add analyze-parse, a simple Perl script for summarizing --parsetrace output. |
|||
18:32
Mowah left,
blogometer left
|
|||
sorear | Juerd: Do you have an alt contact we can use when feather dies and kicks you off IRC? | 18:32 | |
TimToady: "meshed" global and private? | 18:33 | ||
18:34
tadzik joined
18:35
Mowah joined,
nimiezko joined
|
|||
tadzik | parrot.org/languages has been a bit cleaned up, didn't it? | 18:36 | |
18:38
blogometer joined,
djburiedalive joined
|
|||
sorear caught up | 18:39 | ||
jnthn | pmichaud: It would let us remove a hack in Rakudo's grammar too | 18:41 | |
18:42
djburiedalive left
18:43
alester joined
18:47
patrickas left
|
|||
pugssvn | r32049 | sorear++ | [STDeco] Fix whitespace remover | 18:50 | |
18:51
tylercurtis left
19:06
cono joined
19:07
HarryS joined
|
|||
moritz_ | TimToady++ # www.perlmonks.org/?node_id=855886 | 19:14 | |
19:32
tylercurtis joined
|
|||
[particle] | sorear: [email@hidden.address] | 19:32 | |
19:32
simcop2387 left
|
|||
pmichaud | my addition: www.perlmonks.org/?node_id=855892 | 19:33 | |
19:33
simcop2387 joined
|
|||
PerlJam | pmichaud: you don't have a perlmonks account? | 19:35 | |
you posted anonymonkly. | 19:36 | ||
pyrimidine | well, at least he left 'Pm' | 19:37 | |
pmichaud | huh | ||
I *was* logged in when I started. | |||
pyrimidine | maybe it's got use.perl-syndrome | 19:38 | |
pmichaud | because it even said I had 10 votes left today | ||
I was getting various timeouts from perlmonks.org in writing that, though. maybe it lost my login in the process. | |||
ah, my reply to anonymous monk is now "best node of the year" :-) (the previous best dropped off the list :-) | 19:40 | ||
pugssvn | r32050 | kyle++ | perl util/purge-empty-dirs.pl ; svn commit | 19:44 | |
19:46
wamba left
19:49
hercynium left
19:59
Italian_Plumber left
|
|||
pugssvn | r32051 | sorear++ | [STDeco] Run builds of required submodules in the same process. No more $^X hacks, no more depending on an installed Perl, no more depending on the ability to write to %INC. | 20:07 | |
20:11
Italian_Plumber joined,
jferrero left
20:14
Italian_Plumber left,
patrickas joined
|
|||
patrickas | rakudo: say ('a' | 1 ~~ Str) | 20:15 | |
p6eval | rakudo 56c846: OUTPUT«0» | ||
patrickas | rakudo: say ( any('a' , 1) ~~ Str) | ||
p6eval | rakudo 56c846: OUTPUT«0» | ||
patrickas | am I doing something wrong or is it a bug ? | ||
pmichaud | rakudo: say 'a' ~~ Str | 20:16 | |
p6eval | rakudo 56c846: OUTPUT«1» | ||
pmichaud | rakudo say ('a'|1) ~~ Str | ||
rakudo: say ('a'|1) ~~ Str | |||
p6eval | rakudo 56c846: OUTPUT«0» | ||
pmichaud | rakudo: say ('a'|'b') ~~ Str | ||
p6eval | rakudo 56c846: OUTPUT«0» | ||
pmichaud | looks like it might be a bug. | ||
rakudo: say Str.ACCEPTS('a'|1) | 20:17 | ||
p6eval | rakudo 56c846: OUTPUT«0» | ||
pmichaud | oh | ||
well, Str doesn't ACCEPT a junction | |||
and I'm not sure it should autothread there. | |||
jnthn | It shouldn't. | ||
Otherwise you break type checking. | |||
And that would be sad. | 20:18 | ||
:-) | |||
pmichaud | so how would one check to see if a junction does Str, ooc? | ||
(if an element of a junction does ... ) | |||
jnthn | Oh...hm | 20:19 | |
.does probably is on the Junction too, but maybe not. | |||
Of course, you can write a sub junc_accepts($item, $what) { $item ~~ $what } | 20:22 | ||
Or along those lines. | |||
patrickas | I'll go back to $a ~~ Str || $b ~~ Str ... berk! | ||
20:25
djburiedalive joined
|
|||
TimToady | whoops, missed the phone call, if there was one... | 20:32 | |
pmichaud | still is one | ||
(I was 20 mins late myself) | |||
pmurias | tylercurtis: in smop the RI pointer is before the data | 20:35 | |
tylercurtis | pmurias: By "before the data" I mean, that your pointer to an object is always to the data of the object, and to get to the vtable, you have to do negative indexing from that pointer. | 20:36 | |
pmurias | that shouldn't make a difference for anything | 20:38 | |
20:38
pyrimidine left
|
|||
tylercurtis | Like I said, I'm doubtful of its usefulness. | 20:38 | |
pmurias | the other difference is that SMOP has stuff for reference counting in the RI | 20:39 | |
and a DUMP entry for debugging | |||
DUM | 20:41 | ||
gfldex | std: class A { method foo(){}; }; say A.^can('foo') == A.^can('foo'); | 20:42 | |
p6eval | std 32051: OUTPUT«ok 00:02 116m» | ||
20:43
perlygatekeeper left
20:44
Mowah left
|
|||
tylercurtis | Another apparent difference is that the method dispatch doesn't appear to ever be looked up as a normal method in SMOP, which does certainly seem like it should simplify bootstrapping. | 20:45 | |
20:46
djburiedalive left
20:54
justatheory joined,
kuzuha_ joined
20:57
isBEKaml_ joined,
dwiereng1 joined,
krunen_ joined,
imarcust1is joined,
hsb_ joined
20:58
simcop2387 left,
blogometer left,
isBEKaml left,
blogometer joined,
flatwhatson joined,
larsen joined
20:59
simcop2387 joined,
shade_ joined
|
|||
pmurias | tylercurtis: normal method you mean looked up in a vtable? | 21:00 | |
pmurias reboots | 21:01 | ||
21:01
pmurias left,
foodoo left
21:03
pmurias joined
|
|||
tylercurtis | pmurias: Well, SMOP's MESSAGE function is looked up. But in P&W, message dispatch, unless the message is "lookup" and the receiver's vtable is the vtable vtable, works by sending the lookup message to the receiver's vtable to get the function pointer for the method, then calling that method with the receiver and the arguments. | 21:05 | |
pmurias | what's the difference? | 21:07 | |
21:07
achromic joined
|
|||
pmurias | if i used something different from a vtable as a vtable, a method call would use lookup on the object? | 21:08 | |
21:09
blogometer left,
justatheory left,
Guest23195 left
|
|||
pmurias | tylercurtis: could you remind me what's the link to the P&W paper? | 21:09 | |
tylercurtis | piumarta.com/software/cola/objmodel2.pdf | 21:10 | |
21:11
NOTevil joined
21:13
whiteknight joined
|
|||
tylercurtis | Well, SMOP's dispatch(ignoring casts) is basically obj->MESSAGE(interp, obj, ident, capture). P&W's is (ident == s_lookup && obj->vt[-1] == vtable_vt) ? vtable_lookup(obj, arg) : send(obj->vt[-1], s_lookup, ident)(obj, arg1, arg2, ... argn) | 21:14 | |
pmurias | any reason's why P&W is better? | 21:17 | |
tylercurtis | Not really. The P&W dispatching seems like it allows a subset of the behavior SMOP's dispatching allows. | 21:18 | |
dalek | p-rx: aa0e12b | pmichaud++ | src/cheats/hll-grammar.pir: Add debugging/profiling to quote_EXPR. |
21:24 | |
p-rx: e0d2bec | pmichaud++ | src/PAST/Compiler-Regex.pir: Optimize quantified+ratcheted character lists a bit, such as \h* and \v+ . |
|||
p-rx: a56f707 | pmichaud++ | src/stage0/ (4 files): Update bootstrap files. |
|||
21:25
blogometer joined
21:26
jferrero joined
21:31
simcop2387 left
21:33
masak joined
|
|||
masak | lol ahoj | 21:33 | |
21:33
simcop2387 joined
|
|||
mathw | hi | 21:33 | |
masak | I'm spent. what about you, #perl6? | 21:34 | |
mathw | Mi estas laca | 21:35 | |
masak | :) | ||
我很累 | |||
mathw | mi tatpi lo nu klama lo zdani be mi | 21:36 | |
:P | |||
masak | you've got to be kidding me. | ||
look, 'tired' is not that difficult a concept. | 21:37 | ||
mathw | no I put more detail in that | ||
masak | oh good. | ||
phew. | |||
mathw | 'mi tatpi' would have sufficed | ||
'lo nu klama lo zdani be mi' is the event of travelling to the home of me | |||
masak | how does the event relate to the 'mi tatpi' part? | 21:38 | |
mathw | that slot of tatpi is the cause of the tiredness | ||
jnthn | ...which language? :_) | ||
mathw | jnthn: lojban | ||
it's completely useless, and lots of fun | |||
well, not completely useless, I'm working on a story in which a crazy computer does a lot of babbling in it | |||
jnthn | Was gonna say. That doesn't look like Esperanto... | ||
masak | jnthn: it's the one I told you about. | ||
mathw | saves having to make up my own language | ||
masak | jnthn: the one with lots of positionals. | 21:39 | |
mathw | it's *all* positionals | ||
jnthn | Yes, I'm just not used to seeing it. :-) | ||
masak | it's quite well-sounding, at least in my head. | ||
mathw | prolog for artificial language geeks | ||
masak | but I don't plan to learn it anytime soon. | ||
mathw | yeah sometimes I say things out loud and I'm surprised how plausible it sounds | 21:40 | |
anyway | |||
I also need to put a bit more effor tinto my Esperanto | |||
patrickas | rakudo: say ( 'z'.ord - 'A'.ord + 1 ) | 21:41 | |
p6eval | rakudo 56c846: OUTPUT«58» | ||
patrickas | rakudo: say ('A' ... 'z').elems | ||
p6eval | rakudo 56c846: OUTPUT«58» | ||
mathw | Mi estas laca ĉar mi iris mian domon? | ||
masak | that's correct, I think. | ||
mathw | looks okay to me | ||
masak | not idiomatic, but correct. | ||
"Mi estas laca, ĉar mi iris hejmen." | 21:42 | ||
patrickas | rakudo: say 'Z'.succ | ||
p6eval | rakudo 56c846: OUTPUT«AA» | ||
masak | unless you really meant to say 'house' and not 'home', 'hejmen' is better. | ||
mathw | masak: oh I've fallen over that one before. Sigh. | ||
21:45
achromic left
|
|||
masak | std: my $1 | 21:48 | |
p6eval | std 32051: OUTPUT«===SORRY!===Can't declare a numeric variable at /tmp/exQhHR4Ui2 line 1:------> my $1⏏<EOL>Parse failedFAILED 00:01 112m» | ||
jnthn | masak: Google is ETOOHELPFUL when googling for hejmen... | ||
pugssvn | r32052 | sorear++ | [STDeco] Manage the syml-cache using File::Spec, don't try to build paths by hand | 21:49 | |
jnthn | masak: On the upside, I did find a sound file showing me how to pronounce it. :-) | ||
masak: (Which is turns out is as I'd guessed. :-)) | |||
mathw must remember to hear it in his head in Esperanto rather than in Lojban | |||
masak | jnthn: it's easy -- it's pronounced just like it sounds. :P | ||
jnthn | :P | ||
masak | also the spelling is easy. things are written just as they are spelled. | 21:50 | |
it's ingenious, if you ask me. | |||
only an eye doctor could dream up such a scheme. | |||
21:51
Holy_Cow left
21:52
tylercurtis left
21:56
nimiezko left
|
|||
masak | 'night, #perl6 | 22:02 | |
sorear | night masak! | ||
22:02
masak left
|
|||
avar | d/w 21 | 22:05 | |
22:06
mulander left,
amkrankruleuen left
22:13
achromic joined
|
|||
pugssvn | r32053 | sorear++ | [viv] Add an option to select syml cache root | 22:16 | |
22:21
Grrrr left
|
|||
dukeleto | perl6: { grammar Bob { regex TOP { \d+ } }; grammar Bob { regex TOP { \s+ } } | 22:25 | |
p6eval | pugs: OUTPUT«***  Unexpected end of input expecting "}" at /tmp/etcdykbfqG line 2, column 1» | ||
..rakudo 56c846: OUTPUT«===SORRY!===Illegal redeclaration of symbol 'Bob'» | |||
dukeleto | is that a bug in Rakudo? | 22:26 | |
shouldn't the first Bob grammar only exist within the lexical scope it lives in ? | |||
sorear | no | ||
dukeleto | it seems like grammars are global, and that doesn't seem quite right to my feeble brain | 22:27 | |
sorear | packages default to our scope | ||
you can say my grammar if you want | |||
dukeleto | sorear: it still happens with subs | ||
perl6: sub { grammar Bob { regex TOP { \d+ } }; grammar Bob { regex TOP { \s+ } } | |||
p6eval | rakudo 56c846: OUTPUT«===SORRY!===Illegal redeclaration of symbol 'Bob'» | ||
..pugs: OUTPUT«***  Unexpected end of input expecting "}" at /tmp/r5b95IrJTV line 2, column 1» | |||
sorear | dukeleto: grammars default to our scope | ||
dukeleto | sorear: my grammar is very useful, thanks | ||
sorear: good to know, thanks! | |||
sorear | putting something in a sub doesn't change that | ||
dukeleto | sorear: thank you for the edification | 22:29 | |
22:29
tylercurtis joined
|
|||
dukeleto | sorear: do you know if there are tests that verify that in the spec suite? | 22:30 | |
22:30
Grrrr joined,
jferrero left
22:37
blogometer left
22:43
pmurias left
22:45
justatheory joined
22:47
dwiereng1 left
|
|||
pugssvn | r32054 | sorear++ | [STDeco] Convert Makefile to use ExtUtils::Command and not depend on POSIX utilities | 22:51 | |
22:54
justatheory left
|
|||
Juerd | sorear: See juerd.nl for several ways to contact me. | 22:54 | |
22:56
tadzik left
|
|||
dalek | ecza: 44a4616 | sorear++ | / (4 files): Track STD 31914 -> 32053 |
23:00 | |
gfldex | std: class Foo { multi method bar(){}; }; use MONKEY_TYPING; augment class Foo { multi method bar(Str $s){say $s}; }; | 23:02 | |
p6eval | std 32054: OUTPUT«Compiled lib/MONKEY_TYPING.pm6ok 00:02 120m» | ||
gfldex | rakudo: class Foo { multi method bar(){}; }; use MONKEY_TYPING; augment class Foo { multi method bar(Str $s){say $s}; }; | 23:03 | |
p6eval | rakudo 56c846: OUTPUT«===SORRY!===A method named 'bar' already exists in class 'Foo'. It may have been supplied by a role.» | ||
23:04
lest_away is now known as lestrrat
23:07
blogometer joined,
hercynium joined
23:09
patrickas left
23:11
azert0x joined
|
|||
pugssvn | r32055 | sorear++ | [STDeco] Don't use a separate stamp, since dmake chokes on dot files | 23:14 | |
r32055 | Move the space stripper out to tools/compact_pmc to avoid quoting complexities | |||
diakopter | trying dmake snap | 23:19 | |
heh; no `svn` found; fixing. | 23:20 | ||
sjohnson | yo dia long time no see | 23:21 | |
diakopter | yo | 23:22 | |
23:22
_madmax_ joined
|
|||
sorear | diakopter: dmake snap won't work since there's no ExtUtils::Command for cp -r | 23:27 | |
and snap wants to copy all of lib/ | |||
diakopter: plain dmake succeeds in r32055? | 23:28 | ||
diakopter | it got to ok USER PID CORE.setting | ||
so I guess so, yeah | |||
sorear | the first or second time? | ||
diakopter | er | ||
I think you're asking ... yes | 23:29 | ||
second | |||
23:29
justatheory joined
|
|||
sorear | wonderful. | 23:29 | |
diakopter | sorear: you could bundle a snapshot of File::Copy::Recursive | 23:31 | |
it's not that huge | |||
23:34
meppl left
23:37
justatheory left
23:41
ruoso joined
23:43
s_mosher joined
23:46
hsb_ is now known as hsb
23:52
tbourdon_ joined,
cozmic joined,
intenz joined
|
|||
s_mosher | rakudo: my @x = ( for <a|b|c d|e|f> { <1 2 3> Z=> .split('|') } ) ; +@x; | 23:54 | |
p6eval | rakudo 56c846: ( no output ) | ||
23:55
intenz left
|
|||
s_mosher | rakudo: my @x = ( for <a|b|c d|e|f> { <1 2 3> Z=> .split('|') } ) ; say +@x; | 23:55 | |
p6eval | rakudo 56c846: OUTPUT«6» | ||
s_mosher | Is that right? I was expecting 2. Or do I misunderstand the context w.r.t. auto-flattening? | 23:56 | |
TimToady | it would be 2 in slice context | ||
but this isn't that | |||
sorear | assigning to an array always autoflattens | ||
TimToady | (and rakudo doesn't do slice context yet) | ||
s_mosher | see I'm not clear on identifying contexts yet | 23:57 | |
does the context from assignment really propagate deep into the for? | 23:58 | ||
TimToady | no, the two parcels come out and decide lazily at the time they are bound or assigned | ||
s_mosher | ah | 23:59 | |
that makes more sense | |||
is there something less ugly than: | |||
rakudo: my @x = ( for <a|b|c d|e|f> { $(<1 2 3> Z=> .split('|')) } ) ; say +@x; | |||
p6eval | rakudo 56c846: OUTPUT«2» |