ctfe bug?

Johannes Pfau spam at example.com
Thu Dec 22 11:28:27 PST 2011


Jacob Carlborg wrote:

> On 2011-12-22 14:39, Timon Gehr wrote:
>> On 12/22/2011 10:28 AM, Jacob Carlborg wrote:
>>> On 2011-12-22 08:47, Johannes Pfau wrote:
>>>> Hi,
>>>> the following code is reduced from a parser generated with Ragel
>>>> (http://www.complang.org/ragel/). That's also the reason why it's
>>>> using pointers instead of array access, but Ragel guarantees that there
>>>> won't be any out-of-bound reads.
>>>>
>>>> AFAIK pointers are supported in CTFE now as long as they're pointing
>>>> to an
>>>> array and there are no out-of-bounds reads. Still, the following code
>>>> fails:
>>>>
>>>> --------------------
>>>> ubyte[4] testCTFE()
>>>> {
>>>> ubyte[4] data;
>>>> string input = "8ab3060e2cba4f23b74cb52db3bdfb46";
>>>> auto p = input.ptr;
>>>> p++; p++;
>>>> data[0] = parse!ubyte((p-2)[0 .. 2], 16);
>>>> p++; p++;
>>>> data[1] = parse!ubyte((p-2)[0 .. 2], 16);
>>>> p++; p++;
>>>> data[2] = parse!ubyte((p-2)[0 .. 2], 16);
>>>> p++; p++;
>>>> data[3] = parse!ubyte((p-2)[0 .. 2], 16);
>>>> p++; p++;
>>>> return data;
>>>> }
>>>> enum ctfe = testCTFE();
>>>>
>>>> void main()
>>>> {
>>>> import std.stdio;
>>>> writeln(testCTFE()); //[138, 179, 6, 14]
>>>> writeln(ctfe); //[138, 138, 138, 138]
>>>> }
>>>> --------------------
>>>>
>>>> Has this bug already been filed? I could possibly circumvent it by
>>>> making
>>>> ragel use array indexing instead of pointers, but that'd be a
>>>> performance
>>>> issue for runtime code as well.
>>>
>>> Why would arrays be slower than pointers? You do know that you can turn
>>> off array bounds checking?
>>>
>>
>> Yes but the length has to be stored and updated, therefore for example
>> p++ is less machine instructions/memory accesses/register pressure than
>> arr = arr[1..$].
> 
> Ok, I see. Then this seems to be a very performance critical piece of
> code.
> 
In this special case it's not that important (simple UUID parser), but ragel 
is also used for HTTP parsers in webservers (lighttpd2), json parsers, etc 
and it's main advantage is speed.


More information about the Digitalmars-d-learn mailing list