|
Parrot 1.2.0 released | parrot.org/ | Weekly Priority: Profiling | Parrot VM Workshop, Pittsburgh, June 20-21 Set by moderator on 7 June 2009. |
|||
| cotto | It sounds like a good way to explain L1 would be microcode. | 00:08 | |
| darbelo | RISP: Reduced Instruction Set Parrot | 00:10 | |
|
00:13
gryphon joined
|
|||
| mugwump | hey, and here's an idea: you should only need to vtable the reduced instruction set instructions | 00:22 | |
| chromatic | I'm not sure about that... but we could turn all vtable entries into multis then. | 00:37 | |
| mugwump | what does multis mean in that context? | ||
| not selecting on the argument type? | 00:38 | ||
| chromatic | They all select on argument type. | ||
| They select on all argument types? | |||
| dalek | rrot: r39513 | jkeenan++ | trunk/src/pmc/handle.pmc: Correct POD syntax error, allowing for what the author probably intended. |
00:44 | |
| mugwump | Well, say 'repeat' becomes non-L1 but 'concatenate' is L1, does it make sense to have a fixed vtable entry for 'repeat' ? | ||
| Actually I don't quite understand why functions that take PMC arguments are vtable'd | 00:45 | ||
| rather than being just methods | |||
| the thing about argument types, I can see why you'd want to fast-path something like i_add_int or i_add_float, but i_add itself? | 00:46 | ||
| kesselhaus | is there already an release schedule for the next parrot? 1.3 or 1.4? | 00:48 | |
| pmichaud_ | 1.3 will be released Tuesday. | ||
| 1.4 is schedule for release on July 21. | 00:49 | ||
| *scheduled | |||
| kesselhaus | cool, and perl6 will be released again too? ;) | ||
| pmichaud_ | The next release of Rakudo will be on Jun 18 (Thu) | 00:50 | |
| mugwump | kesselhaus: Christmas! | ||
| purl | somebody said christmas was all jolly goofy shit. weee! or o/~ we wish you a spendy christmas o/~ x3; o/~ and a 'spensive new year o/~ or not yet or next year or when Perl6 is released. | ||
| mugwump | ^^ see! :) | ||
| pmichaud_ | the July release of Rakudo will be two days after the July release of Parrot -- likely July 23. | ||
| We don't have a name for the Rakudo July release yet -- suggestions welcomed. :-) | |||
| kesselhaus | rakudo-1.3? ;) | 00:51 | |
| Whiteknight | cotto: I had the same thought, they do sound quite a bit like microcodes | 00:53 | |
| pmichaud_ | :) | ||
| well, I already rakudo's july release will be #19 and rakudo-2009-07 | 00:54 | ||
| *already know | |||
| I'm looking to see what Perl Mongers group to name it after. | |||
| It's likely to be DFW.pm, unless I see a reason to put another group in that slot | 00:55 | ||
| Whiteknight | irclogs | 01:02 | |
| irclogs? | |||
| purl | i think irclogs is irclog.perlgeek.de/parrot/today or see also: infrared clogs | ||
| pmichaud_ | I found the utf8 bug. | 01:32 | |
| Tene | japhb: still having issues or questions? | ||
| japhb | Tene: I think I'm doing pretty well muddling through ... I'll let you know if I get stuck again. | 01:35 | |
| pmichaud_ | anyone got a moment to look at a likely utf8 bug? | ||
| src/string/encoding/utf8.c:591 | 01:36 | ||
| WTF?!? | 01:49 | ||
| Tene | hm? | ||
| pmichaud_ | okay, I agree with NotFound -- all of the strings code is b0rken. | ||
| badly b0rken. | |||
| like, there's no possible way this stuff could work sort of broken. | |||
| Tene | :) | 01:50 | |
| bacek | heh... Idea of having thousands of representation for single entity is broken by design. | 01:54 | |
| japhb | What is the deprecation policy on runtime/parrot/library/... ? | ||
| bacek | PBC, STRING, you name it... | 01:55 | |
| Ah. Keys! | |||
| Tene | japhb: probably depends on what it is. | ||
| bacek | Other way round - having single representation for totally different things | ||
| japhb | .../NCI/call_toolkit_init.pir ... which, as far as I can tell, is only used by the OpenGL code | ||
| Tene | japhb: then just change it, IMO | 01:56 | |
| japhb | excellent | ||
| pmichaud_ | iiuc, libraries have to go through a deprecation cycle. | ||
| that would include NCI/call_* | |||
| japhb | ... sigh | 01:57 | |
| well, I can always just create NCI/Utils.pir and mark the old one deprecated, yes? | 01:58 | ||
| pmichaud_ | japhb: yes. | ||
| japhb | Was 1.0 considered a 'supported release'? Or is 1.4 the first? | 02:01 | |
| pmichaud_ | 1.0 | ||
| japhb | damn | ||
| pmichaud_ | yes, 1.0 is a 'supported release' (the first) | ||
| japhb | OK, so anything marked deprecated by the time 1.4 is released is eligible for removal immediately after 1.4, right? | 02:03 | |
| (so listed in DEPRECATED.pod as eligible in 1.5) | 02:04 | ||
| pmichaud_ | correct. | ||
| japhb | OK, so now I just have to see if I have working Trac access .... | 02:05 | |
| Infinoid | Hello, #parrot | ||
| Infinoid is going through updating his machines to EDT5EDT (silly east coast, scheduling sunrises at 3am) | 02:07 | ||
| s/EDT5/EST5/ | |||
|
02:07
eternaleye joined
|
|||
| Tene | hullo inf | 02:09 | |
|
02:09
kid51 joined
|
|||
| kid51 | Whiteknight ping | 02:16 | |
| Whiteknight | kid51: pong | ||
| kid51 | u probably know this, but ... we need a test file t/pmc/handle.t to shut up a codingstd test. | 02:17 | |
| Whiteknight | yeah, I was working on that tonight but got sidetracked. | 02:19 | |
| I'll get all those tests passing tomorrow | |||
| There's a ticket for it already, so I'm on top of it | 02:20 | ||
| but I'm going to bed now, so I'll talk to you later | |||
| Infinoid | Whiteknight++ | ||
| kid51 | I'll contribute a file just to shut the codingstd test up; it won't contain anything real. | 02:23 | |
| Infinoid | cool. Odd that the codingstd test didn't break in the branch | ||
|
02:25
Zak joined
02:27
eternaleye joined
|
|||
| kid51 | Perhaps it never got run. For some reason it's in t/distro (hence, 'make distro_tests') rather than t/codingstd ('make codetest'). | 02:28 | |
| The former tends to get run only as part of 'make fulltest'. | |||
| Well, particle wrote the first version, so i assume he had a reason for putting it there. | 02:29 | ||
| Yeah, I would never think to run make full_test on a branch. | |||
| dalek | rrot: r39514 | jkeenan++ | trunk (1 files): Create t/pmc/handle.t. No real tests of functionality yet. |
02:36 | |
| kid51 | cotto ping | 02:37 | |
| Infinoid | ah, ok. I think codetest would be a better place for it | 02:38 | |
| having it in distro_test makes it seem less urgent... but then it places all the burden on the release manager (who should be as unburdened as possible) | |||
|
02:41
janus joined
|
|||
| dalek | rrot: r39515 | jkeenan++ | trunk (1 files): 1. Clarify messages in 3 tests; we're requiring test files for each PMC 2. Move test to t/codingstd/ so that it gets run more frequently, as part of 'make codetest'. |
02:46 | |
| rrot: r39516 | jkeenan++ | trunk/t/codingstd/test_file_coverage.t: Correct typo in test message. |
02:52 | ||
|
03:20
donaldh joined
03:28
gryphon joined
03:30
silug joined
|
|||
| dalek | kudo: a2b8ceb | pmichaud++ | src/parser/actions.pm: Bare parens should return Nil. TimToady++ |
03:38 | |
| eternaleye | I suddenly find myself sorely tempted to write a compiler for POSIX sh. | 03:42 | |
| Infinoid | You'd have an easier time of that once the Pipe and PipeHandle PMCs hit trunk | 03:44 | |
| eternaleye | Good, then I might be able to put it off until school finishes. | ||
| Infinoid | But other than all the I/O and child process handling, the language itself doesn't seem that complicated | ||
| eternaleye | It would also enable people to say "I use Parrot as my shell" | 03:45 | |
| Infinoid | Hmm. You'd also need a dup2() function, which I don't think parrot currently provides | ||
| You'd need a clever name for your parrot shell :) | |||
| eternaleye | Parsh - the mushmouthed POSIX shell | 03:46 | |
| Infinoid | heh | ||
| eternaleye | "Even parch can parse Parsh" | 03:47 | |
| Gah, "Even parsh can parse Parsh" | |||
|
04:49
zak_ joined
05:09
ZeroForce joined
|
|||
| Tene | eternaleye: if you then write several of the coreutils in Parrot and ship them as PBCs, you could have a pretty nice parrot-only embedded environment. | 05:34 | |
| or just as functions in the parsh pbc, which checks the name it was called with. | 05:35 | ||
| like busybox | |||
| NotFound | And if you call them as internal commands, it may even be a lot faster than conventional shells. | 05:37 | |
| dalek | rrot: r39517 | cotto++ | branches/pmc_pct/compilers (13 files): [codingstd] fix some (but not all) codingstd failures in pmc_pct |
05:38 | |
| NotFound | msg pmichaud_ src/string/encoding/utf8.c:591 looks wrong, certainly | 05:39 | |
| purl | Message for pmichaud_ stored. | ||
|
05:39
uniejo joined
05:42
uniejo joined
|
|||
| cotto | That's nuts. I'm amazed that we've got almost 50 people coming to the pmvw. | 05:54 | |
| I wonder how much awesome can be added to pmc_pct by that time. | 06:09 | ||
|
06:09
cognominal joined
|
|||
| cotto | Can I safely assume that a PMC is an aggregate if it doesn't do scalar? | 06:59 | |
| chromatic | I don't think you can; I'm not sure we're aggressive about marking aggregates with or without that metadata. | 07:03 | |
| cotto | I think it'll work in the limited context I'm using it. I'll make sure to put a big warning on it. | 07:04 | |
| Is there some existing code I can use to make a deep clone of a PMC? | 07:11 | ||
|
07:14
mikehh_ joined
07:21
donaldh joined
|
|||
| dalek | kudo: d2b24d8 | tene++ | src/builtins/eval.pir: Fix the keyword for loading a foreign library (japhb++) |
07:27 | |
|
07:28
masak joined
07:31
viklund_ joined
|
|||
| dalek | TT #753 created by japhb++: Deprecate NCI/call_toolkit_init.* in favor of NCI/Utils.* | 07:31 | |
| rrot: r39518 | japhb++ | trunk (4 files): Deprecate r/t/l/NCI/call_toolkit_init.* in favor of .../NCI/Utils.* |
07:37 | ||
| kudo: e61569f | tene++ | src/parser/actions.pm: Oops... fix the keyword in one more place too. |
07:39 | ||
| japhb | Tene: I'm about to commit my new export() routine in runtime/parrot/languages/parrot/parrot.pir ; will that conflict with anything you are working on? | 07:40 | |
| Tene | japhb: not at all. you're the first user of the 'parrot' compiler. | 07:41 | |
| japhb: as long as it still responds to 'load_library' with the same API, you can do whatever you feel is best. | |||
| japhb | :-) | ||
.oO( Oh Subversion, why can't you be Git? ) |
07:42 | ||
| Tene | japhb: I never use svn for parrot... every time I've tried, I've screwed it up. | 07:43 | |
| dalek | rrot: r39519 | japhb++ | trunk/runtime/parrot/languages/parrot/parrot.pir: New, greatly expanded Parrot::Compiler::export() |
07:44 | |
| japhb | Tene: I wouldn't either -- except that git-svn seems to have shot itself mortally in the leg while trying to rebase, and I don't feel like nuking it and pulling down all of parrot. Again. | ||
| Tene | I'll review real quick... | ||
| japhb: that's great | 07:46 | ||
| japhb | Thanks! What is? :-) | 07:47 | |
| The new export()? | |||
| Tene | japhb: yes | ||
| japhb | cool, glad you like it | ||
| dalek | rrot: r39520 | japhb++ | trunk/runtime/parrot/library/OpenGL.pir: [OpenGL] improve ambiguous names; support new experimental HLL export |
||
| Tene | japhb: do you have an example of using OpenGL from rakudo? | 07:48 | |
| japhb | Tene: working on commit message now. ;-) | ||
| Tene | :D | ||
| japhb | OK, with the commit that should be coming through any minute, I believe I am all pushed now. | 07:53 | |
| dalek | rrot: r39521 | japhb++ | trunk/examples/opengl (6 files): [OpenGL] examples: switch to NCI::Utils; better window titles; new SYNOPSES; new Perl6 use Foo:from<parrot>; use 'constant's; unhack stuff hacked up for old Rakudos; more clearly mark remaining Rakudo hackery; misc cleanups and bugfixes |
07:54 | |
| nopaste | "tene" at 166.70.38.237 pasted "japhb: I don't think it's supposed to do this..." (7 lines) at nopaste.snit.ch/16875 | 07:57 | |
| japhb | Tene: That looks like you have an insufficient GL driver. | 07:58 | |
| Tene | Spooky. | ||
| japhb | Do static-triangle.p6 and triangle.p6 work? | ||
| Tene | No. Same error. | ||
| japhb | huh. | 07:59 | |
| And the .pir versions? | |||
|
08:01
barney joined
|
|||
| Tene | same output | 08:01 | |
| japhb | Tene: er ... am I correct in assuming you realcleaned and redid configure and make with the bleed parrot? | 08:02 | |
| And what is your OS and hardware? | 08:03 | ||
| Tene | I did earlier today... I'll try again. | ||
| fedora linux x86_64 | |||
| japhb | video hardware? | ||
| purl | video hardware is probably known to suck | ||
| japhb | purl finally gets one right | ||
| purl | japhb: what? | ||
| japhb | purl, botsnack | ||
| purl | thanks japhb :) | ||
| Tene | 01:00.0 VGA compatible controller: nVidia Corporation Quadro FX 570M (rev a1) | ||
| japhb | Hmmm. That should not suck. Are you using the free or proprietary drivers? | 08:04 | |
| Tene | proprietary. Want me to try again with the free? | ||
| japhb | Nope, I'm on proprietary drivers with nvidia hardware, so that's no diff. | 08:05 | |
| (Mind you, this laptop is 32-bit and running Debian, but I think that's minor.) | |||
| Tene | same failure after realclean | ||
| japhb is nuking everything and rebuilding too | 08:06 | ||
| but it's a laptop, it will be a couple more minutes | |||
| s/laptop/old laptop/ | |||
|
08:07
riffraff joined
|
|||
| japhb | Tene, would you mind posting 'glxinfo' output, plz? | 08:09 | |
| nopaste | "tene" at 166.70.38.237 pasted "japhb++ glxinfo" (620 lines) at nopaste.snit.ch/16876 | ||
| mikehh | t/op/debuginfo.t - TODO passed: 1, 7-8 smolder smolder.plusthree.com/app/public_pr...ails/23580 | 08:12 | |
| japhb | Tene: are you running compiz or suchlike? GL compositing for the desktop? | ||
| Tene | No. | 08:13 | |
| japhb | Grrr. | ||
| Running out of ideas. | |||
| Trying a build on a 64-bit desktop, to see if its a 64-bit problem | 08:14 | ||
| bacek | tt.ro.vutbr.cz//file/cmdout///32321.txt | 08:16 | |
| tt.ro.vutbr.cz/report/pr-Parrot/rp-trunk | |||
| Looks good | |||
|
08:17
zak_ joined
|
|||
| cotto | anyone here know namespaces? | 08:23 | |
| Tene | kinda | 08:24 | |
| what's up? | |||
| purl | Me, you bitches! I'm high on crack! | ||
| Tene | shut up, purl. | ||
| purl | make me | ||
| Tene | purl: what's up is <reply> | ||
| purl | tene: bugger all, i dunno | ||
| Tene | FINE. | ||
| cotto: ? | |||
| cotto | I'd like a sanity check on a patch | ||
| Tene | I'll try. | ||
| nopaste | "cotto" at 75.92.174.97 pasted "patch to simplify pmc2c" (74 lines) at nopaste.snit.ch/16877 | 08:25 | |
| cotto | The important part is the first chunk. | ||
| Tene | That's rather outside of my experience; sorry. | 08:26 | |
| cotto | np | ||
| no, what's up is <reply> | |||
| purl | well, <reply> is maybe... or | ||
| cotto | no, (what's up) is <reply> | ||
| what's up? | 08:27 | ||
| purl | The birds, the sky, and the ceiling. | ||
| cotto | what's up? | ||
| purl | The Canadian Dollar | ||
| cotto | literal what's up? | ||
| chromatic | That simplification looks good, but I don't immediately grasp the implications. | ||
| ... but it appears that the limitations are the same. | |||
| ttbot | japhb: Parrot trunk/ r39520 MSWin32-x86-multi-thread make error tt.ro.vutbr.cz/file/cmdout/32374.txt | 08:28 | |
| japhb: Parrot trunk/ r39521 MSWin32-x86-multi-thread make error tt.ro.vutbr.cz/file/cmdout/32378.txt | |||
| japhb | What is ttbot? | 08:29 | |
| chromatic | A build bot. | ||
| cotto | I'm testing to see if using the old get_namespace without the special case causes anything bad to happen. The patch doesn't cause any test failures. | ||
| btw, chromatic++ for that mj alias | 08:30 | ||
| chromatic | You're welcome. | ||
| japhb | The txt files it's sending me appear to be garbage. | ||
| chromatic | The system doesn't have nmake installed? | 08:32 | |
| cotto | Just deleting the special case also causes no new test failures. It looks like that function gets test coverage. | 08:33 | |
| It might just be because multiple threads are very poorly tested. | |||
| chromatic | That's true also. | 08:35 | |
| cotto | Is it ok if I commit the nopasted version of the patch? | 08:37 | |
| mj41 | sorry, no path :-( | 08:38 | |
| after winXP auto update restart - will fix this soon | 08:39 | ||
| chromatic | cotto, go ahead. | ||
| japhb | Tene: unfortunately, can't reproduce your failure. IWFM on AMD64 as well. | 08:41 | |
| japhb wonders if Tene's system has some other problem, like a busted freeglut. | 08:42 | ||
| Tene | japhb: how would I notice that? | 08:43 | |
| japhb | hmmm | ||
| OK, sanity check: glxgears works? | |||
| Tene | yes | ||
| dalek | rrot: r39522 | cotto++ | trunk (2 files): [pmc2c] make some special-case code the common case |
08:44 | |
| Tene | 8.8k FPS | ||
| japhb | wheeee | ||
| Hmmm, one difference is that my drivers report OpenGL version 2.1.2, rather than 3.0.0 ... | 08:46 | ||
| Good old Debian backrev drivers, sigh. | |||
| Although ... that could be because my video cards are just a tad too old for OpenGL 3. Hmm. | 08:47 | ||
| Tene: grep 'VERSION\\|IMPLEMENTATION' /usr/include/GL/freeglut_std.h | 08:49 | ||
| Tene | #define GLUT_API_VERSION 4 | 08:50 | |
| #define FREEGLUT_VERSION_2_0 1 | |||
| #define GLUT_XLIB_IMPLEMENTATION 13 | |||
| japhb | damitol | ||
|
08:56
clinton joined
|
|||
| japhb | I'm not versed enough with Fedora to know how to do this, but on Debian I'd tell you to 'apt-cache rdepends freeglut3' and pick something fun to try. | 08:57 | |
| However, it's 2 AM. I need to get some sleep. | 08:58 | ||
| Tene | looks like my freeglut is 2.4 | 08:59 | |
| not 3 | |||
| japhb | Anyone else, I'd appreciate some testing of the current OpenGL examples. | ||
| Tene: your defines were the same as mine. :-/ | 09:00 | ||
| Tene | anyway, I need to go too | ||
| Chat later. | |||
| japhb | Tene: any objection to bumping the Parrot revision requirement for Rakudo? | ||
| To 39521, I guess? | 09:01 | ||
| Ah, OK, ttyl | |||
| Tene | japhb: you want to ask pmichaud, not me. | ||
| japhb | OK, will do tomorrow, thx | ||
| mj41 | TapTinder client "pc-strakos" auto start fixed (added "Setting environment for using Microsoft Visual Studio 2008 x86 tools."). tt.ro.vutbr.cz/buildstatus/pr-Parrot/rp-trunk | 09:04 | |
|
09:06
bacek joined
|
|||
| bacek | oh hai... | 09:14 | |
| Tene | hi bacek | 09:25 | |
| bacek | hi Tene. How is HLL stuff going? | ||
| Tene | going very well | ||
| my main blocker is other HLLs to work with. :) | 09:26 | ||
| bacek | :) | ||
| Tene | Feel free to help me out here... you have a common lisp implementation stashed away anywhere? | 09:29 | |
| bacek: I just posted this earlier: gist.github.com/128499 | |||
| bacek | wow! | 09:30 | |
| Tene++ # HLL ftw | |||
| Tene | I wrote it two weeks ago, I think, on an airplane. | ||
| Then forgot about it. | |||
| bacek | In Soviet Russia code forget YOU! :) | 09:31 | |
| Tene | Oh, I'm also blocking on a weird segfault when trying to load Rakudo or Cardinal from my scheme compiler, steme | ||
| didn't happen a month ago, but it does now. | |||
| bacek | have a backtrace? | ||
| Tene | trac.parrot.org/parrot/ticket/744 | 09:32 | |
| something invalid gets stored in the pmc registers of a context | |||
| 0x21 iirc, as a PMC pointer | |||
| bacek checking | |||
| purl | checking is probably just different | ||
| Tene | no, 0x1 | 09:34 | |
| nopaste | "tene" at 166.70.38.237 pasted "bt for bacek" (114 lines) at nopaste.snit.ch/16879 | 09:35 | |
| bacek | Tene: ok... It's all refcounting and Whiteknight faults :) | 09:44 | |
| Tene | purl: msg whiteknight bacek says that you're to blame for TT 744. Think you can look at it for me? | 09:59 | |
| purl | Message for whiteknight stored. | ||
| bacek | Tene: refcounting is bigger problem. OTOH Whiteknight can implement Contexts as GCable PMCs :) | 10:25 | |
| Infinoid | And then he can speed up our GC and make it play nicely with threads, and while he's *that* deep in the woods, other magical ponies should be easy to find | 10:44 | |
|
10:52
payload joined
10:55
muixirt joined
|
|||
| nopaste | "muixirt" at 91.47.108.143 pasted "/perl6 --target=pir -e 'while 1 { };'" (122 lines) at nopaste.snit.ch/16881 | 10:58 | |
| muixirt | the while loop leaks lots of memory, is it sole problem of parrot? | 10:59 | |
| Infinoid | Probably. If you could reduce it further (so it doesn't depend on perl6.pbc), we would know for sure | 11:11 | |
| muixirt | Infinoid, after the loop27_test: label that new $P20, "Int" does allocate mem, right? It seems to be called endlessly in the loop. | 11:15 | |
|
11:21
donaldh joined
11:35
particle1 joined
11:36
mberends joined
11:42
kj joined
|
|||
| Infinoid | muixirt: Right, but the previous Int should eventually get GCed | 11:47 | |
| muixirt | also if you run that p6 snippet there are some calls to mmap2 and according to the comments in parrot/src/gc/malloc.c | 11:51 | |
| that is only the case of requests >128kB | 11:53 | ||
| Infinoid | muixirt: I think we're using the system malloc in most/all cases, not dlmalloc | 12:00 | |
| at least, on my machine, malloc.c isn't built | 12:01 | ||
| mmap could also be used for jit buffers, or something else entirely | 12:03 | ||
|
12:06
burmas joined
12:10
elmex joined
|
|||
| muixirt | Infinoid, you are right, it isn't built on my machine either, but system's malloc calls mmap too | 12:10 | |
| Infinoid | okay. that just means it's harder to read in strace :) | 12:16 | |
| (though mmap() is arguably a lot cleaner than sbrk()...) | |||
|
12:51
Whiteknight joined
12:54
szabgab joined
13:03
Util joined
|
|||
| dalek | rrot: r39523 | whiteknight++ | trunk/src/pmc/default.pmc: [codingstd] remove trailing whitespace from default.pmc |
13:04 | |
|
13:22
skids joined
|
|||
| Whiteknight | irclogs? | 13:28 | |
| purl | it has been said that irclogs is irclog.perlgeek.de/parrot/today or see also: infrared clogs | ||
|
13:38
ruoso joined
13:39
ruoso joined
13:41
ruoso joined
|
|||
| Whiteknight | Tene: ping | 13:41 | |
|
13:43
ruoso joined
13:44
ruoso joined
13:47
skids joined
13:48
gryphon joined,
particle joined
|
|||
| Coke de-cloaks. | 13:49 | ||
| de-cokes? | |||
| particle | i see you haven't de-punned | 13:50 | |
| Coke | still cokes run deep. | 13:54 | |
| Whiteknight | wahwah | 14:06 | |
| (bad puns)-- | 14:12 | ||
| karma bad puns | |||
| purl | bad puns has neutral karma | ||
| Whiteknight | (bad puns)-- | 14:13 | |
| karma bad puns | |||
| purl | bad puns has karma of -1 | ||
| Coke | (bad puns)++ ! | 14:24 | |
| Whiteknight | it would be negative karma too, if it wasn't for you meddling kids | 14:27 | |
| Coke kills another use of multiple PMC inheritence. | 14:36 | ||
| Coke tries to think of a way to make tcl's types play nice with parrot's types. | 14:39 | ||
| (for me, an RPA is a scalar. =-) | |||
| Whiteknight | great | 14:40 | |
|
14:40
burmas left
|
|||
| dalek | rtcl: r478 | coke++ | trunk/ (5 files): Remove TclObject, minor pmc cleanups between the scalar types; but it was not universally used, and we want more custom behavior, and this will simplify efforts to switch to PIR classes instead of PMCs. |
14:40 | |
|
14:41
payload joined
14:48
Theory joined
|
|||
| Coke | hurm. 'self' should work in a :vtable, no? | 14:56 | |
| pmichaud | should, yes. Might still need :method. | 14:57 | |
| Whiteknight | Coke: it's unreliable | 15:00 | |
| not in all vtables | |||
| and usually you need to add :method too | 15:01 | ||
| Tene | Whiteknight: pong | 15:08 | |
|
15:09
particle joined
|
|||
| Coke | Whiteknight: that sucks. | 15:13 | |
| purl | The rock is now off. | ||
| Coke | hurm. | 15:14 | |
| doesn't help. minipaste: | |||
| ha. my fault. | 15:15 | ||
| $P1 = get_iter self # get_iter is a method on a TclArray; I wanted 'iter' | 15:16 | ||
|
15:20
donaldh joined
|
|||
| dalek | rtcl: r479 | coke++ | trunk/ (5 files): Convert the dict PMC to a class. |
15:25 | |
| rtcl: r480 | coke++ | trunk/src/pmc/tclint.pmc: remove (now?) useless vtable override. |
15:41 | ||
|
15:45
ascent joined
|
|||
| Whiteknight | Coke: Yeah, we're working on it | 15:47 | |
| Tene | Whiteknight: pong | 15:50 | |
| dalek | rtcl: r481 | coke++ | trunk/src/pmc/tcllist.pmc: remove (now?) useless vtable override |
||
| Whiteknight | Tene: what's going on with TT #744? | 15:52 | |
| because I didn't think I had anything to do with it | |||
| besides it being GC-related, and me doing GC stuf | 15:53 | ||
| Tene | Whiteknight: Eh, just harassing you because bacek said so. Nothing more. | ||
| I'm not sure it's GC-related, actually. It's just that the GC triggers it. | |||
| There's a 0x1 value in a context where a PMC * should be | 15:54 | ||
| (obviously segfault when dereferenced) | |||
| dalek | rrot: r39524 | whiteknight++ | trunk/t/pmc/handle.t: [t] fix t/pmc/handle.t do do what it should. Also, rewrite it in PIR not Perl5 |
||
| Coke | given a MULTI vtable at the PMC level, I can override it in a PMC subclass also using MULTI. (I just want to override one of the variants.) Is it expected that this should work in a PIR subclass? | 16:04 | |
| pmichaud | you mean specifically for multi vtables? | 16:08 | |
| or for methods in general? | |||
| in my experience, defining a method in a PIR subclass hides all similarly-named methods in its parent classes, regardless of :multi | 16:09 | ||
| I don't know if that holds for vtables | |||
| Coke | I specifically care about the divide vtable. | 16:12 | |
| if it's divide(integer,_), I want to override, otherwise, don'tcare. | |||
| (This works at the PMC level, but fails in pir.) | |||
| I'm experimenting with eliminating my PMCs to avoid the PBC/C barrier. | 16:14 | ||
| crap. I think I might have missed a namespace declaration in my new class file that might explain the issue. | 16:22 | ||
|
16:25
Psyche^ joined,
chromatic joined
|
|||
| dalek | kudo: 9aa210f | pmichaud++ | src/setting/Array.pm: Remove incorrect constraints on splice() arguments. |
16:58 | |
| kudo: 31443c0 | pmichaud++ | src/classes/Str.pir: Add some more ranges to Str.succ . |
|||
|
17:32
itrekkie joined
17:39
itrekkie left
|
|||
| japhb | pmichaud: What "type" should this experimental deprecation TT be? "Roadmap"? | 17:40 | |
| japhb assumes so ... can always change it later | 17:42 | ||
| dalek | TT #754 created by japhb++: Mark new cross-HLL export/import as "experimental" by pre-deprecating it | 17:43 | |
| japhb | OK, TT and DEPRECATED.pod done. | 17:50 | |
| Coke | bah, was just editing deprecated. | ||
| I may have some edits for you. =-) | |||
| japhb: HA! perfect. | 17:51 | ||
| japhb | :-) | 17:52 | |
| Coke | I have a more generic experimental notice at the top (already using the same [tag] you did.) | ||
| japhb | excellent. | ||
| Coke | I'll just remove the more specific version of the text you have for that item. | ||
| japhb | np | ||
| dalek | rrot: r39525 | japhb++ | trunk/DEPRECATED.pod: Pre-deprecate cross-HLL library loading design and implementation |
17:53 | |
| Coke | Done. | 17:56 | |
| ok, now done. | 17:58 | ||
| japhb | Wording in footnote is a tad confusing. Mind if I copy edit? | 17:59 | |
|
18:00
HG` joined
|
|||
| Coke | nope. | 18:00 | |
| dalek | rrot: r39526 | coke++ | trunk/DEPRECATED.pod: Extend the [experimental] notes a bit. |
||
| rrot: r39527 | coke++ | trunk/DEPRECATED.pod: fix pod-o |
|||
| japhb | Coke: "For an item to be considered experimental, it can B<never> have shipped in a stable release without the C<[experimental]> tag; otherwise, it must be deprecated normally before removal or incompatible change." | 18:03 | |
| Better? | |||
| (Only part after semicolon has been changed) | 18:04 | ||
|
18:05
mikehh_ joined
|
|||
| japhb commits ... it's not like we'll run out of revision numbers if Coke wants to change it again. :-) | 18:06 | ||
| dalek | rrot: r39528 | japhb++ | trunk/DEPRECATED.pod: Clear up confusing wording in [experimental] footnote |
18:07 | |
|
18:10
gryphon joined
|
|||
| Coke | japhb: sorry, yes, that's clearer. | 18:20 | |
| chromatic: ping. | 18:21 | ||
| japhb | Tene: Do you Configure your Parrot with --optimize ? | 18:40 | |
| It's occurred to me that may be a difference between our systems. | |||
| japhb tries unoptimized 64-bit build .... | 18:41 | ||
| chromatic | pong | 18:44 | |
| Coke | chromatic: based on previous conversations, moving code from C to PIR is, in general, desirable for HLLs? | 18:55 | |
| chromatic | In general, yes. | 18:56 | |
| Coke | k. | ||
| chromatic | The results depend on what you can accomplish and how often you might have crossed the Rubicon in the mixed language version however. | ||
| nopaste | "muixirt" at 91.47.108.143 pasted "PIR example that leaks memory" (8 lines) at nopaste.snit.ch/16885 | 18:57 | |
| Coke | I'm just trying to avoid cross the PBC/C boundary as much as possible. | 18:58 | |
|
19:00
Zak joined
|
|||
| Coke | pmichaud (or anyone): with a pmc, I have to do root_new ['parrot'; 'TclList'] - for a PIR based class replacement, should that same call work? | 19:00 | |
| japhb | Is there a way to 1) Tell parrot to say something each time it does a GC run, and 2) to see how long each GC run takes? | 19:01 | |
| muixirt | my example leaks memory, should have the GC prevented that? | ||
| Coke | muixirt: leaks as reported by valgrind, or checked manually via top? | 19:02 | |
| japhb | muixirt: it should have, yes. :-) | ||
| muixirt | Coke, via top | ||
| chromatic | top lies. | ||
| Coke | ok. if you force a GC run each time through the loop, you might see different results. | ||
| japhb | chromatic: a simple piece of PIR like that should not cause the process to grow. As soon as it needs RAM, it should GC, instead of growing. If not, the GC is off. | 19:03 | |
| ("off" as in "wonky") | |||
| chromatic | Sure, but top lies. | ||
| muixirt | Coke, yes with -R gcdebug there is no leakage | 19:04 | |
| japhb | Tene: Still can't reproduce. Optimized or unoptimized, I can't get the OpenGL stuff to fail. | ||
| muixirt | chromatic, but strace -c doesn't lie, at least not on my system ;-) | ||
| japhb | chromatic: happen to know the answers to my questions above (regarding logging / timing GC runs), or is there someone better to ask? | 19:06 | |
| chromatic | Nothing really keeps or reports statistics like that. | ||
| japhb | awww. | ||
| I keep seeing pauses in the OpenGL rendering, and I suspect I'm actually seeing big GC runs happening -- but wanted to confirm that. | 19:07 | ||
| Coke | (i'm just trying to clarify between valgrind-style leak and "gc-doesn't-reclaim-as-fast-as-possible" leak.) | ||
| chromatic | I've run that code with 100k, 200k, and 400k iterations, and Valgrind reports no leaks (besides a single context) and a string in main. | ||
| Coke | you can dump out the pmcs allocated inside the loop, though. | 19:08 | |
| japhb | Coke: who was that comment to? | ||
| Coke | code.google.com/p/partcl/source/bro...os.pir#156 (Though that hasn't been updated in a while) | ||
| chromatic | Sure, all Valgrind proves is that we're not leaking any PMCs when we shut down the end of the process. | 19:09 | |
| pmichaud | Coke: root_new ['parrot';'TclList'] simply says to grab the TclList class that is registered through the ['parrot';'TclList'] namespace | ||
| it works for both PIR classes and PMCs | |||
| Coke | pmichaud: k. | ||
| nopaste | "coke" at 72.228.52.192 pasted "pmc vs pir" (66 lines) at nopaste.snit.ch/16886 | 19:11 | |
| pmichaud | it's worth noting that PIR classes are currently about 3x slower than PMCs | 19:12 | |
| (at least as far as creating them goes) | |||
| I should rephrase | |||
| creating objects from PIR classes is 3x slower than creating PMC objects | |||
| chromatic | The "die" looks a little severe. | ||
| Coke | chromatic: but equivalent to the thrown exception before. | 19:13 | |
| Whiteknight | 3x slower? I'm surprised that it's not worse | ||
| pmichaud | well, it depends somewhat on what's being created, yes. | ||
| chromatic | Is "die" catchable? | 19:14 | |
| Coke | whoops. I missed a return on check_undef. | ||
| chromatic: yes. | |||
| Whiteknight | I've got a very interesting paper here from cotto++ about a GC that should negate pauses entirely | 19:15 | |
| so that's a very interesting thing to think about | 19:16 | ||
| cotto | I actually had some fun reading that paper and picturing the various threads as dinosaurs wearing colored shirts and carrying paintbrushes. | ||
| chromatic | Is it the realtime G1 collector? | ||
| Whiteknight | no, it's the VCGC collector | ||
| I don't think I know G1 | |||
| oh, G1 is the new collector for the Java VM, right? | 19:17 | ||
| chromatic | Garbage first. | ||
| muixirt | so what is the definition for memory leak around here? what's wrong with the example? | 19:19 | |
| Whiteknight | chromatic: yeah, I'm reading the Garbage First paper now | ||
| muixirt: There are two sources for memory allocations: the GC and direct malloc calls | 19:20 | ||
| we're only worried about leaks from the direct malloc calls | |||
|
19:20
donaldh joined
|
|||
| particle | venture capital garbage collector? | 19:21 | |
| muixirt | Whiteknight, so it is a GC problem? | 19:23 | |
| Whiteknight | muixirt: probably not. Our current collector is simplistic, but relatively accurate | 19:25 | |
| more likely the problem stems from one of the million other places that allocate and manage memory directly from the system | 19:26 | ||
|
19:26
szabgab joined
|
|||
| Whiteknight | Very Concurrent Garbage Collector | 19:26 | |
| japhb | Man, that sentence is wrong in so many ways. | 19:27 | |
| chromatic | It could be fragmentation, but it has some of the feel of PObjs living too long. | ||
| muixirt | Whiteknight, limiting vir. mem. gives Parrot VM: PANIC: Out of mem! C file src/gc/alloc_memory.c, line 142 | ||
| chromatic | If it *were* too conservative collection, I'd expect it to run out of memory faster. | ||
| Whiteknight | is there more information about this particular bug anywhere? | 19:28 | |
|
19:33
bobke joined
19:37
estrabd joined
19:41
viklund_ joined
|
|||
| dalek | kudo: de1e9f0 | moritz++ | docs/ChangeLog: [docs] initial changelog for 2009-06 release |
19:43 | |
| Tene | japhb: I do not use --optimize | 19:50 | |
| mj41 | another out of mem trac.parrot.org/parrot/ticket/706 | ||
|
19:52
bacek joined
|
|||
| Coke grumbles | 20:10 | ||
| dalek | rtcl: r482 | coke++ | trunk/runtime/builtin/namespace.pir: use fewer opcodes |
20:19 | |
| TT #755 created by doughera++: 'make install-dev' assumes "modern" File::Path | 20:24 | ||
| mj41 | added Mac OS tt.ro.vutbr.cz/table/machine/id-11 to TapTinder | 20:31 | |
|
20:39
Andy joined
|
|||
| eternaleye | purl: msg Whiteknight cs.nju.edu.cn/gchen/paper/ipdps2002...13_161.PDF (aka MCGC) claims it outperforms VCGC | 20:41 | |
| purl | Message for whiteknight stored. | ||
| eternaleye | Oh this is amusing. The google-hosted HTML version of the VCGC paper has effectively been sed'ed with s/fi//g | 20:46 | |
| chromatic | They probably can't render the proper ligature. | 20:47 | |
| eternaleye | Hm, maybe more like s/f+.//g | ||
| Since efficiently became eciently | |||
| pmichaud | nopaste.snit.ch/16885 # why does Parrot GC fail to reclaim things here during runtime? | 20:53 | |
| chromatic | It could be the GC threshold tweak I applied a couple of weeks ago. | 20:54 | |
| I doubt that. | |||
| It could be that something's too aggressive about marking a context as alive. | |||
| I doubt that too. | |||
| pmichaud | there's not a context involved here, though. | ||
| I mean, afaict, we aren't creating any new contexts. | |||
| unless it's the evil mmd stuff at work again. | |||
| chromatic | Sure, but that Integer only gets marked because it's in a context. | ||
| pmichaud | I don't understand. | 20:55 | |
| chromatic | It's in a register which is in a context. | ||
| Nothing else refers to it (that I can see). | |||
| pmichaud | right, but the register is constantly being updated to point to a new Integer | ||
| so why aren't the old ones being reclaimed? | |||
| chromatic | Right, but every time through the GC, that context has to get marked so the current contents of that register don't get reclaimed. | ||
| pmichaud | sure, I understand that | 20:56 | |
| iiuc, there's only one context in play here, yes? | |||
| that context contains the $P0 register | |||
| marking the context causes the PMC that the $P0 register points to to be marked | |||
| chromatic | One or two. I'm not sure if calling main uses the initial context or creates a new one. | ||
| There should be only one PMC marked in this context though. | |||
| pmichaud | either way, while we're in the loop we're not creating new contexts | ||
| (note that it's an infinite loop) | 20:57 | ||
| chromatic | Right, unless something called from one of the ops creates a context. | ||
| pmichaud | I'm guessing that must be the case | ||
| because this one context would only be marking one PMC. That doesn't explain what's eating up all of the memory | 20:58 | ||
| i.e., something isn't being reclaimed | |||
| chromatic | I think so too. I haven't had a chance to dig into it yet though. | ||
| bacek | morning, good morning | 21:00 | |
| nopaste | "pmichaud" at 72.181.176.220 pasted "This leaks also, only faster." (6 lines) at nopaste.snit.ch/16887 | 21:01 | |
| bacek | I have a question: why Namspace is-a Hash, not has-a Hash? | 21:02 | |
| pmichaud | bacek: what would Hashes do that Namespaces should not? | 21:03 | |
| bacek | Namespace override every single method in Hash. And than call SUPER sometimes | 21:04 | |
| pmichaud | namespace overrides *every* method in Hash? are you sure? | ||
| bacek | (get|set)_*_keyed_* | ||
| at least all those overrided. | 21:05 | ||
| pmichaud | right. But there are a lot of methods in Hash that probably aren't overridden | ||
| get_iter is a big one | |||
| bacek | And I want to kill it... It's total kludge. | 21:06 | |
| pmichaud | Hash defines 64 VTABLE functions. | ||
| Namespace defines 28. | |||
| Therefore, Namespace cannot be overriding all of Hash's methods. | 21:07 | ||
| bacek | gimme sec. I'll switch to trunk to check. | ||
| pmichaud | but more to the point, the Perl model for namespaces (and indeed for most dynamic languages) is that they act like hashes. So it makes very good sense that NameSpace isa Hash. | 21:08 | |
| for something like nopaste 16887, what would normally trigger a GC run? | |||
| because afaict there's never any GC taking place. | 21:09 | ||
| chromatic | Running out of available PMCs in the free pool should trigger it. | ||
| pmichaud | hmmm. | ||
| would I see that in a trace? ISTR seeing things like "DOD" in traces before, but I'm not seeing one here. | |||
| chromatic | I think it's Parrot_gc_run something or other. | 21:10 | |
| pmichaud | 773:Parrot_gc_mark_and_sweep | 21:11 | |
| bacek | pmichaud: Namespaces are nested Hashes. Not plain one... | ||
| pmichaud | bacek: they can act like hash-of-hash, yes. | ||
| bacek | and something like 'get|set_integer_keyed' doesn't make sense for namespaces... | 21:12 | |
| or I missed something | |||
| pmichaud | bacek: get_integer_keyed is just enabling something like ns[0] to act the same as ns['0'] | ||
| that's true for hashes as well. | 21:13 | ||
| you can throw it out, but it doesn't really hurt for it to be there. | |||
| bacek | pmichaud: not in current Namespace implementation | ||
| pmichaud | bacek: hmm...? | ||
| how do you mean "not in current Namespace implementation"? | |||
| oh, sorry, I was thinking keyed_int | 21:14 | ||
| bacek | ns = ['foo';'bar';'baz'] | ||
| pmichaud | it's just enabling $I0 = ns['key'] to work | ||
| I agree that ns['key'] = $I0 might not work properly. I'd have to look. | 21:15 | ||
| bacek | set_pmc_keyed in Namespace treat RSA specially. set_integer_keyed - not | ||
| pmichaud | anyway, it's not been a problem I've ever run across. | ||
| bacek | I'm trying deuglyfy Keys... And this is one of menay problems I found so far. | 21:16 | |
| many | |||
| chromatic | That's not the worst problem with Keys by far. | 21:17 | |
| bacek | As far as I can see, worst problem of Keys is existence of Keys... | 21:18 | |
| pmichaud | at any rate, it seems natural to me that NameSpace isa Hash. It would seem unnatural if that's not the case. | 21:20 | |
| in general, perl folks expect namespaces to act like hashes. | |||
| bacek | get_pmc_keyed_int? | 21:21 | |
| LSP totally broken for Namespace/Hash pair. | 21:22 | ||
| pmichaud | especially get_pmc_keyed_int | ||
| if I do: my $a = 3 + foo(); my $b = $ns{$a} | |||
| I expect it to work, even if $a is an Int | |||
| bacek | ok. What about get_integer_keyed? | 21:23 | |
| pmichaud | I did say that one makes less sense. But just because a few operations might not make sense doesn't necessarily mean we should break isa | 21:24 | |
| bacek | my Int $a = $ns{<a b c>}; vs my $b = $ns{<a b c>} | ||
| pmichaud | it might just mean we should convert those methods to throw exceptions | ||
| bacek | But Namespace override all operations which make sense for Namespace | 21:25 | |
| So, If Namespace has-a Hash, all unimplemented methods will throw exception. | |||
| And in meaningful methods Namespace can call VTABLE_get_foo(hash) instead of SUPER(). | 21:26 | ||
| pmichaud | and VTABLE_isa ...? | 21:27 | |
| bacek | "Namespace" | ||
| purl | hmmm... "Namespace" is like "domain" though | ||
| pmichaud | no, I mean if I ask if Namespace isa Hash ... ? | 21:28 | |
| bacek | But VTABLE_does(hash) == true | ||
| pmichaud | you're going to change the isa relationship to be false, yes? | ||
| bacek | I claim that "Namespace isa Hash == true" is misleading. | ||
| pmichaud | not to perl folks it isn't. | 21:29 | |
| bacek | Why? | ||
| pmichaud | because we expect our namespaces to be hashes. | ||
| bacek | "to be" or "to act like"? | ||
| pmichaud | and, you'll have to add a few methods to the NameSpace PMC -- the ones that are there aren't the complete set | 21:30 | |
|
21:30
viklund_ joined
|
|||
| bacek | e.g.? | 21:30 | |
| purl | e.g. is `exempli gratia', latin for `for example' | ||
| pmichaud | get_iter | ||
| purl | get_iter is a vtable function | ||
| pmichaud | elements | ||
| purl | elements is at www.privatehand.com/flash/elements.html | ||
| bacek | purl: shut up | 21:31 | |
| purl | make me | ||
| pmichaud | clone | ||
| bacek | get_iter for Namespace is different from Hash. | ||
| pmichaud | it is? | ||
| purl | Oh no it isn't! | ||
| bacek | because Namespace is HoH. | ||
| chromatic | A Hash can be a HoH too. | ||
| pmichaud | NameSpace doesn't currently define a get_iter, which means it's inheriting the one from hash. | ||
| and... what chromatic++ said. | 21:32 | ||
| bacek | and rely on weird Key behaviour/implementation | ||
| pmichaud | then fix the key behavior in Hash, not just in NameSpace | ||
| bacek | agree | ||
| But, Namespace poking into Hash guts. | |||
| Because of "isa". | 21:33 | ||
| pmichaud | this is a place where I'd argue that efficiency in namespace is extremely important | ||
| even if it means poking into hash guts | |||
| I already see measurable differences between | |||
| root_new ['parrot';'Integer'] | 21:34 | ||
| and | |||
| new ['Integer'] | |||
| bacek | That's why I'm trying to separate Hashes and Namespaces. | ||
| pmichaud | you think you can make Namespace more efficient by going through the VTABLE instead of poking directly? | ||
| chromatic | I don't think the efficiency argument is that compelling here. Hashes and Keys are a mess, and they'll be easier to make efficient when they're not a mess. | 21:35 | |
| (Making them less a mess will likely *improve* efficiency.) | |||
| pmichaud | chromatic: fair enough, I'm willing to wait. | 21:36 | |
| bacek | oh... src/global.c... It rely on Namespace guts and iterate over it instead of using interface | ||
| chromatic | Key especially has a lot of ad-hoc polymorphism that's much less efficient than it could be. | 21:37 | |
| pmichaud | in some sense it bugs me that there's a lot of time being spent refactoring things that aren't externally broken (and making them slower) while things that are needed aren't getting completed (more) | ||
| calling conventions comes to mind | 21:38 | ||
| MMD is another | |||
| chromatic | Yeah, me too. | ||
| pmichaud | IO is a third. | ||
| bacek feel some similarity in this subsystems | 21:39 | ||
| pmichaud | I guess my question would be, what is currently blocking on a refactoring of Key, NameSpace, and Hash ? | 21:40 | |
| bacek | pirc, emitting PBC from PIR | ||
| pmichaud | you're saying that it's impossible to emit PBC from PIR without refactoring NameSpace, Key, and Hash? | 21:41 | |
| bacek | ATM pirc doen's support Keyed namespaces. | ||
| pmichaud | that sounds like a limitation of pirc, then | ||
| chromatic | I thought that was a problem with pirc and constant primitives. | ||
| pmichaud | unless your intent is to completely eliminate Keys | 21:42 | |
| bacek | Emitting PBC from PIR require creating Keys. | ||
| pmichaud | so, it sounds like you need a way to create keys from PIR | ||
| bacek | Yes, I really want eliminate Keys.. | ||
| chromatic | We can't eliminate Keys anytime soon. | ||
| pmichaud | what would you have in their place? | ||
| bacek | Keys are quite different depends on context of usage | ||
| pmichaud: Iterators. Aggregate specific. | 21:43 | ||
| chromatic: soon means "5 weeks" | |||
| pmichaud | bacek: but what about something like new $P0, ['Foo';'Bar'] | 21:44 | |
| what would that be instead? | |||
| bacek | $P0 is ? | ||
| cotto | ininitialized | ||
| chromatic | I don't think five weeks is realistic for a change this big. | ||
| pmichaud | $P0 is the register that gets bound to the new instance of ['Foo';'Bar'] | ||
| cotto | $P0 = new ['Foo';'Bar'] | ||
| bacek | ['Foo';'Bar'] is Namespace or RSA? | 21:45 | |
| pmichaud | It's a Key. | ||
| bacek | Can it be RSA? | 21:46 | |
| which handled by "op new" properly? | |||
| pmichaud | so, you're talking about having compile-time RSAs/ | ||
| ? | |||
| What would you do with | |||
| bacek | yes. | ||
| pmichaud | $P0 = new ['parrot';$S0] | ||
| note that if this requires creating a gc-able RSA at runtime, I'm a little against it. | 21:47 | ||
| bacek | is Namespace is HoH - $root_ns<parrot>{$S0} | ||
| pmichaud | I can't write that in PIR like that | ||
| chromatic | No kidding, especially when a key can be constant. | ||
| bacek | is it "$P0 = new ['parrot'], $S0"? | 21:48 | |
| pmichaud | no | 21:49 | |
| that would be different. | |||
| it's still new_p_pc | |||
| it's not new_p_pc_s | |||
| the ['parrot';$S0] case I could likely live without. | 21:50 | ||
| If you want to change PIR so that ['parrot';'Foo'] becomes a compile-time RSA constant, that's okay with me. | |||
| bacek | It can be compile-time constant | ||
| chromatic | That's an IMCC change though. | ||
| bacek | And Parrot_oo_get_class treat Keys/RSA equally already. | ||
| pmichaud | well, you'd also have to fix it for all of the other PMC types | 21:51 | |
| $I0 = hash['foo';'bar'] | |||
|
21:51
Whiteknight joined
|
|||
| pmichaud | $P0 = array[0;1] | 21:51 | |
| bacek | I'm thinking about add 'VTABLE_hash_value'. | ||
| pmichaud | ....what would that do? | 21:52 | |
| bacek | Allow "hash.c" works with PMCs. | ||
| pmichaud | uh, that doesn't make any sense to me, but it probably doesn't need to. | ||
| anyway, my point is that Keys get used in lots of places already | 21:53 | ||
| so if you're going to get rid of them, you have to change IMCC as well. | |||
| bacek | Currently we can't use PMC as Hash keys. | ||
| pmichaud | and fix all of the places they get used. | ||
| We can't? | |||
| Rakudo uses PMCs as hash keys all the time. | |||
| So does PGE. | |||
| oh, you mean as non-string hash keys | 21:54 | ||
| bacek | yes | ||
| pmichaud | that should probably be a different kind of hash | ||
| not replace the existing one | |||
| bacek | Why? | ||
| pmichaud | value semantics can get really weird with arbitrary PMC types | ||
| there's not a generic "are these two things equal" comparison that is reliable enough to work | |||
| bacek | We have VTABLE_clone | 21:55 | |
| to store key. | |||
| We have VTABLE_is_equals to check equivalence. | |||
| pmichaud | heh | ||
| and you think that works? | |||
| bacek | We just need VTABLE_hash_value | ||
| Which part doesn't work? | 21:56 | ||
| current hash.c is polymorphic. So it should work | |||
| pmichaud | most of the relational ops currently EPIC FAIL when passed differing types | ||
| bacek | oh... | 21:57 | |
| We don't need relational ops for hashes. | |||
| pmichaud | you need at least the equivalence op | ||
| bacek | yes | ||
| pmichaud | that's also one that EPIC FAILS when passed differing types | ||
| bacek | But it works, isn't it? | 21:58 | |
| cotto | bacek, why not just try to make the Key code sane? | ||
| bacek | Hash_key_is_equal can check type before calling VTABLE_is_equal | ||
| cotto: because Keys are insane | |||
| pmichaud | anyway, keep in mind that you'll have to fix keys for (get|set)(_root|_hll|)(namespace|global) | 21:59 | |
| and for isa | |||
| and for new | |||
| and for subclass | |||
| and for newclass | |||
| and for get_class | |||
| and for :multi | |||
| bacek | pmichaud: Parrot_oo_get_class. | ||
| cotto | by implementation they're insane, but you think they can't be fixed? | ||
| bacek | cotto: they are insane by design... fsvo "design". | 22:00 | |
| pmichaud | Parrot_oo_get_class doesn't solve the get|set namespace|global issue. | ||
| Parrot_oo_get_class doesn't solve the generic keyed interface to hash/array aggregates. | |||
| bacek | get_namespace call Parrot_get_namespace_keyed. | 22:01 | |
| which call "internal_ns_keyed". | |||
| so there is one place to fix. | 22:02 | ||
| hang on | |||
| pmichaud | seems like a lot of work, when it would be easier to just get pirc to be able to generate keys. | ||
| bacek | "isa", "new", "subclass", "newclass", etc | ||
| All of them uses Keys as RSA. | 22:03 | ||
| Actually LinkedStringList | |||
| pmichaud decides to wander off somewhere more productive, rather than fight a worthless fight. | 22:04 | ||
| bacek | It's not worthless... At least I gather some useful information. | 22:06 | |
| chromatic | allison will have your head if you check in a big change like that a couple of weeks before 1.4. | 22:08 | |
| I'm not saying it's not worth doing in general, only that it's a potentially disruptive change right now. | |||
| bacek | 5 weeks is right after 1.4 | 22:09 | |
| pmichaud | I count 6. | ||
| bacek | And I'm not going to hack it in trunk. | ||
| pmichaud: welcome to future! It's Saturday already :) | 22:10 | ||
| chromatic | Okay, I misunderstood then. | ||
| pmichaud | five weeks from today is July 18. | ||
| 1.4 is July 21. | |||
| bacek | Ok-ok. 6 weeks. | 22:11 | |
| Of cause it will not hit 1.4 release. | |||
| pmichaud | even so, I'm a bit annoyed by these internal refactors that don't result in measurable changes to HLL implementors. | ||
| (or the changes they do present are decidedly negative) | |||
| bacek | I treat it as [CAGE] cleanup. | 22:12 | |
| Not even as [cage] | |||
| pmichaud | if nothing breaks, and if performance doesn't go down, I have no objection. | ||
| chromatic | Yeah, but there are a lot of bugs that need fixing. | ||
| pmichaud | Agreed. | ||
| chromatic | I don't mind cleaning up code in addition to fixing bugs, but I'd like to bias us toward more bugfixing now. | 22:13 | |
| pmichaud | To the extent that it takes people's tuits (particularly allison++'s) away from solving the problems that HLLs need solved, I'm against it. | ||
| chromatic | That's a different story though. We have to get allison off of critical paths. | 22:14 | |
| At least we have to stop letting allison be the only person on critical tasks. | |||
| pmichaud | I agree with that, but still I don't want it to impact a large number of tuits | ||
| from any core developer, not just allison. | |||
| chromatic | I know, I'm hijacking your rant for my own purposes. | ||
| pmichaud | It's my rant as well, I'm just less vocal about that one :-) | ||
| bacek | Speaking of bugs | 22:16 | |
| Can I merge tt24_unicode_numifications? | |||
| Or we still waiting for "final" decision about "Inf" and "NaN" representing in Parrot? | 22:17 | ||
| Whiteknight | I'm fine with a merger today | ||
| pmichaud | I don't have an objection, if it doesn't break rakudo. | ||
| Whiteknight | that gives us a few good days of testing before the release | ||
| pmichaud | (or pge, or all the other items) | ||
| bacek | pmichaud: It should fix Rakudo | 22:18 | |
| pmichaud | which ticket is it, again? | ||
| bacek | tt724 | ||
| pmichaud | oh. Rakudo isn't broken there. | 22:19 | |
| i.e., it doesn't fix anything that Rakudo needs fixing on. | |||
| bacek | but it stops rakudo to use ucs2 during parsing, afaiu | ||
| pmichaud | rakudo doesn't want to use ucs2 parsing. I switched to using iso-8859-1 instead. | 22:20 | |
| which is actually nicer than ucs2 in many respects. | |||
| bacek | hmm. why? | ||
| pmichaud | uses less space, for one. | ||
| it's a much more straightforward conversion. Plus, we still have the issue that ucs2 only works when ICU is present. iso-8859-1 works without ICU. | 22:21 | ||
| The only reason I was trying ucs2 was because I knew there were issues with iso-8859-1 (TT #24). But you and I fixed that already, which meant iso-8859-1 was an option. | |||
| bacek | my $s = "ŠŠ“ŃŠ°Š²ŃŃŠ²Ńй миŃ";... | ||
| pmichaud | Rakudo has no problem with that. | 22:22 | |
| That's a utf8 string, not a ucs2 one. | |||
| bacek | is Cyrillic covered by iso8859? | ||
| pmichaud | And Rakudo does its own string-to-number conversion, it doesn't use Parrot's. | ||
| Rakudo has to do its own string-to-number conversion, so it can convert things like "23_45" and ":2(10100101)" | 22:23 | ||
| bacek | what about PGE? | ||
| pmichaud | yes, PGE would be able to better handle ucs2 strings with the patch. But I don't know anyone who is using them yet. | 22:24 | |
| anyway, as I said, I don't object if it doesn't break Rakudo. :-) | 22:25 | ||
| bacek smoking rakudo on trunk to compare with branch. | 22:26 | ||
| pmichaud | I'm getting an intermittent error in t/spec/integration/99-problems-11-to-20.t with current trunk... trying to track it down. It feels GC related. | ||
| because it disappears with very slight changes to the code. | |||
| (Like, adding a blank line to the test file causes it to suddenly pass) | 22:27 | ||
| bacek | oh... It's not good... | ||
|
22:32
rg joined
|
|||
| bacek | btw, what "array[0;1]" will return? | 22:32 | |
| Coke returns. | 22:33 | ||
| chromatic | the second element of the nested array in the first array's first position | 22:41 | |
| bacek | same as "array[0][1]"? | 22:42 | |
| (in some HLL) | |||
| chromatic | Yes. | 22:44 | |
| bacek | why do we need it in PIR? | 22:45 | |
| And what about "array['foo';'bar']"? | 22:46 | ||
| chromatic | Same. | 22:47 | |
| Except that's keyed access, not indexed. | 22:48 | ||
| bacek | ooookey. | ||
| chromatic | It's a shortcut for the get_XXX_keyed vtable entry. | ||
| bacek | Do we really need this "shortcut"? | 22:49 | |
| chromatic | If you want to make the Universal Turing Machine argument, we don't need any shortcuts. | 22:50 | |
| A better question is "Does this make certain coding patterns more convenient?" | |||
| bacek | ok. Let me rephrase question. | 22:51 | |
| chromatic | If you get rid of that style of syntax, all code that refers to (for example) nested namespaces or multi-level classes has to perform several individual lookups into several temporary registers dispatching several more ops. | ||
| bacek | Should PMC support this behaviour directly or it can be handled in generic way somewhere else? | ||
| chromatic | Which behavior, looking something up by a key? Yes. | 22:52 | |
|
22:52
sekimura joined
|
|||
| chromatic | Multi-value keys? Hard to say. | 22:52 | |
| bacek | "looking something by linked list of some values" | ||
| chromatic | Once you've decided it's (for example) NameSpace's responsibility to look something up by a key, it's NameSpace's responsibility to handle a multi-key Key. | 22:53 | |
| bacek | not really. | ||
| it can be generic loop over Key aside of Namespace | 22:54 | ||
| chromatic | How do you propose to analyze code to determine when you can call the appropriate get_keyed vtable entry and when you dispatch... somewhere else? | ||
| For constant keys frozen into PBC, you *can* determine if they're multi-key keys. | 22:55 | ||
| For PMCs created within the compilation unit where you access them by key, you *probably* can determine their type. | |||
| All other uses you can't determine this until runtime. | |||
| bacek | yes. Is it bad? | 22:56 | |
| chromatic | Your remaining option (as I see it) is to rewrite the op's behavior inside the op to perform the loop without letting the PMC handle it even if the PMC could handle it. | ||
| bacek | something like this. | 22:57 | |
| purl | something like this is, like, tempting: www.zones.com/cgi-bin/zones/site/pr...p;zone=zbs | ||
| chromatic | In other words, no one now can write a NameSpace equivalent PMC that doesn't store nested namespaces in nested hashes because you've violated the encapsulation of the interface to force all NameSpace like PMCs to use nested hashes to store their nested namespaces. | ||
| bacek | chromatic: it's violated in many-many places now. | 22:58 | |
| chromatic | As a matter of implementation, not of interface. | ||
| bacek | internal_ns_keyed_key for examples | ||
| chromatic | That's never called from ops. | 22:59 | |
| It's only ever called from src/global.c which implements some of Parrot's namespacing behavior. | 23:00 | ||
| You can argue (and I might agree) that that code belongs in the NameSpace PMC, but that's a matter of code organization rather than design principles. | |||
| bacek | So, design principle for Key is "All PMCs are equals. But some of them more equal"? | 23:02 | |
| chromatic | I don't know what that means. | ||
| pmichaud | Optimization is all about exploiting inequalities for direct gain. | 23:03 | |
| bacek | ok. I've implemented Map PMC. Classical RB-tree based. | ||
| Now, in get_pmc_keyed I have to distinguish Keys from all other PMCs? | |||
| chromatic | Same as every other PMC does in get_pmc_keyed. | 23:04 | |
| bacek | yeah... At least 9 pmcs copy-paste code for this... | 23:05 | |
| ok. 5 | |||
| chromatic | If I had my druthers and a working L1-based nanoparrot, I'd turn all vtable entries into multis, distinguish between String, RSA, Key, and MultiKey PMCs, and get rid of most of this mess. | ||
| bacek | but... we already have switch-optimised VTABLE generation for MULTIs. | 23:09 | |
| chromatic | We turn ALL vtable entries into multis. | ||
| bacek | So we probably can start now without sacrificing performance | ||
| chromatic | They're not written in C anymore, so we can optimize dispatch the same way we can optimize dispatch with an optimizing compiler. | ||
| We can share implementations. | 23:10 | ||
| bacek | what about blah_int? | ||
| chromatic | We can override them from PIR trivially without expensive checks. | ||
| We can define only those vtable entries that make sense on specific PMCs. | |||
| We can add vtable entries as they make sense. | |||
| Whiteknight | chromatic: I would like to give you your druthers | ||
| bacek | we can kill vtables. | 23:11 | |
| They are just METHODs. | |||
| Whiteknight | we can't kill vtables entirely | ||
| otherwise how do you interface with PMCs? | |||
| bacek | Question is: what difference between VTABLE and METHOD in L1 parrot? | 23:12 | |
| chromatic | VTABLE is always multi. | ||
| Any PMC must implement a series of VTABLEs to correspond to the VTABLE interface (though multidispatch takes care of a lot of that). | |||
| Any defined VTABLE has a well-defined semantic. | 23:13 | ||
| Other than that? It's a wad of L1 ops like any other code in the system. | |||
| We'll probably have to store them in a different way to distinguish them from METHODs, like Python stores its in double-underscored slots. | 23:14 | ||
| bacek | "Any PMC must implement a series of METHODs to correspond to.." | ||
| I still don't understand why METHODs and VTABLEs are different. | 23:15 | ||
| (In L1 parrot) | |||
| chromatic | VTABLEs can't be user visible. | ||
| bacek | why not? | ||
| Whiteknight | the traditional difference between VTABLE and METHOD is that VTABLES are rigidly pre-defined | ||
| chromatic | So users can't call them directly and accidentally. | ||
| Whiteknight | chromatic: I would suggest in a post-L1 world that vtables should be more directly visible | 23:16 | |
| chromatic | To user code? | ||
| Whiteknight | specifically, I suggest that just about all vtables will have a one-to-one correlation with L1 opcodes | ||
| chromatic | I have no idea what that means. | ||
| Whiteknight | so we have a get_number VTABLE, and a get_number L1 op | ||
| chromatic | Oh goodness no. | 23:17 | |
| Whiteknight | and why not? | ||
| chromatic | That's much too high level for L1 ops. | ||
| Whiteknight | a single C function call is too high level? | ||
| chromatic | Yes. | ||
| bacek | Are t/pmc/packfile*.t failing only for me? | ||
| Whiteknight | chromatic: so then what are the L1 ops going to be? | ||
| chromatic | I have no small sympathy for libjit's ops. | 23:18 | |
| Whiteknight | okay, let me put it another way. What do you envision will be the L1 sequence to get the string representation of a PMC? | 23:19 | |
| chromatic | If there's an L1 op for each vtable call and if each one only makes a function call to the appropriate C function (or whatever) which implements that vtable entry on a PMC, why have the L1 op? Why not make an L1 op that can call any vtable entry given its name or an identifier for the vtable entry? | ||
| bacek | Whiteknight: I'm going to merge tt24_unicode_numifications into trunk. No new failures in Rakudo/Partcl | ||
| Whiteknight | chromatic: we want L1 to be fast and trivially easy to JIT | ||
| chromatic | Yeah, so why multiply entities? | ||
| Whiteknight | we would be able to divide them down, cleaning out the bloated VTABLE interface as we translated | 23:20 | |
| chromatic | But all of those ops you propose do the same thing! Look up a function and call it! | ||
|
23:20
donaldh joined
|
|||
| Whiteknight | right, but functions have different signatures, return different types of values, and don't all need to be called from L1 | 23:21 | |
| a one-to-one correspondence between the functions we need limits access to the ones we dont | |||
| chromatic | L1 op: look up a function by name | ||
| Infinoid | so, "lookup_vtable_function; call_vtable_function"? | ||
| chromatic | There may need to be variable arity call_vtable_function ops, but yes. | ||
| Or at least multiple arity versions. | 23:22 | ||
| Whiteknight | chromatic, so can we lookup_function_by_name "malloc"? | ||
| Infinoid | call_vtable_function_p_s | ||
| chromatic | Yes and yes. | ||
| Whiteknight | that's madness | ||
| L1 is useless if it's just a new way of writing C | |||
| Infinoid | that's simple. | ||
| chromatic | man dlfunc | ||
| Who said anything about writing C? | 23:23 | ||
| Whiteknight | well, not useless, but severly impaired | ||
| chromatic | The purpose of this exercise is to avoid C. | ||
| Whiteknight | you're saying that we're looking up any arbitrary C function by name, and then I assume we're going to have to manage the low-level calling conventions to invoke them | ||
| Infinoid | It's simple enough to avoid getting bogged down in implementation details, which means the components should be easily reusable for JIT | ||
| Whiteknight | that's C | ||
| if we're going to give it up, give it up wholesale | 23:24 | ||
| chromatic | I didn't say VTABLE entries were written in C. | ||
| japhb whispers innocently "Implement them in Forth ...." | |||
| chromatic | I recall writing quite the opposite, really. | 23:25 | |
| Infinoid | $japhb =~ s/Forth/befunge/ | ||
| chromatic | Quiet, you! I'm sticking with Smalltalk-80. | ||
| Whiteknight | I won't fight you over the vtable issue, but what about other API functions? | ||
| chromatic | We'll need a way to call C functions for NCI, yes. | 23:26 | |
| We'll need a way to call into Parrot's backing library for some of this code. | |||
| If we have that, we can migrate more and more of it to L1. | |||
| Whiteknight | not if we hardcode in some ops to call specific functions | ||
| by-name function lookups are needlessly slow and wasteful for core API functios | |||
| chromatic | Sure, but why in the world would you *do* that? | ||
| dalek | rrot: r39529 | bacek++ | trunk (6 files): Merge tt24_unicode_numifications branch into trunk. |
||
| Whiteknight | you do that to gain quick access to the functions you need | 23:27 | |
| chromatic | You do that if you hate L1 and kittens. | ||
| Infinoid | Or if you really like strcmp() overhead | 23:28 | |
| Whiteknight | it's not hating kittens to think that the L1 "throw" op should internally call Parrot_ex_throw_from_L1_op directly | ||
| chromatic | There won't be an L1 throw op. | ||
| That's too high level for L1. | |||
| The thought makes me throw op! (Okay, sorry. (Okay, I'm not sorry, but I'm a little sorry I'm not sorry.)) | |||
| Whiteknight | I think you're being needlessly limiting | 23:29 | |
| Infinoid | chromatic: Is there a way to implement this without spending most of your time in string comparison functions? | ||
| chromatic | Sure, the same way you optimize other constant lookups. | ||
| Whiteknight | L1 ops should atomicly perform the operations that Parrot can understand, and Parrot understand more then just basic arithmetic and pointer munging ops | ||
| if L1 is going to be just another name for an LLVM-style static language bytecode, I want none of it | 23:30 | ||
| chromatic | It's pretty easy to assume (as ld does) that when you dlfunc a named function from a shared library, that function won't change very much throughout the process. | 23:31 | |
| You have to perform the lookup once, but you can cache it and skip all subsequent lookups. | 23:32 | ||
| Whiteknight | okay, I'll even ignore that issue. But what about calling those functions? We're going to have to manually pass low-level arguments | ||
| Infinoid | ok, so you're using a runtime cache for imported symbols. Sounds almost like a PLT. | 23:33 | |
| Whiteknight | and that's going to be a huge nightmare as we try to support more platforms | ||
| and our goal for 3.0 is to support more platforms, not less | |||
| chromatic | How is that a nightmare of support? | ||
| Infinoid | I would expect the JIT backend to get the C calling conventions right, internally | 23:34 | |
| Whiteknight | managing our own low-level C calling conventions? | ||
| Infinoid: Then we're artificially limited to only the platforms where our JIT engine of choice is supported | |||
| Infinoid | no, libjit should handle that | ||
| Whiteknight | and neither libJIT or LLVM have expansive platform support | ||
| Infinoid | Ok. What does this have to do with L1? | 23:35 | |
| chromatic | L1 doesn't require a JIT. | ||
| It makes JIT easier. | |||
| Whiteknight | it's a question of scope: how much should L1 be. | ||
| chromatic | ... but we can do L1 without a JIT on platforms in environments where JIT doesn't make sense. | ||
| Whiteknight | chromatic: then how are we doing NCI calls with arbitrary argument lists? | 23:36 | |
| chromatic | How do we do them now? | ||
| Whiteknight | either using JIT, or by painfully pre-constructing thunks in C at compile time | ||
| dalek | rrot: r39530 | bacek++ | trunk/src/string/api.c: [cage] Cast to unsigned char in str_to_int and str_to_num. |
||
| Whiteknight | the first is too lmiting, and the second is The Wrong Way | 23:37 | |
| chromatic | Thus our possibility for regression is low. | ||
| Whiteknight | at least there's a silver lining | ||
| chromatic | We don't lose anything NCI-wise this way. | 23:38 | |
| Whiteknight | would you be willing to put together a preliminary list of what you envision the L1 opcode set to look like? | 23:39 | |
| chromatic | Sure. | ||
| Whiteknight | because I'm very interested to see what you have in mind specifically | ||
|
23:39
SpacemanSpiff joined
|
|||
| chromatic | It looks a lot like libjit's instruction set. | 23:39 | |
| Whiteknight | there is a significant dearth of good libJIT documetation on the interschmoe | 23:40 | |
| chromatic | alloc sized chunk of memory, free sized chunk of memory, read sized chunk of memory by offset, write sized chunk of memory by offset, branch, call function, blah blah | ||
| You might be able to find the Smalltalk-80 low level instruction set documented somewhere. | |||
| I think the blue book is available online. | |||
| Whiteknight is searching no | 23:41 | ||
| now* | |||
| chromatic | What's your take on the crackworthiness here, Infinoid? | 23:42 | |
| Whiteknight | meh, can't find it. I'll take your word for it though | ||
| chromatic | stephane.ducasse.free.fr/FreeBooks/BlueBook/ | 23:43 | |
| Part IV | |||
| wiki.squeak.org/squeak/1602 | |||
| Whiteknight | thanks | 23:44 | |
| all the links I found were subscription | |||
| i think it's a bad idea to make L1 too low level. We don't gain anything by mindlessly replacing C with a homebrew portable assembly | 23:45 | ||
| Infinoid | freezing/thawing L1 is a fascinating idea to me | ||
| I think the process of loading L1 will look an awful lot like runtime linker relocation | 23:46 | ||
| Whiteknight | C does have it's moments, and a lot of Parrot core is well served by it | ||
| chromatic | We gain a lot by avoiding C -- calling conventions, dispatch, memory model. | ||
| Infinoid | loading necessary dynpmcs and preloading symbol tables | ||
| or loading dyn<whatever>s | |||
| Whiteknight | calling conventions and dispatch are already going to be in L1, and that's only a small part of everything. | ||
| we aren't really losing the C memory model with low level "allocate sized chunk" and "write to pointer" ops | 23:47 | ||
| chromatic | Depends if we support C pointers. | 23:48 | |
| Infinoid | You have to, if you don't directly support PMC registers | ||
| chromatic | I think we can get around that with some cleverness. | ||
| Coke | clever? | 23:49 | |
| Infinoid | if the intention is to sit well below the whole OO layer of things, then I suggest supporting C pointers is probably a good idea | ||
| purl | There's a fine line between clever and stupid. | ||
| chromatic | My guiding principle is that TraceMonkey gets faster every time they write more JavaScript in JavaScript. | ||
| Coke | for comparison, partcl gets slower every time I write more of it in tcl. | ||
| (loading init.tcl is SLOOOOW) | |||
| but tcl is just crazy. | |||
| chromatic | Let's not even talk about your test.tcl. | ||
| Coke | Can I interest you in some pair programming? | 23:50 | |
| chromatic | I'm not sure if you're serious or coming back with a worse pun. | ||
| Coke | pun. | 23:52 | |
| chromatic | The average American has one. | 23:53 | |
| Coke | ^_o | ||
| I was thinking it would be interesting to write some of the tcl builtins in nqp. | 23:54 | ||
| how expensive is invoking a PIR sub from a PIR sub? if I can trivially inline it, should I? | 23:56 | ||
| Whiteknight | chromatic: but the more JavaScript you have, the more JavaScript you can write in it quickly | 23:57 | |
| chromatic | Right, but they're talking about bootstrapping JS. | 23:58 | |
| Coke, it depends on how frequently you call it. You save a contininuation allocation and a couple of contexts. | |||
| Whiteknight | the set of L1 ops needs to be large enough to do the things that Parrot needs to do without having to execute a million ops to make it happen | ||
| Coke | well, if contexts leak, that's a win. =-) | ||
| tcl has a lot of subcommands; so [array exists], [array get] are all the same [array] command; I'm dispatching that to other procs, but I could trivially inline them. | 23:59 | ||
| chromatic | Op dispatch is cheap, especially if we can JIT them. | ||