01:14 [Coke] joined, konobi joined, arnsholt_ joined, leedo joined, sivoais joined 01:25 zostay joined 01:44 SmokeMachine joined 02:48 ilbot3 joined 03:18 dalek joined 06:55 brrt joined
brrt it appears i have found the root cause of the wrong spillage 07:38
contrary to what i want to do, the load is inserted just after the use
brrt should probably ressurrect tile debug dumping 07:39
hmm, that may not be true after all...
samcv brrt, how do i make callgrind give me more data 07:40
it's not giving me any of the functions called by the utf8 stream decoder 07:41
just saying that function is using that, but i know it calls many other utf-8 functions
brrt i'm actually not all that familiar with calgrind 07:43
i know valgrind and i know ASAN
08:22 brrt joined 08:34 btyler joined 08:37 tbrowder joined, ilmari joined, mst joined, camelia joined, nine joined, nebuchadnezzar joined, stmuk joined, japhb joined, nwc10 joined, mtj_ joined, BinGOs joined, moritz joined, jnthn joined, Util joined, JimmyZ joined, ChanServ joined 08:44 sivoais joined 08:56 zakharyas joined 09:18 leego joined
jnthn morning o/ 10:10
yoleaux2 5 Jan 2017 23:45Z <samcv> jnthn: so I am trying to get certain emoji working, and so i made this change here github.com/samcv/MoarVM/commit/a29...bc21b3R579
5 Jan 2017 23:47Z <samcv> jnthn: and oh oops i made a mistake. sorta nvm
05:10Z <MasterDuke> jnthn: if you don't mind taking a look at irclog.perlgeek.de/perl6-dev/2017-..._13865466, do you have an opinion? should we give the same error and suggestion for all Nd's as for [1..9]?
samcv morning jnthn 10:11
also yeah nvm that thing i said. i got it working :)
PR is on moar and ready for merge
jnthn \o/
Review coming shortly then :)
lizmat moarning jnthn :-) 10:12
yoleaux2 05:10Z <MasterDuke> lizmat: if you don't mind taking a look at irclog.perlgeek.de/perl6-dev/2017-..._13865466, do you have an opinion? should we give the same error and suggestion for all Nd's as for [1..9]?
samcv i want only 1 yoleaux2
jnthn hi lizmat
samcv not 2
jnthn samcv: About your calling question in backlog, what flags did you build with? 10:13
You may get more into with --debug=3
samcv --debug
ah. ok :)
jnthn s/calling/callgrind/ # d'oh :) 10:14
samcv i will do that then
jnthn But I don't know whether callgrind can take advantage of that
arnsholt Could be inlining?
jnthn Since it's a dynamic analysis, and inlining means that some frames really don't exist
samcv i don't think the utf-8 stream decode is inlined but
jnthn gdb seems to happily untangle that with --debug=3
samcv ah nice :)
jnthn So I guess that data's there at least. 10:15
arnsholt --debug=3 turns into -g3?
jnthn With gcc I believe so, yeah 10:16
Maybe it's same for clang too, forget these intricacies :)
arnsholt Yeah, I assume it's different for MSVC =)
Anyways, -g3 is really nice
Another *very* useful thing it adds is macro definitions
samcv nice 10:17
i've been using the kcachegrind program to inspect the logs
arnsholt So that you can p OBJECT_BODY(a_thing), rather than figuring out the definition *again*
(Though note that gdb can also be told about macros run-time, so that at least you only have to figure them out once per session =) 10:18
Yeah, kcachegrind is nice
samcv urm yeah this is more in depth for sure 10:19
jnthn Nice :)
PR reviewed
Righty, I was looking into that leak... 10:24
nwc10 Merry Christmas 2.0, jnthn 10:30
jnthn Thanks! :) 10:31
jnthn celebrates with coffee and deleting code :)
samcv jnthn, fixes made 10:33
10:50 Ven joined
brrt my spilling code doesn't break, but does return the wrong value, and i need to figure out why 10:50
to be continued
dalek arVM: ebc4abc | samcv++ | src/strings/normalize.c:
Don't break after ZWJ or for MALE SIGN and FEMALE SIGN
10:52
arVM: d26f8c0 | samcv++ | src/strings/normalize.c:
use #define’s for the ZWJ, ZWNJ, MALE SIGN and FEMALE sign

