D Language Foundation June 2026 Monthly Meeting Summary
Mike Parker
aldacron at gmail.com
Wed Aug 12 12:33:42 UTC 2026
The D Language Foundation's June 2026 monthly meeting took place
on Friday the 12th and lasted about two hours and twenty minutes.
## The Attendees
The following people attended:
* Walter Bright
* Rikki Cattermole
* Jonathan M. Davis
* Martin Kinkelin
* Dennis Korpel
* Mike Parker
* Robert Schadek
* Steven Schveighoffer
* Adam Wilson
* Nicholas Wilson
## The Summary
Earlier this year, we decided that the first edition would be
focused on turning a set of deprecated features into errors as a
way to kick the tires on the editions implementation. After a
brief discussion [in our April monthly
meeting](https://forum.dlang.org/post/gfljhyttpprhzoigmqet@forum.dlang.org), and in the absence of an up-to-date list of deprecations, Walter generated a list from the compiler source via `grep`.
We started discussing the deprecations in a May planning session,
but given that the list was hard to follow and that no one had
fully reviewed it, Robert created a new list that we all reviewed
before the June monthly meeting.
Our sole agenda item was to go through each deprecation on the
list to determine which of them should become errors in the first
edition. As we went along, Robert consulted the source code for
each deprecation so we could be certain what it was doing and
where it was in the deprecation cycle.
We took a somewhat conservative approach. If the deprecation was
less than two years old (our standard deprecation period), or if
we were unable to come to agreement about the fate of a
deprecation in a few minutes, then it went on the 'punt' list.
Otherwise, it went on the 'Safe to be errors' list.
### The punt list
__complex and imaginary types__
We had agreed in [the May monthly
meeting](https://forum.dlang.org/post/joidnmeclfehyuygfwjd@forum.dlang.org) that complex and imaginary built-in types should be undeprecated and their use discouraged, so that meant they went onto the punt list for the purposes of this meeting, i.e., they aren't going to become errors. We can discuss at a later date when to undeprecate them.
__const variable initialization in static this__
Dennis said the original error had assumed only immutable global
variables were put into global memory, but const variables were
also put there. The error should be consistent with how immutable
globals were put into the global data section. It was made a
deprecation because of breakage.
Jonathan and Steven objected that const variables shouldn't be
put into non-TLS memory. Walter agreed with Dennis, that it
should be put into shared memory but not typed as shared. This
sparked a discussion that reached no consensus, so we added it to
the punt list.
__immutable/shared/const/postblits__
We punted on this because there are still issues with copy
constructors. It would be premature to force users away from
postblits until copy constructors were bug-free. However, we did
agree that another postblit-related deprecation, where
implicitly-generated postblits hide copy constructors, was safe
to become an error in the first edition.
__noboundscheck__
There was disagreement over whether this should become an error
or just a no-op. Generally, we agreed that switches that were no
longer valid, like `-dip1025`, should be no-ops, but the nature
of this switch is something you probably wouldn't want to make
invisible. In the absence of agreement, we punted.
__auto and ref must be adjacent__
Still in the deprecation period.
__auto ref return must have auto and ref adjacent__
Ditto.
__typesafe variadic parameters with class type__
Ditto.
__overriding a deprecated method__
This was another case where we failed to find a consensus. What
actually is the best solution when a derived class overrides a
deprecated base-class method? Requiring the override to be
deprecated may not be desirable, but simply removing `override`
isn't possible while the base-class method still exists. We
punted.
__implicitly overriding @future base class method__
Walter had implemented `@future` at the request of Sociomantic.
None of us were aware of any code using it. The consensus was
that we should just ignore this deprecation until we decide what
to do about `@future`.
__overriding extern(C++) with const-qualified function__
Still in the deprecation period.
__ at safe function calling unsafe code (DIP 1000 transition)__
It was unclear what the state of this is. Dennis was sure it was
on a dead code path. Jonathan believed this was something that
needed to be made an error in some fashion, but we didn't need to
decide it now.
__non-zero compile-time return from opApply__
Still in the deprecation period.
__return expression has no effect__
It wasn't clear what this was actually referring to, so we punted.
__truncating conversion in compound assignment__
Still in the deprecation period.
__variable shadowing in foreach__
This appeared to be something related to `opApply`. We punted to
investigate it later.
__C preprocessor directive in token string__
Walter didn't think this needed to be deprecated and no one felt
strongly that it should be, so we punted.
### The special cases
There were two traits that had been renamed and the old names
deprecated: `isVirtualFunction` and `getVirtualFunctions` in
favor of `isVirtualMethod` and `getVirtualMethods` respectively.
[The deprecation had happened in
2.103](https://dlang.org/changelog/2.103.0.html#dmd.get-is-virtual-function), but Robert discovered that the `isVirtualMethod` and `getVirtualMethods` implementations had been added as bug fixes for the existing implementations in 2.058. [That was released in 2012](https://dlang.org/changelog/2.058.html).
Given the age of the fixes, we decided to replace the buggy
implementations of `isVirtualFunction` and `getVirtualFunctions`
with the corrected implementations, and that `isVirtualMethod`
and `getVirtualMethods` should alias those.
### Deprecations to become errors in the first edition
Here's the list:
- Package Not Accessible Without Static Import
- Initializing Field With Itself
- Implicitly-Generated Postblit Hides Copy Constructor
- Function With enum Storage Class
- Storage Class Has No Effect in Type Aliases
- in Parameters With Non-D Linkage
- Function Template Marked override
- Function Template Marked abstract
- @disable on Overriding Function
- deprecated on Overriding Function
- Dual-Context Function
- Function Overload Conflict With Different Attributes
- Bare catch Without Exception Type
- return in scope(failure) Body
- asm Statement Marked @safe
- Throwing Qualified Type
- Catching Non-Mutable/Non-Const Qualified Type
- For-Loop Increment Has No Effect
- Foreach Loop Index Implicit size_t Conversion
- Casting Delegate to Pointer
- __traits(getAttributes) on Overloaded Function
- assert With String Literal Condition
- static assert With String Literal Condition
- Arrow Syntax Returning a Delegate
- Identity Comparison of Static Arrays
- Type Used as Value
- Slice of Static Array Temporary Assigned to Longer-Lived
Variable
- Non-D Linkage Static Constructor/Destructor
- Invalid Format Specifier
- More Format Specifiers Than Arguments
- Argument Type Mismatch
## Conclusion
Our next meeting was a quarterly meeting on July 3rd. Our next
monthly meeting took place on July 10th.
If you have anything you'd like to bring to us in a monthly
meeting, please let me know.
More information about the Digitalmars-d-announce
mailing list