|
01:38
vendethiel joined
02:51
vendethiel joined
03:00
JimmyZ_ joined
04:15
vendethiel joined
05:30
vendethiel joined
07:02
zakharyas joined
07:20
Ven joined
08:21
brrt joined
|
|||
| brrt | \o | 08:21 | |
| hmm | |||
| anyone know how to initialize an array of variable-sized int arrays | 08:22 | ||
| hmm, you can't | 08:23 | ||
| ok, that's clear enough | |||
| why can't i have nice things | 08:34 | ||
| because C | 08:38 | ||
| masak | I think you need to take a step back and ask why it is you want that data structure. | 08:40 | |
| and then do what is possible in C. | 08:41 | ||
| anyway, in True Perl 6 the answer is something like `my @array[20; *];` | |||
|
08:48
Ven joined
|
|||
| brrt | i can answer that :-) | 08:49 | |
| in fact, that was supposed to be the topic of a blog post ;-) | |||
| basically, my goal is to convert a spesh-graph basic block to a low-level expression tree (a machine-level IR), on which i can then run a pattern-matching code generation | 08:51 | ||
| jnthn | moarning o/ | ||
| brrt | moarning | ||
| now, the spesh graph is properly considered an SSA-annoteted form of three-address-code | 08:52 | ||
| maybe sometimes more than three addresses, sometimes less, but that is beside the point | |||
| so my first order of business would seem to be conversion of the spesh format to an expression tree (or actually expression set, but again, beside the point) | 08:53 | ||
| agreed? | |||
| jnthn | brrt: Sounds like what the pattern matching approach needs, yes. | 08:54 | |
| jnthn notes that usage counts could help a huge amount | |||
| brrt | hmm | ||
| jnthn | In that, if something has a single use, it is a candidate for moving into the tree under its user. | 08:55 | |
| brrt | agreed; however, my tree-building algorithm is more aggressive than that | ||
| as in, it always moves it under the tree, it's just kept available until overwritten | 08:56 | ||
| so in a sense, that generates a DAG | |||
| because multiple parents can 'acquire' a child | |||
| now, how to do this without it taking up the full 8 or so weeks i have left? :-) | 08:57 | ||
| well, for that, i want to use expression templates | 08:58 | ||
| much like dynasm, in fact | |||
| these templates would be formed by a piece of IR tree and a set of fill-in instructions | 09:01 | ||
| the fill-in instructions can conveniently be a string, because the set of opertions is quite small | 09:02 | ||
| nwc10 | I admit that I've not studied luaJIT closely, but I've read a couple of the explanations of what it does for certain things | ||
| am I right in thinking that it doesn't take any advantage of runtime type information? | |||
| ie it is a "Just In Time" compilation of the static Lua code. | 09:03 | ||
| brrt | ah, i can answer that, i think | ||
| nwc10 | no guard clauses or similar "oh bother" bailout | ||
| brrt | as far as i know, lua doesn't really support user-defined types | ||
|
09:04
Ven joined
|
|||
| brrt | it supports user-defined classes and objects, but those are just extensions to the universal 'table' structure | 09:04 | |
| and, luajit is a trace compiler | |||
| what that means is that for luajit to specialize on type, it just constant-folds the hash-table lookup it would otherwise do | 09:05 | ||
| specialisation on method calls is 'for free' given the tracing, but that does mean you need to do trace guards | 09:06 | ||
| i.e. if you leave the trace, you'll need to deopt | |||
| this is all only possible because lua is a *much* simpler language than perl6 | 09:08 | ||
| jnthn | Yeah, LuaJIT is pretty specialized to Lua, which is why saying "just lift X idea from Lua to MoarVM" always frustrates me - because it's never gonna be "just". | 09:10 | |
| brrt | anyway, it looks like i'll need / want a preprocessor convert the expression-ir-templates to something that can be used at runtime, to fill those templates | 09:11 | |
| nwc10 | ah OK. thanks. So, my naive assumption is wrong - there are guards. | 09:12 | |
| brrt | alternatively, i could handcode it all, but that's timeconsuming and error-prone | ||
| yes :-) | |||
| oh, there's another fun thing about lua; lua only has floats | 09:13 | ||
| heh. luajit in fact uses it's high-level IR directly for compilation, doesn't convert to a low-level IR set | 09:14 | ||
| in effect, luajit uses peephole-optimized code generation | 09:15 | ||
| jnthn | nwc10: Trace JIT is all about guards, pretty much... | ||
| nwc10: You eliminate all control flow for guards. | |||
| To a first approximation :) | |||
| brrt nods | 09:16 | ||
| nwc10 | OK, the bit my befuddled brain missed was that there was never mention of deoptimisation in any of the exmaples of stuff (or guards) | ||
| brrt | and adds that loops or equally-taken-branches will likely end up in a trace | ||
| nwc10 | and also, that there seemed to be no concept of an intermediate state of specialised bytecode. Or logging of control flow | 09:17 | |
| obviously logging has to happen, to make tracing work. | |||
| jnthn | nwc10: It's a language thing; they don't call it "deopt", more like "trace exits" | ||
| brrt | re: logging, i think it's embedded in the interpreter? | ||
| jnthn | Yeah, though I suspect our logging is going to change with time | ||
| I'd like it to be more PIC-like | |||
| And cheaper | 09:18 | ||
| nwc10 | PIC (in this context)? | ||
| jnthn re-read the PIC paper on the train on Sat | |||
| brrt | my same question | ||
| jnthn | nwc10: Polymorphic Inline Cache | ||
| brrt | aha | ||
| nwc10 | aha. them | ||
| brrt | i read the pypy guys had a new trick on their sleeve, dispatch chains | ||
| but i'm not totally sure what that's about | |||
| nwc10 | I'm a bit disappointed that there hasn't been a new entry on blog.pyston.org/ since Feb 24 | 09:19 | |
| and even lists.pyston.org/pipermail/pyston-dev/ hasn't had a message (archived) since March 2015 | |||
| it's clear that they're busy doing stuff, given github.com/dropbox/pyston | 09:20 | ||
| but I'd love something that summarises their progress. Because I'm curious. | |||
| brrt | ehm, what's new about pyston? | ||
| jnthn | brrt: I glanced over that paper recently. | ||
| brrt | yes, my reading was also limited to a glance :-) | ||
| nwc10 | particularly given that they thought that starting a new JIT was more likely to be a win for them than using/contributing to pypy | ||
| jnthn | brrt: But it was on a day when my allergy stuff was horrid, so it was all a bit of a blur... | 09:21 | |
| nwc10 | brrt: in terms of technology - I have no idea, and I suspect "nothing" (and that might be a design choice - just do existing things well) | ||
| I was far more curious about the "do another JIT" choice | |||
| jnthn will re-read the paper at some point | |||
| brrt | we're doing another JIT, just inside the old one :-P | ||
| hmm... | 09:24 | ||
| one of the greater disadvantages of pypy, imho, is that they've distanced themselves quite far from the mainstream, technically and intellectually | |||
| nobody else is talking about a meta-tracing compiler | |||
| ah, on llvm | 09:25 | ||
| hmm... well, that can work. | |||
| nwc10 | brrt: I wasn't aware of that. I was aware that I can't build the thing on my laptop, as I only have 4Gb | 09:26 | |
| and even on a desktop with >6Gb RAM it takes forever to build (ie about 40 minutes) | 09:27 | ||
| which makes their development feedback cycle dog slow. | |||
| which will hinder them massively | |||
| and prevent them from getting many new contributors | |||
| brrt | well, it's just my opinion, for one thing :-) | 09:28 | |
| but yes | 09:29 | ||
| pypy takes literally forever to build | |||
| forever to download (on a slow line) | |||
| figuratively forever, perhaps | |||
| and... what they write about it is barely comprehensible to an outsider (me) | 09:30 | ||
|
09:42
JimmyZ_ joined
|
|||
| brrt | bbiab | 09:53 | |
|
10:31
brrt joined
|
|||
| brrt back | 10:32 | ||
|
11:20
vendethiel joined
11:23
hoelzro_trying_w joined
11:24
hoelzro joined
11:47
vendethiel joined
|
|||
| brrt | does MSVC support int array[runtime_variable] yet? | 12:30 | |
| jnthn | I don't *think* so... | 12:31 | |
| brrt | :-( | 12:33 | |
| dalek | arVM/even-moar-jit: 9885d9e | brrt++ | src/jit/expr.c: First draft of expression tree building algorithm This is not yet a useful implementation since it lacks any templates to fill, a template filling algorithm, definitions of the structures involved, and I'm fairly sure it doesn't compile. But its useful to have it out in the open anyway. |
||
| brrt | well, no matter | ||
| it supports alloca, doesn't it? | |||
| this wasn't meant to compile anyway | 12:35 | ||
| jnthn | _alloca is in the MSDN: msdn.microsoft.com/cs-cz/library/wb1s57t5.aspx | 12:36 | |
| uhh... | |||
| msdn.microsoft.com/en-us/library/wb1s57t5.aspx | |||
| brrt | why the underscore | 12:38 | |
| does microsoft not like us | |||
| ok, now for the next bits | 12:39 | ||
| filling templates | |||
| my hypothesis is that for constructing templates, i can just look at the asm code we meticulously wrote for dynasm can be a guide | 12:40 | ||
|
12:40
vendethiel joined
|
|||
| brrt | hmmm | 12:50 | |
| i'd better get the whole spesh ins for acquiring the template | |||
|
13:04
Ven joined
13:09
vendethiel joined
13:17
zakharyas joined
|
|||
| dalek | Heuristic branch merge: pushed 30 commits to MoarVM/even-moar-jit by bdw | 13:22 | |
| timotimo | is the "turn jitting to C invocations" thing going to be a priority soon? | 13:24 | |
| brrt | ehm, sorry, i don't get the context yet :-) | 13:25 | |
| timotimo | er | 13:26 | |
| yeah, it's missing half the text in the quotes | |||
| "turn jitting to C invocations into a table lookup" | |||
| brrt | ehm, yes | ||
| timotimo | or maybe "build a jit interpreter" :P | ||
| brrt | well | ||
| let me explain my plan for now | 13:27 | ||
| basically, as i said this morning, the first thing i have to do is lower the spesh graph ir to a low-level IR | |||
| timotimo | mhm | 13:28 | |
| brrt | i want to use templates to do that | ||
| timotimo | mhm | ||
| brrt | as in, something, have a template for the tree, and fill it in | ||
| timotimo | you mean "match something"? | ||
| brrt | no, matching is much later | ||
| timotimo | what's the something for, then? :) | 13:29 | |
| brrt | for each MVM instruction, find a template for the low-level IR, and fill it in with IR nodes generated for the instruction operands | ||
| timotimo | ah, hm | ||
| brrt | e.g. translate an immediate operand into an immediate node and fill this in | ||
| in other words | 13:30 | ||
| timotimo | ah, so even for operations that have a constant argument in the MVM bytecode, we'll emit something akin to a "load constant" operation? | ||
| brrt | inc_i would becomde { mem-ref register (i}, immediate (1), add relative(0), relative(1) } | ||
| yes | 13:31 | ||
| actually | |||
| that will exist in the IR | |||
| not in the written bytecode | |||
| the 3rd element (index 2) willl then be the root of the template | |||
| hmm | 13:32 | ||
| i didn't do that in my mockup implementation yet | |||
| anyway, to make a long story short | |||
| timotimo | i don't know what "root of the template" is necessary for | ||
| brrt | basically, this creates a tree (in s-expr notation) (add (reg-val 1) (imm 1)); the add node is the root | 13:33 | |
| timotimo | oh, ok | ||
| brrt | i need the root, because the root now stands for the value of that computation | ||
| timotimo | and the "relative" is relative to the { } | 13:34 | |
| brrt | precisely | ||
| anyway, that'd be the same thing as would be written for the c calls | |||
| the c calls would have two nodes, the call pointer and the argument list, ensuring that (in recursive evaluation) the arguments are stored in the right place | 13:36 | ||
| timotimo | "mem-ref register", "immediate 1" and friends are equivalent to the things we already put into the structs for generating c calls | 13:37 | |
| right | |||
| brrt | yes, but generalised, because they'll need a size | ||
| i.e. they should generalise to getting stuff from like, euh | 13:38 | ||
| timotimo | mhm | ||
| brrt | getting the category mask from the MVMException ;-) | 13:39 | |
| timotimo | that's the first time we've needed sized reads :3 | ||
| and we've reverted that again | |||
| brrt | well, we need it for a lot of things, its just that most of those have been implemented by hand, in asm, in emit_x64 | 13:40 | |
| timotimo | OK | ||
| so emit_x64 is going to shrink a bit, too? | |||
| brrt | that is the goal, yes | ||
| timotimo | well, i mean, a lot of the hand-coded things so far | ||
| we'll have the things that turn our IR into assembly, that'll be in a .dasc file, too | 13:41 | ||
| brrt | yes, that's the final codegenerator | 13:42 | |
| timotimo | will it be a separate .dasc file? | ||
| brrt | and a lot of what's in emit_x64.dasc will ocntinue to exist | ||
| timotimo | mhm | ||
| brrt | i am planning to split them, yes, and use dynasm-level .include to include them | ||
| timotimo | sounds good | ||
| seems like you can stop explaining and continue working ;) | |||
| brrt | :-) | 13:43 | |
| jnthn | brrt++ # plan sounds good, having just caught up reading :) | ||
| brrt | :-) thanks | ||
| that's a relief, really | |||
| timotimo | should i try building a code analysis thing that can turn the current jit/graph.c into a table? :P | 13:44 | |
| brrt | you... could do that, yes, i've thought about it | ||
| timotimo | sounds a bit painful | ||
| but maybe fun | |||
| and since it's a one-off, it'd be acceptable to make it do 90% of the work and do the rest by hand | 13:45 | ||
| brrt | the thing is, i haven't settled on the format of the table just yet | ||
| timotimo | mhm | ||
| brrt | :-P | ||
| timotimo | in that case, the generator can be changed | ||
| or we generate a more detailed table that can be turned into the final table | |||
| brrt | yes, that's true | ||
| timotimo | i heard xslt can be used to transform <table>s | 13:46 | |
| brrt | anyway, if you wanted to try and analyze the graph.c thingy, that'd help, definitely | ||
| timotimo | having had something like that could have been a good thing earlier to figure out things like "passed n arguments, but claimed the argument list was m elements big" | ||
| brrt nods | 13:47 | ||
| anyway, the process is automatable as far as i care. so we should automate it :-) | |||
| but i'll be back in a few hours | |||
| i have a study colloquium to attend :-) | |||
| see you! | |||
| timotimo | K cya :) | ||
|
13:50
JimmyZ_ joined
13:51
JimmyZ_ joined
14:26
Ven joined
15:20
vendethiel joined
15:21
JimmyZ__ joined
|
|||
| timotimo | we b0rked --asan | 15:29 | |
| probing whether your compiler thinks that it is gcc ==6073==ASan runtime does not come first in initial library list; you should either link runtime to your application or manually preload it with LD_PRELOAD. | |||
|
15:48
JimmyZ_ joined
15:54
Ven joined
16:35
vendethiel joined
16:53
JimmyZ__ joined
16:57
FROGGS joined
|
|||
| FROGGS | FYI: moarvm 2015.06-2 MIGRATED to testing | 16:57 | |
| The status of the moarvm source package | |||
| in Debian's testing distribution has changed. | |||
| Previous version: (not in testing) | 16:58 | ||
| Current version: 2015.06-2 | |||
| jnthn | \o/ | ||
| FROGGS | much happy | 17:00 | |
| nebuchadnezzar: how does moarvm get into stable/main or what it is called? | 17:01 | ||
|
17:02
vendethiel joined
|
|||
| japhb | FROGGS: ISTR the path was something like: Unstable --> Testing: O(weeks) with no new bugs relative to existing Testing release; Testing --> Stable: Whenever a new major release happens. | 17:05 | |
| FROGGS | japhb: the Unstable --> Testing happens after five days | 17:06 | |
| japhb | FROGGS: But it's been a while since I was following Debian day-to-day; I've drifted a couple forks away. (I used to ride Debian Testing as a matter of course, but I got frustrated when the odd failure happened and I couldn't use my computer.) | ||
| FROGGS: Methinks that's shortened over time. I would swear it used to be 2 weeks, but maybe that's just a broken memory. | |||
| FROGGS | and since moarvm is now in testing, I guess we should focus on nqp and then rakudo? | 17:07 | |
| and all of them will go into stable at some point | |||
| japhb | Last time I switched distros at home, I went to Mint | 17:08 | |
| FROGGS | somehow | ||
| japhb | Yeah, nqp seems next up. Might be worth doing nqp-m and nqp-j. | ||
| JimmyZ__ is using deepin linux.. | |||
| FROGGS | probably, yes | ||
| FROGGS uses ubuntu | 17:09 | ||
| bbl & | |||
| japhb | Mint has the interesting structure that you can have either an Ubuntu-based one, or a Debian-based one. # "Would you like your Debian at one level of indirection, or two?" | 17:11 | |
| JimmyZ: What made you choose that one? | |||
|
17:12
Ven joined
|
|||
| JimmyZ__ | japhb: based on ubuntu, but much better ui , easier use. | 17:18 | |
| and winxp/win7/osx similar theme switch | 17:19 | ||
| japhb | Yeah, part of my reason for using Mint was the desktop replacement, my laptop not being a 7" tablet. | 17:24 | |
| JimmyZ__ | I have tried mint , but I think its ui is not better than deepin 😊 | 17:27 | |
| japhb | JimmyZ__: I use the non-default desktop (the one that looks kinda like GNOME 2) | 17:28 | |
| JimmyZ__ | japhb: deepin.org/?language=en | 17:30 | |
| japhb: deepin.org/system.html for quick view. 😊 | 17:33 | ||
| japhb chuckles at "Fashion mode" | 17:34 | ||
| That felt an awful lot like "For those who love Linux but envy Apple products" | 17:35 | ||
| JimmyZ__ | there are another two modes | 17:37 | |
| japhb | Fair enough. :-) | 17:38 | |
|
17:40
Ven joined
|
|||
| JimmyZ__ | For those who love linux but envy Windows xp/7 , haha | 17:40 | |
|
17:58
brrt joined
|
|||
| brrt | \o | 18:01 | |
| japhb | o/ | ||
| timotimo | i've spent most of my evening getting rid of a headache ... though not thoroughly successfully :( | 18:02 | |
| brrt | hmm.. unfortunately there is no cure-all for headaches | 18:05 | |
|
18:05
vendethiel joined
|
|||
| brrt | just, wow (at the deepin thingy) | 18:06 | |
| to pursue perfectness and finely craft it | 18:08 | ||
| timotimo | yeah, headaches can be any of a million types | 18:11 | |
| i've tried taking a painkiller, but it didn't help much | |||
| and of course i drank lots of water | |||
| brrt | sleep is also important :-) | 18:15 | |
| timotimo | i laid down for about an hour | 18:19 | |
| didn't feel any better after that :( | 18:20 | ||
| and now i still have to shop some groceries | |||
| but dinner hasn't been decided yet | |||
|
18:21
lucasb joined
|
|||
| lucasb | Hi there. iiuc, moarvm is tracking libuv at 1.0.0. any reasons for not updating to the latest 1.6.1? | 18:23 | |
| brrt | last time we upgraded it caused some fallout, iirc | 18:25 | |
| but it wouldn't harm too much just to check if we can upgrade | 18:26 | ||
| lucasb | brrt: ok, thanks | 18:27 | |
| brrt | oh, there's another matter, libuv has had it's repo moved | 18:28 | |
| lucasb | yep, from joyent to libuv | ||
| timotimo | huh, they are already at 1.6? | 18:32 | |
| lucasb | github says 1.6.1 is 25 days ago | 18:33 | |
| brrt | building and testing as we speak | 18:34 | |
| although i should've run a spectest before going all-in | |||
| will TimToady be at YAPC::EU perchance? | 18:37 | ||
| nwc10 | brrt: he's not yet marked as confirmed: act.yapc.eu/ye2015/search?country=us | 18:42 | |
| brrt | would be nice though | ||
| hmm. S17-lowlevel/lock.rakudo.moar still flaps | 18:43 | ||
| TimToady | yes, Glo and I will be there | 18:48 | |
| brrt | \o/ | 18:50 | |
| i hope to finally meet you there | 18:51 | ||
|
18:51
vendethiel joined
|
|||
| dalek | arVM/libuv-1.6.1-update: a5f39dd | brrt++ | / (2 files): Update libuv to 1.6.1. As far as I know, not associated with new spectest failures. |
18:54 | |
| timotimo | is there a little summary of what we get by going from 1.0 to 1.6? | 19:37 | |
| FROGGS | brrt: Creating library moar.dll.lib and object moar.dll.exp | 19:42 | |
| uv.lib(util.obj) : error LNK2001: unresolved external symbol __imp_GetUserProfileDirectoryW | |||
|
19:56
brrt joined,
zakharyas joined
|
|||
| brrt | hmmmm | 19:56 | |
| weird | 19:57 | ||
| which windows are you on? | |||
| i'll start a vm | |||
| FROGGS | mine :P | ||
| no problem, I've got a fix I think | |||
| dalek | arVM/libuv-1.6.1-update: eedb1fb | FROGGS++ | build/setup.pm: link to userenv.dll on windows for latest libuv |
19:59 | |
| FROGGS | brrt: ^^ | ||
| brrt | aha | ||
| quick find | |||
| FROGGS | now I continue testing | ||
| brrt | thanks | 20:00 | |
| lizmat: i'm especially also interested in os x, winkwinknudgenudge ;-) | |||
| lucasb | timotimo: for the changes from 1.0 to 1.6, maybe it is mostly bug fixes. (sorry for the delay, I was away) | 20:16 | |
| github.com/libuv/libuv/blob/v1.x/ChangeLog | 20:17 | ||
| FROGGS | brrt: that's the fallow: gist.github.com/FROGGS/49e998a91482821ec1bb | 20:21 | |
| brrt: I know it is usually not clean on windows, so I'll rerun with libuv 1. | |||
| brrt | wow, that's actually pretty bad | ||
| FROGGS | 1.0* | ||
| brrt | please do | 20:22 | |
| timotimo | cool, thanks lucasb | 20:23 | |
| nwc10 | jnthn: paste.scsys.co.uk/491510 is what ASAN makes of MVM_SPESH_NODELAY=1 and t/moar/01-continuations.t | 20:24 | |
| timotimo | i've seen this sort of error where it kinda looks like we're returning into an already-freed spesh bytecode segment or something | 20:25 | |
| it completely stumped me :\ | |||
|
20:30
japhb joined
|
|||
| brrt | FROGGS: i even see normal tests fail :-( | 20:38 | |
| FROGGS | brrt: I updated the gist | 20:48 | |
| and it seems that windows is just unhappy in general | 20:49 | ||
| m: say <0x01/0x03> / (0x01/0x03) == 1 | 20:50 | ||
| camelia | rakudo-moar 7c35c5: OUTPUT«True» | ||
| brrt | what's the diff? | ||
| FROGGS | C:\rakudo>perl6-m -e "say <0x01/0x03> / (0x01/0x03)" | 20:51 | |
| Attempt to divide by zero using div | |||
| brrt: the diff is that the sleep test worked on 1.6.1 | 20:52 | ||
| brrt | can be an accident, the sleep test working | ||
| FROGGS | C:\rakudo>perl6-m -e "say <0x01/0x03>" | ||
| Attempt to divide by zero using div | |||
| true | |||
| m: say <0x01/0x03> | |||
| camelia | rakudo-moar 7c35c5: OUTPUT«0.333333» | ||
| brrt | hmm, frustrating | 20:53 | |
| FROGGS | C:\rakudo>perl6-m -e "say <0x01/3>" | ||
| 0 | |||
| that's weird | 20:54 | ||
| brrt | rather | ||
| i'm off for tonight | |||
| FROGGS | gnight | ||
| japhb | m: say +'0x01/0x03' | 21:05 | |
| camelia | rakudo-moar 7c35c5: OUTPUT«0.333333» | ||
| japhb | Because Str.Numeric. Boo-yah. | 21:06 | |
| FROGGS | but how can that be different on windows? | ||
| japhb | FROGGS: <0x01/0x03> and +'0x01/0x03' are different parsers. Though why it would be different on Windows, I have no idea. Unless perhaps some obtuse compiler-sensitive bug in the grammar engine. | 21:10 | |
| *are parsed by different parsers | |||
|
21:17
colomon joined
21:18
TEttinger joined
21:39
colomon joined
22:29
colomon joined
23:58
TimToady joined
|
|||