Hi Arne.
I would like to merge the branch arne/new_buffer. It implements and uses the new dynamic buffer implementation I have talked about on the conference. The main idea behind this implementation is to help the compiler generate better code in spite of the aliasing rules of C. In particular it tries to allow compilers to coalesce individual writes to the buffer into larger MOVs. This works reasonably well in gcc and clang.
I've only had a cursory look at the new code, but this sounds good to me.
The immediate benefits are that encode_value and describe_svalue got some significant speedup. I added some benchmarks to the pike-benchmark repository. On my machine the results look like this:
buffer/encode.pike#decode_array(int) | 73.0 M 1.7 % | 71.1 M 0.8 % | buffer/encode.pike#decode_string(8bit) | 10.0 G 2.1 % | 9.9 G 3.9 % |
Looks great except for the above two, which I suspect fall within the measurement margin of error.
Once this branch has been merged I would like to change the machine code generators to use it. However, that will require some API changes to everything in code/*. This was in fact the initial reason why I started looking into this.
Sounds great.
/grubba