Parrot 2.7.0 "Australian King" Released! | parrot.org Log: irclog.perlgeek.de/parrot/today | Nopaste: nopaste.snit.ch:8001 | close 25 tickets (20 to go), merge outstanding branches; profile your favorite PIR for memory leaks with valgrind
Set by moderator on 2 September 2010.
cotto_work Paul_the_Greek: I doubt it unless you're talking about internal functions. 00:02
Paul_the_Greek chromatic: I don't think Boolean can be made appreciably faster by not inheriting from Integer.
cotto_work: For example, Integer uses get_integer all over the place. 00:03
Does that have to go through the vtable? 00:04
I suppose it does.
chromatic It's not about faster but about smarter.
Paul_the_Greek chromatic: Smarter booleans? What do you mean? 00:05
cotto_work Also, it's possible that the compiler is inlining it already. 00:06
Paul_the_Greek But I was being stoopid. Of course get_integer has to go through the vtable in case an inheriting PMC overrides it. 00:07
dukeleto chromatic: very nice to see some graphical benchmark data
00:09 dngor left, dngor joined
Paul_the_Greek Percentage decrease would be nice to see. 00:09
chromatic Booleans shouldn't have to allocate any memory. 00:16
Use one of the PMC private flags to store its one-bit state.
Paul_the_Greek Ah, you're thinking we could get rid of the attribute block.
chromatic Exactly.
Paul_the_Greek There's a lot to be said for that.
Okay, I'll continue my investigation to see how HLLs are using booleans. 00:17
I'm betting some are relying on the integer-ish behavior of them.
But they can't rely on that for boolean vectors, so perhaps it's okay to eliminate that behavior. 00:18
Maybe any strange behavior can simply be merged into the smart boolean (e.g., negate). 00:19
dalek rrot: r48767 | bacek++ | trunk/src/string/api.c:
Block GC in str_join to avoid premature collecting of temporary strings. Closes #1767.
00:20
rrot: r48768 | bacek++ | trunk/t/op/string.t:
Add test for #1767.
TT #1767 closed by bacek++: join opcode causes segfaults and other memory corruption issues
TT #1767: trac.parrot.org/parrot/ticket/1767
Paul_the_Greek chromatic: Would you add a new boolean pmc and eventually deprecate the current one, or just change the current one?
00:29 Paul_the_Greek left
chromatic msg Paul_the_Greek I'd change the current one. 00:30
purl Message for paul_the_greek stored.
00:35 davidfetter joined, whiteknight left
dalek rrot: r48769 | jkeenan++ | trunk/config/inter/progs.pm:
Per discussion in ļæ½trac.parrot.org/parrot/ticket/854, revert code