Also use a switch for a = MVM_UNICODE_PVALUE_GCB_ZWJ in should_break()
MoarVM: 331a6b4 | jnthn++ | src/strings/normalize.c:
MoarVM: Merge pull request #486 from samcv/emoji
MoarVM:
MoarVM: Don't break after ZWJ or for MALE SIGN, FEMALE SIGN or Glue_After_ZWJ
samcv yey
dalek arVM/work-lifetime: 1d3cdad | jnthn++ | / (12 files):
Eliminate the getregref_ ops.

These meant that we could not rely on ->work no longer being needed after the frame's execution was completed. This implied that, short of static analysis to check these ops were not used, we could not be sure it was OK to throw out ->work right after the frame's dynamic scope ended. The ops were not being used in Rakudo, nor in NQP besides in the code that compiled into them, which was already been removed. They only existed to allow lowering of lexicalref => localref at some point in the future, but an optimization that pessimizes the world is hardly a win. It would also have been a huge pain for the JVM backend, and likely the JS backend too, to implement localref (neither did so).
11:18
jnthn While I'm killing off unused stuff that costs us... 11:24
Nothing anywhere in Rakudo or NQP, except some tests cases that don't entirely pass anyway, needs multi-shot continuations. 11:25
We only need one-shot ones in Rakudo
But we complicate some hot code-paths by attempting to support them
And I can't see us ever needing them
We only really need co-routine power
Which we get from one-shot 11:26
For both gather/take and in the future for non-blocking await
This comes up now because I'm tidying up the code path in question. 11:27
But also because I suspect we can reduce memory pressure for gather/take along the way
The only reason I put this in was because I was porting the JVM backend continuation tests
arnsholt Sounds sensible enough killing it off, then 11:29
I mean continuations are cool, and all, but if they're costly and unused...
jnthn Right
And given we fail the multi-shot tests anyway (I didn't sink time into them then 'cus we didn't need it) I'm doubtful anyone is using it 11:30
lizmat YAGNI applies, I guess :-)
jnthn *nod* 11:31
Yes, I'd prefer to make things better for all the users I know I have than keep a feature only interesting to users I can imagine might feasibly exist. :)
arnsholt My only use case for continuations is non-deterministic search, and I think one-shot is fine for that too 11:36
dalek arVM/work-lifetime: f2dae67 | jnthn++ | src/core/frame.c:
Re-order/simplify operations in remove_one_frame.

If the frame is on the call stack, we don't need to NULL stuff in it; it's going away anyway. We also eliminate a duplicate call to the function MVM_args_proc_cleanup_for_cache for the callstack case (the MVM_args_proc_cleanup in MVM_frame_destory calls it anyway). We may have continuation tags in a frame that was never promoted, since we may add tags but never actually take a continuation (a `gather` that never does `take` would be such an example), so we take care not to leak those. That duplication can be cleaned up a little later.
11:39
dogbert17 notices a hive of activity :) 11:52
dalek arVM/work-lifetime: 202c266 | jnthn++ | / (10 files):
Eliminate continuationclone op.

Unused by anything in Rakudo, and in NQP only used in a test case. It was added because nqp-j had the op, and MoarVM continuations were done to the same API. However, we never used it besides that test case, and it didn't really work properly anyway because we didn't need it, so it is a bit hard to imagine any unknown users seriously relying on it. The removal of this will help to simplify ->work lifetime management.
11:54
dogbert17 does anyone know how to run a single spectest file with the perl6 test harness? TEST_HARNESS=6 does not seems to work
e.g. 'make t/spec/S24-testing/line-numbers.t TEST_HARNESS=6' runs with t/harness5 :( 11:56
dogbert17 notices that this behaviour is hard coded into Configure.pl 12:13
dalek arVM/work-lifetime: 3819e7b | jnthn++ | src/ (2 files):
Enforce one-shot invocation of continuations.

One-shot is all that Rakudo needs for gather/take, and will suffice for non-blocking `await` also. We never really properly handled the multi-shot case anyway, out of not needing it. And our incomplete attempts to support it came with some nasty memory management risks. The only non-trivial test for this in the NQP test suite already was failing, so there's no loss there. This protection will also be useful for catching bugs when we introduce non-blocking `await` in Rakudo, as any double invocation there will surely be a screw-up.
12:20
jnthn Lunch time, but looks like the next commit - provided spectest passes - brings some nice simplifications :) 12:35
Darn. A couple of fails. 13:10
jnthn re-does it in small steps 13:17
nwc10 but will *you* finish before ilmari remembers to have lunch? 13:18
13:18 FROGGS joined
jnthn hopes so ;) 13:19
dalek arVM/work-lifetime: 8035038 | jnthn++ | src/core/ (3 files):
Simplifications from making continuations 1-shot.

