Skip to content

Commit dae61cb

Browse files
committed
Changelog: Add v1.27
1 parent 22c8270 commit dae61cb

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

CHANGELOG.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,40 @@
1+
# LDC 1.27.0 (2021-07-31)
2+
3+
#### Big news
4+
- Frontend, druntime and Phobos are at version [2.097.1+](https://dlang.org/changelog/2.097.0.html). (#3741, #3770, #3771, #3790, #3794, #3796, #3799) **(new)**
5+
- LLVM for prebuilt packages bumped to **v12.0.1**, and Linux base image to Ubuntu 18.04. Unfortunately, the dynamic-compile (JIT) functionality is lost this way - it needs some [more work](https://github.com/ldc-developers/ldc/pull/3184) to adapt to a newer LLVM API. (#3701, #3789)
6+
- Prebuilt packages now bundle [reggae](https://github.com/atilaneves/reggae), a meta build tool to generate [ninja](https://github.com/ninja-build/ninja/releases)/make build files for dub projects (and more). Building large projects with many dependencies can be significantly sped-up via parallelization and dependency tracking for incremental builds. (#3739)
7+
Basic [usage](https://github.com/atilaneves/reggae#d-projects-and-dub-integration), in a dub project dir (containing a `dub.{sdl,json}` file):
8+
```
9+
reggae -b ninja|make --dc=ldc2 # only needed the first time or when adding source files
10+
ninja|make [-j<N>]
11+
```
12+
- Greatly improved **DLL support on Windows**, making it almost as easy as on Posix:
13+
- `-fvisibility=public` now also affects Windows, exporting all defined symbols as on Posix, without explicit `export` visibility. Compiling a DLL with `-shared` now defaults to `-fvisibility=public` for consistency with Posix. (#3703)
14+
- This paved the way for druntime and Phobos DLLs, now bundled with prebuilt Windows packages and linkable via `-link-defaultlib-shared` (default with `-shared`, consistent with Posix targets). Previous hacks to partially accomodate for multiple, statically linked druntimes and Phobos in a single process (GC proxy etc.) aren't required any longer. With `-link-defaultlib-shared`, LDC now defaults to `-mscrtlib=msvcrt`, linking against the shared MSVC runtime. (ldc-developers/druntime#197, #3704, ldc-developers/druntime#198)
15+
- Limitation: TLS variables cannot be accessed directly across DLL boundaries. This can be worked around with an accessor function, e.g., ldc-developers/druntime@5d3e21a35d.
16+
- Non-TLS `extern(D)` global variables *not* defined in a root module are `dllimport`ed (with `-fvisibility=public`, or - restricted to druntime/Phobos symbols - with `-link-defaultlib-shared`). Compiling all modules of a DLL at once thus avoids linker warnings about 'importing locally defined symbol'. When linking a DLL against a static library, the static library may likely need to be compiled with `-fvisibility=public` to make its globals importable from the DLL. There's a new `-dllimport` option for explicit control. (#3763)
17+
- Caveat: symbols aren't uniqued across the whole process, so can be defined in multiple DLLs/executables, each with their own address, so you cannot rely on TypeInfos, instantiated symbols and functions to have the same address for the whole process.
18+
- When linking manually (not via LDC), binaries linked against druntime DLL need to include new `lib\dso_windows.obj`.
19+
- To restore the previous behavior of `-shared`, add `-fvisibility=hidden -link-defaultlib-shared=false`.
20+
- Windows: ANSI color codes can now be enforced for redirected stderr via `-enable-color`. (#3744)
21+
- Prebuilt Linux and Mac packages now use the [mimalloc](https://github.com/microsoft/mimalloc) allocator, significantly increasing compiler performance in some cases. (#3758, #3759)
22+
- The prebuilt macOS x64 package now bundles *shared* druntime/Phobos libs for iOS too. (#3764)
23+
- Possibly more performant *shared* Phobos library by compiling to a single object file with implicit cross-module inlining. (#3757)
24+
- New `-cov-increment` option for more performant coverage count execution. (#3724)
25+
- `-fsanitize=memory`: Bundle according LLVM compiler-rt library and add new `-fsanitize-memory-track-origins` option. (#3751)
26+
- New LDC-specific language addition: `__traits(initSymbol, <aggregate type>)` with semantics equivalent to `TypeInfo.initializer()`, but circumventing the `TypeInfo` indirection and thus e.g. also usable for `-betterC` code. (#3774, ldc-developers/druntime#201)
27+
28+
#### Platform support
29+
- Supports LLVM 6.0 - 12.0.
30+
31+
#### Bug fixes
32+
- Fix debuginfo source file paths, e.g., including directories in exception stack traces. (#3687)
33+
- Fix potentially corrupt context pointers for nested functions with `-linkonce-templates`. (#3690, #3766)
34+
- Predefine version `CppRuntime_Gcc` for musl targets. (#3769)
35+
- RVO: In-place construct `<temporary>.__ctor(<args>)`. (#3778, #3779)
36+
- `-linkonce-templates`: Make sure special struct TypeInfo members are semantically analyzed before emitting the `TypeInfo`. (#3783)
37+
138
# LDC 1.26.0 (2021-04-28)
239

340
#### Big news

0 commit comments

Comments
 (0)