Future of D 2.x as stable/bug fix, and what's next for D 3.x
Paul Backus
snarwin at gmail.com
Mon Aug 31 21:58:10 UTC 2020
On Monday, 31 August 2020 at 20:57:02 UTC, claptrap wrote:
> On Monday, 31 August 2020 at 19:33:45 UTC, H. S. Teoh wrote:
>> On Mon, Aug 31, 2020 at 07:11:40PM +0000, IGotD- via
>> Digitalmars-d wrote:
>>> On Monday, 31 August 2020 at 16:34:00 UTC, Paul Backus wrote:
>>>
>> IOW, it's what Andrei has been repeating about adding rather
>> than changing. Add new versions of the language in the same
>> compiler, instead of changing the meaning of the current
>> version of the language.
>
> Could you use a compatibility layer? Say you have a module that
> is pre safe by default, you could have a component that
> annotates it so it's safety is explicit and then it can be
> passed to the new safe by default compiler.
>
> Like the error with ints being truncated on assignment (cant
> remember what the proper name for it was), you could have a
> component that just inserts casts where needed, and then it
> could be passed to the newer compiler.
Yes, this is possible, at least for "normal" code--when you get
into stuff like mixins and generated code, it becomes more
complicated. At the very least, it is possible to have the
compiler print a deprecation warning when it encounters code that
would have its default changed by the transition. I actually
implemented a version of this for extern(C) functions [1] and
used it, along with some Vim macros, to add explicit safety
annotations to a bunch of declarations in druntime [2].
[1] https://github.com/dlang/dmd/pull/11176
[2] https://github.com/dlang/druntime/pull/3117
> You wouldn't even need compiler versioning, the module could
> just declare the specific feature it's not updated to yet, and
> that would cause it to be run through the compatibility
> process.. Eg..
>
> version(notSafeByDefault);
This is similar to Adam Ruppe's proposal to have blanket-applied
attributes change the *default* for a particular scope without
overriding attribute inference for template/auto functions. It's
an attractive idea, since it allows code to opt-in to
@safe-by-default (as well as other attributes like
nothrow-by-default) without breaking compatibility.
I think the main thing stopping it from happening is that
nobody's stepped forward to write a DIP for it yet. I expect if
someone did, it would get a favorable reception.
More information about the Digitalmars-d
mailing list