June 12, 2014
On Wednesday, 11 June 2014 at 22:20:27 UTC, Walter Bright wrote:
> I've got an enhancement request to have it behave like extern(C):
>
>     https://issues.dlang.org/show_bug.cgi?id=12894
>
> Thoughts? Anyone use extern(Windows) on non-Windows systems?

No, but if I had a 3rd party .lib that had been built on Windows
and it was the only known source for that library, I would prefer
to be able to convert it to a .a and link against it using
extern(Windows) (if possible).

I would vote that extern(Windows) should do what it says on the
tin OR issue an error telling people that a Mac/Linux build of
the compiler can't build binaries that have any chance of being
compatible with any library they'll ever find or make, so not to
include it as a build target.
June 12, 2014
On Wed, 11 Jun 2014 15:20:29 -0700
Walter Bright via Digitalmars-d <digitalmars-d@puremagic.com> wrote:

> I've got an enhancement request to have it behave like extern(C):
>
>      https://issues.dlang.org/show_bug.cgi?id=12894
>
> Thoughts? Anyone use extern(Windows) on non-Windows systems?

Regardless of what extern(Windows) is supposed to do on Windows systems, it seems _very_ broken to me to have it even compile on non-Windows systems. If you want it to work across OSes, that's what extern(System) is for.

- Jonathan M Davis
June 12, 2014
On Wednesday, 11 June 2014 at 22:20:27 UTC, Walter Bright wrote:
> I've got an enhancement request to have it behave like extern(C):
>
>     https://issues.dlang.org/show_bug.cgi?id=12894
>
> Thoughts? Anyone use extern(Windows) on non-Windows systems?

Isn't this the whole point of extern(System)? I don't really see the benefit, and don't think that extern(Windows) should even compile on non-Windows platforms.
June 12, 2014
On Wednesday, 11 June 2014 at 23:19:43 UTC, Iain Buclaw via Digitalmars-d wrote:
> Honestly, I'd first deprecate/remove extern(Pascal), then think about
> deprecating extern(Windows) later.

I agree. Does anyone use extern(Pascal)? It's piece of old history, and now it's more discouraging than useful, because it seems like the way to link D program with Pascal code, but today there are pascal compilers with incompatible mangling (just like C++ ones). For example, extern(Pascal) will not work with FreePascal as I recall.

And yes, there is extern(System) already for described purpose. It would be just weird to allow extern(Windows) work on non-Windows systems (just because of the name). Even if it can be useful by some reason, it needs to have another name (extern(Microsoft) or something).
June 12, 2014
On Wednesday, 11 June 2014 at 22:20:27 UTC, Walter Bright wrote:
> I've got an enhancement request to have it behave like extern(C):
>
>     https://issues.dlang.org/show_bug.cgi?id=12894
>
> Thoughts? Anyone use extern(Windows) on non-Windows systems?

That example of "I want this calling convention on platform X and that other convention on platform Y" points to the deeper problem that (without a preprocessor) you can't do something like this in D:

    version(Windows)
        alias extern(Foo) = extern(Windows);
    else
        alias extern(Foo) = extern(C);

    extern(Foo):
        void foobar();
        int baz();

That reasoning also applies to various other attributes. IMO, repeating all of the declarations for the multiple variants you might want is not the right answer (DRY principle, etc.).
1 2
Next ›   Last »