Thread overview
LDC 1.15.0
Apr 06, 2019
kinke
Apr 07, 2019
Thomas Mader
Apr 07, 2019
kinke
Apr 12, 2019
Thomas Mader
Apr 10, 2019
Vijay Nayar
Apr 12, 2019
Radu
Apr 12, 2019
jmh530
Apr 12, 2019
kinke
Apr 12, 2019
jmh530
Apr 12, 2019
jmh530
April 06, 2019
Glad to announce LDC 1.15:

* Based on D 2.085.1.
* Support for LLVM 8.0. The prebuilt packages ship with LLVM 8.0.0 and include the Khronos SPIRV-LLVM-Translator, so that dcompute can now emit OpenCL too.
* New -lowmem switch to enable the GC for the front-end, trading compile times for less required memory (in some cases, by more than 60%).
* New generic @llvmAttr("name") parameter UDAs, incl. @restrict with C-like semantics.
* Dropped support for 32-bit macOS. Min macOS version for prebuilt package raised to 10.9.
* Prebuilt packages don't depend on libtinfo/libedit and don't require SSSE3 anymore.
* Fix: functions annotated with `pragma(inline, true)` are implicitly cross-module-inlined again.

Full release log and downloads: https://github.com/ldc-developers/ldc/releases/tag/v1.15.0

Thanks to all contributors!
April 07, 2019
On Saturday, 6 April 2019 at 17:40:39 UTC, kinke wrote:
> Glad to announce LDC 1.15:
>
> * Based on D 2.085.1.
> * Support for LLVM 8.0. The prebuilt packages ship with LLVM 8.0.0 and include the Khronos SPIRV-LLVM-Translator, so that dcompute can now emit OpenCL too.
> * New -lowmem switch to enable the GC for the front-end, trading compile times for less required memory (in some cases, by more than 60%).
> * New generic @llvmAttr("name") parameter UDAs, incl. @restrict with C-like semantics.
> * Dropped support for 32-bit macOS. Min macOS version for prebuilt package raised to 10.9.
> * Prebuilt packages don't depend on libtinfo/libedit and don't require SSSE3 anymore.
> * Fix: functions annotated with `pragma(inline, true)` are implicitly cross-module-inlined again.
>
> Full release log and downloads: https://github.com/ldc-developers/ldc/releases/tag/v1.15.0
>
> Thanks to all contributors!

Were there some changes to the shared phobos unittest runners between beta2 and the final release?
I ask because I have the problem on macOS with the final release that libphobos2-ldc-unittest-shared.85.dylib is not fixed by my fixing step to switch to absolute paths referencing.
I use install_name_tool and run this step after I do 'make all-test-runners'. It used to work previously and also with beta2.
My guess is that libphobos2-ldc-unittest-shared.85.dylib is getting created after my fixing step now for some reason.
April 07, 2019
On Sunday, 7 April 2019 at 14:26:16 UTC, Thomas Mader wrote:
> Were there some changes to the shared phobos unittest runners between beta2 and the final release?
> I ask because I have the problem on macOS with the final release that libphobos2-ldc-unittest-shared.85.dylib is not fixed by my fixing step to switch to absolute paths referencing.
> I use install_name_tool and run this step after I do 'make all-test-runners'. It used to work previously and also with beta2.
> My guess is that libphobos2-ldc-unittest-shared.85.dylib is getting created after my fixing step now for some reason.

No changes wrt. the test runners, especially none wrt. build order. The only CMake change was the frontend version. See https://github.com/ldc-developers/ldc/compare/v1.15.0-beta2...v1.15.0.
April 10, 2019
On Saturday, 6 April 2019 at 17:40:39 UTC, kinke wrote:
> Glad to announce LDC 1.15:
>
> * Based on D 2.085.1.
> * Support for LLVM 8.0. The prebuilt packages ship with LLVM 8.0.0 and include the Khronos SPIRV-LLVM-Translator, so that dcompute can now emit OpenCL too.
> * New -lowmem switch to enable the GC for the front-end, trading compile times for less required memory (in some cases, by more than 60%).
> * New generic @llvmAttr("name") parameter UDAs, incl. @restrict with C-like semantics.
> * Dropped support for 32-bit macOS. Min macOS version for prebuilt package raised to 10.9.
> * Prebuilt packages don't depend on libtinfo/libedit and don't require SSSE3 anymore.
> * Fix: functions annotated with `pragma(inline, true)` are implicitly cross-module-inlined again.
>
> Full release log and downloads: https://github.com/ldc-developers/ldc/releases/tag/v1.15.0
>
> Thanks to all contributors!

Pretty amazing work! I especially like the -lowmem option, which actually solves the problem of certain compile-time heavy algorithms failing to compile entirely due to running out of memory.
April 12, 2019
On Saturday, 6 April 2019 at 17:40:39 UTC, kinke wrote:
> Glad to announce LDC 1.15:
>
> * Based on D 2.085.1.
> * Support for LLVM 8.0. The prebuilt packages ship with LLVM 8.0.0 and include the Khronos SPIRV-LLVM-Translator, so that dcompute can now emit OpenCL too.
> * New -lowmem switch to enable the GC for the front-end, trading compile times for less required memory (in some cases, by more than 60%).
> * New generic @llvmAttr("name") parameter UDAs, incl. @restrict with C-like semantics.
> * Dropped support for 32-bit macOS. Min macOS version for prebuilt package raised to 10.9.
> * Prebuilt packages don't depend on libtinfo/libedit and don't require SSSE3 anymore.
> * Fix: functions annotated with `pragma(inline, true)` are implicitly cross-module-inlined again.
>
> [...]

Thank you!
April 12, 2019
On Saturday, 6 April 2019 at 17:40:39 UTC, kinke wrote:
> 
> * New generic @llvmAttr("name") parameter UDAs, incl. @restrict with C-like semantics.
> [snip]

I think I had passed over this when I first read the announcement. The @llvmAttr("noalias") compiled on run.dlang.org, but I couldn't get the @restrict to work. I assume that uses the most recent version of LDC, but I don't really know.

Hmm, given that these work in LDC and not DMD, making code that uses it compiler-agnostic might be a little more roundabout. The best I could think of was something like below, unless you have other recommendations.

version(LDC) {
     import ldc.attributes;
}

mixin template fooImpl() {}

version(LDC) {
     void foo(@llvmAttr("noalias") void* p) {
          mixin fooImpl;
     }
} else {
     void foo(void* p) {
          mixin fooImpl;
     }
}

void main()
{

}

April 12, 2019
On Friday, 12 April 2019 at 13:26:14 UTC, jmh530 wrote:
> The @llvmAttr("noalias") compiled on run.dlang.org, but I couldn't get the @restrict to work. I assume that uses the most recent version of LDC, but I don't really know.

--version as cmdline switch tells you the run.dlang.io version is still at v1.14 (as is the ldc-beta there).

> unless you have other recommendations.

I'd use something like

version (LDC) import ldc.attributes : restrict;
else          enum restrict = null;

April 12, 2019
On Friday, 12 April 2019 at 13:54:05 UTC, kinke wrote:
> [snip]
>
> I'd use something like
>
> version (LDC) import ldc.attributes : restrict;
> else          enum restrict = null;

Much better, thanks.
April 12, 2019
On Friday, 12 April 2019 at 13:54:05 UTC, kinke wrote:
> [snip]
>
> I'd use something like
>
> version (LDC) import ldc.attributes : restrict;
> else          enum restrict = null;

Excellent. Thanks.
April 12, 2019
On Sunday, 7 April 2019 at 15:14:59 UTC, kinke wrote:
> On Sunday, 7 April 2019 at 14:26:16 UTC, Thomas Mader wrote:
>> Were there some changes to the shared phobos unittest runners between beta2 and the final release?
>> I ask because I have the problem on macOS with the final release that libphobos2-ldc-unittest-shared.85.dylib is not fixed by my fixing step to switch to absolute paths referencing.
>> I use install_name_tool and run this step after I do 'make all-test-runners'. It used to work previously and also with beta2.
>> My guess is that libphobos2-ldc-unittest-shared.85.dylib is getting created after my fixing step now for some reason.
>
> No changes wrt. the test runners, especially none wrt. build order. The only CMake change was the frontend version. See https://github.com/ldc-developers/ldc/compare/v1.15.0-beta2...v1.15.0.

In [1] you mentioned that it might be an order problem because I used make instead of ninja but the problem occurred again.
I got it working now by setting the DYLD_LIBRARY_PATH variable to the build/lib directory.
For some reason the phobos2-test-runner-debug-shared binary didn't have the full path to libphobos2-ldc-unittest-debug-shared.85.dylib [2].
The druntime test didn't have this problem and the problem was also not always reproducible I believe.
For me it's not a problem anymore but maybe it's a pointer to something problematic.

[2] otool -L /private/var/folders/wq/m1dnr42s42n5msqk2v8l0lfc0000gn/T/nix-build-ldc-1.15.0.drv-4/ldc-1.15.0-src/build/runtime/phobos2-test-runner-debug-shared
/private/var/folders/wq/m1dnr42s42n5msqk2v8l0lfc0000gn/T/nix-build-ldc-1.15.0.drv-4/ldc-1.15.0-src/build/runtime/phobos2-test-runner-debug-shared:
	libphobos2-ldc-unittest-debug-shared.85.dylib (compatibility version 85.0.0, current version 2.0.85)
	/private/var/folders/wq/m1dnr42s42n5msqk2v8l0lfc0000gn/T/nix-build-ldc-1.15.0.drv-4/ldc-1.15.0-src/build/lib/libdruntime-ldc-debug-shared.2.0.85.dylib (compatibility version 85.0.0, current version 2.0.85)
	/nix/store/mkfq1a1i6n66fahlcjvw890xj32zvlqp-Libsystem-osx-10.11.6/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)

[1] https://forum.dlang.org/post/rsfddgngewcloqucyfco@forum.dlang.org