|
github.com/moarvm/moarvm | IRC logs at irclog.perlgeek.de/moarvm/today Set by moderator on 3 August 2013. |
|||
| benabik | diakopter: Well, yes, I'm #defining MAP_ANONYMOUS, I was just being lazy typing into IRC. | 00:01 | |
| Just wasn't sure if there was some platform abstraction thing I should deal with or just do the quick-and-dirty #defining | 00:02 | ||
| diakopter | oh :) | 00:11 | |
| <- no clue | |||
|
00:26
benabik joined
00:31
colomon joined
|
|||
| benabik | Oh, that's new. threads.t now segfaults instead of giving me that can't GC message. | 00:35 | |
| dalek | arVM: 2b5207c | benabik++ | src/platform/posix/mmap.c: Fix anonymous mmap for Darwin/BSD OS X (and probably all BSDs) spell the flag for anonymous mmap MAP_ANON instead of Linux's MAP_ANONYMOUS. Until someone else has a more clever idea of how to abstract out this particular platform gotcha, simply #define MAP_ANONYMOUS as MAP_ANON when the latter is available and the former isn't. |
00:40 | |
| Heuristic branch merge: pushed 38 commits to MoarVM/libuv5 by zhuomingliang | 01:52 | ||
|
02:20
colomon joined
|
|||
| dalek | arVM/libuv5: 5698f25 | jimmy++ | build/ (2 files): enable libuv build |
03:10 | |
| diakopter | benabik: the previous error was a fluke anyway | 03:11 | |
| benabik | diakopter: I prefer flukes to segfaults? ;-) | 03:12 | |
| diakopter | well at least it didn't format your hard disk :D | ||
| benabik | :-P | ||
| PSA: Have you backed up your development machine lately? | 03:13 | ||
| diakopter is making compunit loading threadsafe | 03:15 | ||
| and closing a big-ish memory leak | |||
| diakopter surmises my patch is ready | 04:01 | ||
| hm, nope | 04:02 | ||
| actually I don't really have a way of telling whether my patch regressed or advanced things | 04:04 | ||
| jnthn will have to englighten me tomorrow :) | |||
| meanwhile, this backtrace is some kind of beautiful: | 04:05 | ||
| C:\\Users\\mwilson\\src\\MoarVM\\nqp-cc>ptime ..\\moarvm nqp.moarvm -e "1" | 04:06 | ||
| === ..\\moarvm nqp.moarvm -e "1" === | |||
| cannot stringify this | |||
| in frame_name_733, ./QASTMoar.moarvm | |||
| in moarop_mapper, ./QASTMoar.moarvm | |||
| in add_core_moarop_mapping, ./QASTMoar.moarvm | |||
| in frame_name_0, ./QASTMoar.moarvm | |||
| in frame_name_1520, ./QASTMoar.moarvm | |||
| in frame_name_38, ModuleLoader.class | |||
| in load_module, ModuleLoader.class | |||
| in frame_name_1666, ./NQPP6QRegexMoar.moarvm | |||
| in frame_name_38, ModuleLoader.class | |||
| in load_module, ModuleLoader.class | |||
| in frame_name_3744, nqp.moarvm | |||
| Execution time: 0.036 s | |||
| time to add line numbers and source file names to the backtrace | 04:08 | ||
| grondilu | you don't use gdb? | 04:15 | |
.oO( though I suppose that even with gdb line numbers and source file names would be useful ) |
04:16 | ||
| diakopter | gdb? | 04:17 | |
| it's... not machine code | 04:18 | ||
| grondilu is confused | |||
| diakopter | maybe I don't understand what you were suggesting | 04:19 | |
| grondilu | well, moarvm can be debugged with gdb, can't it? | ||
| diakopter | <- never used gdb (obviously) | ||
| I use Visual Studio | |||
| grondilu | oh | ||
| diakopter | but it knows nothing about our bytecode | ||
| grondilu | indeed | ||
| diakopter | how would we tell any debugger (including gdb or vs) about our bytecode invocation callstack? | 04:20 | |
| grondilu | but since you were talking about "line numbers" I thought you were talking about C code | ||
| benabik | I'd say gdb can't be used to debug bytecode, but you can really hack gdb's concept of functions and data and such, so maybe you can. | ||
| diakopter | oh, no.. line nubmers in .nqp source files | ||
| grondilu | ok | ||
| but moarvm has no visibility on the nqp code, has it? | 04:21 | ||
| diakopter | I created QAST::Annotated for that purpose | ||
| grondilu | ok | ||
| diakopter | well, jnthn spec'd it, but I implemented it | ||
| grondilu | that would be very useful, then | ||
| diakopter | similar to parrot's annotations in pir | 04:22 | |
| ..just .. special AST nodes instead | |||
| and stored interestingly in the bytecode | 04:23 | ||
| will need to do some interesting back-resolving | |||
| grondilu | I recently tried to use gdb to see why moarvm failed on 24-modules.t and I got completely lost in the code. (too complicated for me) A backtrace to the NQP code might help. | ||
| diakopter | of the offset | ||
| offsets | |||
| well this is the first time it's running the nqp compiler (any nqp program of substance, anyway) | 04:24 | ||
| grondilu | "and stored interestingly in the bytecode" wouldn't that increase the size of the bytecode? Hopefully it would be a debugging option, not default, right? | 04:25 | |
| diakopter | nah, it's tiny; around one entry per line in the original file, and it's just an integer | 04:27 | |
| grondilu | ok | ||
| diakopter | so around 8KB for a 1024-line file.. which seems to make a 200KB .moarvm or so | ||
| (total) | |||
| grondilu: because nqp's instruction set is so gargantuan, its bytecode will be .. much smaller than, say, the corresponding .jar, even compressed | 04:31 | ||
| each of those nqp ops in the jvm bytecode turns into a static method call | 04:32 | ||
| here, it's effectively the same, just encoded much tinier | |||
| dalek | arVM: 5657ef8 | diakopter++ | src/ (13 files): - eliminated traversing chain of all compunits loaded when deserializing a serialization context - pre-allocate SCBody objects and store them in the weak hash (which is a little less weak now) - make compunit loading from disk (by filename) threadsafe and atomic; add a loaded filename registry - factor out some of the SC getting code from the two wval nqp:: ops in interp.c |
04:40 | |
| arVM: b01dba8 | diakopter++ | src/ (2 files): work around lack of sc descriptions right now |
|||
| diakopter | benabik: better commit message? | ||
| benabik | diakopter: Yes, thank you. :-) | 04:41 | |
| diakopter dares to launch moarvm nqp.moarvm -e "1" when SysMon is running..... O_O | 04:44 | ||
| er, procmon | |||
| WAT. | 04:45 | ||
| we, um, may want to dynamically link to some windows system dlls | 04:46 | ||
| benabik | How many gigs for -e 1? | 04:47 | |
|
04:47
birdwindupbird joined
|
|||
| diakopter | no, it's just it queried a few hundred registry keys regarding tcp socket | 04:48 | |
| well I guess that took only 3 milliseconds | 04:49 | ||
| well anyway from the time it first read nqp.moarvm to exiting, it was 24 ms | 04:50 | ||
| www.perl6.com/run000.csv | 05:00 | ||
| make sure to open it in something that doesn't mangle the first column values into dates without nanosecond resolution | |||
| grondilu | trying make nqptest: | 05:07 | |
| SC not yet resolved; lookup failed in frame_name_59, ModuleLoader.class in frame_name_4, temp.moarvm | |||
| diakopter | hm | 05:08 | |
| all of them? | |||
| diakopter waits for all the things to emit | |||
| grondilu: when did you last git pull? | 05:11 | ||
| (make nqptest is clean for me) | 05:12 | ||
| benabik: looks like loading nqp uses ... 12 MB | 05:15 | ||
| benabik | diakopter: nice | ||
| diakopter | that seems... orders of magnitude smaller than on parrot.. | 05:17 | |
| ._._ | |||
| _._. | 05:18 | ||
| (surely I'm not measuring correctly) | |||
|
05:21
ggoebel joined
|
|||
| JimmyZ | diakopter: btw, I see some repetitive Callsite in .moarvmdump | 05:22 | |
| diakopter | I noticed that too | ||
| grondilu | diakopter: few minutes ago | 05:24 | |
| last commit: 2b5207cb84c89a0e09d3e91b95d3f7b4af3c2c6b | |||
| diakopter | grondilu: I got that error before my last two commits; are you sure you reconfigured and rebuilt both moarvm and the cross compiler? | 05:25 | |
| maybe you just rebuilt the cross compiler | |||
| grondilu reconfigure and rbuilts | |||
| (and repulls) | |||
| JimmyZ | merged master into libuv5, and see a lot of "SC not yet resolved" :P | 05:42 | |
| diakopter | hrm | 05:43 | |
| mis-merge? :) | |||
| JimmyZ | no :) | ||
| diakopter | erm, I hope my commit still exists.. | ||
| JimmyZ | diakopter: last commit in libuv5 is Benabik | 05:44 | |
| diakopter | yer missing some | ||
| github.com/MoarVM/MoarVM/commits/master | 05:45 | ||
| JimmyZ | merge conflict :( | 05:47 | |
| dalek | arVM/libuv5: 5657ef8 | diakopter++ | src/ (13 files): - eliminated traversing chain of all compunits loaded when deserializing a serialization context - pre-allocate SCBody objects and store them in the weak hash (which is a little less weak now) - make compunit loading from disk (by filename) threadsafe and atomic; add a loaded filename registry - factor out some of the SC getting code from the two wval nqp:: ops in interp.c |
05:56 | |
| arVM/libuv5: b01dba8 | diakopter++ | src/ (2 files): work around lack of sc descriptions right now |
|||
| MoarVM/libuv5: c98f981 | jimmy++ | src/ (14 files): | |||
| MoarVM/libuv5: Merge remote-tracking branch 'remotes/origin/master' into libuv5 | |||
| JimmyZ | t\\qast\\qast_terms.t Failed test: 2 | 06:00 | |
| much better, and a retrogress | 06:01 | ||
| :P | 06:02 | ||
| grondilu | ok all test successful now | 06:23 | |
|
06:23
not_gerd joined
|
|||
| not_gerd | o/ | 06:23 | |
| dalek | arVM: a1d0502 | (Gerhard R)++ | src/platform/posix/mmap.c: Make flag detection for anonymous mmap() more robust. Probably overkill, but arbitrary flag values can now be supported by adding a definition of MVM_MAP_ANON to build/setup.pm. |
||
| not_gerd | ^ this can be used as template for other custom platform defines | 06:25 | |
| benabik | not_gerd++ | ||
| not_gerd | I don't think there's an OS that uses anything other than MAP_ANON and MAP_ANONYMOUS, but I did it anyway ;) | 06:27 | |
| benabik | I figured that the eventual failure on MAP_ANONYMOUS would be enough of a hint. :-) | ||
| Although I was also just too busy to get any further than just getting it working. | 06:28 | ||
| not_gerd | the other fix would have been to just use MAP_ANON on linux as well | ||
| that's supposedly deprecated, though | 06:29 | ||
|
06:36
crab2313 joined
|
|||
| JimmyZ | \\o, not_gerd | 06:42 | |
|
06:50
FROGGS joined
|
|||
| JimmyZ | hmm, change compunit to uv_fs_open , cause Bytecode stream corrupt (missing magic string) | 07:47 | |
| memcmp(cu_body->data_start, "MOARVM\\r\\n", 8) != 0) faied | 07:48 | ||
|
07:48
crab2313 joined
|
|||
| benabik | Does uv do \\r\\n -> \\n conversion? | 07:48 | |
| JimmyZ | should not , I only open | 07:49 | |
| benabik | Some libraries there's a difference between opening text and binary files. *shrug* | ||
| JimmyZ | How do I open file with binary flag? | 07:50 | |
| not_gerd | JimmyZ: shouldn't be necessary | 07:51 | |
| JimmyZ: I've also looked into converting compunit, and it mostly worked | |||
| I did not push anything yet because there's some error handling missing and I got a new test failure | 07:52 | ||
| JimmyZ | not_gerd: great | ||
| not_gerd | (the latter might be unrelated) | ||
| should I push to libuv5 as-is? | |||
| JimmyZ | not_gerd: yes | ||
| I'm curious what's wrong with my code | 07:53 | ||
| dalek | arVM/libuv5: e8c535f | (Gerhard R)++ | src/core/compunit.c: Switch MVM_cu_map_from_file() from APR to libuv |
||
| JimmyZ | I still don't know what's wrong :( | 07:58 | |
| not_gerd | does this work for you or still fail? | 07:59 | |
| JimmyZ | I didn't try, I compare the code ,almost the same :( | 08:00 | |
| you works ! | 08:02 | ||
| and I don't know why :( | 08:05 | ||
| dalek | arVM/libuv5: 3db5229 | jimmy++ | src/ (3 files): code cleanups |
08:14 | |
| JimmyZ | not_gerd: Yeah, I got new nqp t\\moar\\socket_send_recv.t failure | 08:20 | |
| but that's apr codes | |||
| not_gerd | JimmyZ: that doesn't fail for me | 08:21 | |
| it's qast_terms.t here | |||
| I think using uv_hrtime() is wrong for MVM_proc_time_*() | |||
| JimmyZ | not_gerd: this one seems failed on master also | ||
| maybe not | |||
| I didn't try :( | 08:22 | ||
| not_gerd | uv_hrtime() returns CPU time, not date time | ||
| JimmyZ | oh | ||
| not_gerd | uses QueryPerformanceCounter() on windows | ||
| we might need to add our own version to platform/ | 08:23 | ||
| JimmyZ | yeah | ||
| I thought it's date time | |||
| Yeah, it is for measuring performance | 08:24 | ||
| I'd not split some dirops.c code to src/platform and include src/platform/dir.h in src/io/dirops.h | 08:26 | ||
| s/not// | |||
| not_gerd: how do you think about it? | 08:27 | ||
| not_gerd | JimmyZ: makes sense - lots of #ifdef in that file... | 08:28 | |
| JimmyZ | not_gerd: aye | ||
| not_gerd: and fileops.c | 08:29 | ||
|
08:29
cognominal joined
|
|||
| jnthn | Note that bytecode files should be mmap'd; please don't lose that in the libuv changes. | 08:30 | |
| yoleaux | 03:09Z <ruoso> jnthn: I thikn we need to move the entire threading support to nqp, because the scheduler needs to start earlier and all actual code need to move to one of the scheduled threads, otherwise we won't be able to switch context in the main thread | ||
| JimmyZ | jnthn: Are you fine to split some dirops.c code to src/platform and include src/platform/dir.h in src/io/dirops.h? | ||
| not_gerd | jnthn: it's just about switching to the libuv versions of open and stat | 08:31 | |
| jnthn: the mmap() code was already made libuv-compatible with the merge of my branch | |||
| JimmyZ | jnthn: and how about uv_read_start, patch it to add a args to return buf, or use callback without return anything? | ||
| not_gerd | JimmyZ: MVM_dir_open() doesn't set result->body.dir_name in the linux version | 08:32 | |
| jnthn | not_gerd: OK, great. | ||
| JimmyZ: Yes, I'd prefer platform-specific bits under src/platform/ | 08:33 | ||
| JimmyZ | not_gerd: result->body.dir_name only needs for windows | 08:34 | |
| not_gerd: windows must use it | |||
| not_gerd: linux just opendir :P | 08:35 | ||
| not_gerd: only for "FindFirstFileW(handle->body.dir_name, &ffd);" ) | 08:37 | ||
| jnthn | JimmyZ: Should we not just be using uv_fs_read? | 08:38 | |
| oh, maybe not... | |||
| JimmyZ | uv_fs_read only fd | ||
| others are using uv_read_start, and ipc use uv_read2_start | 08:39 | ||
| s/fd/file/ | 08:40 | ||
| tty use uv_read_start also | |||
| jnthn | OK, but I'm confused by what you're asking. There's never ambiguity whether we're meant to produce a buffer or a string... | 08:41 | |
| JimmyZ | jnthn: I just can't get the buf for reading tty ... | 08:43 | |
| stdin | |||
| I mean I must use uv_read_start for reading tty, but uv_read_start can't return what it reads | 08:45 | ||
| jnthn | Right, it takes callbacks. So...there's no synchronous/blocking way to read from a tty?! | 08:47 | |
| JimmyZ | jnthn: I couldn't find one | ||
| jnthn | OK, I don't have time to dig more deeply into it now. | 08:48 | |
|
08:48
donaldh joined
|
|||
| JimmyZ | jnthn: nodejs.org/api/tty.html#tty_class_readstream has some tips, but I can't understand | 08:48 | |
| jnthn: OK :) | |||
| not_gerd | jnthn: do we care about windows support prior to Windows 2000? | 08:57 | |
| jnthn | um, that's be, like, 95, 98 and ME? :) | 08:58 | |
| FROGGS | and 3.11 | ||
| jnthn | lol | ||
| FROGGS | and NT :o) | ||
| could be problematic because of just having 32MB ram though | |||
| jnthn | Yeah, quite... | ||
| not_gerd: So long as it's not impossible for somebody to later send us a patch to support them... :) | 08:59 | ||
| JimmyZ | some fileops dirops, should be Windows XP.... | 09:00 | |
| and for server, should be Windows2003 | |||
| not_gerd | jnthn: I'm asking specifically because the APR time code is more portable than what I'm going to replace it with | 09:02 | |
| I'm all in favour of using more recent versions of the winapi | |||
| JimmyZ | yes, what I'm using CreateDirectory for dirops, Minimum supported clientWindows XP | 09:04 | |
| :P | |||
| not_gerd: apr_dir_read() Minimum supported client Windows XP | 09:06 | ||
|
09:17
grondilu_ joined
|
|||
| dalek | arVM/libuv5: c6f0bb0 | jimmy++ | src/ (3 files): clean up a bit needless code |
09:25 | |
|
09:46
grondilu joined
|
|||
| diakopter | benabik: ping | 09:47 | |
| FROGGS: would you like a mini-project? | 09:48 | ||
| (or anyone) | |||
| FROGGS | diakopter: tell us first :o) | ||
| diakopter | it's to update libatomic_ops from the repo | ||
| our copy is around a year old | 09:49 | ||
| and lots of improvements since then | |||
| but the thing is to strip out the gpl stuff | |||
| FROGGS | ohh | 09:50 | |
| diakopter | jnthn: ping | ||
| JimmyZ | github.com/ivmai/libatomic_ops this? | ||
| diakopter | yes | ||
| notice I submitted a couple issues there a long time ago | 09:51 | ||
| JimmyZ decommutes | |||
| jnthn | diakopter: pong, though I'm distracted | 09:52 | |
| diakopter | jnthn: just to say I think my patch was a success | ||
| though I got a different result after clean reconfigure, make | |||
| kinda odd | |||
| jnthn: but anyway I'm happy with the sc/compunit loading mostly now | 09:53 | ||
| jnthn: did you want to do serialization? | |||
| if not, should I port it from the java? | |||
| jnthn | diakopter: No, I've already written the serialization code like a gazillion times in my life. It's relatively noddy compared to the deserialization. | 09:54 | |
| diakopter: So I will be most happy to have that task stolen :) | |||
| diakopter blink at noddy | |||
| oh yeah, we discussed this | |||
| jnthn | diakopter: Steal it from the C impl on Parrot :) | 09:55 | |
| diakopter | oh | ||
| jnthn | diakopter: You can take a lot of it "as is" :) | ||
| tadzik | noddy: www.brownbagfilms.com/images/blog/l..._Noddy.jpg | ||
| jnthn | diakopter: I did that for deserialization. Serialization should be even easier. :) | ||
| tadzik: yes, that's the character, but the word just means "simple" :) | 09:56 | ||
| diakopter | so it'll have its own new area in .moarvm? | ||
| tadzik | heh | ||
| diakopter laughs at the reflection in noddy's tassel bell | |||
| jnthn | diakopter: For now we can just go with the same approach (treat it as a string) | ||
| diakopter | jnthn: right, so.. in the string heap?? | 09:58 | |
| jnthn | diakopter: But yeah, we can do better eventually... | ||
| diakopter: Yes, that's how I started out on JVM. Then sorear++ came up with something better. | |||
| diakopter: We could get that in from the start, though. | |||
| We gotta support both ways for deserialization for now. | |||
| But it'd be nice to avoid all the base-64 screwery. | 09:59 | ||
| diakopter | what? you mean base64 isn't consistent everywhere? ;) | ||
| jnthn | The tests also rely on getting the thing back as a string... | ||
| It is, but when I profiled our startup time on Parrot, 15%-20% of startup time was decoding base-64 :/ | |||
| diakopter | yeah well | ||
| jnthn tries to get back to reviewing his SOA slides... | 10:00 | ||
| diakopter | jnthn: are the Annotated nodes being created now? | ||
| jnthn | diakopter: Being created? | 10:01 | |
| diakopter | by the compiler | ||
| jnthn | As in, in QAST -> MAST? Don't think so. | ||
| diakopter | to mast | ||
| oh ok. that would explain why I'm notn seeing them | |||
| diakopter feels on kiev time | 10:02 | ||
| jnthn | mmmm....kiev | ||
| diakopter | jnthn: did you read above nqp seems to load on moarvm to ... 12MB ram? and in 24ms? | ||
| jnthn | "not bad" | ||
| Would be happy to lose a bit more of that. | 10:03 | ||
| diakopter | O_O | ||
| jnthn | Like, by skipping the base-64 decoding ;) | ||
| jnthn wonders how much of that 12MB is deserialized NFAs... | 10:04 | ||
| diakopter | I wonder how long it takes to += an offset to 100,000 pointers in 15MB | ||
| timotimo | if you write that part in C, the compiler can probably turn that into a SIMD instruction | 10:06 | |
| diakopter | o_O | ||
| timotimo | well, of course only if they are in one region | ||
| diakopter | yeah but their addresses are from a list | 10:07 | |
| though that loop could be unrolled into one huge executable... ;) | |||
| not_gerd | is there a particular reason why MVM_proc_time_i() returns microseconds? | 10:08 | |
| diakopter | well so it be an integer | ||
| and have lots of precision | |||
| jnthn | Yeah but if it doesn't do what the mapped nqp:: is meant to do... :) | 10:09 | |
| Of course, we can always transform it :) | |||
| not_gerd | diakopter: millis and nanos are more common in time APIs, I believe | ||
| what does nqp want here? | |||
| diakopter | just change what nqp wants :P | 10:10 | |
| grondilu notices that MVM_proc_time_i is stored in int64, so it's kind of a waste of space to only store microseconds | 10:13 | ||
| diakopter | but apr provided only microsecond precision, I think | ||
| not_gerd | grondilu: but what will happen in 2038? | 10:14 | |
| diakopter | but i know windows provides nanosecond resolution, but somewhat less than nanosecond precision | ||
| like 12x less or something | |||
| grondilu | still much enough space in int64 in 2100, I think | ||
| grondilu execs date +%N | |||
| 725773342 | |||
| grondilu execs perl -e 'print log(qx(date +%N)) /log 2' | 10:15 | ||
| 27.9658131609481 | 10:16 | ||
| oops, that's not all the ns. Please ignore | |||
| timotimo | r: say :2(725773342) | 10:18 | |
| not_gerd | anyway signed int64 and ns should be good for another ~250 years | ||
| timotimo | wait, no that's wrong | ||
| how do i do that again? | |||
| grondilu | perl -e 'print log(qx(date +%s%N))/log(2)' | ||
| 60.2561373693267 | |||
| grondilu notices there is camelia here as well | 10:19 | ||
| r: say log(qx{date +%s%N}) / log(2) | |||
| timotimo | it uses the restricted setting, no qx for you ;) | ||
| grondilu | oh | 10:20 | |
| timotimo | r: say now.Int | ||
| much easier than qx(date +%N) or anything like that | |||
| also, camelia is having some trouble it seems | |||
| r: now.Int.fmt("%b").chars - would give you the number of bits | 10:21 | ||
| jnthn | We don't have a camelia in this channel | 10:23 | |
| timotimo | oh, i'm in moarvm? | 10:26 | |
| yes, that would explain the trouble i'm having :) | |||
|
10:26
donaldh joined
|
|||
| dalek | arVM: 009d5c2 | (Gerhard R)++ | / (7 files): Back time_i/time_n by custom MVM_platform_now() |
11:09 | |
| not_gerd | benabik: could you test that on OSX? | ||
| JimmyZ | not_gerd: I'd like move MVM_proc_time_[i|n] to src/platform/time.h | 11:26 | |
| not_gerd | JimmyZ: I'd like to keep the factoring as it is in master right now | 11:28 | |
| otherwise, we'd have to back on op by an MVM_platform_ function | |||
| on second thought: MVM_proc_time is never stored anywhere, but called directly in core/interp.c | 11:30 | ||
| so we could just get rid of MVM_proc_time_* completely and call MVM_platform_now() directly | 11:31 | ||
| JimmyZ | not_gerd: I'd like to keep #include "platform/time.h", but move MVM_proc_time_[i|n] to src/platform. Well, I just hate wrap :) | 11:34 | |
| dalek | arVM: 4a202fd | (Gerhard R)++ | src/platform/ (2 files): Fix whitespace fail: No, Sir, of course I did not use tabs... |
||
| JimmyZ | #include "platform/time.h" in src/procops.h | ||
| not_gerd | I think jnthn will be sad if something called MVM_proc_* is defined in platform/ | 11:35 | |
| jnthn | He may just :) | 11:39 | |
|
11:39
colomon joined
|
|||
| jnthn | Note that there's time_i and time_n ops, but they may well source their informatoin from the same call. | 11:40 | |
| not_gerd | then I'll just remove MVM_proc_time_[in] after I've prepared some food | 11:48 | |
| JimmyZ | \\o/, may time_i and time_n call MVM_platform_now directly :P | ||
| not_gerd | JimmyZ: exactly | 11:49 | |
| jnthn | Maybe, or they call functions that use the single MVM_platform_ call. | ||
| not_gerd | jnthn: that's what they do right now, but JimmyZ doesn't like the indirection | ||
| not_gerd is off hunting and gathering | |||
| JimmyZ | We can call MVM_platform_ everywhere in MoarVM :) | 11:53 | |
| jnthn | It's desirable that ops in the interpreter stay simple. | 11:55 | |
| not_gerd | jnthn: it's about `MVM_proc_time_n(tc)` vs `MVM_platform_now() / 1e9` | 11:58 | |
|
12:15
cognominal joined
12:39
donaldh joined
|
|||
| JimmyZ | diakopter: ping? | 12:43 | |
| lizmat | JimmyZ: I would hope for diakopter that he's asleep (at 5:45am his time) | 12:47 | |
| JimmyZ | oh | 12:48 | |
| jnthn | With diakopter, you can never be sure... :) | 12:49 | |
| JimmyZ | aye | ||
| so I just copy github.com/ivmai/libatomic_ops to Moar | |||
| MoarVM master? | |||
| jnthn | No | 12:50 | |
| You have to strip out the GPL bits... | |||
| JimmyZ | GPL ? | 12:51 | |
| jnthn | The stuff in the repo is under different licenses. | 12:52 | |
| Please wait for diakopter to provide details rather than guessing | |||
| JimmyZ | ok :) | 12:53 | |
|
13:06
brrt joined
|
|||
| lizmat | that's why I said "I would hope" :-) | 13:08 | |
| having been a person who used to burn the candle at both ends, I know what a burnout is like | 13:09 | ||
| brrt | hey #moarvm⦠i was reading the yapc::eu talk of jnthn about moarvm | ||
| and i saw something of which i thought i could be of some help | |||
| long story short: earlier this year, i outlined (in some detail) a way to make the GC of pypy (which is similar to the moarvm in concept at least) multi-threaded | 13:10 | ||
| by an algorithm that is in core very similar to the concept of VCGC, but adapted for a nursery - and - generation system | 13:11 | ||
| jnthn | Are we talking parallel or concurrent here? :) | ||
| brrt | both (muhahaha) | ||
| doesn't really matter jnthn | |||
| jnthn | Parallel is fine, but we're already kinda doing that (but it needs improvements!) Concurrent, I don't want the complexity of this for a good while. | 13:12 | |
| It does really matter. :) | |||
| brrt | noted. but this isn't a complex algorithm we are talking about | ||
| anyway, proof of pudding = eating, innit? so rather than talk about it, i'd better just do it | 13:13 | ||
| TimToady | that's what branches are for, after all :) | ||
| I guess the other question is not whether the GC itself is simple, but whether it induces difficulties in the rest of the code, such as reasoning about optimizability | 13:15 | ||
| brrt | hmmm | ||
| jnthn | Well, yeah. We already have write barriers to worry about. | ||
| brrt | fair point | ||
| oh, but if you already have write barriers | |||
| jnthn | Concurrent GC algos can also add read barriers to the mix. | ||
| brrt | then it complicates nothing further | ||
| jnthn | Which I'm fairly keen to avoid. | ||
| brrt | because it in fact relies solely on write barriers for consistency | 13:16 | |
|
13:16
flussence_ joined
|
|||
| jnthn | The other thing about concurrent is it *tends to* give lower pause time at the cost of lower throughput... | 13:16 | |
|
13:16
hoelzro_ joined
|
|||
| TimToady | could be better for RT stuff though | 13:17 | |
| jnthn | (Which is why the CLR comes with multiple GCs, a client one and a server one) | ||
| brrt | that is true, but, as far as i know, nobody has ever tried a generational-concurrent hybrid | ||
|
13:17
colomon joined
|
|||
| TimToady | would be fun if P6 became the language of choice for game writers :) | 13:17 | |
| jnthn | (But going the way of pluggable GC is crazy this early in the project, pre-JIT) | ||
| lizmat | TimToady: and why not ? :-) | 13:19 | |
| nwc10 | Yes, first implement all Rosetta Code examples, and *then* make them run fast. :-) | ||
| TimToady | gamers don't like the GC pausing their game at random times | ||
|
13:20
eternaleye_ joined
|
|||
| lizmat | TimToady: but game developers really need more -Ofun! games.slashdot.org/story/13/08/16/1...usive-fans | 13:21 | |
| TimToady hates loud fans too :) | |||
| my current machine is pretty quiet though :) | 13:22 | ||
|
13:28
benabik joined
13:32
colomon joined,
dalek joined
|
|||
| nwc10 | TimToady: this does make me think of dilbert.com/strips/comic/1995-04-03/ | 13:33 | |
|
13:51
benabik joined
14:45
cognominal joined
14:55
FROGGS joined
15:28
benabik joined
16:51
benabik joined
17:28
donaldh joined
17:48
donaldh joined
|
|||
| TimToady | is there any reason the executable for moarvm shouldn't just be 'moar'? | 17:48 | |
| PerlJam | www.giantbomb.com/images/1300-1278370 | 17:51 | |
| jnthn | moarvm is just a lot less likely to accidentally name-collide with something and it's not something I expect people to type directly very often so being shorten doesn't seem immediately important | ||
| Is there any reason why it should just be 'moar'? lolz aside :P | 17:52 | ||
| TimToady | lolz are important too :) | 17:53 | |
| but yes, I'd expect it'd usually get invoked as 'perl6' or some such :) | |||
| maybe we should grab p6 while we can :) | 17:54 | ||
| FROGGS | and if you need google's help, searching for "moar" won't be that helpful | 17:55 | |
| TimToady | well, if someone later grabs 'moar' as a command, will we be unhappy? | 17:56 | |
| PerlJam | FROGGS: sure it will! How do you think I found that image? ;) | ||
| FROGGS | PerlJam: yeah, if you are searching for funny images :o) | 17:57 | |
| grondilu runs 'apt-cache search moar' out of curiosity | 17:58 | ||
| grondilu got nothing | |||
| TimToady | just that once a name in command space is grabbed, it's gone | 18:00 | |
| flussence_ | yeah, same thing happened to ack in debian :( | 18:01 | |
| grondilu | jnthn made a good point when saying in the end we will rarely use moarvm directly. The name of the executable will be perl6, right? | ||
| (it's actually "perl6" which is kind of annoying to type, especially with european keyboards where numbers are not directly available) | 18:02 | ||
| TimToady | if you want to recompile, sure. if you have a precompiled executable, maybe not | 18:03 | |
| we need to get a little more out of interpreter-think here, I suspect | |||
| grondilu hadn't thought about that | 18:04 | ||
| kind of with java. perl6 would be to moarvm what javac is to java? | 18:06 | ||
| TimToady | yeah, and they're runner is 1 char shorter than their compiler :) | ||
| *thjeir | |||
| *their | |||
| *grr | |||
|
18:27
donaldh joined
|
|||
| jnthn | hm, good points | 18:34 | |
| grondilu | if not the excecutable, maybe the file extension could be moar and not moarvm? | ||
| (or maybe .mvm) | 18:35 | ||
| jnthn | Keeping the extension and executable symmetric could be nice... | 18:36 | |
| I suspect any 3-letter one will conflict with something else for sure... | |||
| moar foo.moar | |||
| Guess that doesn't look so bad :) | |||
| grondilu | but then people out of #perl6 will think we're just fooling around. | 18:37 | |
| TimToady already got tired of typing moarvm nqp.moarvm :) | |||
| FROGGS | how is that goind btw? | 18:40 | |
| jnthn | So create yourself an nqp.bat | ||
| uh, I mean... :) | |||
| lizmat | .moa does not seem taken | 18:42 | |
| grondilu | moa is the name of a giant extinct bird. would sound weird. | 18:43 | |
| TimToady | but .mvm is already "MAGIX PhotoStory Slideshow" | ||
| whatever that is... | |||
| jnthn | Oh, MAGIX spam me sometimes, I dont' mind trampling on them :P | 18:45 | |
| TimToady | do you really want to be confused with them then? | ||
| FROGGS | grondilu: why not take the name of a bird? :P | ||
| TimToady | that doesn't seem like a rhea good idea | 18:46 | |
.oO(emu-lation) |
|||
| grondilu | .moa seems really unfair to the left-out 'r' | 18:47 | |
| (if you see what I mean.) | |||
| not_gerd | .oO( change .pbc to .dodo ) |
||
| TimToady | use .mā¶r | ||
| lizmat | not_gerd: ;-) | 18:49 | |
| TimToady | .norweiganblue | 18:50 | |
| *norwegian even | 18:51 | ||
| jnthn | .tell diakopter in SCRef there's an empty void MVM_sc_gc_mark_body(MVMThreadContext *tc, MVMSerializationContextBody *sc, MVMGCWorklist *worklist) { } that looks like accidental leftbehind? | 19:32 | |
| ...aww, no msgbot? | 19:33 | ||
| diakopter: It's in the .h too | 19:38 | ||
| diakopter | ? | 19:39 | |
| oopsie. | |||
| fossil of an intermediate form that didn't quite make it | 19:40 | ||
| jnthn works on the hash_iter thing | 19:47 | ||
| FROGGS pulls and compiles moarvm while waiting for spectests to swed^Wfinish | 19:52 | ||
| (I know that this was lame :o) | |||
| jnthn | There's nor way you're making such bad puns on this channel! | 19:53 | |
| FROGGS | *baduum tsss* | 19:54 | |
| :P | |||
| dalek | arVM: aedb0b1 | jnthn++ | src/ (2 files): Enable HLL-configured hash/array iterator types. Gets hash iteration with .key working. |
20:14 | |
| arVM: 034a0b0 | jnthn++ | nqp-cc/src/QASTOperationsMAST.nqp: Revert "Don't rely on a Parrotism." It wasn't one after all, just missing hash iterator setup. |
20:15 | ||
| jnthn | Hm, having the line numbers really would start being handy now :) | 20:19 | |
| diakopter | yes | 20:20 | |
| jnthn | Now somewhere in moarop_mapper I get "This representation (VMArray) does not support associative access" :) | 20:21 | |
| diakopter | whee :) | ||
| jnthn | um, and I think it may be a legit error | 20:23 | |
| diakopter | legit meaning.. | ||
| the source is wrong? | |||
| jnthn | oh, no | 20:24 | |
| hmm | |||
| Not immediately sure what's wrong | 20:25 | ||
| diakopter | yeah we need line numbers | ||
| if you make the compiler inject 'em I can do the resolution/backtracing | |||
| jnthn | Hm, I probably can do that. | 20:26 | |
| (injecting 'em) | |||
| diakopter | k. I don't remember if bytecode.c is even parsing them | ||
|
20:28
crab2313 joined
|
|||
| jnthn | We'll find out soon enough :) | 20:30 | |
| diakopter | oh yeah, that's what I was going to do.. | 20:31 | |
| hm, I had some complex lazy back-resolution system planned out for these offsets | |||
| I guess the bytecode verifier will have to resolve them since it's the only thing that knows the instruction offsets anyway | 20:32 | ||
| also, it needs to validate the annotation anyway | |||
| jnthn | Well, but we only need them if there's an error | ||
| Not really? | |||
| I'd rather not waste cycles on them as in the common case we never use them. | |||
| diakopter | yeah they could be out of bounds | 20:33 | |
| lizmat | callframe may need them ? | ||
| diakopter | I guess, but the resolver is going to look an awful lot like the verifier | ||
| jnthn | lizmat: My "common case" argument still stands :P | ||
| diakopter | well the verifier can at least cache the instruction offsets; no loss there | ||
| lizmat | true, just wanted to point out that they could be needed in cases other than errors | ||
| jnthn | Sure. :) | 20:34 | |
| diakopter: Well, memory loss :) | |||
| diakopter: But maybe we want those for other things... | |||
| diakopter | yeah prob | ||
| or as all my west indies compadres are wanton to say, prolly | 20:35 | ||
| er, wonton, even | |||
| diakopter cracks himself up | |||
| dalek | arVM: 1256560 | jnthn++ | nqp-cc/src/QASTCompilerMAST.nqp: Start annotating line numbers. |
20:36 | |
| jnthn | diakopter: Your turn :) | ||
| diakopter | ack | ||
| jnthn | (yes, I used --dump to verify they make it in there :)) | ||
| diakopter | guess I should launch an editor | ||
| wait, I didn't know dump showed those | |||
| who added that | |||
| jnthn | You :P | ||
| diakopter | WAT. | ||
| no way.. | |||
| TimToady | denmark who really did it | 20:37 | |
| jnthn | I guess you wrote t/moar/annotated.t too? :) | ||
| diakopter | F. | ||
| sure enough, it resolves the instruction offsets and everything. | |||
| quadratic algorithm, but still | 20:38 | ||
| *facepalm* | |||
| jnthn | Oh, that's why the dump took less than a second to produce it's 4MB output :P | ||
| TimToady | just don't facepalm and headdesk at the same time | ||
| diakopter | *kneetableleg* | 20:39 | |
| TimToady | that might be quadralytic | 20:40 | |
| dalek | arVM: 5862ca4 | (Tobias Leich)++ | nqp-cc/t/nqp/75-curcode.t: run t/nqp/75.t, because we can |
20:41 | |
| jnthn | ...what more excuse do we need? :) | 20:42 | |
| diakopter | hunh.. my naive implementation of that seems to "work" | 20:43 | |
| TimToady | btw, is it expected that threads.t segfault? been doing it consistently here | ||
| diakopter | maybe I should write (or at least run) a test one of these days | ||
| jnthn | TimToady: Well, we didn't exactly plan for it... :) | ||
| TimToady: But yes, you're not the only one seeing that. | |||
| diakopter | the previous non-segfault error was just a flue anyway | ||
| er, grue. | |||
| er, flukeworm | |||
| er, fluke | |||
| TimToady | It is dark. If you proceed, you are likely to be eaten by a flue^Wgrue^Wflukeworm^?^?^?^?. | 20:45 | |
| diakopter | (it should've segfaulted before; it's only an accident of memory corruption it dien't) | ||
| dalek | arVM: 7da6551 | jnthn++ | nqp-cc/src/QASTCompilerMAST.nqp: Annoate filename too. |
||
| diakopter | jnthn: I really am working on this. I sewar. | 20:46 | |
| TimToady is feeling drained | 20:47 | ||
| diakopter | at least you're not feeling sepsis | ||
| er. | |||
| you get it. | |||
| TimToady | is that one after sexsis? | ||
| lizmat | octis? nonis? | 20:48 | |
| diakopter | oh gosh. I was thinking of another connotation | ||
| TimToady | Only French is allowed to have double entendres. | 20:49 | |
| tadzik | hahaha | ||
| 'make install' will install MoarVM Cross Compiler. | |||
| make: *** No rule to make target `install'. Stop. | |||
| diakopter | yeah that's a cake | ||
| jnthn | nqp-cc will go away eventually :) | 20:50 | |
| TimToady | you'll need a better portal gun for that | ||
| or a helpful computer | |||
| diakopter | jnthn: visual studio always shows the *next* line of execution in stacktraces. which do we do | 20:51 | |
| well I guess I'm thinking of the debugger | 20:52 | ||
| so, nm | |||
| jnthn | Current line | ||
| diakopter | do we show phantom call frames such as fake ones injected by the continuation mechanism | 20:53 | |
| jnthn | The cont mechanism doesn't make fake frames iirc | 20:55 | |
| Just attaches the return handler thingy | |||
| oh, I think I tracked down the problem... | |||
| diakopter | jnthn++ | 20:59 | |
| jnthn | Parrot is a bit laxer than Moar or JVM on hash vs array indexing... | ||
| ...so we got lucky. Got a patch I think... | 21:01 | ||
| dalek | arVM: bd38509 | jnthn++ | nqp-cc/src/QASTOperationsMAST.nqp: Avoid trying to existskey the $allops array. |
21:06 | |
| jnthn | And now we...segfault! | ||
| benabik | \\o/ | ||
| wait.... /o\\ | 21:07 | ||
| diakopter | ergh | ||
| well, that's better than.. not making it to the code that segfaults? | |||
| TimToady | /o/ | 21:08 | |
| jnthn | aye | ||
| FROGGS | jnthn: didnt you mix up $bankish and $bank? | ||
| (just from reading the snippit I see in the commit) | 21:09 | ||
| jnthn | FROGGS: no | ||
| FROGGS | good :o) | ||
| jnthn | bizzarely when I run it under the debugger it complains about the apr_file_close(file_handle); call | ||
| FROGGS | ahh, now I see | ||
| jnthn | In the initial MVM_cu_map_from_file | ||
| diakopter | that's a heisencat for you | ||
| need to warm up the heisenberg compensators | 21:10 | ||
| benabik | Do heisencats hunt heisenbugs? | 21:12 | |
| jnthn | no, it's a double-close, it seems | ||
| Oh, it doesn't segfault, it apparently just does nothing... | |||
| diakopter | oh actdually | ||
| I've seen that | |||
| on msvc | |||
| dalek | arVM: 799a294 | jnthn++ | src/core/compunit.c: Avoid an apparently double-close. |
21:13 | |
| jnthn | s/y// | ||
| diakopter | if you double close stdout it segfaults if you're in the console, but not in the VS GUI | ||
| IDE | |||
| jnthn | heh | ||
| oh... | 21:16 | ||
| MAIN doesn't get called :) | |||
| That'd explain why it does nothing. | |||
| diakopter | o_O | ||
| are we about to birth Actual Software? | |||
| jnthn | probably not :P | 21:17 | |
| I mean, I don't think the actual compile infrastructure is hooked up yet. | |||
| diakopter | heh, no. and serialization. | ||
| jnthn | You don't need that for self-host | ||
| Only for bootstrap | |||
| That is, you only need it when you want it to compile to a bytecode file, not just in memory. | 21:18 | ||
| diakopter | oh | ||
| jnthn | So we can go some way without that. | ||
| But will block on it at some point of course | |||
| Anyway, it's quite exciting that we manage to load and initialize all of NQP, even if we don't land up in MAIN | 21:19 | ||
| diakopter | I need to go tot he movie theater to get some MinuteMade strawberry frozen lemonade, aka. my weakness. | ||
| since my usual source (local hotel) is out of them | |||
| jnthn: did you review my patch about the SC/compunit loading, or are you prefering not to look :) | 21:25 | ||
.oO( or should I not have reminded you? ) |
21:26 | ||
| jnthn | diakopter: Yes, I whined about that empty leftover function :) | 21:28 | |
| diakopter | o yeah | 21:29 | |
| <- surprised no other complaints. it's kinda.. "clever", you might say | |||
| jnthn | So was the original thing I did... :S | ||
| diakopter | whew, I think | 21:30 | |
| lizmat: u feeling better yet? I got over my cold Saturday or so | |||
| jnthn | Well, we'll really know when we start eval'in' :) | ||
| lizmat | I got over mine more or less today | 21:33 | |
| woolfy is still down, but then it only kicked in with her on Sunday | |||
| diakopter | wtf did I do in this code | 21:43 | |
| somehow I'm using various bytes in this table for different values on different indexes... on different things. | 21:44 | ||
| er, bits. | |||
| well I guess it sorta makes sense | 21:46 | ||
| *shakes head* | |||
| oh yeah, this was the first thing I ever coded... | |||
| in this project | |||
| er, also, in C. | |||
| jnthn: okay, how do I trigger a stack trace | 21:51 | ||
| lizmat | nqp::die ? | ||
| jnthn | yes | ||
|
21:56
donaldh joined
|
|||
| diakopter | donaldh: did you find your socks? | 22:00 | |
| jnthn | Will look at the MAIN thing tomorrow | 22:22 | |
| 'night | |||
| TimToady | o/ | 22:23 | |
|
22:31
donaldh joined
22:39
not_gerd left
22:45
eternaleye joined
23:00
colomon joined
23:15
BenGoldberg joined
23:16
Ben_Goldberg joined
|
|||
| dalek | arVM: 9ad92ba | diakopter++ | src/ (8 files): put some of annotations into backtrace. kinda works, kinda doesn't; not looking into it today. |
23:25 | |