September 12, 2020
On 9/11/2020 12:48 AM, Martin Nowak wrote:
> Glad to announce the first beta for the 2.094.0 release, ♥ to the 49 contributors.
> 
> This is the first release to be built with LDC on all platforms, so we'd welcome some more thorough beta testing.
> 
> http://dlang.org/download.html#dmd_beta
> http://dlang.org/changelog/2.094.0.html
> 
> As usual please report any bugs at
> https://issues.dlang.org
> 
> -Martin
> 

Thanks, Martin!

Looks like 9 DMD regressions fixed and 69 DMD bugs fixed!

(It's hard to tell because the changelog won't render properly on Chrome.)
September 12, 2020
On 9/12/2020 5:26 PM, Manu wrote:
> What a monster release! We haven't had one like this for a while!

Should be something for everyone in it :-)
September 13, 2020
On Friday, 11 September 2020 at 13:44:02 UTC, Guillaume Piolat wrote:
>
> This is an absolutely fantastic release! Thanks to all.

[--snip--]

> - stricter __vector conversion

Thanks for the shout out, it's taken years to get it adopted by dmd. :-)


September 13, 2020
On Friday, 11 September 2020 at 07:48:00 UTC, Martin Nowak wrote:
> Glad to announce the first beta for the 2.094.0 release, ♥ to the 49 contributors.
>
> This is the first release to be built with LDC on all platforms, so we'd welcome some more thorough beta testing.
>
> http://dlang.org/download.html#dmd_beta
> http://dlang.org/changelog/2.094.0.html
>
> As usual please report any bugs at
> https://issues.dlang.org
>
> -Martin

One unfortunate sideeffect of allMembers change is that it breaks this king of loop:
```
foreach(m; __traits(allMembers, M)) { // M is module
    alias member = __traits(getMember, M, m); // now fails because std.stdio is not a member of M
}
```

To fix I needed to rewrite it as:
```
foreach(m; __traits(allMembers, M)) { // M is module
    static if (__traits(compiles, __traits(getMember, M, m)))
        alias member = __traits(getMember, M, m);
}
```
September 13, 2020
On 9/13/20 10:52 AM, MrSmith wrote:
> On Friday, 11 September 2020 at 07:48:00 UTC, Martin Nowak wrote:
>> Glad to announce the first beta for the 2.094.0 release, ♥ to the 49 contributors.
>>
>> This is the first release to be built with LDC on all platforms, so we'd welcome some more thorough beta testing.
>>
>> http://dlang.org/download.html#dmd_beta
>> http://dlang.org/changelog/2.094.0.html
>>
>> As usual please report any bugs at
>> https://issues.dlang.org
>>
>> -Martin
> 
> One unfortunate sideeffect of allMembers change is that it breaks this king of loop:
> ```
> foreach(m; __traits(allMembers, M)) { // M is module
>      alias member = __traits(getMember, M, m); // now fails because std.stdio is not a member of M
> }
> ```
> 
> To fix I needed to rewrite it as:
> ```
> foreach(m; __traits(allMembers, M)) { // M is module
>      static if (__traits(compiles, __traits(getMember, M, m)))
>          alias member = __traits(getMember, M, m);
> }
> ```

The first part of the change seems disruptive. If you just fix the second part (that you can now retrieve all members of std), doesn't it fix the problem?

-Steve
September 13, 2020
On 9/11/20 3:48 AM, Martin Nowak wrote:
> Glad to announce the first beta for the 2.094.0 release, ♥ to the 49 contributors.
> 
> This is the first release to be built with LDC on all platforms, so we'd welcome some more thorough beta testing.
> 
> http://dlang.org/download.html#dmd_beta
> http://dlang.org/changelog/2.094.0.html
> 
> As usual please report any bugs at
> https://issues.dlang.org
> 
> -Martin
> 

The dub change allowing git repository is HUGE !

This allows us to use a private git repository instead of having to have the repo already cloned to a specified path on the filesystem.