We no longer need the `in_continuation` flag, which eliminates the code to set it, the storage (though due to alignment we won't really save anything) and the code to check it. It was checked every time a callframe was taken off the stack, which adds up over a program's lifetime. Furthermore, we can now unconditionally clear up any continuation tags.
13:25
jnthn That part seems innocent :)
dalek arVM/work-lifetime: 0ed5e11 | jnthn++ | src/core/frame.c:
Avoid duplicate continuation tag cleanup check.

This was harmless, but a waste of a few cycles on frame destruction. Given that only frames that were on the call stack will ever have had opportunity to run a `continuationreset`, there unconditional cleanup of them in `remove_one_frame` should suffice. (Deserialized contexts of closures will never have any continuation_tags and no means to get them.)
13:33
jnthn And that one.
Umm 13:41
If I read the numbers right, CORE.setting compilation mighta just got somewhat faster. :)
ilmari nwc10: I have now finished lunch 13:43
jnthn I'm slower. :) 13:44
nwc10 :-)
dalek arVM/work-lifetime: 5c1ecc0 | jnthn++ | src/core/frame.c:
Always release ->work at end of a frame's scope.

This is safe to do unconditionally now that continuations are one-shot and register references are no more. This brings forward when memory can be released, and also prevents things from lingering in the inter-generational set for so long (we now really only ever do that when the frame is still in dynamic scope - for very long-lived and heap-promoted frames - since we don't enforce write barriers on registers).
13:51
arVM/work-lifetime: 3398380 | jnthn++ | src/core/exceptions.c:
Use ->work as our "in dynamic scope" test.

It now reliably provides this information.
14:09
arVM/work-lifetime: 5918061 | jnthn++ | src/ (3 files):
Eliminate `tc` field in MVMFrame.

We used to use it to track whether a frame is in dynamic scope, but now the `work` field can be reliably used for that. This shaves a memory write off every frame setup, but more significantly cuts the size of every MVMFrame by 4 (32-bit) or 8 (64-bit) bytes, which will reduce memory pressure.
timotimo cool, that also means more frames fit into our callstack regions :)
jnthn Aye 14:11
timotimo i wonder when other people get the pedantic anti-warning warning problem 14:18
dalek arVM/work-lifetime: fdfe07b | jnthn++ | src/core/args. (2 files):
Simplify args cleanup functions.

Reduce to one function, removing the confusingly-named "for_cache" form that did only part of the work.
14:19
arVM/work-lifetime: e592dbc | jnthn++ | src/gc/roots.c:
Reduce number of checks in GC frame marking.

If the frame is no longer in dynamic socpe, we can't possibly have any args to care about.
14:22
jnthn I...what...number did I just see for CORE.setting parse? 14:39
timotimo oooh, spill the beans!
jnthn will have to do some measuring after testing the upcoming patch
brrt ohoooh 14:40
we need to know
dalek arVM/work-lifetime: 275c9b5 | jnthn++ | src/gc/roots.c:
Fix typo in comment; MasterDuke17++.
14:41
timotimo wow, that commit made core setting parse so much faster? 14:45
interesting, because this patch makes it do more
SCNR :)
dalek arVM/work-lifetime: c7dcce5 | jnthn++ | src/core/frame.c:
Only need to NULL ->work on return now.

  Thanks to GC using this to guard against all scanning of things that
are only alive in dynamic scope, there's no reason to also NULL out cur_args_callsite.
14:47
arVM/work-lifetime: 6605510 | jnthn++ | src/core/args.c:
No need to zero the nameds used buffer size.

