June 12, 2014 Re: extern(Windows) behavior on non-Windows systems | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Walter Bright | 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 Re: extern(Windows) behavior on non-Windows systems | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Walter Bright | 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 Re: extern(Windows) behavior on non-Windows systems | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Walter Bright | 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 Re: extern(Windows) behavior on non-Windows systems | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Iain Buclaw | 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 Re: extern(Windows) behavior on non-Windows systems | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Walter Bright | 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.).
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply