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