comment.
00:37
purl comment is pretty exhaustive, read it carefully
pmichaud purl, your days are numbered. :-P 00:38
purl ...but purl's days is clearly numbered. It's a sign....
...but purl's days are clearly numbered. It's a sign....
cotto ~~ 00:43
00:48 davidfetter left
dalek rrot-linear-algebra: a78a64c | Whiteknight++ | setup.nqp:
fix the 'instructions' portion of the generated plumage metadata. NotFound++ for the catch
00:57
rrot-linear-algebra: 1831e83 | Whiteknight++ | ports/plumage/parrot-linear-algebra.json:
regenerate the plumage metadata file
rrot-linear-algebra: 8b3241e | Whiteknight++ | s (7 files):
Merge branch 'master' of github.com:Whiteknight/parrot-linear-algebra
rrot-linear-algebra: cfcbcb1 | Whiteknight++ | / (6 files):
boxing primitive types respects HLL mappings. Untested
00:57 Psyche^ joined, Psyche^ is now known as Patterner 01:04 GeJ left, GeJ joined 01:14 theory left
bacek_at_work aloha, karma whiteknight 01:17
aloha bacek_at_work: whiteknight has karma of 4.
01:24 fedov left
kid51 , ever the contrarian, has few problems with purl 01:25
kid51 feels lonely when purl is not around 01:26
GeJ seconded. 01:27
pmichaud purl would be fine if it spoke only when spoken to. :) 01:35
purl pmichaud: huh?
bacek_at_work insult purl 01:36
aloha purl is nothing but a vain half-mouthful of beslubbering entrails.
GeJ purl: don't listen to them hun', they're just being mean. 01:39
purl GeJ: huh?
GeJ sigh
kid51 will consider aloha an improvement over purl only if it talks back to me in Russian 01:40
cotto will consider aloha an improvement if he doesn't respond to "+1" with "1" 01:42
01:44 theory joined 01:48 bluescreen left 02:18 tcurtis joined 02:31 kid51 left 02:35 janus left 02:42 janus joined 02:56 bacek_mobile joined
bacek_mobile github.com/parrot/pir 02:57
I moved pirate to parrot organization on github. 02:58
Hooray?
cotto hooray! 02:59
03:26 tetragon left 03:34 wagle left 03:44 wagle joined
pmichaud (r48768) blocking gc for the duration of the join obviously is a sufficient workaround... but somehow I worry that's not a good overall answer. 03:51
chromatic Likewise.
pmichaud I mean, if we're concatenating a million-element array, we end up with a million strings
that aren't gc'ed until the join is finished. 03:52
however, I'll note that disabling gc during join did indeed solve the issue we were seeing in rakudo (at least from the tests I've run). I'm spectesting now. 03:54
chromatic Only the transcoding should change things. 03:56
pmichaud ?
I don't understand.
chromatic The only thing that could generate a STRING that isn't otherwise reachable is the case where we have to transcode STRINGs. 03:57
pmichaud or if we're stringifying non-string elements, yes?
chromatic src/string/api.c:3304
Hm, I suppose so yes.
pmichaud (which is the exact case here)
chromatic I assumed it was an RSA, but nothing forces that. 03:58
pmichaud so, a join of a million integers results in a million strings
(with gc disabled)
chromatic That's partly because Parrot_str_from_int() is silly.
Then again, the optimization I had in mind that I didn't mention and you're certainly not thinking of doesn't help that pathological case of 1 .. * 03:59
bacek_mobile Vtable-get-string generates temporary. 04:00
dalek thub-trac: a6f5f15 | cotto++ | github/hook.py:
silly typo fix
04:02
chromatic I'm at the point of arguing that Parrot_str_join() ought to be less complex even if it means reallocating the destination a couple of times.
pmichaud I was thinking something similar.
chromatic It's a lot less code, and we can reliably disable the GC.
Er.
We can rely on GC working properly. 04:03
pmichaud afk, errand.
chromatic The function is 108 lines (counting blank lines and comments)... it could be a third that size. I'm game, unless someone beats me to it. 04:06
bacek_mobile We can switch to StringBuilder now
chromatic Oh yeah, you mentioned that too. 04:08
StringBuilder gets init_pmc(), hooray! 04:12
04:28 mikehh_ joined 04:30 mikehh left, mikehh_ is now known as mikehh
mikehh opbots, names 04:30
04:35 Andy joined
dalek kudo: 1e56d20 | pmichaud++ | build/PARROT_REVISION:
Bump PARROT_REVISION to get pir::join opcode fix (TT #1767).
04:40
tcurtis I finally finished my valgrind run of the rakudo spectests. 04:41
chromatic What's the damage?
purl age is probably not valid, so it's not backwards
pmichaud wonders how chromatic's comment leads to purl's response. 04:42
chromatic the damage?
purl rumour has it age is not valid, so it's not backwards
pmichaud I also have trouble envisioning "valgrind" and "spectest" in the same thoughstream, so tcurtis++ :-) 04:43
tcurtis Now to look at the some amount less than 31K lines of backtraces. 04:48
04:51 hercynium left
tcurtis Is there an option to grep that causes it to print lines that don't match the pattern? 04:58
bacek_at_work grep -v
tcurtis Thanks. 05:00
tcurtis failed at man-page-reading.
bacek++
cotto explain bacek 05:07
aloha positive: | trunk/src/string/api.c: (dalek), | trunk/t/op/string.t: (dalek), : join opcode causes segfaults and other memory corruption issues (dalek); negative: nothing; overall: 5.
06:16 Andy left 06:18 bacek_mobile left 06:25 uniejo joined 06:36 chromatic left
dalek rrot: r48770 | NotFound++ | trunk/t/pmc/exception.t:
test Exception get/set attribute handler_ctx
06:36
06:38 theory left 06:44 fperrad joined
dalek thub-trac: e12d18d | cotto++ | github/ (2 files):
add and fix checks for the enable_revmap config option
06:56
thub-trac: 84eac6c | cotto++ | github/github.py:
rollback db to undo any goofiness caused by looking for a nonexistent table
nopaste "NotFound" at 192.168.1.3 pasted "Another blizkost example: using Gtk2 from winxed" (57 lines) at nopaste.snit.ch/23221 07:37
NotFound That,s language interoperability! 07:39
moritz what does the 'using destroy;' do? 08:05
cotto trac-- 08:15
stupid subtly different db interfaces
my, what a pain that was 08:21
sorear NotFound: Nifty. I'm suprised it worked at all
dalek thub-trac: 88444aa | cotto++ | github/github.py:
fix and simplify the table creation code
08:23
thub-trac: 769c04f | cotto++ | github/github.py:
be more forgiving when looking up commit ids
08:24
thub-trac: 846c629 | cotto++ | github/github.py:
tighten up regexes a little
thub-trac: 25c3650 | cotto++ | github/github.py:
fix db queries to work as trac expects, not just as sqlite happens to accept
cotto time to see if it'll run on my server
The osuosl people are way better at setting up trac than me. 08:33
mksig.org/trac/wiki/WikiStart 08:36
It's slow because my vm is grossly underpowered for trac. 08:37
u/p of parrot/parrot if anyone wants to play with it
and I'm off to bed 08:38
szbalint cotto: how do you integrate trac with git? 08:39
any good way to handle multiple branches?
ah. good night :)
08:40 aloha left 08:42 bacek left 08:49 fperrad_ joined 08:53 fperrad left, fperrad_ is now known as fperrad 08:59 cotto left 09:09 tcurtis left 09:12 cotto joined 09:54 cotto left
dalek kudo: 5ae715c | colomon++ | t/spectest.data:
Turn on S03-operators/comparison.t.
09:58
kudo: c9eac47 | colomon++ | src/core/operators.pm:
Fix the Any versions of the numeric comparison operators to forward to the Numeric versions.