{
    "name": "git-dependency",
    "dependencies": {
        "gitcompatibledubpackage": {
            "repository": "git+https://github.com/dlang-community/gitcompatibledubpackage.git",
            "version": "ccb31bf6a655437176ec02e04c2305a8c7c90d67"
        }
    }
}
September 13, 2020
On Sunday, 13 September 2020 at 15:12:00 UTC, Steven Schveighoffer wrote:
> The first part of the change seems disruptive. If you just fix the second part (that you can now retrieve all members of std), doesn't it fix the problem?
>
> -Steve

Main problem is that allMembers returns strings and you can't tell if member is an import from it. If it returned aliases then you could do is(m == module), etc.
September 13, 2020
On 9/13/20 1:25 PM, MrSmith wrote:
> On Sunday, 13 September 2020 at 15:12:00 UTC, Steven Schveighoffer wrote:
>> The first part of the change seems disruptive. If you just fix the second part (that you can now retrieve all members of std), doesn't it fix the problem?
>>
> 
> Main problem is that allMembers returns strings and you can't tell if member is an import from it. If it returned aliases then you could do is(m == module), etc.

It's always been string, and should always be.

But I don't know of another case where it returns something that can't be passed to getMember. You should be able to use getMember on "std", and then getMember on that with "stdio". Just like any other nested thing.

It would be just as confusing as if you had:

struct S
{
   int foo;
}

and __traits(allMembers, mod) contained "S.foo".

BTW, when I wrote that first response, I didn't realize that __traits(allMembers, std) returns... a lot of stuff. the whole mechanism seems like it doesn't do what I would expect.

-Steve
September 13, 2020
On Sunday, 13 September 2020 at 14:52:13 UTC, MrSmith wrote:
> On Friday, 11 September 2020 at 07:48:00 UTC, Martin Nowak wrote:
>> Glad to announce the first beta for the 2.094.0 release, ♥ to the 49 contributors.
>>
>> This is the first release to be built with LDC on all platforms, so we'd welcome some more thorough beta testing.
>>
>> http://dlang.org/download.html#dmd_beta
>> http://dlang.org/changelog/2.094.0.html
>>
>> As usual please report any bugs at
>> https://issues.dlang.org
>>
>> -Martin
>
> One unfortunate sideeffect of allMembers change is that it breaks this king of loop:
> ```
> foreach(m; __traits(allMembers, M)) { // M is module
>     alias member = __traits(getMember, M, m); // now fails because std.stdio is not a member of M
> }
> ```
>
> To fix I needed to rewrite it as:
> ```
> foreach(m; __traits(allMembers, M)) { // M is module
>     static if (__traits(compiles, __traits(getMember, M, m)))
>         alias member = __traits(getMember, M, m);
> }
> ```

the technic to filter out is:

```
foreach(m; __traits(allMembers, M)) { // M is module
  static if (!is(mixin(m) == module))
    static if (!is(mixin(m) == package))
{
  ....
}
```

BTW this is not a side-effect. This is the desired effect. That worked previously because the allmembers tuple was incorrect.
September 13, 2020
On Sunday, 13 September 2020 at 17:51:49 UTC, Steven Schveighoffer wrote:
> On 9/13/20 1:25 PM, MrSmith wrote:
>> On Sunday, 13 September 2020 at 15:12:00 UTC, Steven Schveighoffer wrote:
>>> The first part of the change seems disruptive. If you just fix the second part (that you can now retrieve all members of std), doesn't it fix the problem?
>>>
>> 
>> Main problem is that allMembers returns strings and you can't tell if member is an import from it. If it returned aliases then you could do is(m == module), etc.
>
> It's always been string, and should always be.
>
> But I don't know of another case where it returns something that can't be passed to getMember. You should be able to use getMember on "std", and then getMember on that with "stdio". Just like any other nested thing.
>
> It would be just as confusing as if you had:
>
> struct S
> {
>    int foo;
> }
>
> and __traits(allMembers, mod) contained "S.foo".
>
> BTW, when I wrote that first response, I didn't realize that __traits(allMembers, std) returns... a lot of stuff. the whole mechanism seems like it doesn't do what I would expect.
>
> -Steve

Imports need to be fully qualified in the resulting tuple.

having `import std.stdio;` and just "std" in the tuple was a bug. I mean this is not an opinion it worked like that by error, the special case for imports was not considered so "std" slipped in the result while it should always have been "std.stdio".