We never look at this number to decide anything except how much memory to free, which only happens once. a83f7f7 | jnthn++ | src/core/args.c: Remove unrequired NULLing of flattend arg buffers.
The ->work flag prevents us ever looking at these in GC after the lifetime of a frame is over, so this isn't needed.
timotimo yay, not as much memset!
(i think?)
jnthn timotimo: No, this was just assigning a zero in this case
Clarity around ->work lifetime allows quite a lot of cleanups. 14:49
arnsholt [Event "Let's Play!"]
[Site "Chess.com"]
[Date "2016.12.27"]
[White "arnsholt"]
[Black "Garoof"]
[Result "1-0"]
[ECO "C60"]
[WhiteElo "1109"]
Whoops!
notviki c-c-c-combobreaker!
JimmyZ jnthn: maybe a good read for you www.inf.puc-rio.br/~roberto/docs/MCC15-04.pdf ,and others 14:53
brrt that's from the lua dudes innit 14:56
JimmyZ yeah
timotimo ohai JimmyZ 14:57
JimmyZ timotimo: hello timotimo
jnthn Some numbers coming soon 14:59
JimmyZ jnthn++ said we need one shot continuations to implement coroutines, this pdf said full coroutines is easy to implement, which makes me think it may be a good read 15:01
jnthn JimmyZ: Thanks, will take a look over that 15:02
gist.github.com/jnthn/de0c1b39fd17...5f93541cfb 15:05
timotimo *nice* 15:06
stage mast and stage optimize were also very happy
JimmyZ nice improvement
jnthn m: say 1375456 - 1244512
camelia rakudo-moar dd5759: OUTPUT«130944␤»
jnthn Also 130MB less RAM to build CORE.setting 15:07
m: say 1244512 / 1375456
camelia rakudo-moar dd5759: OUTPUT«0.904800␤»
jnthn Given this is a notable chance, it'd be nice do give it at least an ASAN run and perhaps a GC stress run too 15:09
nwc10 at a83f7f7cbcc4f81f0672e5462f2637b6db9f5c70 ASAN was happy 15:12
but t/spec/S15-nfg/emoji-test.rakudo.moar fails a lot of subtest 15:13
jnthn Yeah, I branched earlier than the merge of that work
Just reviewing the changes, I suspect I've introduced a leak for continuations that are taken and never invoked. 15:14
(Thankfully, easily fixed.)
15:20 dalek joined
dogbert17 what nursery size do you recommend? 15:28
dogbert17 goes for 128k 15:30
jnthn That'll do it, I'd think 15:31
dogbert17 using this combo: his is Rakudo version 2016.12-230-g3c52aa096 built on MoarVM version 2016.12-83-ga83f7f7c
dalek arVM/work-lifetime: 88adca5 | jnthn++ | src/core/continuation.c:
Remove dead variable/assignment.
15:35
arVM/work-lifetime: 74a6125 | jnthn++ | src/core/frame.c:
GC-destroying a frame still must check work, etc.

Since if the frame was taken as part of a continuation that was then never invoked, its work and tags need cleaning up.
15:43
dogbert17 the emoji test can be ignored here I think 15:46
jnthn dogbert17: yes 15:50
jnthn hurls github.com/MoarVM/MoarVM/pull/487
dogbert17 ok, spectest clean with 128k nursery, FSA_SIZE_DEBUG 1 and MVM_GC_DEBUG 2 15:54
jnthn \o/
Very nice. 15:55
dalek arVM/even-moar-jit: a4b3f46 | brrt++ | src/jit/compile. (2 files):
Tile for compiling breakpoints

For debugging purposes only
16:45
arVM/even-moar-jit: 0e66a23 | brrt++ | src/jit/linear_scan.c:
Implement spilling and loading of live ranges

This fixes the NQP test case moar/50-jit-register-alloc.t, and paves the way for the correct implementation of function calls etc.
16:46 brrt joined
brrt ^ my eastern-orthodox christmas present 16:47
we can now actually, as in really, as in literally, spill and load registers
and it works.... correctly
dalek arVM/more-pressure: 539346d | jnthn++ | src/io/ (3 files):
Take into account actual allocated of I/O buffers.

It seems libuv suggest we allocate 64KB sometimes, even when the input we get is tiny. While I'm not sure second-guessing it is wise, we should at least be honest internally about what's allocated. By storing the actual allocated size, the GC can track it as part of the gen2 promotion statistics, and be smarter about triggering full collections. This reduces memory overhead.
16:48
brrt jnthn++ has to outdo me, as usual :-P 16:49
jnthn brrt++ :)
brrt i'm actually very, very, very happy that this works 16:54
i've been scheming on how to make the register allocator for the better part of a year 16:55
dalek arVM/heap-prof-tweaks: 8bfbb0e | jnthn++ | src/gc/orchestrate.c:
Tweak full collection criteria in heap profiling.

