01:03
vendethiel joined
01:52
colomon joined,
vendethiel joined
02:03
colomon joined
02:53
colomon joined
03:42
harrow joined
03:45
vendethiel joined
04:23
ggoebel2 joined
04:25
vendethiel joined
04:56
vendethiel joined
05:45
vendethiel joined
06:12
vendethiel joined
06:21
TimToady joined
06:24
rurban joined
06:26
FROGGS joined
06:35
vendethiel joined
07:13
brrt joined
07:40
vendethiel joined
08:06
vendethiel joined
08:12
zakharyas joined
|
|||
brrt | \o | 08:16 | |
08:23
sivoais joined
|
|||
dalek | arVM/even-moar-jit: 9ff4af0 | brrt++ | src/ (3 files): Tree traversal is now generic |
08:37 | |
arVM/even-moar-jit: e66ef49 | brrt++ | / (7 files): Moved expr tree dump to jit logging expr.h is now a 'common' header, shared by all. |
08:45 | ||
brrt | mumblemumble | 08:49 | |
what shall i do first | |||
a): a non-final code generator | |||
b): CSE | |||
pros and cons | 08:51 | ||
i know how to do CSE | |||
pretty much | |||
cons: it is yet another potential source of bugs | |||
code generator pro: it proves the concept | |||
and gives a frame on which we can then improve | 08:52 | ||
con: i'm not as 100% sure on how to do it yet as i am for CSE | |||
08:57
vendethiel joined
|
|||
brrt | bbiab | 09:09 | |
FROGGS | brrt: if b) is the potential source of bugs I'd vote for a) | 10:27 | |
jnthn | Also good to work on the less certain bits sooner, so allow more time to get certainer :) | 10:35 | |
FROGGS | aye, also the 'proves the concept' bit seems important me thinks | 10:49 | |
jnthn: btw, I need a Perl 6 task :/ | 10:50 | ||
FROGGS looks at ROADMAP and does not know what to pick | 10:53 | ||
jnthn | RT has > 1000 ideas ;) | 10:59 | |
Did your C++ NativeCall work ever get merged? | |||
Yowser, ROADMAP is quite out of date | 11:03 | ||
2 *** packed arrays (jnthn) | |||
We pretty much have those | |||
FROGGS: Don't know if getting the logical cascade operators straightened out would be interesting | 11:04 | ||
FROGGS | jnthn: logical cascade ops? | 11:17 | |
and yeah, C++ might be good to get in a state where it is mergable | |||
jnthn | FROGGS: orelse/andthen | 11:18 | |
FROGGS | ahh, these | ||
hmmm, I can try to tackle them | |||
11:42
brrt joined
11:43
rurban joined
12:10
brrt joined
|
|||
timotimo | yesterday i already wondered how far mvm's even-moar-jit makes it from an actual piece of spesh'd bytecode towards a piece of assembly code that got through the new expr compiler | 12:19 | |
seems like when a) is done we'll have a preliminary implementation of "the whole way" | 12:20 | ||
12:25
zakharyas1 joined
|
|||
brrt | working on it :-) | 12:26 | |
timotimo | sounds great to me :) | 12:29 | |
i'm idly wondering what kind of performance difference we'd see if we moved away from libuv for synchronous I/O | 12:30 | ||
12:46
vendethiel joined
|
|||
brrt | i'm.... wondering if we all still feel like libuv was a great idea | 12:52 | |
maybe some year in the future we'll see something like 6io | |||
jnthn | It was in so far as we're further ahead now than if we'd tried to build all the platform abstractions ourselves. | ||
We don't even have regular access to the some of the platforms libuv supports... | 12:53 | ||
I suspect for async I/O we want to keep it | |||
brrt | that is true enough :-) | ||
jnthn | For sync...I think we will want to lose it | ||
brrt | hmm | 12:54 | |
jnthn | I'm just wondering how long I can put that off :) | ||
brrt | i concur | ||
jnthn | 'cus if long enough, we'll have awesome JITted machine code calls and we'll write the whole I/O stack in NQP | ||
brrt | but, replace it with 'just' stdio? | ||
hah | |||
it annoys me a bit that this is one of the things that is actually possible, but the road to it is so long | 12:55 | ||
jnthn | Well, yeah, that's going to be one of the points of my talk on VM engineering at YAPC | ||
You have to pick your priorities and accept that some things just can't happen near-term. | |||
brrt | ok, good to know, i'll leave that out then :-) | 12:57 | |
13:09
vendethiel joined
|
|||
[Coke] | we should absolutely be using other people's stuff and not rolling our own to start with. Let our limited resources focus on the cool new stuff. | 13:21 | |
FROGGS | aye | 13:23 | |
though at some point... when you are done and have plenty of time... :o) | 13:24 | ||
JimmyZ | ideally :P | ||
brrt | [Coke]: fair point; but other peoples stuff should not be in conflict with our goals | 13:26 | |
FROGGS | of course we have to pick deps that fit our needs | 13:27 | |
though, our needs change over time | |||
[Coke] | brrt: is that the case now? | 13:29 | |
brrt | hmm... for sync file access, i think that it would be reasonable to say so, yes | 13:30 | |
libuv is really not meant for that | |||
timotimo | well, we're doing a very curious dance with that | 13:55 | |
add a "please read/write this file" task to the event loop, start the event loop, wait for the tasks "finished" callback to be called, terminate the loop from there, return from the read/write op | 13:56 | ||
when compared to "result = fread(fh, 1024)" or what have you ... yeah, that's ... different :) | 14:10 | ||
brrt nods | 14:13 | ||
and bbiab | 14:14 | ||
or actually | |||
bbl | |||
nwc10 | however, I think that it's a reasonable plan to hold of redoing *sync* IO until we're confident that we can do it in NQP | 14:15 | |
ie the call we'd be making is read(...) not fread() | |||
(or the Win32 API equivalent) | |||
brrt | hmm. and how would you propose we do that? add a syscall interface to nqp? | 14:16 | |
hell, that's not even a bad idea... | |||
nwc10 | You expected me to have a plan? :-) | ||
brrt | of course :-P | ||
nwc10 | at least on everything POSIX, I thought that read() etc appeared as C libraries | ||
er, C functions | |||
timotimo | right, i frogot fread is the kernel function or system call or whatever :) | ||
brrt | but again, i'll be back much later, if at all, today | ||
nwc10 | (I'd hope rather thin C functions that map into syscalls) | ||
brrt | actually fread is the libc function | ||
read is the syscall | |||
timotimo | we'll turn nqp into a super awesome systems programming language ... maybe not | ||
nwc10 | fread() is stio | 14:17 | |
stdio | |||
timotimo | oh lord, what do i know :) | ||
nwc10 | which is a(nother) layer of buffering | ||
timotimo | at least i know i ought to read the man pages for those c functions before i use them | ||
nwc10 | and possibly bugs, but certainly possible platform differences | ||
and no good way to deal with non-blocking IO | |||
timotimo | that could be called wise, no? | ||
brrt nods | 14:18 | ||
manpages are awesome | |||
nwc10 | that last part probably being its biggest deficieny to us these days | ||
brrt | but now i'm really really really off | ||
nwc10 | have fun | ||
brrt | :-) | ||
timotimo | you're talking about cstdio in that case, yeah? | ||
i mainly know "#include <stdio>" for "i want printf, give me printf!" :) | 14:19 | ||
nwc10 | C's stdio, me yes | ||
timotimo | it'd be kinda surprising to me if we'd somehow manage to stumble over bugs in c's stdio after all those years | ||
especially since jnthn encourages the code base to be C89 :-) | |||
nwc10 | well, Solaris stdio was not quite ANSI C conformant for at least a decade | 14:20 | |
fflush(NULL) didn't do the right thing | |||
no idea if they actually fixed that | |||
it's quite possible that they decided that they prefered compatiblity to correctness, and didn't | 14:21 | ||
timotimo | oh! | ||
timotimo learns about unlocked_stdio | |||
"you can use these if you desire to fuck up your files" | 14:22 | ||
if we build our own locking, maybe we should use these functions so that we don't double-lock? or is that a different kind of lock? | |||
nwc10 | I don't know answers to the last part | 14:23 | |
but I'd more view it "if we build our own locking", we can do our buffering and line ending detection, and deal with the unbuffered OS calls directly | 14:24 | ||
jnthn | We already do buffering in MoarVM | 14:27 | |
And already have multiple buffers. | 14:28 | ||
One for bytes => codes, another for codes => graphs | |||
Granted the second one works hard to stay as tiny as possible. :) | |||
14:29
Ven joined
|
|||
nwc10 | this was my guess. | 14:29 | |
and I'm also aware of how much C code there is in Perl 5 (dating from Perl 1) to attempt to outsmart stdio | |||
jnthn | I think we first get the GLR done to see how much of our IO slow is about that | 14:30 | |
Then we profile and see where the rest is | |||
And then we decide if IO perf is good enough for Christmas. | |||
nwc10 | because really what you (the language runtime) wants is "give me as much as you've got, but don't actually block if we found my desired line terminator in there" | 14:31 | |
yes, agree | |||
IO perf was IIRC one of the two big stinkers in Python 3.0, fixed in Python 3.1 | |||
jnthn | Yeah, I'd rather we stink in our own ways :) | ||
nwc10 | but definately "make it work" needs to be finished before "make it fast" | 14:32 | |
they had a direct comparison with Python 2.6, and 2.6 was much faster. | |||
er, s/direct/close/ | |||
timotimo | don't forget that some people (me, for example) have a hard time focusing on tasks and may meander quite a bit | 14:33 | |
nwc10 | I'm working here from the assumption that the difference is "Python 3 lets you do what Python 2 does, but better", whereas "Perl 6 lets you do things you simply can't do in Perl 5" | ||
timotimo | the UDP support in moarvm is suffering from that, and has done so for at least a month so far | ||
nwc10 | (both statements are oversimplificaitons) | ||
but you don't get NFG or sane performant concurrency in Perl 5 | |||
15:11
FROGGS joined
|
|||
hoelzro | is anyone opposed to the idea of having more exception categories (ex. a type for failure to perform an IO operation like open a file, a type for failure to assign to a readonly variable, etc)? | 15:52 | |
I was thinking about it primarily for better handling of IO errors, but RT #125590 made me think it could be used to add information to exceptions bubbling up from MoarVM land | 15:53 | ||
jnthn | hoelzro: I'm not sure I'd do it by category, but yeah, I've been pondering a way to configure VM exceptions to map to some kind of typed thing. | 15:54 | |
hoelzro | jnthn: sorry, category was a poor choice of words. So either add some sort of "kind" field to MVMExceptionBody, or stick the information in the payload | ||
or perhaps have category with the MSB set mean non-control exceptions | 15:55 | ||
that's up to you =) | |||
jnthn | hoelzro: The other option is to hang it off the existing hll config mechanism. | 15:56 | |
hoelzro: So we first look there | |||
hoelzro | jnthn: the one set up in BOOTSTRAP.nqp? | ||
jnthn | Right, though we can add to it in CORE.setting too | ||
This means that we can also map it to do a "fail" also | 15:57 | ||
For things that should be Failure-like instead of exception-like | |||
hoelzro | ah ha | ||
I see | 15:58 | ||
jnthn | Been pondering it 'cus I think we need to find an efficient way for the dimensioned arrays to give Failure on out-of-bounds access | ||
hoelzro | this is why I ask here instead of setting out on my own =P | 15:59 | |
jnthn | And I don't want to do it by catching a VM exception and then mapping it to a Failure | ||
hoelzro | that makes a lot of sense, especially since for example, open() problems should result in a Failure | ||
jnthn | 'cus it horribly bloats the op bodies and probably shoves them firmly over the inline limit or something | ||
Yeah, I figure there's other cases :) | 16:00 | ||
hoelzro | alright, good to know you're thinking about it =) | 16:01 | |
jnthn | Feel free to explore in that direction, anyways. I suspect you'll need to take a bit of care over VM state | 16:04 | |
Since we need to set up a new VM-level call, then unwind the C stack back to the interpreter | 16:05 | ||
(which may immediately fall back into the JIT, but you don't have to care about that bit) | |||
16:12
cognominal joined
16:19
TEttinger joined
|
|||
japhb | FROGGS: +100 to getting C++ to merged status | 16:35 | |
17:37
vendethiel joined
18:03
vendethiel joined
18:27
brrt joined
|
|||
brrt | \o | 18:27 | |
dalek | arVM/even-moar-jit: f90d417 | brrt++ | src/jit/ (4 files): Simple, broken, compilation algorithm Because it is broken, I dump it as a string to the jit log, rather than try and create real code with it. Real code is much more difficult to debug. |
||
brrt | i present to you: the brokenest compilation algorithm ever :-) | ||
nwc10 | bogo-compile? "Throw all the nodes up in the air, and if they land in a usuable order, go with that. Else throw again" ? | 18:29 | |
brrt | hmm. .that presumes you can find if a order is usable | 18:30 | |
and if you can find it, why not make it in the first place | |||
nwc10 | yes, I realised that that was rather a hole in my plan | ||
brrt | no, what is broken about it, is that it doesn't spill nodes correctly | ||
and it doesn't load them after spilling | 18:31 | ||
nwc10 | you can't exactly know if something is usuable without already having a copy of the right answer | ||
brrt | and and and and | ||
or a way to compute it | |||
nwc10 | but it's really fast for certain benchmarks? :-) | ||
brrt | no, it dumps to the log stream | ||
rather than the bytecode | |||
figured that it'd be much easier to debug that way | |||
hmmm | 18:33 | ||
and it 'worked', for its purpose, because i find that there are a lot of things i hadn't properly considered yet | |||
which was what i was aiming for | |||
hmm | 18:41 | ||
i'm going to think about it a bit | |||
why didn't i bring my notebook :-( | 18:42 | ||
brrt afk | 18:43 | ||
18:43
brrt left
19:57
vendethiel joined
|
|||
jnthn | You could use the result the interpreter comes up with to decide if it's correct :P | 20:17 | |
20:32
vendethiel joined
21:06
vendethiel joined
21:42
vendethiel joined
23:10
vendethiel joined
23:47
TEttinger joined
23:55
vendethiel joined
|