|
Parrot 3.7.0 "Wanda" | parrot.org | Log: irclog.perlgeek.de/parrot/today | #parrotsketch meeting Tuesday 19:30 UTC Set by moderator on 25 August 2011. |
|||
| plobsing_ | how about a happy medium: we currently use gettimeofday (which causes a syscall), but there are portable (POSIX) timers that don't use syscalls | 00:26 | |
| strace shows that clock_gettime(CLOCK_MONOTONIC) doesn't syscall | |||
| *on linux | |||
| cotto_work | If a small amount of inline assembly makes that kind of difference, I'll take it. Pure C is preferable (and of course we need a fallback), but that's a really nice speed increase for a small cost. | 00:37 | |
| plobsing_ | I think we can get pure C, but we need to be more selective of what timing functions we use | 00:39 | |
| cotto_work | unsurprisingly, msvc doesn't like the branch | 00:40 | |
| cotto_work heads home. plobsing_, please experiment. | 00:41 | ||
| dalek | TT #2189 created by jkeenan++: t/library/yaml_tiny.t: new test failure | 00:42 | |
| TT #2189: trac.parrot.org/parrot/ticket/2189 | |||
|
00:54
whiteknight joined
|
|||
| cotto | ~~ | 01:01 | |
| plobsing_ | cotto: what do you recommend profiling the profiler on? | 01:18 | |
| cotto | plobsing_, my standard is valgrind, though that fell down gloriously earlier today | 01:48 | |
| nm. I was using oofib.pir | |||
| misread | |||
|
05:23
fperrad joined
05:39
contingencyplan joined
06:08
JimmyZ joined
|
|||
| dalek | rrot: 8b78a4f | cotto++ | api.yaml: fix api.yaml |
06:12 | |
| TT #2189 closed by cotto++: t/library/yaml_tiny.t: new test failure | 06:26 | ||
| TT #2189: trac.parrot.org/parrot/ticket/2189 | |||
|
07:18
mj41 joined
|
|||
| dalek | rrot/mls/sub-profiler: a8274ee | cotto++ | src/runcore/subprof.c: coding consistency nits |
08:06 | |
| cotto | mls, when will be a good time to talk about the sub profiler? | 08:32 | |
| dalek | rrot/mls/sub-profiler: e4196da | cotto++ | / (2 files): various cleanups and some initial documentation |
08:45 | |
| rrot/mls/sub-profiler: 18d17cc | cotto++ | / (2 files): use typedefs to avoid some "struct" noise |
08:54 | ||
|
09:00
nbrown joined
10:00
mj41 joined
11:06
woosley joined
11:33
whiteknight joined
|
|||
| whiteknight | good morning, #parrot | 11:35 | |
| dalek | rrot: 633ac86 | Whiteknight++ | NEWS: Update NEWS for whiteknight/frontend_parrot2 merge. Probably needs better wording |
11:41 | |
| whiteknight | I had never really looked at this callback mess before | 12:02 | |
| and honestly: it's horrible | |||
| JimmyZ wonders which callback | 12:03 | ||
| whiteknight | src/interp/inter_cb.c | ||
| JimmyZ | well, I had a look at this one before, and there is a ticket for it. | 12:06 | |
| trac.parrot.org/parrot/ticket/1991 | 12:09 | ||
|
12:11
zby_home joined
|
|||
| whiteknight | I haven't seen that ticket before | 12:19 | |
| we don't just need to fix one op. We need to fix the whole system | 12:20 | ||
| We probably need to add another routine to wrap user data in a better container, isntead of trying to stuff details | |||
| into the prop hash | |||
| something like $P1 = wrap_cb_data $P0 | 12:21 | ||
| msg plobsing when you have a minute, I want to run some ideas past you in the whiteknight/kill_threads branch about callbacks | 12:22 | ||
| aloha | OK. I'll deliver the message. | ||
|
12:35
ambs joined
12:36
Eclesia joined
|
|||
| Eclesia | hi | 12:36 | |
| JimmyZ | whiteknight: I agree with you | ||
| dalek | rrot/whiteknight/kill_threads: 32ae688 | Whiteknight++ | src/interp/inter_cb.c: UGLY HACK ALERT: The callback system needs an interp, so it can call vtables on the user_data pmc to get the interp. So, since it's early and I'm not thinking straight, store a global reference to a default interpreter to use to get the ball rolling. This fixes remaining test failures in t/pmc/nci.t, but makes me feel bad inside |
12:37 | |
| whiteknight | good morning, Eclesia | ||
| JimmyZ: I have some ideas about it, but is going to require big redesign | 12:38 | ||
| JimmyZ | whiteknight: I think the good things in parrot are architecture and gmc | 12:39 | |
| whiteknight: and most others are bad, which is needed [big] redesign | 12:40 | ||
| whiteknight | :) | ||
| JimmyZ | s/gmc/gms/ | ||
| JimmyZ would like to see them got redesigned one by one ;) | 12:42 | ||
|
12:54
dodathome joined
|
|||
| Eclesia | plobsing++ thanks for the exception stack fix | 12:55 | |
|
12:57
mj41 joined
|
|||
| Eclesia | Question : how works the set_global / get_global . I can't acces my pmc when they are in different namespaces. here is an example : | 13:06 | |
| nopaste | "Eclesia" at 192.168.1.3 pasted "get_global from outer namespace" (48 lines) at nopaste.snit.ch/77638 | ||
| Eclesia | at the end I try to acces my global from another namespace, but it result in a null pmc | 13:07 | |
|
13:14
jsut joined
|
|||
| JimmyZ | Eclesia: get_root_global? | 13:19 | |
| Eclesia | JimmyZ: thanks. | 13:21 | |
|
13:32
woosley left
13:38
mj41 joined
|
|||
| dalek | p: 5c84988 | jonathan++ | src/ (3 files): Start to sketch out new boolification protocol, so we can portably and efficiently put things in boolean context (e.g. avoiding nested runloops in the common case). |
13:42 | |
| p: b53d224 | jonathan++ | src/ops/nqp.ops: Correct error text. |
|||
| p: 1a9cdae | jonathan++ | src/pmc/sixmodelobject.pmc: Update get_bool to use new boolification protocol; we fall back to a v-table override during migration (will rip that code out afterwards). |
|||
| p: 57988ce | jonathan++ | src/how/NQPClassHOW.pm: Update NQPClassHOW to provide information for the new boolification protocol. |
13:51 | ||
| p: 35da528 | jonathan++ | src/ (2 files): Remove now unrequired uses of is parrot_vtable('get_bool') trait. |
|||
| p: 4738417 | jonathan++ | src/stage0/ (6 files): Update bootstrap. |
|||
|
13:56
ambs_ joined
|
|||
| plobsing_ | ~~ | 13:58 | |
| whiteknight: I see you msged me, but aloha got amnesia or something. | 14:00 | ||
| whiteknight | oh, nice | ||
| plobsing_ | anyways, what are your thoughts on callbacks? besides blind rage of course. | ||
| whiteknight | did you see the last commit I made to whiteknight/kill_threads? | 14:01 | |
| that fixes the branch, but is obviously lousy. The problem is we need to have an interp so we can call vtables, so we can get the interp | |||
| and jamming properties blindly into the userdata prop hash is lousy if an HLL is also using properties for anything | 14:02 | ||
| also, the fact that we gc register callbacks and never unregister them is ugly | |||
| plobsing_ | yeah, that's hella ugly, but I've come to accept that there's no *good* solutions in this area | 14:03 | |
| but wrt gc registering callbacks, I thought I deprecated that | |||
| there are better solutions than using one default interp however. | 14:04 | ||
| whiteknight | I think that what we can do is store the callback in an array on the Library PMC object | ||
| when the library goes out of scope and is freed, the callbacks it might be holding go with it | |||
| not that libraries get freed now, but they could | 14:05 | ||
| plobsing_ | even if libraries got freed, they'd still be relatively long-lived | ||
| whiteknight | likewise, I think we should change U to create an in-memory array where simple indexing can find things of importance, instead of jamming them into an existing PMC | ||
| plobsing_ | that doesn't cover the case where users frequently change the callbacks in a library | ||
| whiteknight | we could have a method on the Library PMC to change or delete callbacks. Easy if we associate each new one with a key | 14:06 | |
| plobsing_ | whiteknight: if we just delegate managing the lifetime of the callback to the user, we don't need convoluted solutions | 14:07 | |
| basically "if the library holds a reference to a PMC, STRING, or callback, you need to make sure GC doesn't collect it. you can do that by holding a reference to that in managed code or by using the GC's register/unregister functions" | 14:08 | ||
| users are already on the hook for strings and pmcs. why special-case callbacks? | 14:09 | ||
|
14:16
schmooster joined
|
|||
| whiteknight | okay, I'm fine with that. I'm basically just interested in avoiding the memory leak | 14:22 | |
| plobsing_ | agreed | ||
| whiteknight | I also want to de-shit the user_data experience | ||
| plobsing_ | in terms of finding the interp and parrot userdata from the c userdata, we could pass a struct*. IIRC, I have a deprecation for not doing userdata inplace. | 14:23 | |
| trac.parrot.org/parrot/ticket/1548 | 14:24 | ||
| new_callback_p_p_p_s => new_callback_p_p_p_p_s | 14:26 | ||
|
14:41
redicaps joined,
redicaps left
|
|||
| dalek | op: eade75a | Whiteknight++ | README: A few small updates to README |
14:45 | |
| op: e45f95c | Whiteknight++ | stage0/ (3 files): Start playing around with adding a symbol table to differentiate between local and global variables |
|||
| op: 3cbf912 | Whiteknight++ | stage0/js/ (2 files): Redo symbol tables. Get local/global variable distinction working well enough. |
|||
| op: 3cd6640 | Whiteknight++ | stage0/js/wast.js: Fix method invokes to use the new runtime system |
|||
| op: eef7468 | Whiteknight++ | stage0/js/ (4 files): Add in special syntax to add inline Winxed statements. It's extremely ugly. I need to find something better |
|||
| op: b3ff324 | Whiteknight++ | stage0/js/ (3 files): slightly less-bad winxed literal syntax |
|||
| op: 2dc17b4 | Whiteknight++ | stage0/js/ (2 files): Get constructors working for basic usages. Need tests |
|||
| whiteknight | Well, I need to rethink the way I pass "this" to functions, but I think it's going pretty well so far | 15:02 | |
| but I need to sign off now | |||
| Eclesia | Question : how can I make an equals test ? not the == which rely on the equal function. but a real 'is the same pmc' ? | 15:13 | |
| jnthn__ | I think there's an eq_addr op | 15:14 | |
| Eclesia | jnthn__: great thanks :) | 15:16 | |
| dalek | p: ca42584 | jonathan++ | src/ops/nqp.ops: Add a sanity check. |
16:03 | |
| p: 5d6850e | jonathan++ | src/pmc/sixmodelobject.pmc: Fix some thinkos; drop using a get_bool v-table override as the way we implement 6modelobject's get_bool v-table. |
|||
| benabik | o/ | 16:06 | |
|
16:12
contingencyplan joined
16:29
logie joined
16:52
not_gerd joined
|
|||
| not_gerd | good evening, #parrot | 16:52 | |
| benabik | o/ not_gerd | 16:53 | |
| cotto | ~~ | 17:10 | |
| dalek | kudo/nom: b22077d | jonathan++ | / (6 files): Implement new approach to boolification. It makes it sufficiently cheaper than in a simple integer-incrementing while loop that we do 20% or so better overall. |
||
| kudo/nom: 6d41c62 | jonathan++ | src/Perl6/Metamodel/EnumHOW.pm: EnumHOW needs same updates as ClassHOW for boolification changes. |
|||
|
17:11
whiteknight joined
|
|||
| dalek | kudo: 1b7dd12 | moritz++ | t/harness: [t/harness] use backslash on windows |
17:19 | |
| cotto | hi not_gerd | 17:22 | |
| whiteknight | hello cotto | 17:26 | |
| NotFound: ping | 17:32 | ||
| dalek | p: 3d0c71a | jonathan++ | src/pmc/sixmodelobject.pmc: More boolification fixes. |
17:33 | |
| kudo/nom: 93eb7cd | jonathan++ | tools/build/NQP_REVISION: Get boolification fix from NQP. |
17:47 | ||
| kudo/nom: e28a5ff | jonathan++ | src/Perl6/Metamodel/BOOTSTRAP.pm: Get Str, Int and Num boolification to take advantage of the new approach, so we can handle them more efficiently. |
|||
| plobsing_ | cotto: I played around with clock_gettime, and what I found out is that it always makes a syscall, but sometimes (when dynamically linked to librt) those are hiden from strace (an strace bug I intend to investigate). | 17:53 | |
| cotto | plobsing_, ok. Do I assume correctly that that means we won't be able to get pure C that's as fast as the inline assembly? | 17:54 | |
| plobsing_ | I looked around and there appear to be no common library functions exposing a pure user-space tick mechanism. many libraries (glibc, mozilla) use rdtsc, but don't deign to expose it to users (who might, you know, find it useful) | 17:55 | |
| cotto | weak, but that's where we find ourselves | 17:56 | |
| plobsing_ | cotto: the only common library that exposes rdtsc in pure C is the linux kernel headers (which not everyone has) | ||
| so the short answer is "no, we can't avoid the inline assembly" | 17:57 | ||
| cotto | alright | ||
| plobsing_ | of course, I also found out some concerning things about rdtsc | ||
| cotto | do tell | ||
| plobsing_ | tsc is not guarranteed to be consistent between cores, and frequency scaling can mess it up. | ||
| cotto | I saw that too. | 17:58 | |
| plobsing_ | specifically, the relation between real time elapsed, instructions executed, and tsc tick rate may vary if the cpu enters and leaves power saving modes | ||
| cotto | I wouldn't expect that to happen too often while profiling code, but it is a concern. | 18:00 | |
| plobsing_ | frequency scaling means there is the potential for cores to be *way* out from each other | 18:01 | |
| which means if the process gets migrated between cores... | |||
| we may need to implement a simple clock skew detection | 18:02 | ||
| to put an estimated bound on skewing | |||
| afk # acquiring beer | 18:03 | ||
| benabik | beer++ | 18:05 | |
| whiteknight | why are we going through all this hassle anyway, just to avoid a syscall on the highres timer? | 18:09 | |
| benabik | syscalls are slooooow | 18:10 | |
| cotto | whiteknight, did you see the numbers from last night? | ||
| benabik | Namely because using rdtsc caused profiling to take like 25% extra time instead of 125% | ||
| whiteknight | cotto: the tv show? | ||
| cotto | using rdtsc on x86 takes 1/3 the time of clock_gettime and takes 1/2 the time on x86_64 | 18:11 | |
| it makes me distrustful of valgrind | 18:12 | ||
| plobsing_ | valgrind has a simplistic model by default - it counts instructions | 18:14 | |
| it can also count cache misses and context switches | |||
| the thing is, mls is over-using the timer functionality if all that is wanted is a sub-level profiler | 18:16 | ||
| he calls rdtsc every instruction | |||
|
18:16
logie joined
|
|||
| cotto | there's a lot wrong with that code | 18:16 | |
| plobsing_ | the code could be rearranged to only rdtsc at important points (like sub calls) | ||
| which would also improve the time profile, but without using inline-assembly | 18:17 | ||
| but if we want an instruction-level profiler, we're stuck with calling rdtsc that often | |||
| Eclesia | is there a way to compile using some kind of controls ? like at least make a F***** check that the function I try to use exist and I give the right number of parameters ? | 18:18 | |
| plobsing_ | Eclesia: you can implement those checks yourself fairly easily. the function call syntax sugar papers over the difference between static and dynamic lookups, but these are both doable from straight PIR. | 18:21 | |
| dalek | kudo/nom: 068cad4 | moritz++ | t/harness: [t/harness] use backslash on windows |
18:25 | |
| Eclesia | plobsing_: I'm not in my compiler (I already do the first check), but I have no control over compilation of winxed file | 18:27 | |
| dalek | nxed/using_root: bac03bd | Whiteknight++ | winxedst1.winxed: Add a new 'using root' statement type, which is almost identical to UsingStatement except it emits a get_root_global opcode instead of a get_hll_global one. |
18:29 | |
| plobsing_ | Eclesia: sure you do. now which is it that you would like to do, static or dynamic lookup? | 18:40 | |
| Eclesia | static | ||
| plobsing_ | well then obtain the sub by doing 'using static sub' | 18:41 | |
| now the sub is guarranteed to exist at compile-time or error | |||
| Eclesia | plobsing_: nice, is there something similar to check classes and methods ? | 18:42 | |
| plobsing_ | Eclesia: nope, classes don't really exist at compile time ATM | 18:43 | |
| Eclesia | plobsing_: but the methods do exist | 18:44 | |
| plobsing_ | of course you could hack around that by making your classses acquired via subs that are | ||
| Eclesia: methods, in as much as they are subs, do exist. but in a state of limbo that is quite ugly. | |||
| we're currently in the midst of replacing our class system such that classes do exist at compile time | 18:45 | ||
|
18:58
mj41 joined
|
|||
| dalek | p: a0a9213 | jonathan++ | src/ (2 files): Make a way to both set an object's SC and add it to the SC in a single op. |
19:09 | |
| p: 3088455 | jonathan++ | src/NQP/SymbolTable.pm: Make use of add_object_to_cur_sc_past. |
|||
| kudo/nom: e24dd5c | jonathan++ | src/ (4 files): Lessen the code we generate for creating container descriptors; should save us a bunch of PAST nodes when compiling the setting. |
19:16 | ||
| kudo/nom: e14544e | jonathan++ | / (2 files): Bump NQP_REVISION and take advantage of add_object_to_cur_sc_past, which should save us the creation of around 12,000 PAST nodes while building the setting. Also makes the output shorter. |
|||
| Eclesia | Question : pir can take any character in a var name ? | 19:39 | |
| dalek | kudo/nom: 2c0badb | jonathan++ | src/Perl6/SymbolTable.pm: Generate less code (and less PAST nodes as a result) for parameter deserialization. |
19:45 | |
|
20:02
jsut_ joined
|
|||
| plobsing_ | Eclesia: no. best to stick with [a-zA-Z_][a-zA-Z_0-9]. | 20:18 | |
| s/./*/g | |||
| Eclesia | :/ | 20:22 | |
| plobsing_ | Eclesia: if you need more, you are likely doing something wrong. IMCC is an assembler, nothing more. | 20:23 | |
| you don't hear gcc devs complaining because their assembler only takes a very small fixed set of identifiers (%rax, %rsp, etc...) | 20:24 | ||
| cotto | ~~ | 20:26 | |
| Eclesia was just asking, trying to find an easy way to avoid any id clash for anonym vars | 20:27 | ||
| moritz | keep track of your named vars | 20:28 | |
| plobsing_ | Eclesia: your compiler should mangle var names appropriately. | ||
| moritz | generate a name which isn't taken yet | ||
| that's what compilers are for, after all :-) | |||
| (turning user code into sensible low-level code) | 20:29 | ||
| Eclesia | or always replace them by $Pn and avoid all use of .local | ||
| plobsing_ | the easiest way to mangle is to just keep a counter, and name all PIR variables $P$next_variable_num | ||
| dalek | p: c1176fb | jonathan++ | src/HLL/SerializationContextBuilder.pm: Expose whether we're in pre-comp mode or not. |
20:32 | |
| p: abbaf88 | jonathan++ | src/NQP/SymbolTable.pm: Do less work when we're in immediate-run mode. This doesn't build up PAST trees that we're only going to end up throwing away (granted we threw them away quickly, but still...) |
|||
| not_gerd | Eclesia: when I needed to mangle unicode-names (in this case to C identifiers), I used [0-9A-Za-z] verbatim and encoded everything else in base 62, using _ as escape char | 20:35 | |
|
21:01
benabik joined
|
|||
| dalek | kudo/nom: 1780b11 | jonathan++ | tools/build/NQP_REVISION: Get latest NQP so we can use the extra info it has to be smarter about code-gen. |
21:04 | |
| kudo/nom: 8dfd5e2 | jonathan++ | src/Perl6/SymbolTable.pm: Start to be smarter about pre-compilation mode vs. immediate run mode, so we generate less PAST that we throw away. Should improve non-precomp case somewhat (e.g. so we get faster spectest runs). Also marks out code that we'll be able to throw away when we have full deserialization. |
|||
| kudo/nom: ea5ff6b | jonathan++ | src/Perl6/SymbolTable.pm: Refactor parameter object building and deserialization code-gen so we can avoid building more PAST in pre-comp mode. |
|||
| kudo/nom: 0635961 | jonathan++ | src/Perl6/SymbolTable.pm: Be smarter about compilation of code objects. Should be a (little) win both for setting compilation and for immediate-run compilation. |
|||
|
21:20
jsut joined
21:28
perlite_ joined
|
|||
| dalek | kudo/nom: 5aac384 | jonathan++ | src/Perl6/SymbolTable.pm: Fix bug introduced in parameter compilation improvements. |
21:30 | |
|
21:45
logie joined
21:58
zby_home_ joined
|
|||
| dalek | op: e6383dc | Whiteknight++ | t/stage0/winxed_literals.t: Add a test file for the winxed literal syntax |
22:23 | |
| op: aecbf7a | Whiteknight++ | / (5 files): Change around whitespace. Pass 'this' as an optional named arg to better mimic JS behavior |
|||
| op: ce6a590 | Whiteknight++ | stage0/ (2 files): several fixes to the object model to pass 'this' as a named parameter. Some fixes to VariableDeclare wast to prevent double-declarations of global variables |
|||
| op: f632975 | Whiteknight++ | / (8 files): Add a -i option to js2wxst0. Add a runtime library for tests to setup rosella et al. Fix up array constants and the Array constructor/prototype. update 01-rosella_test.t to show how tests should be. Other misc fixes |
|||
| op: e0ab456 | Whiteknight++ | / (3 files): Pass all commandline args from js0.sh to js2wxst0.js |
|||
| op: 725396d | Whiteknight++ | / (4 files): Fix all tests to run and pass again. |
|||
| not_gerd | whiteknight: are you targetting a specific JS version (in particular ECMA 3, 5 or Mozilla's)? | 22:45 | |
|
22:57
PacoLinux_ joined
|
|||
| whiteknight | not_gerd: no, nothing in particular. Stage 0 is just a toy. Stage 1 will be a "Real" compiler with a real standard to target | 23:01 | |
| dalek | esop: fd2743e | Whiteknight++ | README: update README to reflect new name. The project is now called 'jaesop' |
23:02 | |
|
23:10
rurban joined
23:14
rfw joined
23:21
rurban_ joined
23:28
redicaps joined
23:48
redicaps joined
|
|||