Hi,
This year it's taken even longer than usual to get round to
posting the formal announcement, but here it now is, and there
has been a lot to sift through.
As of last month (27th April), [GCC 11.1 has now been
released](https://gcc.gnu.org/gcc-11/changes.html#d).
For the D language front-end, there have been a significant
number of changes, so it's probably best to start with the
lowlights as they are comparatively small.
---
Lowlights
-
1. Contrary to the hopes of last years release announcement, this
version still uses [D
2.076.1](https://dlang.org/changelog/2.076.1.html) as the
baseline for D language support. Some significant blocking
issues in upstream DMD meant that I could not commit to switching
to self-hosted with full confidence, and said issues did not get
resolved until after the feature window closed.
2. The promise of dynamically generating D bindings from C
headers never really materialized. Actual work of adding a GCC
compiler switch to dump D code was [completed to around 95% of
what was
needed](https://github.com/D-Programming-GDC/gcc/compare/1cb2d1d5ce178cb68f0bd475299d2e0b25a4a756...ibuclaw/dumpspec), but then stalled on the just how this feature would integrate this into druntime.
Then there's been the announcement of importC, which seems
like a good reason to change tack and instead put effort into
getting importC to the state where it is fit for purpose.
Perhaps this utility could be released anyway, as an
alternative to the likes of DStep, except leverages gcc to parse
the sources instead via `gcc file.c -fdump-d-spec=file.d`
3. Whilst [my little project site](https://gdcproject.org) did
recent a styling revamp, very little was done in the way of
documentation. Though soon I hope to get changelog entries
published there at least.
4. The [compiler explorer site](https://explore.dgnu.org) has
also been updated, though the running compilers were left at
version GCC 9.1.
---
Highlights
--
1. Instead of updating language version, efforts have been driven
towards increasing cross-platform support, there have been a
number of new additions:
- FreeBSD
- DragonFlyBSD
- OpenBSD
- OS X
- MinGW
OpenBSD, OS X and MinGW do not enable Phobos by default, and
are to be considered experimental at this time, you can override
the building of Phobos with the `--enable-libphobos` configure
switch. OS X has been the most tested of the experimental
configurations, and is working generally well on all versions
between Darwin 10 and 19.
2. Testing infrastructure has been expanded, and it is no longer
Ubuntu-centric. There are now the following new platforms under
test:
- [CirrusCI](https://cirrus-ci.com/build/6373685910044672)
- x86_64-linux-gnu
- x86_64-portbld-freebsd12.2
- x86_64-apple-darwin19
-
[Buildkite](https://buildkite.com/d-programming-gdc/gcc/builds/285)
- x86_64-alpine-linux-musl
- x86_64-unknown-netbsd
- amd64-unknown-openbsd6.9
For everything else under Buildkite, the two pre-existing
agents have had a CPU upgrade, and a third agent has been added
into the infrastructure that has reduced overall build times by
more than half. The servers I'm using for buildkite are
ridiculously cheap, however if you are interested in helping
support the monthly costs, you can do so by making a donation to
the [D Language
Foundation](https://dlang.org/foundation/donate.html),
approximations of costs into USD are up on my [Github Sponsor
page](https://github.com/sponsors/ibuclaw/).
---
**New features**:
- A new bottom type `typeof(*null)` has been added to represent
run-time errors and non-terminating functions. This also
introduces a new standard alias for the type named `noreturn`,
and is implicitly imported into every module.
- [Printf-like and
scanf-like](https://dlang.org/changelog/2.092.0.html#printfParams2) functions are now detected by prefixing them with pragma(printf) for printf-like functions or pragma(scanf) for scanf-like functions.
- The __traits() expression now supports the extensions
`isDeprecated`, `isDisabled`, `isFuture`, `isModule`,
`isPackage`, `child`, `isReturnOnStack`, `isZeroInit`,
`getTargetInfo`, `getLocation`, `hasPostblit`, `isCopyable`,
`getVisibility`, and `totype`.
- [An expression-based contract
syntax](https://dlang.org/changelog/2.081.0.html#expression-based_contract_syntax) has been added to the language.
- [Function literals can now
return](https://dlang.org/changelog/2.086.0.html#funcliteralsbyref) a value by reference with the `ref` keyword.
- [A new syntax is
available](https://dlang.org/changelog/2.087.0.html#aliasdecly_func) to declare aliases to function types using the `alias` syntax based on the assignment operator.
- [New
types](https://dlang.org/changelog/2.096.0.html#complex_types)
`__c_complex_float`, `__c_complex_double`, `__c_complex_real`,
and `__c_wchar_t` [