Skip to content

Commit 7e6724d

Browse files
committed
update download and changelog for v2.081.0-beta.2
1 parent 733d672 commit 7e6724d

File tree

2 files changed

+97
-32
lines changed

2 files changed

+97
-32
lines changed

changelog/2.081.0_pre.dd

Lines changed: 96 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,13 @@ $(BUGSTITLE_TEXT_HEADER Compiler changes,
99
$(LI $(RELATIVE_LINK2 deprecate_ctor_in_static_block,Deprecate allowing a constructor declaration in a static block))
1010
$(LI $(RELATIVE_LINK2 deprecate_this_super_as_types,Deprecate usage of `this` and `super` as types))
1111
$(LI $(RELATIVE_LINK2 expression-based_contract_syntax,Implement DIP 1009 - Add Expression-Based Contract Syntax))
12+
$(LI $(RELATIVE_LINK2 extern_cpp_overhaul,`extern (C++)` construction, destruction, operators and other mangling improvements))
1213
$(LI $(RELATIVE_LINK2 fix16206,Support for iterating template overloads))
1314
$(LI $(RELATIVE_LINK2 getlinkage_for_classes,__traits(getLinkage, ...) now works on structs, classes, and interfaces.))
1415
$(LI $(RELATIVE_LINK2 implicit_catch_error,Implicit `catch` statements will now result in an error))
1516
$(LI $(RELATIVE_LINK2 implicit_enum_comparison_error,Implicit comparison of different enums will now result in an error))
1617
$(LI $(RELATIVE_LINK2 implicit_string_concatenation_error,Implicit string concatenation will now result in an error))
1718
$(LI $(RELATIVE_LINK2 iretq,`IRETQ` is now supported in inline assembler.))
18-
$(LI $(RELATIVE_LINK2 mangle_ctor,`extern (C++)` now mangles class constructor's correctly.))
19-
$(LI $(RELATIVE_LINK2 mangle_nullptr_t,`extern (C++)` is now able to mangle `typeof(null)` (aka: `nullptr_t`) which often appears in C++ API's.))
20-
$(LI $(RELATIVE_LINK2 mangle_operators,`extern (C++)` operators now mangle correctly.))
2119
$(LI $(RELATIVE_LINK2 min_runtime_classes,Interfaces and classes can be used without the runtime if only static fields are utilized))
2220
$(LI $(RELATIVE_LINK2 redundant_stc_error,Specifying redundant storage classes will now result in a compiler error))
2321

@@ -34,6 +32,7 @@ $(LI $(RELATIVE_LINK2 getsect,Add missing declarations to `core.sys.darwin.mach.
3432
$(BUGSTITLE_TEXT_HEADER Library changes,
3533

3634
$(LI $(RELATIVE_LINK2 remove_std_c,The deprecated `std.c` package has been removed.))
35+
$(LI $(RELATIVE_LINK2 std-algorithm-iteration-joiner,The performance of `std.algorithm.iteration.joiner` has been improved))
3736
$(LI $(RELATIVE_LINK2 std-algorithm-mutation-remove,`std.algorithm.mutation.remove` now only accepts integral values or pair of integral values as offset))
3837
$(LI $(RELATIVE_LINK2 std-math-fminmax,Changed semantics of std.math.{fmin,fmax} wrt. NaNs.))
3938

@@ -182,6 +181,49 @@ int fun(ref int a, int b)
182181
---
183182
)
184183

184+
$(LI $(LNAME2 extern_cpp_overhaul,`extern (C++)` construction, destruction, operators and other mangling improvements)
185+
$(CHANGELOG_SOURCE_FILE dmd, changelog/extern_cpp_overhaul.dd)
186+
$(P
187+
Many improvements have been made to the `extern(C++)` experience in this release cycle.
188+
)
189+
190+
$(P
191+
Mangling improvements include:
192+
)
193+
194+
$(P
195+
$(UL
196+
$(LI Constructor/destructor mangling matches C++)
197+
$(LI Compatible D style operators now mangle as C++ operators)
198+
$(LI `nullptr_t` mangles correctly)
199+
$(LI Various mangling bugs have been fixed)
200+
)
201+
)
202+
203+
$(P
204+
`extern(C++)` APIs that use `nullptr_t` can use `typeof(null)` on the D side:
205+
)
206+
---
207+
alias nullptr_t = typeof(null);
208+
extern (C++) void fun(nullptr_t);
209+
---
210+
211+
$(P
212+
`extern (C++)` mangling of operators is working for all operators that are semantically equivalent.
213+
This list includes all instantiations of `opUnary`, `opBinary`, `opAssign`, `opOpAssign`, `opCast`, `opEquals`, `opIndex`, `opCall`.
214+
Two notable exceptions are `opCmp`, and C++ `operator !`, which don't have compatible implementations.
215+
)
216+
217+
$(P
218+
Mangling of `extern (C++) class` constructors and destructor are working.
219+
)
220+
221+
$(P
222+
This release also includes ABI fixes where destructors are now correctly added to the virtual table, and constructor/destructor calling semantics now match C++.
223+
With this, mixed-language class hierarchies are working, with construction/destruction being supported in either language.
224+
)
225+
)
226+
185227
$(LI $(LNAME2 fix16206,Support for iterating template overloads)
186228
$(CHANGELOG_SOURCE_FILE dmd, changelog/fix16206.dd)
187229
$(P
@@ -221,9 +263,11 @@ It is now possible to detect the language ABI specified for a struct, class, or
221263
class MyClass {}
222264
extern (C++) struct MyCPPStruct {}
223265
extern (C++) interface MyCPPInterface {}
266+
extern (Objective-C) interface MyObjcInterface {}
224267
static assert(__traits(getLinkage, MyClass) == "D");
225268
static assert(__traits(getLinkage, MyCPPStruct) == "C++");
226269
static assert(__traits(getLinkage, MyCPPInterface) == "C++");
270+
static assert(__traits(getLinkage, MyObjcInterface) == "Objective-C");
227271
---
228272
)
229273

@@ -323,31 +367,6 @@ void isr()
323367
---
324368
)
325369

326-
$(LI $(LNAME2 mangle_ctor,`extern (C++)` now mangles class constructor's correctly.)
327-
$(CHANGELOG_SOURCE_FILE dmd, changelog/mangle_ctor.dd)
328-
$(P
329-
`extern (C++)` mangling of class constructor is working, also virtual and non-virtual destructors mangle correctly too.
330-
C++ semantics are not yet perfectly matching, but some simple cases are working.
331-
)
332-
)
333-
334-
$(LI $(LNAME2 mangle_nullptr_t,`extern (C++)` is now able to mangle `typeof(null)` (aka: `nullptr_t`) which often appears in C++ API's.)
335-
$(CHANGELOG_SOURCE_FILE dmd, changelog/mangle_nullptr_t.dd)
336-
---
337-
alias nullptr_t = typeof(null);
338-
extern (C++) void fun(nullptr_t);
339-
---
340-
)
341-
342-
$(LI $(LNAME2 mangle_operators,`extern (C++)` operators now mangle correctly.)
343-
$(CHANGELOG_SOURCE_FILE dmd, changelog/mangle_operators.dd)
344-
$(P
345-
`extern (C++)` mangling of operators is working for all operators that are semantically equivalent.
346-
This list includes all instantiations of `opUnary`, `opBinary`, `opAssign`, `opOpAssign`, `opCast`, `opEquals`, `opIndex`, `opCall`.
347-
Two notable exceptions are `opCmp`, and C++ `operator !`, which don't have compatible implementations.
348-
)
349-
)
350-
351370
$(LI $(LNAME2 min_runtime_classes,Interfaces and classes can be used without the runtime if only static fields are utilized)
352371
$(CHANGELOG_SOURCE_FILE dmd, changelog/min_runtime_classes.dd)
353372
$(P
@@ -528,9 +547,6 @@ When running the application it will produce an output similar to:
528547
$(P
529548
$(CONSOLE
530549
object.Exception@main.d(3): bar
531-
)
532-
533-
$(P
534550
main.d:3 void main.bar() [0x71afdfb]
535551
main.d:8 void main.foo() [0x71afe0c]
536552
main.d:13 _Dmain [0x71afd78]
@@ -564,6 +580,37 @@ Use the `core.stdc` package instead.
564580
)
565581
)
566582

583+
$(LI $(LNAME2 std-algorithm-iteration-joiner,The performance of `std.algorithm.iteration.joiner` has been improved)
584+
$(CHANGELOG_SOURCE_FILE phobos, changelog/std-algorithm-iteration-joiner.dd)
585+
$(P
586+
$(H4 DMD)
587+
)
588+
589+
$(P
590+
$(CONSOLE
591+
> dmd -O -inline -release ./joiner.d && ./joiner
592+
before.joiner = 57 secs, 834 ms, 289 μs, and 3 hnsecs
593+
new.joiner = 44 secs, 936 ms, 706 μs, and 5 hnsecs
594+
)
595+
)
596+
597+
$(P
598+
$(H4 LDC)
599+
)
600+
601+
$(P
602+
$(CONSOLE
603+
> ldmd -O3 -release -inline joiner.d && ./joiner
604+
before.joiner = 5 secs, 180 ms, 193 μs, and 7 hnsecs
605+
new.joiner = 3 secs, 168 ms, 560 μs, and 6 hnsecs
606+
)
607+
)
608+
609+
$(P
610+
The benchmark code can be found $(LINK2 https://gist.github.com/wilzbach/ffd5d20639766a831fd4b1962572897a, here).
611+
)
612+
)
613+
567614
$(LI $(LNAME2 std-algorithm-mutation-remove,`std.algorithm.mutation.remove` now only accepts integral values or pair of integral values as offset)
568615
$(CHANGELOG_SOURCE_FILE phobos, changelog/std-algorithm-mutation-remove.dd)
569616
$(P
@@ -670,6 +717,7 @@ $(LI $(BUGZILLA 16206): traits getOverloads fails when one of the overload is a
670717
$(LI $(BUGZILLA 17373): traits getOverloads + multiple interface inheritance only see one of the interfaces' overloads)
671718
$(LI $(BUGZILLA 18228): this$(LPAREN)this a$(RPAREN){} doesn't generate postblit ctor; this$(LPAREN)this$(RPAREN){} does)
672719
$(LI $(BUGZILLA 18236): Invalid line reported on error casting enum)
720+
$(LI $(BUGZILLA 18266): ICE: should allow reusing identifier in declarations in disjoint scopes in a function)
673721
$(LI $(BUGZILLA 18365): header file generation doesn't include the return attribute)
674722
$(LI $(BUGZILLA 18584): Undefined identifier when not specifying 'this')
675723
$(LI $(BUGZILLA 18730): dmd miscompiles core.bitop.bt with -O)
@@ -683,12 +731,16 @@ $(LI $(BUGZILLA 18888): extern$(LPAREN)C++$(RPAREN) template arg/alias arg mangl
683731
$(LI $(BUGZILLA 18890): extern$(LPAREN)C++$(RPAREN) mangles all destructors the same)
684732
$(LI $(BUGZILLA 18891): extern$(LPAREN)C++$(RPAREN) destructor prototype should just link; not generate field/aggregate dtor)
685733
$(LI $(BUGZILLA 18892): Wrong type in error message for static members and alias this)
734+
$(LI $(BUGZILLA 18916): ICE using Typedef and __LINE__)
686735
$(LI $(BUGZILLA 18922): dmd doesn't do substitutions for C++ namespaces in different module/file)
687736
$(LI $(BUGZILLA 18928): extern$(LPAREN)C++$(RPAREN) bad codegen, wrong calling convention)
688737
$(LI $(BUGZILLA 18951): package static method masked by public static method in class)
738+
$(LI $(BUGZILLA 18953): Win32: extern$(LPAREN)C++$(RPAREN) struct destructor not called correctly through runtime)
689739
$(LI $(BUGZILLA 18957): extern$(LPAREN)C++$(RPAREN) doesn't mangle 'std' correctly on posix systems)
740+
$(LI $(BUGZILLA 18966): extern$(LPAREN)C++$(RPAREN) constructor should match C++ semantics assigning vtable)
690741
$(LI $(BUGZILLA 18970): DMD segfault due to opDispatch)
691742
$(LI $(BUGZILLA 18976): Inconsistency in overload merging with aliases)
743+
$(LI $(BUGZILLA 18984): Debugging stack struct's which are returned causes incorrect debuginfo.)
692744
)
693745
$(BUGSTITLE_BUGZILLA DMD Compiler enhancements,
694746

@@ -698,6 +750,11 @@ $(LI $(BUGZILLA 15691): Improve error message for struct member initializer)
698750
$(LI $(BUGZILLA 18859): Silence class allocator/deallocator deprecation warning if they are marked "deprecated")
699751
$(LI $(BUGZILLA 18963): Relax restrictions on 'return' parameters when parameter is not a pointer)
700752
)
753+
$(BUGSTITLE_BUGZILLA Phobos regressions,
754+
755+
$(LI $(BUGZILLA 18937): [REG 2.080.0] std.experimental.allocator: compiling `make` needs an unreasonable amount of memory for structs that contain static arrays)
756+
$(LI $(BUGZILLA 18993): toLower is broken for UTF chars)
757+
)
701758
$(BUGSTITLE_BUGZILLA Phobos bugs,
702759

703760
$(LI $(BUGZILLA 12086): std.algorithm.remove + range of indices produces wrong results)
@@ -711,6 +768,8 @@ $(LI $(BUGZILLA 18847): std.allocator: Region uses .parent before it can be set)
711768
$(LI $(BUGZILLA 18934): std.concurrency receive throws assertion failure if message is a struct containing const data)
712769
$(LI $(BUGZILLA 18940): [std.net.curl]Can't run examples on page. cannot implicitly convert expression ... `char[]` to `string`)
713770
$(LI $(BUGZILLA 18952): std.experimental.checkedint.Saturate prints integral promotion deprecation message)
771+
$(LI $(BUGZILLA 19020): findSkip, findSplit and findSplitBefore return wrong results)
772+
$(LI $(BUGZILLA 19023): findSplitBefore and findSplitAfter give wrong bool result)
714773
)
715774
$(BUGSTITLE_BUGZILLA Phobos enhancements,
716775

@@ -721,11 +780,17 @@ $(LI $(BUGZILLA 18813): fromStringz should work with char, wchar and dchar)
721780
$(LI $(BUGZILLA 18837): MMFile should have opDollar)
722781
$(LI $(BUGZILLA 18948): std.uni.toLower and std.uni.toUpper should work with random access ranges)
723782
)
783+
$(BUGSTITLE_BUGZILLA Druntime regressions,
784+
785+
$(LI $(BUGZILLA 18996): Inserting a type containing indirections into an std.container Array causes SIGILL$(LPAREN)4$(RPAREN). Illegal Instruction.)
786+
$(LI $(BUGZILLA 19005): [REG2.081-b1] object.hashOf no longer works for std.datetime.date.Date)
787+
)
724788
$(BUGSTITLE_BUGZILLA Druntime bugs,
725789

726790
$(LI $(BUGZILLA 14536): Calling destroy$(LPAREN)$(RPAREN) on a on an extern$(LPAREN)C++$(RPAREN) class causes a segfault)
727791
$(LI $(BUGZILLA 18932): core.internal.hash.hashOf$(LPAREN)val, seed$(RPAREN) ignores `seed` when val is a raw pointer)
728792
$(LI $(BUGZILLA 18989): On OSX32, core.stdc.time.clock$(LPAREN)$(RPAREN) should resolve to clock$UNIX2003$(LPAREN)$(RPAREN))
793+
$(LI $(BUGZILLA 19008): core.internal.convert.toUbyte doesn't work on enums)
729794
)
730795
$(BUGSTITLE_BUGZILLA Druntime enhancements,
731796

download.dd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ Macros:
213213
_=BETA=$(COMMENT $0)
214214
BETA=$0
215215
B_DMDV2=2.081.0
216-
B_SUFFIX=beta.1
216+
B_SUFFIX=beta.2
217217

218218
DEB32=$(DLSITE dmd_$(DMDV2)-0_i386.deb)
219219
DEB64=$(DLSITE dmd_$(DMDV2)-0_amd64.deb)

0 commit comments

Comments
 (0)