www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Initial Windows experience

reply Peter Alexander <peter.alexander.au gmail.com> writes:
I just want to highlight 
https://github.com/vibe-d/vibe.d/issues/1908 -- building default 
vibe.d example applications on win32 fails due to obscure optlink 
error. It has been like this for nearly 2 years.

I am not asking for help with this issue.

Win32 with optlink is the default build for dub on Windows, and 
given that vibe.d is the most popular D project, this could very 
well be among the first things that a D newcomer tries. If I were 
new to D, I'd likely just give up there and assume the language 
and tooling are immature.

The thread over there says that lld is shipped now with DMD. Is 
there any reason not to move to that and move away from optlink? 
It seems unnecessary to maintain and debug a separate linker when 
another more mature linker is available, working, and already 
bundled. Are there any reasons to stick with optlink as the 
default?
Jun 14 2019
next sibling parent Basile B. <b2.temp gmx.com> writes:
On Friday, 14 June 2019 at 09:03:17 UTC, Peter Alexander wrote:
 I just want to highlight 
 https://github.com/vibe-d/vibe.d/issues/1908 -- building 
 default vibe.d example applications on win32 fails due to 
 obscure optlink error. It has been like this for nearly 2 years.

 I am not asking for help with this issue.

 Win32 with optlink is the default build for dub on Windows, and 
 given that vibe.d is the most popular D project, this could 
 very well be among the first things that a D newcomer tries. If 
 I were new to D, I'd likely just give up there and assume the 
 language and tooling are immature.

 The thread over there says that lld is shipped now with DMD. Is 
 there any reason not to move to that and move away from 
 optlink? It seems unnecessary to maintain and debug a separate 
 linker when another more mature linker is available, working, 
 and already bundled. Are there any reasons to stick with 
 optlink as the default?
Yes +1 for -m64 by default. This gives a working, out of the box package when people download the 7z, just like in the past.
Jun 14 2019
prev sibling parent reply Dennis <dkorpel gmail.com> writes:
On Friday, 14 June 2019 at 09:03:17 UTC, Peter Alexander wrote:
 Are there any reasons to stick with optlink as the default?
With the latest DUB, it defaults to mscoff now: https://dlang.org/changelog/2.086.0.html#dmd-mscoff-default DMD itself still uses OPTLINK I believe.
Jun 14 2019
parent reply Basile B. <b2.temp gmx.com> writes:
On Friday, 14 June 2019 at 10:29:07 UTC, Dennis wrote:
 On Friday, 14 June 2019 at 09:03:17 UTC, Peter Alexander wrote:
 Are there any reasons to stick with optlink as the default?
With the latest DUB, it defaults to mscoff now: https://dlang.org/changelog/2.086.0.html#dmd-mscoff-default DMD itself still uses OPTLINK I believe.
no when you pass -m64 to DMD then it uses LLD (shipped with the default distrib) and the static libraries from MinGW (shipped with the default distrib as well). So the idea would be that -m64 should be the default. In this case people who don't have the MS toolchain setup would see their stuff compiled seamlessly and the others too. Even LDC supports -m64 without MS stuff nowadays.
Jun 14 2019
parent reply user <user user.com> writes:
FINALLY ... I have been waiting for this since for ever.
I am about to cry now :)
Thanks for all the effort ... all the people who worked on it.

Now, I just have to see how can I port my Java code to D.
Jun 14 2019
parent reply Andre Pany <andre s-e-a-p.de> writes:
On Friday, 14 June 2019 at 16:04:11 UTC, user wrote:
 FINALLY ... I have been waiting for this since for ever.
 I am about to cry now :)
 Thanks for all the effort ... all the people who worked on it.

 Now, I just have to see how can I port my Java code to D.
One thing you should keep in mind when you want to distribute your applications. Applications compiled with lld will have a dependency to a ms c runtime dll. Your application will not work on systems without this dll. On the other hand applications compiled with ms linker from e.g. MS Build Tools won't have this dependency. This is nothing bad, just a detail you have to keep in mind whole setting up your production build pipeline. Kind regards Andre
Jun 14 2019
parent Jonathan Marler <johnnymarler gmail.com> writes:
On Friday, 14 June 2019 at 16:25:07 UTC, Andre Pany wrote:
 On Friday, 14 June 2019 at 16:04:11 UTC, user wrote:
 FINALLY ... I have been waiting for this since for ever.
 I am about to cry now :)
 Thanks for all the effort ... all the people who worked on it.

 Now, I just have to see how can I port my Java code to D.
One thing you should keep in mind when you want to distribute your applications. Applications compiled with lld will have a dependency to a ms c runtime dll. Your application will not work on systems without this dll. On the other hand applications compiled with ms linker from e.g. MS Build Tools won't have this dependency. This is nothing bad, just a detail you have to keep in mind whole setting up your production build pipeline. Kind regards Andre
Issue 19760 - Windows 10 -m64 undocumented dependency on MSVC ++ Redistributable when linking with LLD https://issues.dlang.org/show_bug.cgi?id=19760
Jun 14 2019