Parrot 2.4.0 "Sulfur Crest" Released | parrot.org | Log: irclog.perlgeek.de/parrot/today | Nopaste: nopaste.snit.ch:8001 | GSOC Students: trac.parrot.org/parrot/wiki/GSoCersStartHere
Set by moderator on 18 May 2010.
chromatic Anything allocated anew after GC starts has to start on @live_objects then, right? 00:00
bacek grey_objects 00:01
we have to remark them
my $a; (start_gc); my @b = ($a);
chromatic I see. 00:02
bacek Or may be I'm too pessimistic and $a will be marked anyway.
but for my @a; (start_gc); @a.push(PMC.new); we have to remark @a
chromatic If $a is reachable from a register, it will be. If it's reachable from C, then tracing system areas should. 00:03
bacek especially is @a.push() executed in C
s/is/if/
chromatic I'm curious to see this 1.01 byte O(log n) insertion skiplist. 00:05
bacek Me too. 00:06
But it's kids day today. 00:07
chromatic That explains all of the meowing over here.
bacek I'll (hopefully) start hacking tomorrow.
:)
See you!
chromatic Let me know what you want me to work on. 00:08
bacek There is still "grey" area in my design about strings.
May be we should split string allocator into separate class. 00:09
chromatic Do we need buffer compacting anymore?
bacek Yes.
bacek definitely have to go 00:10
00:18 tetragon joined 00:19 shockwave joined
shockwave Howdy. 00:19
What's the process to convert a string to lower/upper case?
whiteknight is there a tolower/toupper opcode? 00:25
Tene you might check rakudo's Str.uc method 00:26
dalek kudo: d42fd31 | jonathan++ | src/Perl6/Actions.pm:
The whatever currying was a little too liberal; after some labour I came up with
00:27
shockwave whiteknight: Thanks for the hint. I kept looking here:
docs.parrot.org/parrot/latest/html/...s.pod.html
But forgot to look at the opcodes.
There is one.
whiteknight: Thanks 00:28
whiteknight nice
00:30 bubaflub_ joined
whiteknight bacek++ 00:36
purl msg bacek those code outlines for GC are extremely helpful. I should hae done that kind of layot a long time ago 00:37
purl Message for bacek stored.
whiteknight chromatic++ # links to llvm videos 00:38
00:39 ian_ joined 00:40 plobsing joined
plobsing ping cotto_work 01:07
01:17 jsut_ joined
dalek kudo: a4dc280 | jonathan++ | src/Perl6/Grammar.pm:
Get our comment parsing more STD-ish by introducing the comment protoregex, and
01:22
01:33 kid51 joined
dalek p-rx: 3c60bf4 | jonathan++ | src/Regex/P6Regex/Actions.pm:
Fix a panic call, so we actually panic with the useful error message.
01:36
whiteknight panic? EVERYBODY PANIC?
plobsing everybody panic? 01:37
purl i heard everybody panic was web.archive.org/web/20070216080911/.../panic.gif
whiteknight jonathan's commit message was all about fixing panics
plobsing does distutils have a good way of compiling non-dynpmc, non-dynop parrot extensions? 01:38
whiteknight plobsing: what kinds of extensions are those/ 01:39
?
plobsing C
whiteknight no, I mean what kinds of stuff does the extension do? 01:40
plobsing break parrot encapsulation so I can avoid writting a dynpmc
whiteknight where is the extension going to hook in? 01:41
plobsing I'm going to load the functions via NCI
whiteknight or are you just writing the functions and going to call in with NCI?
okay
I don't know if distutils supports that
plobsing I suppose I could convert them to ops, but it really doesn't seem worth it. 01:42
whiteknight meh, I'm sure distutils either does support it or can be made to do so easily
plobsing example: pmc_get_meta(PARROT_INTERP, PMC *obj) { return PMC_metadata(obj) }
whiteknight once you have the routines to invoke the compiler with the correct flags, thats 90% of the work
the damn smolder server timeouts are shittacular 01:45
plobsing I don't see any pre-built functionality. I guess I'll have to roll my own out of the very nifty building blocks distutils provides 01:46
who do I talk to about adding stuff to distutils? yes, I have a commit bit, but I'm hopping someone out there has a coherent vision for this thing
sorear fperrad, I presume 01:47
whiteknight fperrad
01:47 gbacon joined
plobsing seen fperrad 01:47
purl fperrad was last seen on purl 4 days, 18 hours, 17 minutes and 44 seconds ago, saying: <private message> [May 24 07:29:27 2010]
whiteknight what would even be the difference between a dynpmc and any other .so? 01:48
let me look at the code and see what my stupid fingers and fuck up
plobsing none really. but it looks as though distutils hasn't consolidated compiling the C files from dynops and dynpmcs 01:49
whiteknight no, I guess not. but I can copy+paste as well as the next guy 01:52
plobsing IIRC, I rolled my own C extension building for one of the early iterations of libjit_fb.
I'll try and steal that.
and then point at it for a feature request 01:53
whiteknight parrot_config cc_flags should give you everything you need 01:54
parrot_config ccflags 01:55
gcc $(parrot_config ccflags) -o myfile.o myfile.c
gcc $(parrot_config ccflags) $(parrot_config ccwarn) -o myfile.o myfile.c if you want all the warnings 01:58
01:58 eternaleye joined
kid51 make test, make buildtools_tests, make codetest PASS sat 47097 01:58
plobsing ccflags are relatively easy. I've found the linker to be my main opponent lately (witness how many times I've accidentally broken the windows build)
whiteknight ah, my old nemesis: the linker 01:59
I've got a finger for whoever designed the interface to that piece 02:00
bubaflub a big thumbs up, whiteknight? 02:01
whiteknight I just try to blindly copy whatever commandline the makefile uses
bubaflub: no, different finger.
not nearly so positive
bubaflub hahahah
i know, just goading you
whiteknight :)
plobsing afk # need potatoes
whiteknight PO-TA-TOES
bubaflub you know, boil em, mash em 02:02
whiteknight haha
plobsing: parrot_config libparrot_soname, inst_libparrot_linkflags, and maybe link_dynamic 02:06
02:22 jimk joined 02:26 ian_ left 02:36 janus joined 02:41 shockwave joined
shockwave Howdy. 02:41
I'm looking at: docs.parrot.org/parrot/latest/html/...g.ops.html
But it doesn't jump out at me...
How can I convert an int to a string?
Wow, can it really be this easy: $I0 = 5; $S0 = $I0; 02:44
That's cool!
ok, thanks. 02:45
02:45 shockwave left
dalek rrot: r47099 | tcurtis++ | branches/gsoc_past_optimization/t/library/pasttransformerdynamic.t:
Add test for changing node types with PAST::Transformer::Dynamic.
04:03
04:24 mikehh joined
dukeleto 'ello 04:31
plobsing hiya duke! 04:36
04:49 TiMBuS joined
davidfetter wonders how much spice is going for per key these days 04:58
dukeleto, any insights?
sorear per key? 04:59
davidfetter kilogram
purl kilogram is more than a pound, right? And 161 kph = 100 mph, right?
sorear oh
sorear thought SPICE = an open source circuit simulator and key = license key, was confused
davidfetter heh 05:00
plobsing dukeleto: regarding your PL/Parrot errors, your code sample lacks '.loadlib "io_ops"'
so I'm somewhat surprised it compiled at all.
davidfetter plobsing++ for helping track this down :) 05:01
plobsing I did lead the push that caused it in the first place. I feel at least somewhat responsible.
davidfetter heh 05:03
plobsing of course ops_massacre is probably desirable to PL/Parrot. open opcode is now much harder to get at, easier to deny access to. 05:08
davidfetter :) 05:22
mikehh make corevm/make coretest FAILs - see: nopaste.snit.ch/20672 (same failures) 05:34
all other tests PASS (pre/post-config, smoke (#34116), fulltest) at r47099 - Ubuntu 10.04 i386 (g++)
t/op/exit.t - TODO passed: 6 in testf
plobsing mikehh: what exactly is failing there? is it the "./parrot pbc_to_exe.pbc pbc_to_exe.pbc"? 05:38
nopaste "plobsing" at 192.168.1.3 pasted "[PATCH] mikehh, maybe this will resolve the issue" (20 lines) at nopaste.snit.ch/20704 05:41
mikehh plobsing: seems to be imcc syntax errors 05:42
eg first error - error:imcc:syntax error, unexpected PREG, expecting '(' ('$P2') in file 't/op/arithmetics_pmc.t' line 352 05:43
plobsing that is not what the nopaste you just pasted shows 05:44
mikehh the nopaste was the summary results 05:46
plobsing from what I see in the nopaste (triple checked), it doesn't even begin testing. it is a build failure ("make: *** [pbc_to_exe] Error 1") 05:47
mikehh bear in mind that the tests fail make corevm/make coretest as soon as I run make and then make test the tests pass
plobsing sounds like more .loadlib silent failure induced bugs 05:48
whu? I ran clean => corevm => coretest and everything worked
mikehh let me redo that and I will nmopaste some of failing tests 05:49
plobsing likely one of the dynops libs isn't being cleaned on make clean, lulling me into a false sense of security 05:51
mikehh did you run before or after your patch? 05:52
I usually run make realclean 05:53
plobsing after, but patch shouldn't fix things if they are as you described
corevm/coretest passed for me after svnclobber.
cotto plobsing, pong 05:54
plobsing I was wondering if those failures you were having persisted. It appears they do. 05:55
found my problem: installed parrot
cotto you mean the parallel build failures? 05:56
plobsing yes
cotto I'm still seeing those occasionally.
The best way to test for them is just to run mj reconfig && mj && ... a bunch, so I don't do it too often. 05:57
If you think you have a fix, I'll be glad to verify.
plobsing cotto: nope, no idea. your nopaste indicates a failure in pbc_to_exe compilation, which doesn't depend on any ops, so I'm not sure what's going on. 05:58
in fact, pbc_to_exe has very few deps
cotto Yeah. that's why I nopasted instead of trying to fix it myself.
nopaste "mikehh" at 192.168.1.3 pasted "prove of first test failure - make corevm/make coretest" (15 lines) at nopaste.snit.ch/20705 06:08
"mikehh" at 192.168.1.3 pasted "prove of second test failure in make corevm/make coretest" (16 lines) at nopaste.snit.ch/20706 06:12
dalek rrot: r47100 | plobsing++ | trunk (2 files):
fix t/op/arithmetics_pmc.t after ops_massacre
06:15
rrot: r47101 | plobsing++ | trunk (2 files):
add tests removed in r47100 to dynops testing
nopaste "mikehh" at 192.168.1.3 pasted "prove of next two failures in make corevm/make coretest" (46 lines) at nopaste.snit.ch/20707 06:28
06:31 eternaleye joined
mikehh plobsing: there are two more, slightly longer, do you want them 06:31
plobsing mikehh: no thanks. I can now reproduce the problem. Thank you for your assistance. 06:32
mikehh nearly commited your patch, let me clean up 06:33
plobsing not worthwhile 06:34
didn't address the right thing because I was confused as to the problem at the time
06:50 mikehh joined
dalek rrot: r47102 | plobsing++ | trunk (3 files):
move bitwise String PMC tests over to dynops testing (outside of coretest)
07:05
rrot: r47103 | plobsing++ | trunk/t (2 files):
move transcendental testing on Complex PMC to dynops testing
chromatic blog.mozilla.com/tglek/2010/04/07/i...d-startup/ 07:09
plobsing chromatic: are you posting that as relevant for Parrot's internal layout or PBC layout? 07:12
07:12 fperrad joined 07:13 bacek joined 07:15 dolmen joined 07:17 preflex joined
dalek rrot: r47104 | fperrad++ | trunk (2 files):
[distutils] fix end of setup()
07:21
rrot: r47105 | plobsing++ | trunk (3 files):
move dynops dependant test out of coretest
rrot: r47106 | fperrad++ | trunk/runtime/parrot/library (2 files):
[distutils] workaround TT #1663
cotto Some of those Mozilla hackers are pretty insane about finding performance improvements. 07:22
chromatic Internal layout. I wonder if we can improve startup time with something like that. 07:23
dalek kudo: 5940b25 | moritz++ | docs/ChangeLog:
[docs] update ChangeLog
07:28
07:54 fperrad_ joined
dalek p-rx: 3ce1fa3 | moritz++ | src/stage0/ (3 files):
update stage0 files
08:03
rrot: r47107 | moritz++ | trunk/ext/nqp-rx/src/stage0 (4 files):
[nqp] update stage0 files
08:12
08:28 JimmyZ joined 08:39 clinton joined 09:14 seatek joined 09:42 somebody_ joined 09:53 jsut joined 10:07 gbacon joined 10:21 whiteknight joined
whiteknight ggod morning, #parrot 10:25
dalek kudo: 250adbb | pmichaud++ | (5 files):
Initial fixes towards enabling Rakudo-specific Match objects.

getting Match ~~ Positional to work (see src/core/Match.pm for details).
10:37
kudo: 3ac2d94 | moritz++ | (5 files):
Merge remote branch 'origin/mob_pm'
kudo: f58bca2 | moritz++ | build/ (2 files):
remove some setting left-overs from alpha
kudo: f743dca | moritz++ | build/gen_ (2 files):
[build] remove two fossile Perl scripts
10:44 lucian joined
dalek kudo: bbb336a | moritz++ | src/core/Match.pm:
make Match.list and Match.hash return Perl 6 objects
11:24
11:32 fperrad_ joined
whiteknight I see my email about ns_func_cleanup branch has been read, and filed away, by mr. Warnock 11:53
under the assumption that somebody would mentioned any objections, my email is assumed to have complete support and agreement from the community :) 11:54
11:59 fperrad joined
dalek rrot: r47108 | whiteknight++ | branches/oo_func_cleanup:
creating a branch to cleanup the <s>garbage</s>code in src/oo.c
12:05
rrot: r47109 | khairul++ | failed to fetch changeset:
Sync with trunk
12:06 fperrad_ joined 12:21 cognominal joined 12:23 dolmen joined 12:26 Themeruta joined 12:47 joeri joined
NotFound_gf thinks about reverting the conversion to dynops unless someone design a quickly doable way of sane dynop loading. 12:47
13:00 JimmyZ joined
whiteknight the block starting at src/oo.c:189 makes absolutely no sense 13:02
NameSpace.get_pmc_keyed_int returns a vtable Sub 13:03
And then from there I have no idea how Parrot_get_namespace_keyed is supposed to work on a Sub (which is probably PMCNULL) in most cases 13:05
the more I look at this, the more I suspect this function only works by accident 13:06
NotFound_gf whiteknight: some days I think that about the full parrot codebase. 13:08
Today, for example. 13:09
whiteknight NotFound_gf: no, there are several parts of it that make some sense. This absolutely does not 13:10
Probably why this function has never been succesfully refactored, because it doesn't do what it claims to do, and then is broken on top of it
anyway, it's time to go. I'll fight with this nonsense later 13:13
13:17 Hunger joined
darbelo starts thinking about adding some more dynops. 13:28
13:33 hudnix joined
dalek website: smash++ | call for Parrot foundation members applications 13:37
website: www.parrot.org/news/call-parrot-fou...plications
13:41 jsut_ joined
JimmyZ 7,14 Oh hai 14:18
7,14 Oh hai 14:20
darbelo o/ 14:23
14:42 Themeruta joined
dalek kudo: 9085183 | jonathan++ | src/Perl6/Actions.pm:
Tweak some name canonicalization/non-canonicalization bits for R[R[-]] style
14:48
kudo: f2896c3 | jonathan++ | src/ (2 files):
Rename notresults to negate, to be in line with S03.
kudo: 8c14284 | moritz++ | src/core/Match.pm:
[Match] .caps and .chunks
14:52 tetragon joined
dalek kudo: ffb9a36 | pmichaud++ | build/Makefile.in:
YOU_ARE_HERE wants to be last in the core setting (jnthn++).
14:54
15:28 patspam joined
dalek kudo: c491a18 | pmichaud++ | src/core/operators.pm:
Enable &prefix:<?> to work on foreign objects.
15:35
16:39 tcurtis joined 16:40 contingencyplan joined
dalek rrot: r47110 | darbelo++ | branches/gsoc_nfg/src/string (3 files):
Separate the grapheme-related definitions from other Unicode data.
16:46
rrot: r47111 | darbelo++ | branches/gsoc_nfg/MANIFEST:
Upate MANIFEST.
rrot: r47112 | darbelo++ | branches/gsoc_nfg/src/string/grapheme.h:
[CAGE] Add svn props.
rrot: r47113 | jonathan++ | trunk/compilers/pct/src/PCT/HLLCompiler.pir:
[pct] Allow compilers to implement a .backtrace method to produce their own format of backtrace to print in the event of an uncaught exception. If not, we just fall back to Parrot's own handling.
17:19
rrot: r47114 | tcurtis++ | branches/gsoc_past_optimization/t/library/pasttransformerdynamic.t:
Fix changing node type test.
17:30 mariano joined 17:43 _shockwave joined
_shockwave purl paste 17:44
purl somebody said paste was (see: nopaste) or like glue but a little safer to sniff. or nopaste.snit.ch:8001/ or scsys.co.uk:8001/ anywhere shadowpaste is or mmm, sticky paste or You there! Eating the paste. or <see> 2 girls, 1 paste or App::Nopaste or toxic for bots and humans
dukeleto msg plobsing io_ops did not fix the problem
purl Message for plobsing stored.
dukeleto no, going to yapc::na 2010 is qw(jhannah rbuels cfedde apeiron dha nacmac dhoss mst chargrill kyriel triddle DrForr coke packy kolibrie colomon jasonmay arcanez dylan doy ology waltman autarch pmichaud atrodo) 17:45
purl okay, dukeleto.
_shockwave Hello. 17:47
dukeleto shockwave: howdy 17:48
shockwave I had some code that used to work in 2.3 -- I just updated and it broke. I know where IMCC says it's broken, but I'm not sure why.
nopaste.snit.ch/20723?ln=on
Line 32
I just updated from Trunk like 5 mins ago.
dukeleto shockwave: bxors became a dynop 17:49
shockwave: you will need .loadlib "bit_ops", i think
moritz .loadlib 'bit_ops' or so
shockwave I don't understand the difference. Is there a place that talks about what a dynop means?
dalek parrot: 47b805f | dukeleto++ | ROADMAP:
Cleanup the ROADMAP
17:50
parrot: 30b49fc | dukeleto++ | Makefile:
Always regenerate plparrot.h when compiling
parrot: 71434f3 | dukeleto++ | Makefile:
Regenerate headers when compiling
parrot: 6da6549 | dukeleto++ | plparrot (2 files):
Load io_ops, since many ops became dynops recently
dukeleto shockwave: yes, dynop = dynamically loadable opcode
moritz shockwave: it's like a module that, when loaded, provides some new opcodes
shockwave Oh, a 'dynop' is just something that has to be loaded.
moritz: yeah, you beat me to my guess :)
dukeleto shockwave: dynop is like loading a perl 5 module that overrides builtin functions
moritz tries hard not beat people
dukeleto shockwave: except certain non-core parrot opcodes were made dynops, so unless you load the dynop, they don't exist 17:51
shockwave In the docs page, is there a way to tell if something is a dynop, and if so, from where to load it... or is it generally a try/fail/ask kinda thing? 17:52
moritz shockwave: the deprecation document that comes with parrot 2.3 should list those that were planned to be (re)moved
shockwave moritz. ok 17:53
dukeleto shockwave: there should be a nice doc that explains where they all are
shockwave: if there isn't, please make one :)
shockwave I also see a bit.ops at the top the page.
Hopefully, there is a correlation between the location and that filename.
On more question, if you guys don't mind: What's the speed inpact on making things dynops, as opposed to built-in? 17:54
dukeleto shockwave: en.wikibooks.org/wiki/Parrot_Virtua..._Libraries (slightly outdated but still useful)
moritz shockwave: I generally search for an op in parrot's t/ directory, and see what .loadlib line the files include :-)
dukeleto shockwave: foo.ops => .loadlib "foo_ops", i think 17:55
shockwave: the .ops file is the source of what you .loadlib, if that makes sense
shockwave Yep. Thanks alot, guys. I appreciate the thorough help. 17:56
18:05 particle joined
shockwave Hey, guys. Thanks for the help, again. 18:06
The program is running fine again.
But, now I'm wondering. Where are these libraries located?
When I distribute the application, is having libparrot enough?
dukeleto shockwave: they are installed with an installed parrot 18:07
shockwave dukeleto: So, when I distribute my app using parrot... I'll be distributing other .dlls besides libparrot.dll?
dukeleto Would any PaFo members like to nominate me for the PaFo board? I think I have coke++ as my first nomination, need one more.
shockwave: good question, not sure 18:08
18:09 japhb joined
shockwave Ok. I see something at runtime/parrot/dynext which is full of DLLs matching some of the names I just used. My guess that's it. 18:09
dalek kudo: 46e2b53 | jonathan++ | build/PARROT_REVISION:
Bump to latest Parrot to get a fix and an improvement.
18:12
kudo: 6afdfbd | jonathan++ | src/metamodel/RoleToRoleApplier.nqp:
Stringify methods to get the name rather than .name them; we do that in other
cotto dukeleto, yes 18:13
18:19 jsut joined
dalek kudo: 9de1eba | moritz++ | src/builtins/ (2 files):
use Perl 6 arrays in Match objects
18:24
18:28 shockwave left
dukeleto cotto++ 18:33
18:39 plobsing joined
dalek kudo: 401d2d0 | moritz++ | src/core/Match.pm:
remove workarounds in Match.caps
18:41
kudo: 418e795 | moritz++ | src/core/Match.pm:
remove an outdated comment in Match.pm
18:59
19:10 joeri joined
dalek p-rx: 416e5b4 | moritz++ | (2 files):
match objects should never have negative .chars, even if the match fails
19:19
19:21 whiteknight joined
darbelo resists the urge to completely break strings. 19:26
cotto You're normally so enthusiastic about that sort of thing. 19:28
darbelo Yeah, but I'd rather get the grapheme tables working first. 19:29
Once I get that out of the way... parrot_string_t is going to get pruned. 19:31
dalek rrot: r47115 | tcurtis++ | branches/gsoc_past_optimization (2 files):
Fix issue in pastcompare and add test for deleting nodes with PAST::Transformer::Dynamic.
19:32
darbelo I think I can make that two (maybe three) pointers smaller. 19:35
19:38 Andy joined
dalek rrot: r47116 | darbelo++ | branches/gsoc_nfg/src/string/encoding/nfg.c:
Try to pre-normalize incoming strings as much as possible.
19:48
cotto ops2c is quite a bit faster after the ops cull 19:49
plobsing++
plobsing heh. you're probably the only person happy about that right now
cotto You're just uncovering existing problems. 19:50
better sooner than later
20:11 LoganLK joined 20:21 particle joined
dalek kudo: c0bcaf0 | moritz++ | t/spectest.data:
run another S05 spectest file
20:27
kudo: e6dfd1d | moritz++ | (2 files):
implement smartmatching of arrays and hashes against regexes; add a few more
20:37 whiteknight joined
tcurtis pmichaud: I'm about to leave the house, so I won't be able to read your response to this until a while later. First: a question, would it be acceptable if I included a summary of our conversation from Thursday in my next blog post? 20:42
pmichaud: Second: concerning the idea of PCT-like grammars for PAST optimizations, a key difference is that with optimization, your input is already structured in such a way that some transformations will be valid regardless of where in the tree they're performed, so long as they are operating on a subtree with certain characteristics.
pmichaud: So, unlike grammars where you have a top-level rule that builds upon other rules that match portions of the desired result, you have a number of generally independent(though possibly sometimes affected in effectiveness by order ran) rules.
pmichaud: Optimization "grammars" being similar in basic structure to PCT grammars is still appealing, but "grammar" might not be the best name. What do you think?
dalek kudo: f514389 | moritz++ | t/spectest.data:
re-enable 4 test files
20:44
whiteknight interp->HLL_namespace is a hash, not a namespace 21:02
and interp->class_hash is a namespace, not a hash 21:03
I love this code with all my heart
21:08 mariano joined
cotto Not that it invalidates your point, but interp->HLL_namespace looks more like an rpa 21:08
whiteknight oh, right. sorry. HLL_namespace is an RPA 21:09
what is also boggling my mind is that code is using a namespace PMC as a key to look up a namespace in a namespace
like, you can't use a Key or an RSA for the purpose? 21:10
cotto seriously?
purl is that for real?
whiteknight check out src/oo.c, the block starting around line 206 21:11
cotto not that I'm very surprised, but wow
whiteknight I took out the special case "this is a hack" code, and the first type that came through there and threw an exception was NameSpace
and that lovely bit of magic is happening inside pbc_to_exe.pir 21:12
dalek kudo: 5c62b61 | moritz++ | (2 files):
implement Match.perl; fix Match.ast to return Any if not set (not Undef)
21:25
21:25 chromatic joined
chromatic Anyone want to remove some 35-40% of opcodes without losing any features? 21:26
cotto What's the catch?
purl the catch is the new laptop comes with a metal rod in the side that pops out. You set the CPU speed by adjusting a metallic slider on the rod.
chromatic Step one: make all register numbers in PBC signed.
Step two: make all references to constants (INTVAL, STRING, NUM, PMC) negative offsets in the constant tables. 21:27
Step three: update the register access macros to check for negative register indices and look in the constant tables.
Step four: remove all _ic, _pc, _nc, _sc opcodes.
Step five: look, the ops fit better in the icache!
sorear But you pay for it with bigger register access code and more conditional branches. 21:28
plobsing chromatic: that's why I want to add constant unfolding to IMCC
chromatic Constant unfolding? 21:29
plobsing add_i_ic_ic becomes set_i_ic set_i_ic add_i_i_i 21:30
opposite of constant folding
note that your proposal doesn't quite fit with the fact that intval constants are currently inlined in bytecode
although I think it is a good way forward 21:31
sorear How about subtyping? If IMCC sees an ic value, but the only instruction variant is p, it automatically generates coercion code 21:33
plobsing sorear: that is the exact *opposite* of the direction we want IMCC to go. IMCC should become *less* smart
sorear It's worse than constant unfolding? 21:34
plobsing it is somewhat equivalent except it now has to deal with HLL mappings
sorear ah, yes 21:35
plobsing also what happens when an HLL mapped Integer addition calls low-level INTVAL addition with constants? infinite recursion.
whiteknight --no-line-directives doesn't appear to be having any effect when I pass it to Configure.pl 21:36
plobsing auto-coercing in non-obvious places is unintuitive
whiteknight ...which is really really screwing up my debugging
plobsing I am currently working on getting dynext's to play nice together in PBC, but if you'd like I could switch over and work on getting the unfolding working. Then it would be a SMOP to get opsc to not emit constant variants of all but a select few, specially marked ops. 21:45
cotto dynexts are probably more important atm 21:46
nothing's on fire because we have too many constant variant ops
plobsing considers adding an hcf_ic op to prove cotto wrong 21:47
cotto We used to have an hcf op. I was sad to see it go.
plobsing resurect it as a dynop!
sorear cotto: what did it do? 21:49
21:51 bubaflub joined
cotto digs 21:51
It called abort(). 21:54
and it was a dynop 21:55
trac.parrot.org/parrot/ticket/790
dalek kudo: 9581e6a | moritz++ | src/core/Match.pm:
fix Match.caps again; I have no idea why it's a fix, but it is. Weird.
22:00
sorear cotto: trac.parrot.org/parrot/changeset/28001 22:01
plobsing an advantage of constant unfolding over magical negative registers are constant indices: it makes the meaning of ops simpler for anything that analyses PBC (JIT, dumper, pbc_to_pbc optimizer, etc) 22:02
chromatic I'm not sure about it. 22:04
I'd like to see benchmarks and example code.
plobsing Not sure about it being simpler or not sure about whether it is worthwhile? 22:05
chromatic Both. 22:06
Simpler is easier to believe.
plobsing the first I think I can demonstrate right now. the second will take some work. 22:07
chromatic One lesson from Perl 5 is that the more ops you dispatch, the slower your program goes.
There's no linear correspondence, but there's a strong correlation.
plobsing I'll agree with that. And for hot ops, I think it would be a good idea to have constant variants 22:08
but making every op handle both const and non-const arguments adds complexity to the behaviour of each op
this complexity shows up not only in the code for running the op, but also in all code that analyses ops, which must now check for negative arguments in analysing what the ops mean 22:09
chromatic Are you suggesting that we should make only a few ops handle constants? 22:12
plobsing yes.
chromatic That seems workable.
whiteknight this src/oo.c code is basically intractable 22:22
trying to fix this, I've seen almost every exception in the book, segfaults, and now miniparrot hangs 22:26
this code is so stupid, and everything in the world relies on the stupidity in extremely weird ways 22:32
forget it, dinner time 22:34
purl whiteknight, I didn't have anything matching it, dinner time
22:39 jrtayloriv joined
jrtayloriv 6 22:40
jrtayloriv oops! ... joins #perl6 as he initially intended
23:00 Psyche^ joined 23:24 davidfetter joined
dalek rrot: r47117 | jonathan++ | trunk/src/ops (2 files):
[core] First step towards trying to get some better annotations returned by .backtrace(). We rely on the context's ->current_pc pointer to know a context's current code location but never actually update it (unless we're in the profiling core) other that at sub entry. Makes some sense, since it'd cost us to do it every op. Doing it before an invoke, however, is enough to ensure that we know the callsite location, which is a big improvement to the back
23:40
23:48 lucian_ joined