llvm-d
deadalnix
deadalnix at gmail.com
Thu Mar 28 10:30:23 PDT 2013
On Thursday, 28 March 2013 at 09:23:27 UTC, Moritz Maxeiner wrote:
> I don't, I do:
>
> alias uint Foo;
> enum : Foo
> {
> FooA,
> FooB,
> FooC
> }
>
> which is a direct translation of the C enums. It gives the enum
> items no named scope, only creates an (alias) type for them. See
> https://github.com/Calrama/llvm-d/blob/master/llvm/c/constants.d
> and
> https://github.com/Calrama/llvm-d/blob/master/llvm/c/types.d
>
Ho sorry, I missed that. That is still inferior as it doesn't
introduce its own type now.
>>
>> D enums introduce a scope, when C's don't. So C need to prefix
>> enums entries manually, when in D it isn't required. The C to
>> D translation goes as follow : FooA => Foo.A instead of
>> Foo.FooA .
>
> That is not the D equivalence of the C code. That is how D
> improves upon C enums. The equivalence and thus the translation
> is to not use a named scope as seen above.
>
This is why I used the word translation. A good translation
doesn't repeat stupidly, but uses idoms of the target language.
>>
>> If the goal isn't to follow LLVM's source as closely as
>> possible, I think this is the way to go.
>
> It does follow the LLVM C API source code as closely as
> possible. It just uses a module structure different from LLVM's
> C API header structure for the reasons stated above, which does
> not change how to use the C API (As you should do "import
> llvm.c.all" either way). This is also not a new approach,
> Derelict (one of the major providers for D bindings to C
> libraries other than deimos) has been doing it for a long time.
It doesn't follow as closely as possible as the way code is
structured is part of the code. I also don't see the consistency
between that choice and the enum one.
More information about the Digitalmars-d-announce
mailing list