www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Getting rid of global cdtors

reply Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
Getting rid of static cdtors is a good goal for druntime and standard 
library. Modules that need initialization should do so lazily upon first 
use.

I picked a low-hanging fruit in 
https://github.com/dlang/phobos/pull/7529 - there is no need at all to 
initialize and test pointers to function in Posix.

Could a Windows engineer help with the Windows part? It's a bit more 
involved - the pointers to functions should be initialized upon first 
use in a Singleton manner, and atexit(WSACleanup) needs to be inserted 
right after the call to WSAStartup.

(BTW, has wine support been maintained? It would be useful for such 
cases - I could test the Windows code without an installation.)
Jun 14
next sibling parent Adam D. Ruppe <destructionator gmail.com> writes:
On Sunday, 14 June 2020 at 18:53:52 UTC, Andrei Alexandrescu 
wrote:
 (BTW, has wine support been maintained? It would be useful for 
 such cases - I could test the Windows code without an 
 installation.)
(I'm not certain about the rest of your post so just answering this) I use wine dmd regularly without any trouble. It actually works even better now than it was supposed to since optlink used to have some kind of weird bug on wine and the lld linker is free from such pain!
Jun 14
prev sibling next sibling parent reply Avrina <avrina12309412342 gmail.com> writes:
On Sunday, 14 June 2020 at 18:53:52 UTC, Andrei Alexandrescu 
wrote:
 (BTW, has wine support been maintained? It would be useful for 
 such cases - I could test the Windows code without an 
 installation.)
Probably best to test it on Windows, otherwise you are just testing Wine's implementation and not actually your code.
Jun 14
parent Dukc <ajieskola gmail.com> writes:
On Sunday, 14 June 2020 at 19:26:39 UTC, Avrina wrote:
 On Sunday, 14 June 2020 at 18:53:52 UTC, Andrei Alexandrescu 
 wrote:
 (BTW, has wine support been maintained? It would be useful for 
 such cases - I could test the Windows code without an 
 installation.)
Probably best to test it on Windows, otherwise you are just testing Wine's implementation and not actually your code.
Wine 5.0 works well for me at least. And I don't think testing on it is a problem, because the cloud autotester should catch the rare differences between Wine and Windows.
Jun 14
prev sibling next sibling parent reply Mathias LANG <geod24 gmail.com> writes:
On Sunday, 14 June 2020 at 18:53:52 UTC, Andrei Alexandrescu 
wrote:
 Getting rid of static cdtors is a good goal for druntime and 
 standard library. Modules that need initialization should do so 
 lazily upon first use.

 I picked a low-hanging fruit in 
 https://github.com/dlang/phobos/pull/7529 - there is no need at 
 all to initialize and test pointers to function in Posix.

 Could a Windows engineer help with the Windows part? It's a bit 
 more involved - the pointers to functions should be initialized 
 upon first use in a Singleton manner, and atexit(WSACleanup) 
 needs to be inserted right after the call to WSAStartup.

 (BTW, has wine support been maintained? It would be useful for 
 such cases - I could test the Windows code without an 
 installation.)
Microsoft offers free images for developers. They have a lifespan of 3 months IIRC, and come with Visual Studio / VSCode installed: https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/
Jun 14
next sibling parent Clarice <cl ar.ice> writes:
On Monday, 15 June 2020 at 02:37:20 UTC, Mathias LANG wrote:
 On Sunday, 14 June 2020 at 18:53:52 UTC, Andrei Alexandrescu 
 wrote:
 [...]
Microsoft offers free images for developers. They have a lifespan of 3 months IIRC, and come with Visual Studio / VSCode installed: https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/
That's neat!
Jun 14
prev sibling parent Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
On 6/14/20 10:37 PM, Mathias LANG wrote:
 On Sunday, 14 June 2020 at 18:53:52 UTC, Andrei Alexandrescu wrote:
 Getting rid of static cdtors is a good goal for druntime and standard 
 library. Modules that need initialization should do so lazily upon 
 first use.

 I picked a low-hanging fruit in 
 https://github.com/dlang/phobos/pull/7529 - there is no need at all to 
 initialize and test pointers to function in Posix.

 Could a Windows engineer help with the Windows part? It's a bit more 
 involved - the pointers to functions should be initialized upon first 
 use in a Singleton manner, and atexit(WSACleanup) needs to be inserted 
 right after the call to WSAStartup.

 (BTW, has wine support been maintained? It would be useful for such 
 cases - I could test the Windows code without an installation.)
Microsoft offers free images for developers. They have a lifespan of 3 months IIRC, and come with Visual Studio / VSCode installed: https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/
Noted, thanks!
Jun 15
prev sibling next sibling parent reply Kagamin <spam here.lot> writes:
Are all those indirections still needed?
https://docs.microsoft.com/en-us/windows/win32/api/ws2tcpip/nf-ws2tcpip-getaddrinfo
 The getaddrinfo function was added to the Ws2_32.dll on Windows 
 XP and later.
Jun 15
next sibling parent reply Kagamin <spam here.lot> writes:
auto our_freeaddrinfo(A...)(A a)  system
{
   initialize;
   if (freeaddrinfoPointer)
     // May be null if WSAStartup() failed, just do nothing
     return;
   return freeaddrinfoPointer(a);
}

My, my, that's a subtle bug.

Also winsock 2.2 is 0x0202, not 0x2020.
Jun 15
parent reply Andrei Alexandrescu <SeeWebsiteForEmail erdani.com> writes:
On 6/15/20 6:25 AM, Kagamin wrote:
 auto our_freeaddrinfo(A...)(A a)  system
 {
    initialize;
    if (freeaddrinfoPointer)
      // May be null if WSAStartup() failed, just do nothing
      return;
    return freeaddrinfoPointer(a);
 }
 
 My, my, that's a subtle bug.
What is the bug? Thanks.
Jun 15
parent Andrei Alexandrescu <SeeWebsiteForEmail erdani.com> writes:
On 6/15/20 2:37 PM, Andrei Alexandrescu wrote:
 On 6/15/20 6:25 AM, Kagamin wrote:
 auto our_freeaddrinfo(A...)(A a)  system
 {
    initialize;
    if (freeaddrinfoPointer)
      // May be null if WSAStartup() failed, just do nothing
      return;
    return freeaddrinfoPointer(a);
 }

 My, my, that's a subtle bug.
What is the bug? Thanks.
Oh, I see. Forgot to negate!
Jun 15
prev sibling parent Andrei Alexandrescu <SeeWebsiteForEmail erdani.com> writes:
On 6/15/20 6:20 AM, Kagamin wrote:
 Are all those indirections still needed?
 https://docs.microsoft.com/en-us/windows/win32/api/ws2tcpip/nf-
s2tcpip-getaddrinfo 
 
 The getaddrinfo function was added to the Ws2_32.dll on Windows XP and 
 later.
Can you please mention this in the github thread? I'd be very glad to remove that stuff.
Jun 15
prev sibling parent reply Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
On 6/14/20 2:53 PM, Andrei Alexandrescu wrote:
 Getting rid of static cdtors is a good goal for druntime and standard 
 library. Modules that need initialization should do so lazily upon first 
 use.
 
 I picked a low-hanging fruit in 
 https://github.com/dlang/phobos/pull/7529 - there is no need at all to 
 initialize and test pointers to function in Posix.
 
 Could a Windows engineer help with the Windows part? It's a bit more 
 involved - the pointers to functions should be initialized upon first 
 use in a Singleton manner, and atexit(WSACleanup) needs to be inserted 
 right after the call to WSAStartup.
I needed to close that PR and it would be great if someone could pick it up. I don't have the time to set up a Windows platform. Would be glad to take a look over the PR if someone would like to adopt it. As I noted in the PR, eliminating static cdtors is key to lean and mean executables on a pay-as-you-go basis.
Jun 17
next sibling parent reply "H. S. Teoh" <hsteoh quickfur.ath.cx> writes:
On Wed, Jun 17, 2020 at 10:02:43PM -0400, Andrei Alexandrescu via Digitalmars-d
wrote:
[...]
 I needed to close that PR and it would be great if someone could pick
 it up.  I don't have the time to set up a Windows platform. Would be
 glad to take a look over the PR if someone would like to adopt it.
 
 As I noted in the PR, eliminating static cdtors is key to lean and
 mean executables on a pay-as-you-go basis.
What about breaking it up into multiple PRs and get the non-breaking parts in first, while we wait for a Windows dev to step up to the plate? Some progress is better than none. T -- We've all heard that a million monkeys banging on a million typewriters will eventually reproduce the entire works of Shakespeare. Now, thanks to the Internet, we know this is not true. -- Robert Wilensk
Jun 17
parent reply Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
On 6/17/20 10:42 PM, H. S. Teoh wrote:
 On Wed, Jun 17, 2020 at 10:02:43PM -0400, Andrei Alexandrescu via
Digitalmars-d wrote:
 [...]
 I needed to close that PR and it would be great if someone could pick
 it up.  I don't have the time to set up a Windows platform. Would be
 glad to take a look over the PR if someone would like to adopt it.

 As I noted in the PR, eliminating static cdtors is key to lean and
 mean executables on a pay-as-you-go basis.
What about breaking it up into multiple PRs and get the non-breaking parts in first, while we wait for a Windows dev to step up to the plate? Some progress is better than none.
I tried that and was told to do the Windows part too.
Jun 17
parent "H. S. Teoh" <hsteoh quickfur.ath.cx> writes:
On Wed, Jun 17, 2020 at 11:46:55PM -0400, Andrei Alexandrescu via Digitalmars-d
wrote:
 On 6/17/20 10:42 PM, H. S. Teoh wrote:
 On Wed, Jun 17, 2020 at 10:02:43PM -0400, Andrei Alexandrescu via
Digitalmars-d wrote:
 [...]
 I needed to close that PR and it would be great if someone could
 pick it up.  I don't have the time to set up a Windows platform.
 Would be glad to take a look over the PR if someone would like to
 adopt it.
 
 As I noted in the PR, eliminating static cdtors is key to lean and
 mean executables on a pay-as-you-go basis.
What about breaking it up into multiple PRs and get the non-breaking parts in first, while we wait for a Windows dev to step up to the plate? Some progress is better than none.
I tried that and was told to do the Windows part too.
What about use version(Windows) as a stop-gap measure for the time being? T -- Never criticize a man until you've walked a mile in his shoes. Then when you do criticize him, you'll be a mile away and he won't have his shoes.
Jun 17
prev sibling parent reply Timon Gehr <timon.gehr gmx.ch> writes:
On 18.06.20 04:02, Andrei Alexandrescu wrote:
 On 6/14/20 2:53 PM, Andrei Alexandrescu wrote:
 Getting rid of static cdtors is a good goal for druntime and standard 
 library. Modules that need initialization should do so lazily upon 
 first use.

 I picked a low-hanging fruit in 
 https://github.com/dlang/phobos/pull/7529 - there is no need at all to 
 initialize and test pointers to function in Posix.

 Could a Windows engineer help with the Windows part? It's a bit more 
 involved - the pointers to functions should be initialized upon first 
 use in a Singleton manner, and atexit(WSACleanup) needs to be inserted 
 right after the call to WSAStartup.
I needed to close that PR and it would be great if someone could pick it up. I don't have the time to set up a Windows platform. Would be glad to take a look over the PR if someone would like to adopt it. As I noted in the PR, eliminating static cdtors is key to lean and mean executables on a pay-as-you-go basis.
What about this? https://dlang.org/library/object/object.factory.html ProtoObject?
Jun 17
parent Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
On 6/17/20 11:00 PM, Timon Gehr wrote:
 On 18.06.20 04:02, Andrei Alexandrescu wrote:
 On 6/14/20 2:53 PM, Andrei Alexandrescu wrote:
 Getting rid of static cdtors is a good goal for druntime and standard 
 library. Modules that need initialization should do so lazily upon 
 first use.

 I picked a low-hanging fruit in 
 https://github.com/dlang/phobos/pull/7529 - there is no need at all 
 to initialize and test pointers to function in Posix.

 Could a Windows engineer help with the Windows part? It's a bit more 
 involved - the pointers to functions should be initialized upon first 
 use in a Singleton manner, and atexit(WSACleanup) needs to be 
 inserted right after the call to WSAStartup.
I needed to close that PR and it would be great if someone could pick it up. I don't have the time to set up a Windows platform. Would be glad to take a look over the PR if someone would like to adopt it. As I noted in the PR, eliminating static cdtors is key to lean and mean executables on a pay-as-you-go basis.
What about this? https://dlang.org/library/object/object.factory.html ProtoObject?
Yah, that'd need to be looked at too.
Jun 17