»ö« | 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.
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
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
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
pmichaud_ just converting Nil to be undefined is having some interesting implications for the code :) 00:49
nothing serious yet, but definitely interesting.
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
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
pugssvn r32028 | lwall++ | [STD] add clone as reasonable method to use .= on 01:19
dalek p-rx: a528b79 | pmichaud++ | build/PARROT_REVISION:
Bump PARROT_REVISION to 2.7.0 release.
02:09
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␤»
dalek p-rx: 8b38129 | pmichaud++ | src/ (4 files):
Refactor cursor_debug output a bit to allow some simple profiling.
02:55
rcfox In case anyone's interested, here's my English parser: github.com/rcfox/Perl-6-English-Parser 02:58
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.
nperez that's slick 03:04
rcfox The problem with looking up the words on WordNet is that it's really slow.
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
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
rcfox I've used this before: search.cpan.org/perldoc?Parse::Yapp 03:16
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
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
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
sorear in particular, I think that $INC{'STD/CursorBase.pm'} will always return a native path 05:54
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.
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/ ?
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
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:
sorear * .syml files live alongside .pm files 07:07
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
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
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
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.
moritz_ btw I don't see why a dumper needs to be a method 08:02
moritz_ you can do the same with multi subs equally fine 08:02
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
moritz_ and have the benefit of not needing to introduce methods to everybody's objects, just in the namespace you import into 08:03
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
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 failed␤FAILED 00:01 112m␤»
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
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
Tene sorear: Just commit a spec change, IMO 08:20
nadim_ although sometimes you want to override the serialization for debugging purpose.
pugssvn r32031 | sorear++ | [S02] Split .pretty's role off from .perl, includes a lot of conjectural ideas for .pretty functionality 08:28
azawawi hi 08:29
phenny azawawi: 17 Aug 19:34Z <sorear> tell azawawi make dist should probably be retired
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
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
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
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
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
pugssvn r32039 | moritz++ | [utils] update URL in IRC log fetcher 09:37
r32040 | moritz++ | [util] remove more outdated tools
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
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 ;)
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
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
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
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
sorear crossposting here in case any rakudodevs want to object 10:23
Perl6 CPAN design for reals
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
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: :)
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
:(
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
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
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... )
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/
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 =)
Alias sorear: Backl 11:35
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
Alias Let me check when I'm "speaking" 11:40
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 =)
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...
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
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/
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
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
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
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
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
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
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
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
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.
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
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.
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 ;)
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)
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
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.
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
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
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']
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.
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.
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++
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
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 :)
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
Shillo jnthn: It's still just 10% of the runtime 13:23
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.
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
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...
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
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
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 :)
masak my ultimate dream is to build an interactive js interface, and do my 1024 talk using that :) 13:54
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/
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
pmurias ruoso: ping 13:57
jnthn It'll be nice to see it in summer. :-)
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/
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
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
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
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
pmichaud (it's not always a 1-1 mapping) 14:12
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
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; } }
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
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
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.
pmichaud afk for a bit 14:28
Shillo Laters!
masak jnthn++'s presentation and mine are now online! www.presentingperl.org/ye2010/
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
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/
jnthn ooh, my talk video is up? \o/ 14:48
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.
jnthn Statistically, that's likely :P 15:04
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
jnthn
.oO( Is it cruel to tease data? )
15:09
masak jnthn: the data started it! 15:13
masak jnthn is getting sweet re-tweets on Twitter. 15:26
jnthn re-sweet 15:27
Clem_Chong Hello,I am new. 15:39
masak Clem_Chong: welcome! 15:40
takadonet Clem_Chong: how are you? 15:48
pmichaud "Twitter is over capacity." I blame jnthn++ 15:58
TimToady I can't believe you guys spent that much time discussing AOP and never mentioned .wrap 16:08
jnthn pmichaud: :P 16:11
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
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
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.
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.
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
jnthn It means that just the knowhow and reprs need to be ported though. 16:54
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
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
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
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
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.
jnthn We don't need to go looking it up on every object creation, so that's not a big deal. 17:17
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
isBEKaml Then I'll be sure to stay more alive! :) 17:30
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
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
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.
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.
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)
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 :-)
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 :)
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
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.
pmichaud afk, walk 18:05
sorear good * #perl6 18:09
tadzik hello 18:10
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
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
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.
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
tadzik parrot.org/languages has been a bit cleaned up, didn't it? 18:36
sorear caught up 18:39
jnthn pmichaud: It would let us remove a hack in Rakudo's grammar too 18:41
pugssvn r32049 | sorear++ | [STDeco] Fix whitespace remover 18:50
moritz_ TimToady++ # www.perlmonks.org/?node_id=855886 19:14
[particle] sorear: [email@hidden.address] 19:32
pmichaud my addition: www.perlmonks.org/?node_id=855892 19:33
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
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
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!
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
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␤»
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
pmurias tylercurtis: normal method you mean looked up in a vtable? 21:00
pmurias reboots 21:01
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
pmurias if i used something different from a vtable as a vtable, a method call would use lookup on the object? 21:08
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
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.
masak lol ahoj 21:33
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.
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 failed␤FAILED 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.
masak 'night, #perl6 22:02
sorear night masak!
avar d/w 21 22:05
pugssvn r32053 | sorear++ | [viv] Add an option to select syml cache root 22:16
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
dukeleto sorear: do you know if there are tests that verify that in the spec suite? 22:30
pugssvn r32054 | sorear++ | [STDeco] Convert Makefile to use ExtUtils::Command and not depend on POSIX utilities 22:51
Juerd sorear: See juerd.nl for several ways to contact me. 22:54
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.pm6␤ok 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.␤»
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
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
sorear wonderful. 23:29
diakopter sorear: you could bundle a snapshot of File::Copy::Recursive 23:31
it's not that huge
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 )
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␤»