If you are doing a numeric comparison of non-Numeric types, this will be slightly slower but handle edge cases correctly.
10:08 cotto joined 10:58 nwellnhof joined
dalek rrot: r48771 | NotFound++ | trunk/t/src (2 files):
rearrange remaining test in src/extend and sr/warnings to make its coverage reports more useful
11:12
11:33 jsut joined 11:38 jsut_ left 11:49 whiteknight joined
whiteknight good morning, #parrot 11:55
moritz good morning white knight 11:56
whiteknight hello moritz. How are you today? 11:57
moritz I'm fine, thanks. It's Friday afternoon, and the weekend is aproaching rapidly 11:58
whiteknight yes. that fact brings me hope as well
moritz and I have the luxury of having patches in the fork queue that I can review 11:59
whiteknight ah, nice. This weekend is going to be busy for me. probably won't have a lot of time for mad haxxoring
that makes me a sad whiteknight 12:01
moritz happens from time to time :-) 12:02
next weekend (ie the one of the Sep 11) will be busy for me 12:03
12:12 tadzik joined, ruoso joined
dalek TT #854 closed by jkeenan++: config/inter/progs.pm: Figure out why -libpath: needs to be removed from ... 12:35
TT #854: trac.parrot.org/parrot/ticket/854
12:36 tadzik left 12:37 bluescreen joined
dalek rrot: r48772 | jkeenan++ | trunk/config/inter/progs.pm:
Further refinement of inline comment per doughera++. See TT 854.
12:37
12:39 bkuhn joined 12:44 smash joined
smash hello everyone 12:44
Coke hopes someone steers the guy on parrot-users towards the new tutorial and nqp-rx and that we get rid of PGE +/or TGE after 3.0 12:46
12:51 tadzik joined
smash seen chromatic 12:56
purl chromatic was last seen on #parrot 8 hours, 13 minutes and 49 seconds ago, saying: the damage?
12:59 uniejo left
NotFound whiteknight: ping 13:06
msg whiteknight You fixed PLA metadata in PLA itself, but don't updated the copy in plumage 13:10
purl Message for whiteknight stored.
13:16 tadzik left 13:32 robin-gvx joined
whiteknight NotFound: yeah, I'm not ready yet to update it for Plumage 13:45
13:53 a3r0 joined 13:54 a3r0 left
Coke particle: you in? 14:03
seen allison? 14:04
purl allison was last seen on #parrot 2 days, 17 hours, 9 minutes and 46 seconds ago, saying: mikehh: it just needs an "official location" for the records [Aug 31 20:55:02 2010]
14:06 davidfetter joined
mikehh Coke: do we have any specific policy regarding the use of library 'sys_ops' in tests (which is only generated by make / make world not make corevm 14:08
in fact they are in dynoplibs now 14:09
plus a bunch of others generated by ops2c 14:10
14:12 mariano joined
moritz I don't think there are any concerns outside of corevm 14:14
(but Coke should know better than me :-)
mikehh moritz: hope so, there are a couple of tests failing make corevm / make coretest because of this 14:15
Coke "please try to avoid using dynops or dynpmcs in coretest."
14:15 integral left
particle Coke: wozzup? 14:15
Coke this is often missed when pushing things out of "core"
particle: nevermind. check your email. 14:16
Coke hands off mailing list duties to the new board so they can have some private time. ;)
mikehh personally I think the tests should be in dynop / dynpmc rather than op / pmc
14:17 integral joined
Coke if they're testing those things, yes. 14:17
(as opposed to just usng them to test something else)
mikehh at the moment just 2 tests added which cause t/op/integer.t and t/pmc/bigint.t to fail in corevm/coretest (but pass test) 14:18
the 2 tests give - error:imcc:loadlib directive could not find library `sys_ops' 14:20
and I think there was a similar test in t/pmc/nci.t 14:21
because of moving ops out of 'core' 14:22
14:23 bacek joined 14:24 aloha joined 14:28 tcurtis joined 14:42 Paul_the_Greek joined
Paul_the_Greek G'day, kids. 14:43
Who is the right person to talk to about Rakudo's use of Parrot PMCs? 14:44
Coke #perl6 on freenode, if you want IRC... but why don't you ask your question in here first.
14:46 bluescreen left, bluescreen joined
Paul_the_Greek Does the Rakudo boolean type use the Parrot Boolean PMC? 14:47
Coke rakudo: ?1.WHAT.say 14:48
p6eval rakudo 5ae715: OUTPUT«Int()␤»
Coke rakudo: (1==2).WHAT.say
p6eval rakudo 5ae715: OUTPUT«Bool()␤»
Coke rakudo: (1==2).PARROT.say
p6eval rakudo 5ae715: OUTPUT«Bool␤»
particle Paul_the_Greek: github.com/rakudo/rakudo/raw/master...re/Bool.pm 14:49
nwellnhof src/builtins/Bool.pir: boolproto = p6meta.'new_class'('Bool', 'parent'=>'parrot;Boolean Cool')
it does
particle hrmm, that doesn't help... nwellnhof++ beat me to it
Coke boolproto = p6meta.'new_class'('Bool', 'parent'=>'parrot;Boolean Cool')
whoops.
so, yes, it uses the parrot Boolean as one of its parent classes. 14:50
particle next time, fingers, copy the correct page.
whiteknight Coke++ # doing a wonderful job with the handoff
Paul_the_Greek particle: Huh?
Coke whiteknight: yah, I think particle's being lazy on this one. ;) 14:51
Paul_the_Greek What is 'parrot; Boolean Cool' ?
Coke paul;he's talking to himself.
whiteknight Coke: don't worry, we're going to put him to work soon enough
:)
Coke PTG: split on whitespace.
it's "parrot;Boolean" and "Cool". Cool is a p6 class/role/something.
Paul_the_Greek Ah. 14:52
particle Cool gives classes a whole bunch of standard methods
nwellnhof perlgeek.de/blog-en/perl-6/cool.html 14:53
moritz++
Paul_the_Greek I see no mention of Boolean in Bool.pm.
particle Paul_the_Greek: github.com/rakudo/rakudo/raw/master...s/Bool.pir 14:54
i pasted the wrong url above, if that's where you were looking
Paul_the_Greek Yes, thanks particle. 14:55
particle src/core/Bool.pm is the perl 6 code for the Bool class. src/builtins/Bool.pir is the pir code
Coke (the perl6 stuff augments the pir definition)
Paul_the_Greek So here's the big question: Since Bool inherits from Boolean inherits from Integer, can any integer operator be applied to a Bool? 14:56
I would think so, since nothing in Bool.pir prevents it. 14:57
particle rakudo: my Bool $x = 1; say $x / 8 14:58
p6eval rakudo 5ae715: OUTPUT«Type check failed for assignment␤ in '&infix:<=>' at line 1␤ in main program body at line 22:/tmp/vFkD_0JXlG␤»
particle rakudo: my Bool $x = true; say $x / 8
p6eval rakudo 5ae715: OUTPUT«Could not find sub &true␤ in main program body at line 22:/tmp/YdIY6JQSLK␤»
particle rakudo: my Bool $x = True; say $x / 8
p6eval rakudo 5ae715: OUTPUT«0.125␤»
particle rakudo: my Bool $x = True; say $x.succ 14:59
Paul_the_Greek rakudo: my Bool $x = true; say -$x
p6eval rakudo 5ae715: OUTPUT«1␤»
rakudo 5ae715: OUTPUT«Could not find sub &true␤ in main program body at line 22:/tmp/LHn5G_jATE␤»
Paul_the_Greek rakudo: my Bool $x = false; say -$x 15:00
p6eval rakudo 5ae715: OUTPUT«Could not find sub &false␤ in main program body at line 22:/tmp/RiELYc0or_␤»
particle rakudo: my Bool $x = True; say -$x
p6eval rakudo 5ae715: OUTPUT«-1␤»
particle the Bool:: enums are capitalized
Paul_the_Greek rakudo: my Bool $x = False; say -$x
p6eval rakudo 5ae715: OUTPUT«-0␤»
Coke but on the face of it, you have no idea how rakudo is doing that math.
Paul_the_Greek Huh?
Coke Paul_the_Greek: huh? 15:01
Paul_the_Greek -0?
purl well, -0 is a switch that specifies $/ in octal or www.fourmilab.ch/documents/univac/minuszero.html
Coke yes?
particle 622/20846
purl 0.0298378585819822
aloha 0.0298378585819822
Paul_the_Greek rakudo: my Bool $x = False, $y = -$x; say -$y
p6eval rakudo 5ae715: OUTPUT«===SORRY!===␤Symbol '$y' not predeclared in <anonymous> (/tmp/siJyIU4I5V:22)␤»
nwellnhof en.wikipedia.org/wiki/Signed_zero
particle Paul_the_Greek: -0 is a perfectly fine ieee746 value 15:02
754 even
Paul_the_Greek Why would floats come into play at all?
rakudo: my Bool $x = False; my Bool $y = -$x; say $y 15:03
nwellnhof when perl6 does a mathematical operation the operands are converted to numbers (floats) first
p6eval rakudo 5ae715: OUTPUT«Type check failed for assignment␤ in '&infix:<=>' at line 1␤ in main program body at line 22:/tmp/zhXXFeQfx3␤»
particle they shouldn't come into play.
Coke nwellnhof: that's not entirely true. 15:04
nwellnhof rakudo: say "3.5" + True
p6eval rakudo 5ae715: OUTPUT«4.5␤»
Coke so, paul, is your quesiton answered?
particle rakudo: my Bool $x = False; say $x -= $x;
Paul_the_Greek rakudo: my Bool $x = False; my Bool $y = ! $x; say $y
p6eval rakudo 5ae715: OUTPUT«Type check failed for assignment␤ in '&infix:<=>' at line 1␤ in main program body at line 22:/tmp/wKV_dpOyv2␤»
rakudo 5ae715: OUTPUT«1␤»
Coke note that you can also talk to p6eval in private. ;)
Paul_the_Greek It appears that I cannot use integer operators willy-nilly.
nwellnhof coke: so what does perl6 exactly? 15:05
particle Paul_the_Greek: be careful
purl if you can't be careful, name it after me
particle you're looking to do parrot;Integer operations on the perl6;Bool
perl6;Bool does not inherit from perl6;Integer
Coke rakudo: say (4/10).perl
p6eval rakudo 5ae715: OUTPUT«2/5␤»
Paul_the_Greek If we reimplement Boolean without inheriting from Integer, we will have to implement any vtable functions that HLLs rely on. 15:06
Coke you get the numification for printing, but not for all math.
15:06 Andy joined
Coke Paul_the_Greek: I've said this before. your easiest path to a working solution here is to just change it and run it. 15:06
particle Paul_the_Greek: correct, and that's done by running the hll test suites
Coke and see what breaks.
Paul_the_Greek Coke, particle: Agreed.
Coke it is possible to analyze the code and figure this out ahead of time, but... that's a pITA.
nwellnhof break things first, ask questions later ;) 15:07
Paul_the_Greek pITA? A bread reference?
Coke PITA?
purl PITA is Pain In The Ass or a pain in the aptakisic or a container object for the infamous Beetabaga Fajita in a Pita or Sachmet and Alias' new image-based multi-everything testing concept or a turkish bread or ali.as/pita (for now) or MAGnet#pita or new and cool or socks glue www.jbox.com/PRODUCT/DAI545 or People Eating Tasty Animals
whiteknight pain in the ass
Paul_the_Greek Right.
My first task is to write a Boolean benchmark.
Andy Check one: [ ] Fast, [ ] Slow 15:13
Coke Andy, do you have any relatives named "Moe" ? 15:14
Andy Are you following me on Facebook/
?
whiteknight no, it was on failblog
Andy oh, right 15:15
I posted that to FB saying "3rd grade taunting come to life (and death)"
Coke and also, I am following you on facebook.
but I don't follow facebook in realtime.
failblog, yes. 15:16
I am wonder why people that wish to have a private email conversation would not.. .just. send a private email. 15:18
*ing
15:24 theory joined
Coke ugh. someone needs to go through the PIR book again. 15:30
(getting started refers to "make install-dev")
15:35 wagle left, wagle joined
Paul_the_Greek Could someone explain the $Id line? I can't find anything in the guidelines document. 15:44
moritz Paul_the_Greek: it's an svn feature, which expands the $Id$ to the last change revision and date/time 15:45
Paul_the_Greek So if I'm creating a new file, I just put $Id$ in it? 15:46
moritz yes 15:49
15:55 jan left 15:59 jan joined 16:04 chromatic joined 16:10 whiteknight left
smash chromatic: ping 16:10
16:12 Paul_the_Greek left 16:16 robin-gvx left
chromatic smash pong 16:16
smash chromatic: add some more data to the table in gil.di.uminho.pt/users/smash/rakudo-bench.html % faster/slower as you suggested 16:18
still have some doubts on what values to use tho
chromatic I'd compare averages.
smash i added the % increase for min/avg/max values, check the hover info on 2010.08 rakudo 16:19
chromatic Very nice. 16:20
particle yes, compare averages for sure 16:22
smash particle: min/avg/max values are being compared
particle the hover info shows minimums, not avg 16:23
smash the hover info shows the % increase (or decrease) of that value with the corresponding value from the previous release 16:24
particle yes, and it shows the values you are using are outliers (minimum values) not averages over muliple runs, which is more reliable data
also, i'd invert that table, as the number of distributions will grow more frequently than the number of scripts 16:26
16:27 whiteknight joined
smash nods. 16:27
particle oh... hover info on the table shows %, now i see. nice 16:28
hover info on the chart shows you're comparing minimums
Andy smash: Any reason for me to NOT Tweet that page to @perlbuzz? 16:29
smash particle: yes
Andy: no, go ahead if you wish
16:30 nwellnhof left
particle i still think those charts should be 0-based on the y-axis. mandlebrot is not running almost twice as fast now as a month ago, which the slope of the line suggests. 16:31
anyway, these are cool charts. where is the code that implements them? 16:32
Andy twitter.com/perlbuzz/status/22901930965 16:33
smash particle: yes, i'm still considering the 0-based y-axis.. 16:34
particle: the charts are created with a JS library (www.highcharts.com/)
whiteknight smash: what's the link? 16:55
purl well, the link is for me?
smash whiteknight: sorry, the link for ? 16:57
17:21 Paul_the_Greek joined
Paul_the_Greek PMC implementation question. 17:21
Consider get_bool/get_integer/get_number: Should two of these be written in terms of the third, or is it okay for all three to do low-level operations? 17:22
I notice that Integer does a GET_ATTR in all three, rather than in only one. 17:23
17:24 chromatic left
cotto_work depends on how much we care about the overhead of an extra function or VTABLE call 17:24
Paul_the_Greek But we don't necessarily require all in terms of one for ease of inheriting from a PMC and then overriding one vtable function? 17:26
For Integer, I'd have to override all three functions if I had a new representation for the integer.
Personally, I think speed of low-level PMCs is more important. 17:27
cotto_work My inclination would be to have a unified path, but I'd definitely profile before committing. 17:29
Paul_the_Greek Okay, that's a good idea. I now have a Boolean benchmark, so I have a way to compare.
tcurtis Perhaps there could be a static function in integer.pmc that get_{bool,integer,number} all call (which hopefully will be inlined). 17:31
Paul_the_Greek The new Boolean PMC does not inherit from Integer, so it provides its own getters and setters. 17:32
17:32 hercynium joined
Paul_the_Greek The question is whether all the getters should call one of them to do the low-level operation, or whether all the getters should do the operation. 17:32
I think cotto's suggestion for benchmarking is good.
tcurtis Right, profiling is good. I'm just pointing out that there's a third alternative: each getter calls a static function that performs the operation. 17:36
Paul_the_Greek But someone inheriting from Boolean would still have to override all three getters if representing the boolean value differently. 17:38
tcurtis Ah, true.
Paul_the_Greek If they all called get_bool, then only get_bool has to be overridden. 17:39
cotto_work I think more electrons have been expended discussing this than it'd take to write the extra functions.
Paul_the_Greek Of course, all three getters are trivial and easy to override, and a comment would point out the situation.
Ah, cotto brings up the CR syndrome. Indeed, you are correct, sir.
cotto_work cr syndrome? 17:40
Paul_the_Greek It's named after a woman I worked with who spent more time benchmarking some implementation choices than could ever have been wasted if the wrong choice was made.
This was in 1971, so it seemed important at the time. 17:41
17:41 nwellnhof joined, theory left
cotto_work wfm. I like that. 17:41
kinda like bikeshedding, but for performance
Paul_the_Greek My friend Bill and I use the actual name, but she shouldn't be embarrassed on a public forum. :D
Yes.
cotto_work I'm sure Warnock would agree. 17:42
Paul_the_Greek One more question: Does Parrot provide a global TRUE and FALSE Boolean, preallocated and read-only?
dukeleto mornin'
Paul_the_Greek Howdy dukeleto. 17:43
cotto_work I'm not aware of anything like that.
Paul_the_Greek It seems like a good idea, no?
cotto_work I don't know how frequently the Boolean PMC is used, but the idea makes sense. 17:44
particle hands out some electrons
cotto_work I'm shocked.
Paul_the_Greek I think only Rakudo uses it, but it just seems like the right thing.
particle accelerates 17:45
tcurtis P6metaclass.accepts returns Boolean PMCs, I think.
Yes, it does. It pre-allocates one for true and one for false to avoid having to allocate a new one every time. 17:47
Paul_the_Greek Sounds like a job for super-Boolean. 17:48
One more question, oh patient ones. 17:49
dukeleto attempts to differentiate between one particle and another ... and fails.
Paul_the_Greek The immediate forms of operations modify in place. How is that valid for immutable PMCs? 17:50
17:50 preflex left
cotto_work Which PMCs are immutable? 17:52
Paul_the_Greek Integer, for example.
Oh, hang on ... 17:53
It must be that there is never more than one reference to an Integer.
So modifying in place is okay. 17:54
cotto_work assignment semantics are a mess
Paul_the_Greek What happens when I code $P1 = $P0? 17:55
whiteknight probably set_p_p $P1, $P0 17:56
Paul_the_Greek assign does a copy, it appears.
nopaste "cotto_work" at 192.168.1.3 pasted "side-effects" (10 lines) at nopaste.snit.ch/23223
Coke smash: no clue if this is still relevant, but yellow on white is really hard to see.
smash: just loaded the latest version. awesome, nevermind. ;) 17:57
Paul_the_Greek Both registers point to the same PMC. 17:58
cotto_work yes 17:59
Paul_the_Greek So what happens if I negate one of those registers? Will the assembler generate an in-place negate? 18:00
Must test...
cotto_work depends on whether you use the one- or two-arg form of neg 18:01
dukeleto would appreciate if anybody interested could look at this Parrot coredump and tell me what they see: gist.github.com/564286 18:07
that core dump comes from PL/Perl 6 in PL/Parrot. It happens when I attempt to use a Perl 6 grammar that has already been defined
Paul_the_Greek Yup, an in-place negate changes both values. So we have mutable integers. Interesting. 18:08
dukeleto the core dump happens with these tests: github.com/leto/plparrot/commit/6a5...7f0bb665bf
if anybody could share some of their wisdom with me, i would grealy appreciate it 18:09
18:09 hercynium left
tcurtis cotto_work: I think I accidentally assigned TT #1768 to you. Sorry about that. 18:14
dukeleto begs people to look at his coredump backtrace 18:15
cotto_work oh noes
that looks like one I should look into 18:16
whiteknight dukeleto: would love to see that backtrace with an unoptimized build
dukeleto whiteknight: ok. currently i am using --gen-parrot on rakudo for that. Is there a way to use --gen-parrot with Rakudo, but still give it compile flags? 18:18
tcurtis cotto_work: should I open a separate ticket or add to that ticket for the segfault I get when I try to run the PIR from perl6 --target=pir with -R profiling?
dukeleto whiteknight: or i guess i could just use my own parrot, but then I run the risk of bugs caused by Rakudo running on a parrot revision that it wasn't tested with
dalek TT #1768 created by tcurtis++: Profiling runcore breaks Rakudo. 18:19
TT #1768: trac.parrot.org/parrot/ticket/1768
tcurtis dukeleto: I think there's --gen-parrot-options.
dukeleto tcurtis: that seems vaguely familiar. hmmm
whiteknight dukeleto: I don't know enough about rakudo's build
tcurtis s/options/option/
dukeleto tcurtis: it seems that you can add to the build options with that, but --optimize is on by default, not sure if it will work 18:23
cotto_work You can always configure it manually or build with an installed Parrot. 18:24
18:25 pjcj left
tcurtis Another option is to just modify your local Configure.pl to omit --optimize. 18:25
18:25 pjcj joined
cotto_work It makes me sad how slow trac is. 18:26
18:26 preflex joined
dukeleto cotto_work: i want to use --gen-parrot though, so I know that I am using the parrot rev that it expects. I guess I could just install the parrot rev it wants manually 18:26
cotto_work you could go into parrot/ and run Configure.pl manually with whatever other options Rakudo passes to it 18:28
18:28 patspam joined 18:33 silug left
tcurtis TT #731 looks like it's fixed. According to docs.parrot.org/parrot/latest/html/....ops.html, '$I0 = stat path, 0' should do what Coke wanted there. 18:34
dukeleto attempts to get Rakudo running on an unoptimized parrot 18:36
18:38 senf_statt_oel joined
dalek parrot: r48773 | nwellnhof++ | branches/charset_massacre (30 files): 19:35
parrot: Bring branch up-to-date with trunk
19:35 dalek left 19:36 dalek joined
tcurtis msg plobsing Was the patch in TT #1549 ever applied? Can the ticket be closed now? 19:48
purl Message for plobsing stored.
aloha OK. I'll deliver the message.
19:51 theory joined
cotto_work an embarrassingly slow demo side demoing the github trac plugin is up at mksig.org/trac/wiki/WikiStart 19:56
The speed is due to a combination of trac being slow and my vm being underpowered.
19:59 pjcj left
particle hands cotto_work some more electrons 19:59
20:01 jan left 20:02 whiteknight left
dalek kudo: 52f9ea8 | pmichaud++ | src/builtins/Array.pir:
Refactor Array.new and circumfix:<[ ]> so that subclasses of Array properly instantiate the correct type. Reported by Util++ on #perl6.
20:05
20:06 jan joined
Coke tcurtis: exists != executable 20:06
tcurtis was clearly not thinking sanely.
Coke ugh. i would rather tickets had NO category than be forced into 'core' 20:11
20:11 silug joined
Coke supposes he could open a few dozen more tickets with missing functionality. 20:12
Given that that one's been open for 15 months, though, probably not worth the time until they are actually blocking me. 20:13
mmm, grapemes.
20:32 bluescreen left 20:46 bluescreen joined 20:59 patspam left 21:05 whiteknight joined 21:09 bluescreen left 21:13 mikehh left
GeJ Bonjour everyone. 21:20
cotto_work hi GeJ
21:21 fperrad left
Paul_the_Greek A Boolean that doesn't inherit from Integer does not allocate an attribute block and is about 10% faster. 21:25
cotto_work sounds like a win. How are you measuring that?
Paul_the_Greek I wrote a benchmark that does what I think are typical boolean operations. 21:26
cotto_work nopaste?
purl i heard nopaste was nopaste.snit.ch (works with the script in $_PARROT/tools/dev/nopaste.pl) or paste.scsys.co.uk or www.extpaste.com or gist.github.com or App::Nopaste or codepeek.com/paste/ or (: pastebot)
Paul_the_Greek nopaste the PMC code?
Or the benchmark? 21:27
purl It seems faster
cotto_work both? 21:28
nopaste "Paul_the_Greek" at 192.168.1.3 pasted "New Boolean benchmark" (69 lines) at nopaste.snit.ch/23226 21:29
21:29 M_o_C joined
nopaste "Paul_the_Greek" at 192.168.1.3 pasted "New Boolean.pmc (without pod)" (103 lines) at nopaste.snit.ch/23227 21:30
cotto_work You should stick that into a branch. 21:36
Paul_the_Greek What's the advantage over simply committing it eventually? 21:37
whiteknight branch gives the ability to test it rigorously 21:38
cotto_work easier for others to test
Paul_the_Greek Okay, will do.
cotto_work and commit fixes, if needed
Paul_the_Greek++
Paul_the_Greek Thanks!
Is there a way to get parrot to create a pbc file? The --output option doesn't seem to do it. 21:39
cotto_work -o x.pbc
It's a bit magical in that imcc looks at the output filename to decide what to put into it. 21:40
if it sees -o x.pasm, it'll output pasm, if it sees -o x.pbc it'll output pbc
Paul_the_Greek You're suggesting that option on the parrot command itself?
cotto_work yes
Paul_the_Greek parrot examples\\benchmarks\\boolean.pir -o boolean.pbc 21:41
There is no boolean.pbc file anywhere in the directory tree.
cotto_work -o boolean.pbc nees to come first
Paul_the_Greek All righty then ...
cotto_work otherwise it'll try passing -o boolean.pbc to your script
Paul_the_Greek Oh, that makes sense. 21:42
Now I can disassemble this pbc file somehow ...
21:42 M_o_C left
cotto_work pbc_disassemble 21:42
purl pbc_disassemble is rather fragile. It segfaults every now and then on darbelo's box.
21:42 hercynium joined
cotto_work forget pbc_disassemble 21:42
purl cotto_work: I forgot pbc_disassemble
Paul_the_Greek Works great on my machine. 21:43
cotto_work It's gotten more stable since then.
Paul_the_Greek Okay, some dinner. Then I can look at the generated code. 21:44
cotto_work pbc_dump -d might also be of use
21:44 shockwave joined
shockwave Hi, people. 21:45
purl paste
purl i heard paste was see factoid nopaste
nwellnhof nopaste?
purl i heard nopaste was nopaste.snit.ch (works with the script in $_PARROT/tools/dev/nopaste.pl) or paste.scsys.co.uk or www.extpaste.com or gist.github.com or App::Nopaste or codepeek.com/paste/ or (: pastebot)
nopaste "shockwave" at 192.168.1.3 pasted "No reference semantics for certain uses of PMC!" (37 lines) at nopaste.snit.ch/23228 21:46
shockwave I'm looking for a way to accomplish what the code I pasted sudjest. 21:47
Essentially, I would like $P0 and $P1 within the 'value' method to act as references, such that when $P1 is assigned as the new value of the '%value' attribute, $P0 references the new value. 21:48
Instead, $P0 references the old value, which is fucking my shit up with cached registers. 21:49
NotFound shockwave: box creates a new pmc, setattribute sets a pmc, doesn't assign to the one presen. 21:52
21:53 mikehh joined 21:54 M_o_C joined
shockwave @NotFound: Thanks. As always, you're helpful. I'm thinking of something smart to ask that can help me make this work... 21:54
NotFound shockwave: if you don't need to mutate the type, $P0 = _p should be enough 21:55
shockwave thinking.... 21:56
purl hmmm... thinking is see `made of meat`
NotFound Or you can just return $P1
shockwave I created the code I pasted above to illustrate the semantics I'm trying to achive. I have a bunch of validation/unit tests that perform all kinds of permutations. I need that reference semantics, or some way to accomplish something similar. 21:58
I actually had this working, but,
21:59 ruoso left
shockwave essentially for each HLL field access, there would be a getattribute call. But, that's not very efficient. So, now that I'm taking care of some simple optimizations, this one was on the list. 22:00
It boils down to using getattribute once, and cache the result register to be used subsequently.
Of course, you can imaging all sorts of use cases within a method.
NotFound shockwave: setattrubute sets a new pmc, there is no way to grant you keep a refererence to the attribute living forever. 22:01
shockwave That's what's causing the problem: The fact that is fecthed once, per subroutine, when needed, and then the same register is used afterwards.
Basically, every time setattribute is used, all the old references are invalidated, then? 22:02
whether scalar or not?
NotFound shockwave: setattribute sets the attribute slot, unless is set to the same PMC that was here before, you lose the reference. 22:03
You keep a reference to some value that is no longer the current value of the attribute
If you want a different semantic for some class, you need to override the attribute access vtable functions 22:04
shockwave @NotFound: I appreciate getting a definitive answer, even if it was not what I was looking for. :( ... I guess I'll be around the drawing board thinking of a workaround. 22:05
@NotFound: err.. what? There's a possible way?
sweet.
NotFound shockwave: In theory, I don't know if somenone has implemented something like that. It can be hard. 22:06
shockwave btw, ^^^ s/looking/hoping
@NotFound: My guess is that such road may not yield anything workable. I'll try to think of a decent way of handling it, without resorting to that vtable override. 22:07
22:11 Andy left 22:17 bkuhn left 22:28 pjcj joined
Coke uh, don't forget --output-pbc 22:32
shockwave @Coke, Who was that last message for? 22:42
@NotFound: I got it working so that cached registers are used until a call to setattribute happens, at which case the cache for that particular register is invalidated so that next time the value is refetched and recached. 22:43
Thanks for your insight.
22:45 M_o_C left
Paul_the_Greek So what is the right way to create a new branch? 23:04
cotto_work docs/project/branching_guide.pod
23:07 nwellnhof left
Paul_the_Greek That doesn't appear to be linked anywhere. 23:07
23:10 cotto_work2 joined 23:14 cotto_work left
dalek parrot: 6a55637 | leto++ | t/sql/plperl6.sql:
Add tests for a grammar in package scope

These tests produce a core dump from Parrot that looks like gist.github.com/546982
23:27
parrot: 2b99026 | leto++ | t/sql/plperl6.sql:
Make the global grammar test not core dump
rrot: r48775 | Paul C. Anagnostopoulos++ | branches/sleeker_boolean:
Boolean that does not inherit Integer
23:30
23:32 PacoLinux left 23:33 PacoLinux joined 23:34 mikehh left, PacoLinux left, PacoLinux joined 23:37 particle left 23:38 mikehh joined
NotFound shockwave: looks like a good solution 23:40
23:41 particle joined
cotto_work2 Paul_the_Greek: If you can think of a place it should be linked from, you're encouraged to implement or recommend it. 23:51
23:53 cotto_work2 is now known as cotto_work
Paul_the_Greek Will do. 23:55