The recording of heap snapshots will of course use memory, which will throw off the RSS heuristic and make us a *lot* less likely to ever do a full collection, distorting the profiles. This is also a bit of a distortion (to more regular heap profiles being taken), but it's an improvement. (To do better, we could try tracking RSS before/after snapshots and excluding that memory from the calculation. Patches welcome if anyone tries it and finds that a viable appraoch.)
MoarVM/heap-prof-tweaks: 68b5e35 | jnthn++ | src/profiler/heapsnapshot.c:
MoarVM/heap-prof-tweaks: Null-check the *correct* thread's ->cur_frame.
MoarVM/heap-prof-tweaks:
brrt anyway, decommute & 16:56
nwc10 jnthn: ASAN finds work-lifetime unworthy of comment 17:02
dalek MoarVM/free-spesh-log-slots: 4d87b1c | jnthn++ | src/spesh/candidate.c: 17:03
MoarVM/free-spesh-log-slots: Free up spesh log slots after specialization.
MoarVM/free-spesh-log-slots:
MoarVM/free-spesh-log-slots: Spesh logging keeps values alive, preventing the GC from collecting
MoarVM/free-spesh-log-slots: them. It logs values to sample what types show up, which is fine, but
MoarVM/free-spesh-log-slots: we should not hang on to them beyond the point the specializer has
MoarVM/free-spesh-log-slots: used them in its analysis. This reduces memory overhead, perhaps
MoarVM/free-spesh-log-slots: quite notably in some applications that have large objects (for
MoarVM/free-spesh-log-slots: example, RT #130494 leaked many objects in this way). On CORE.setting
MoarVM/free-spesh-log-slots: compilation it saves ~3MB - not much in the scheme of things, but nice
synopsebot6 Link: rt.perl.org/rt3//Public/Bug/Displa...?id=130494
dalek MoarVM/free-spesh-log-slots: to win.
jnthn So, post yesterday or so's discussion on review, I've put my work today into PRs for review! github.com/MoarVM/MoarVM/pulls :) 17:04
Feedback encouraged. Though I note nine++ who thought this was a good idea has gone on vacation. :P :P
nwc10: Glad ASAN is happy :-) 17:05
I'm off to relax :) 17:09
17:16 geekosaur joined
japhb Holy shazbot, that's a heck of a day's output! 17:31
japhb looks forward to building a fresh Rakudo with changes like these. :-)
[Coke] jnthn++ 17:34
japhb .ask brrt Now that you have a working register allocator, what's left before you can merge that branch? 17:39
yoleaux2 japhb: I'll pass your message to brrt.
diakopter shazbot 17:42
yoleaux2 11:11Z <samcv> diakopter: why did you lol wut notviki’s commit???
diakopter samcv: oh, I was just lolwut about the long messages
notviki That's it? 17:43
heh
And I layed awake at night, thinking my code was off :)
17:45 domidumont joined 17:48 domidumont joined
diakopter notviki: I guess I was surprised dalek survived the long message 17:51
notviki heh 17:52
[Coke] .u { .uniname ~~ / 'DOUBLE-STRUCK'/ } 17:58
yoleaux2 U+0020 SPACE [Zs] ( )
U+0027 APOSTROPHE [Po] (')
U+002D HYPHEN-MINUS [Pd] (-)
[Coke] u: { .uniname ~~ / 'DOUBLE-STRUCK'/ }
whoops, not the best window for that. sorries 17:59
timotimo i could have sworn we already cleaned up log slots in spesh ... 18:16
diakopter lizmat: another thing that could use p6ified (last I checked) is the dalek 18:23
and it's definitely not performance-constrained, so it's not like it's a serious risk of becoming unusable (like a prospective port of ucd2c.pl might be) 18:24
notviki Yeah, I can p6ify dalek 18:25
dalek you hear that! People are talking about replacing you!
18:27 TimToady joined
diakopter ohai 18:27
geekosaur .oO { P6-IN-ATE! }
diakopter notviki: I'm pretty sure looking at dalek's source wouldn't help you any; but do you know where it is? 18:32
notviki Yeah 18:33
@hack:/home/dalek/dalek 18:34
dalek: karma 18:35
dalek: help
Well, I guess I'm not looking to reinvent all of possible features it has, but just what we need. I'm guessing watching for commits and reporting them is one... anything else?
[Coke] we have so many bots, I think we've already decided one-feature-per-bot is fine. :) 18:36
and yes, I think that's dalek's one thing.
notviki OK. Then Tuesday we'll have a new dalek 19:02
19:10 Zoffix_ joined
notviki Excep I'll call it "Geth" :) 19:12
masseffect.wikia.com/wiki/Geth
timotimo that's a cute idea
i know that reference
geekosaur or go with the similar thing in the original universe... cybermen >.> 19:15
timotimo cyber cyber cyber cyber 19:17
samcv notviki, the diakopter’s mystery is over 19:29
yoleaux2 18:24Z <notviki> samcv: what do you think of github.com/rakudo/rakudo/pull/990 can you merge it if it looks fine?
samcv will look
i don't really like how we specify all the zero value glyphs :\ but otherwise i am not opposed to it at all 19:34
notviki samcv: yeah me neither :)
samcv: MasterDuke .ask'ed TimToady for an opinion too... via the bot
samcv m: "0٠۰߀०০੦૦୦௦౦೦൦෦๐໐༠၀႐០᠐᥆᧐᪀᪐᭐᮰᱀᱐꘠꣐꤀꧐꧰꩐꯰0𐒠𑁦𑃰𑄶𑇐𑋰𑑐𑓐𑙐𑛀𑜰𑣠𑱐𖩠𖭐𝟎𝟘𝟢𝟬𝟶𞥐".comb.».unival.say 19:35
camelia rakudo-moar dd5759: OUTPUT«(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)␤» 19:36
samcv m: "a".unival.say
camelia rakudo-moar dd5759: OUTPUT«NaN␤»
samcv still i don't like that part. at all specifying them
notviki m: "༳".unival.say 19:37
camelia rakudo-moar dd5759: OUTPUT«-0.5␤»
notviki neat
m: say "༳" ~~ /\d/ 19:38
camelia rakudo-moar dd5759: OUTPUT«Nil␤»
samcv also why don't we just check unival on it… or create some character class internally for one number value? 19:40
idk i don't really like having to specify all those values. i think that's the wrong way to do it 19:41
dogbert17 jnthn: about the free-spesh-log-slots branch, I checked it out and tried both htmlify.p6 and the RT code example. Maybe that's not the right way to do it because I can't see any improvements in memory usage. 19:57
I'm still unable to build the docs with htmlify.p6 :( MoarVM panic: Memory allocation failed; could not allocate 1880616 bytes 20:02
samcv dogbert17, can't build it at all? or can't build unless you set the thread level to 1?
dogbert17 samcv: isn't 1 the default? 20:03
samcv maybe
brb gonna logout login my laptop is slowing down 20:04
dogbert17 running htmlify under /usr/bin/time gives: 616.96user 27.90system 8:55.10elapsed 120%CPU (0avgtext+0avgdata 2576668maxresident)k ; 17904inputs+200680outputs (17major+7320835minor)pagefaults 0swaps 20:05
samcv: did you manage to speed up your laptop? 20:13
samcv no. i am going to reboot ;\
burb
20:21 nebuchadnezzar joined 20:30 zakharyas joined
samcv OpenGL compositing (the default) has crashed KWin in the past. 20:33
This was most likely due to a driver bug.
If you think that you have meanwhile upgraded to a stable driver,
you can reset this protection but be aware that this might result in an immediate crash!
Alternatively, you might want to use the XRender backend inst
ok so that is why it was acting so crappy :P
timotimo oh, instead of turning compositing off completely, it just fell back to software rendering 21:31
that's one way to do it ...
samcv uh it may have done it completely… cause it was pretty horrible 21:41
timotimo if you don't have compositing, it'll usually be fine 22:33
[Coke] dogbert17: yes, building the docs is a dog and has been for ages. 22:54
dogbert17 [Coke]: slow as a dog I can live with, a crash not so much 23:00
[Coke] works fine on my 16G laptop? (sheepish grin) 23:04
dogbert17 I only have 8 gigs on my six year old desktop but I suspect the problems occur because I'm running this stuff in a 32 bit VM 23:11