-
-
Notifications
You must be signed in to change notification settings - Fork 367
/
changelog.dd
10172 lines (9131 loc) · 544 KB
/
changelog.dd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Ddoc
$(D_S D Change Log,
$(VERSION 067.0, Mar 24, 2015, =================================================,
$(BUGSTITLE Language Changes,
$(LI $(RELATIVE_LINK2 heap-struct-destructors, Destructors for structs allocated on the heap are now invoked.))
$(LI $(RELATIVE_LINK2 asm-attributes, $(D asm) statements can now be used in $(D pure), $(D nothrow), $(D @nogc), or $(D @trusted) code.))
$(LI $(RELATIVE_LINK2 package-protection, $(D package) protection attribute can be optionally bound to specified package))
)
$(BUGSTITLE Library Changes,
$(LI $(RELATIVE_LINK2 faster-gc-1, The garbage collector got faster.))
$(LI $(RELATIVE_LINK2 volatile-load-store, $(D volatileLoad) and $(D volatileStore) intrinsics were added.))
$(LI $(RELATIVE_LINK2 gc-options, $(B Experimental:) The garbage collector can now be configured.))
$(LI $(RELATIVE_LINK2 aa-keyvalue, $(D byKeyValue) was added.))
$(LI $(LINK2 phobos-prerelease/std_concurrency.html#.initOnce, $(D initOnce) was added to perform thread-safe lazy initialization.))
$(BUGSTITLE Language Changes,
$(LI $(LNAME2 heap-struct-destructors, Destructors for structs allocated on the heap are now invoked.)
$(P Previously, when a struct allocated on the heap was freed, the destructor was not
invoked. This is no longer the case, and these destructors will now be invoked
before the memory is freed by the GC.
)
)
$(LI $(LNAME2 asm-attributes, $(D asm) statements can now be used in $(D pure), $(D nothrow), $(D @nogc), or $(D @trusted) code.)
$(P By adding the appropriate attributes to an asm statement you
can tell the compiler how that asm code behaves, thus allowing asm
statements to be used in pure, nothrow, @nogc, or @safe functions.
---------
asm pure nothrow @nogc @trusted
{
// the compiler does not check the attributes
ret;
}
---------
)
)
$(LI $(LNAME2 package-protection, $(D package) protection attribute can be optionally bound to specified package)
$(P New optional syntax was added for package protection attribute:
--------
module aaa.bbb.ccc.ddd;
// accessible from any module with aaa.bbb in qualified path
package(aaa.bbb) void foo() {}
// old style, means same as package(aaa.bbb.ccc)
package void bar() {}
---------
)
)
)
$(BUGSTITLE Library Changes,
$(LI $(LNAME2 faster-gc-1, This release comes with various GC optimizations that make many applications faster.)
$(P A new GC growth policy was implemented that helps to reduce the
number of collections by keeping a collection threshold at 2x the size
of the used memory. After each collection the used memory and the
threshold are recomputed. This allows for an exponential growth of the
GC heap, e.g. during program startup, but limits the heap size relative
to the actual used memory.
The factor 2x is configurable by setting $(RELATIVE_LINK2 gc-options, heapSizeFactor).
)
$(P The heap traversal during the marking phase is now done using tail
recursion with a separate compact state stack. This allows to mark very
deep heaps (lists) much faster because the previous recursion limit of
50 is eliminated.
)
$(P You can see a list of all improvements $(LINK2
https://github.com/D-Programming-Language/druntime/pulls?q=is:merged+is:pr+label:GC+merged:2014-08-18..2015-03-01,
here).)
<img src="images/faster-gc-1.svg" alt="GC benchmarks" style="max-width: 100%">
)
$(LI $(LNAME2 volatile-load-store, $(D volatileLoad) and $(D volatileStore) intrinsics were added.)
$(P Calls to $(D volatileLoad) and $(D volatileStore) are recognized by
the compiler and guaranteed to not be removed or reordered in the same
thread.
---------
void example(uint* address, uint value)
{
import core.bitop;
// store value
volatileStore(address, value);
// wait until value takes affect
while (volatileLoad(address) != value)
{ }
}
---------
)
$(P $(B Note:) These intrinsics are currently in core.bitop$(COMMA) but will
be moved to core.volatile when $(D volatile) is no longer a keyword.
)
)
$(LI $(LNAME2 gc-options, $(B Experimental:) The garbage collector can now be configured through the command line,
the environment or by options embedded into the executable.)
$(P By default, GC options can only be passed on the command line of the program
to run, e.g.
---------
app "--DRT-gcopt=profile:1 minPoolSize:16" arguments to app
---------
)
$(P Available GC options are:
$(UL
$(LI disable:0|1 - start disabled)
$(LI profile:0|1 - enable profiling with summary when terminating program)
$(LI initReserve:N - initial memory to reserve in MB)
$(LI minPoolSize:N - initial and minimum pool size in MB)
$(LI maxPoolSize:N - maximum pool size in MB)
$(LI incPoolSize:N - pool size increment MB)
$(LI heapSizeFactor:N - targeted heap size to used memory ratio)
)
)
$(P In addition, --DRT-gcopt=help will show the list of options and their current settings.
)
$(P Command line options starting with "--DRT-" are filtered out before calling main,
so the program will not see them. They are still available via rt_args().
)
$(P Configuration via the command line can be disabled by declaring a variable for the
linker to pick up before using it's default from the runtime:
---------
extern(C) __gshared bool rt_cmdline_enabled = false;
---------
)
$(P Likewise, declare a boolean rt_envvars_enabled to enable configuration via the
environment variable "DRT_GCOPT:
---------
extern(C) __gshared bool rt_envvars_enabled = true;
---------
)
$(P Setting default configuration properties in the executable can be done by specifying an
array of options named rt_options:
---------
extern(C) __gshared string[] rt_options = [ "gcopt=initReserve:100 profile:1" ];
---------
)
$(P Evaluation order of options is rt_options, then environment variables, then command
line arguments, i.e. if command line arguments are not disabled, they can override
options specified through the environment or embedded in the executable.
)
)
$(LI $(LNAME2 aa-keyvalue, $(D byKeyValue) was added.)
$(P Built-in associative arrays now have a $(D .byKeyValue) method that
returns a forward range iterating over key/value pairs.)
------
void main()
{
auto aa = ["a": 1];
foreach (pair; aa.byKeyValue)
{
assert(pair.key == "a");
assert(pair.value == 1);
}
}
------
)
)
)
)
$(VERSION 066.1, October 15, 2014, =================================================,
$(BR)$(BIG List of all bug fixes in D 2.066.1.)
$(BUGSTITLE DMD Compiler regressions,
$(P
$(LI $(BUGZILLA 11312): [REG2.063] Avoid auto-dereference for UFCS functions)
$(LI $(BUGZILLA 11946): need 'this' to access member when passing field to template parameter)
$(LI $(BUGZILLA 13294): [IFTI] IFTI fails or works incorrectly for function with const and mutable `ref` parameters of most types)
$(LI $(BUGZILLA 13299): [dmd-2.066-rc2] - Property not found with typesafe variadic opDispatch)
$(LI $(BUGZILLA 13303): Internal error: ..\ztc\cgcs.c 351 with rvalue Variant.get call)
$(LI $(BUGZILLA 13311): [REG2.065] ICE, CtorDeclaration::semantic$(LPAREN)Scope*$(RPAREN): Assertion `tf && tf->ty == Tfunction` failed)
$(LI $(BUGZILLA 13321): Wrong goto skips declaration error)
$(LI $(BUGZILLA 13353): [REG2.066] [ICE] assertion with is$(LPAREN)$(RPAREN) and templated interface)
$(LI $(BUGZILLA 13374): Wrong template overload resolution when passing function to alias/string parameter)
$(LI $(BUGZILLA 13378): Wrong failure of template value parameter deduction in IFTI)
$(LI $(BUGZILLA 13379): Latest dmd fails with recursive template expansion in std.regex)
$(LI $(BUGZILLA 13394): invariant fail to link since 2.066 when using separate compilation)
$(LI $(BUGZILLA 13400): Linking problems with bigints and std.functional.memoize)
$(LI $(BUGZILLA 13415): [REG2.066] '-inline' causes wrong enclosing scope pointer for nested function called from templated struct)
$(LI $(BUGZILLA 13417): [REG2.066] segmentation fault when deduce template type)
$(LI $(BUGZILLA 13424): [REG2.066] Initialization of delegate to do-nothing default causes segfault at runtime)
$(LI $(BUGZILLA 13427): [REG2.066] cannot inline default argument alloca$(LPAREN)...$(RPAREN))
$(LI $(BUGZILLA 13472): [REG2.066] trying to insert a null into an array of object segfaults the compiler)
$(LI $(BUGZILLA 13476): [REG2.065] Writing stubs for dynamically loaded functions no longer works. $(LPAREN)circular reference$(RPAREN))
$(LI $(BUGZILLA 13478): [REG2.066] Templates not emitted when also referenced in speculative contexts)
$(LI $(BUGZILLA 13504): ICE$(LPAREN)backend/cgelem.c 2418$(RPAREN) with "-O -cov")
)
)
$(BUGSTITLE DMD Compiler bugs,
$(P
$(LI $(BUGZILLA 13235): Wrong code on mutually recursive tuple type)
$(LI $(BUGZILLA 13204): recursive alias declaration)
$(LI $(BUGZILLA 13333): Incorrect error ungagging during the resolution of forward references)
$(LI $(BUGZILLA 12503): Bad optimization with scope$(LPAREN)success$(RPAREN) and return statement)
$(LI $(BUGZILLA 13383): wrong code with -O with ints, longs and bitwise operations)
$(LI $(BUGZILLA 13413): dmd does not follow symlink when searching for dmd.conf)
$(LI $(BUGZILLA 13323): UDA applied to import statement causes compilation to fail without error)
)
)
$(BUGSTITLE DMD Compiler enhancements,
$(P
$(LI $(BUGZILLA 12567): Modules can't be marked as deprecated)
)
)
$(BUGSTITLE Phobos regressions,
$(P
$(LI $(BUGZILLA 13618): removing deprecated std.metastrings module breaks code)
)
)
$(BUGSTITLE Phobos bugs,
$(P
$(LI $(BUGZILLA 13313): std.datetime fails unittests on Windows)
)
)
$(BUGSTITLE Druntime regressions,
$(P
$(LI $(BUGZILLA 13399): va_arg is nothrow yet may throw)
)
)
$(BUGSTITLE Druntime bugs,
$(P
$(LI $(BUGZILLA 13377): core/sys/posix/syslog.d is in druntime/src but not in druntime/src/import)
$(LI $(BUGZILLA 13414): Static destructors not called correctly with dynamic loading)
)
)
$(BUGSTITLE Installer regressions,
$(P
$(LI $(BUGZILLA 13233): Windows installer: downloading external installers $(LPAREN)Visual D/dmc$(RPAREN) does not work)
)
)
)
$(VERSION 066.0, August 18, 2014, =================================================,
$(BUGSTITLE Compiler Changes,
$(LI $(RELATIVE_LINK2 warn-unused-retval, $(D -w) now warns about an unused return value of a strongly pure nothrow function call.))
$(LI $(RELATIVE_LINK2 boundscheck, $(D -noboundscheck) has been deprecated in favor of $(D boundscheck=[on|safeonly|off]).))
$(LI $(RELATIVE_LINK2 vgc-switch, $(D -vgc) was added to list GC allocation code positions in the code.))
$(LI $(RELATIVE_LINK2 vcolumns-switch, $(D -vcolumns) was added to display column numbers in error messages.))
$(LI $(RELATIVE_LINK2 color-switch, $(D -color) was added to make console output colored.))
)
$(BUGSTITLE Language Changes,
$(LI $(RELATIVE_LINK2 nogc-attribute, $(D @nogc) attribute was added.))
$(LI $(RELATIVE_LINK2 extern-cpp-nspace, $(D extern $(LPAREN)C++,) $(I namespace)$(D $(RPAREN)) was added.))
$(LI $(RELATIVE_LINK2 opover-multidim-slicing, Operator overloading for multi-dimensional slicing was added.))
$(LI $(RELATIVE_LINK2 traits-getfunctionattributes, $(D __traits$(LPAREN)getFunctionAttributes$(RPAREN)) was added.))
$(LI $(RELATIVE_LINK2 narrowing-conversion-in-ifti, Support template parameter deduction for arguments with a narrowing conversion.))
$(LI $(RELATIVE_LINK2 deprecate-rmw, Read-Modify-Write operations on shared variables are now deprecated.))
$(LI $(RELATIVE_LINK2 uniform-scalar-construction, Support uniform construction syntax for built-in scalar types.))
)
$(BUGSTITLE Library Changes,
$(LI $(RELATIVE_LINK2 duration-split, Duration.get and its wrappers have been deprecated in favor of the new Duration.split.))
$(LI $(RELATIVE_LINK2 array-and-aa-changes, Some built-in type properties have been replaced with library functions.))
$(LI $(RELATIVE_LINK2 aa-key-requirement, Associative array keys now require equality instead of order comparison.))
)
$(BUGSTITLE Linker Changes,
)
$(BR)$(BIG $(RELATIVE_LINK2 list2066, List of all bug fixes and enhancements in D 2.066.))
$(HR)
$(BUGSTITLE Compiler Changes,
$(LI $(LEGACY_LNAME2 warn_unused_retval, warn-unused-retval, $(D -w) now warns about an unused return value of a strongly pure nothrow function call:)
$(P A discarded return value from a strongly pure nothrow function call now generates a warning.
---------
int foo() pure nothrow { return 1; }
void main()
{
foo(); // the result of foo() is unused
}
---------
With the $(D -w) switch, the compiler will complain:
$(CONSOLE Warning: calling foo without side effects discards return value of type int, prepend a cast(void) if intentional)
)
)
$(LI $(LNAME2 boundscheck, $(D -noboundscheck) has been deprecated in favor of $(D boundscheck=[on|safeonly|off]):)
$(P Confusion over what the $(D -noboundscheck) command line option did led to the creation of
the new option $(D -boundscheck=[on|safeonly|off]) which aims to be more clear while enabling
more flexibility than was present before.
)
$(P $(D -boundscheck=)
$(UL
$(LI $(B on): Bounds checks are enabled for all code. This is the default.)
$(LI $(B safeonly): Bounds checks are enabled only in $(D @safe) code.
This is the default for $(B -release) builds.)
$(LI $(B off): Bounds checks are disabled completely (even in $(D @safe)
code). This option should be used with caution and as a
last resort to improve performance. Confirm turning off
$(D @safe) bounds checks is worthwhile by benchmarking.)
)
)
$(P $(B Use $(D -boundscheck=off) to replace instances of $(D -noboundscheck).))
$(P Prior to this there was no way to enable bounds checking for $(D -release) builds nor any
way of turning off non-$(D @safe) bounds checking without pulling in everything else $(D
-release) does.)
)
$(LI $(LEGACY_LNAME2 vgc_switch, vgc-switch, $(D -vgc) was added to list GC allocation code positions in the code):
$(P Prints all GC-allocation points. Analysis will follow the semantics of
the new $(D @nogc) attribute.
)
)
$(LI $(LEGACY_LNAME2 vcolumns_switch, vcolumns-switch, $(D -vcolumns) was added to display column numbers in error messages):
$(P Diagnostic messages will print the character number from each line head.
---------
int x = missing_name;
---------
Without $(D -vcolumns):
---------
test.d(1): Error: undefined identifier missing_name
---------
With $(D -vcolumns):
---------
test.d(1,9): Error: undefined identifier missing_name
---------
)
)
$(LI $(LEGACY_LNAME2 color_switch, color-switch, $(D -color) was added to make console output colored:)
$(P Errors, deprecation, and warning messages will be colored.
)
)
)
$(BUGSTITLE Language Changes,
$(LI $(LEGACY_LNAME2 nogc_attribute, nogc-attribute, $(D @nogc) attribute was added:)
$(P @nogc attribute disallows GC-heap allocation.
---------
class C {}
void foo() @nogc
{
auto c = new C(); // GC-allocation is disallowed
}
---------
)
)
$(LI $(LEGACY_LNAME2 extern_cpp_nspace, extern-cpp-nspace, $(D extern $(LPAREN)C++,) $(I namespace)$(D $(RPAREN)) was added):
$(P To represent a C++ namespace, $(D extern $(LPAREN)C++$(RPAREN)) now takes optional dot-chained identifiers.
---------
extern (C++, a.b.c) int foo();
---------
is equivalent with:
$(CPPCODE
namespace a {
namespace b {
namespace c {
int foo();
}
}
}
)
)
)
$(LI $(LEGACY_LNAME2 opover_multidim_slicing, opover-multidim-slicing, Operator overloading for multi-dimensional slicing was added:)
$(P Documentation is $(LINK2 operatoroverloading.html#ArrayOps, here).)
$(P Example code:
---------
struct MyContainer(E)
{
E[][] payload;
this(size_t w, size_t h)
{
payload = new E[][](h, w);
}
size_t opDollar(size_t dim)()
{
return payload[dim].length;
}
auto opSlice(size_t dim)(size_t lwr, size_t upr)
{
import std.typecons;
return tuple(lwr, upr);
}
void opIndexAssign(A...)(E val, A indices)
{
assert(A.length == payload.length);
foreach (dim, x; indices)
{
static if (is(typeof(x) : size_t))
{
// this[..., x, ...]
payload[dim][x] = val;
}
else
{
// this[..., x[0] .. x[1], ...]
payload[dim][x[0] .. x[1]] = val;
}
}
}
}
void main()
{
import std.stdio;
auto c = MyContainer!int(4, 3);
writefln("[%([%(%d%| %)]%|\n %)]", c.payload);
// [[0 0 0 0]
// [0 0 0 0]
// [0 0 0 0]]
c[1 .. 3,
2,
0 .. $] = 1;
/*
Rewritten as:
c.opIndexAssign(c.opSlice!0(1, 3),
2,
c.opSlice!2(0, c.opDollar!2()));
*/
writefln("[%([%(%d%| %)]%|\n %)]", c.payload);
// [[0 1 1 0]
// [0 0 1 0]
// [1 1 1 1]]
}
---------
)
)
$(LI $(LEGACY_LNAME2 traits_getfunctionattributes, traits-getfunctionattributes, $(D __traits$(LPAREN)getFunctionAttributes$(RPAREN)) was added):
$(P This can take one argument, either a function symbol, function type, function
pointer type, or delegate type.
Examples:
---------
void foo() pure nothrow @safe;
static assert([__traits(getFunctionAttributes, foo)] == ["pure", "nothrow", "@safe"]);
ref int bar(int) @property @trusted;
static assert([__traits(getFunctionAttributes, typeof(&bar))] == ["@property", "ref", "@trusted"]);
---------
)
)
$(LI $(LEGACY_LNAME2 narrowing_conversion_in_ifti, narrowing-conversion-in-ifti, Support template parameter deduction for arguments with a narrowing conversion):
$(P Implicit Function Template Instantiation will now consider a narrowing conversion
of function arguments when deducing the template instance parameter types.
---------
void foo(T)(T[] arr, T elem) { ... }
void main()
{
short[] a;
foo(a, 1);
}
---------
In 2.065 and earlier, calling $(D foo(a, 1)) was not allowed. From 2.066,
$(D T) is deduced as $(D short) by considering a narrowing conversion
of the second function argument `1` from $(D int) to $(D short).
)
)
$(LI $(LEGACY_LNAME2 deprecate_rmw, deprecate-rmw, Read-Modify-Write operations on shared variables are now deprecated):
$(P Examples:
---------
shared int global;
void main()
{
global++; // deprecated
global *= 2; // deprecated
}
---------
Instead you should use $(D atomicOp) from $(D core.atomic):
---------
shared int global;
void main()
{
import core.atomic;
atomicOp!"+="(global, 1);
atomicOp!"*="(global, 2);
}
---------
)
)
$(LI $(LEGACY_LNAME2 uniform_scalar_construction, uniform-scalar-construction, Support uniform construction syntax for built-in scalar types):
$(P Examples:
---------
short n1 = 1;
auto n2 = short(1); // equivalent with n1, typeof(n2) is short
auto p1 = new long(1); // typeof(p1) is long*
auto p2 = new immutable double(3.14); // typeof(p2) is immutable(double)*
---------
)
$(P The constructor argument should be implicitly convertible to the constructed type.
---------
auto n1 = short(32767); // OK
auto n2 = short(32768); // Not allowed, out of bounds of signed short -32768 to 32767
---------
)
)
)
$(BUGSTITLE Library Changes,
$(LI $(LEGACY_LNAME2 duration_split, duration-split, Duration.get and its wrappers have been deprecated in favor of the new Duration.split:)
$(P $(CXREF time, Duration.get) and its wrappers, $(CXREF time, Duration.weeks),
$(CXREF time, Duration.days), $(CXREF time, Duration.hours), and
$(CXREF time, Duration.seconds), as well as $(CXREF time, Duration.fracSec) (which
served a similar purpose as $(CXREF time, Duration.get) for the fractional second units)
have proven to be too easily confused with $(CXREF time, Duration.total), causing
subtle bugs. So, they have been deprecated. In their place, $(CXREF time, Duration.split)
has been added - and it's not only very useful, but it does a great job of showing off
what D can do.
Whereas $(CXREF time, Duration.get) split out all of the units of a
$(CXREF time, Duration) and then returned only one of them,
$(CXREF time, Duration.split) splits out a $(CXREF time, Duration) into the units
that it's told to (which could be one unit or all of them) and returns all of
them. It has two overloads, both which take template arguments that indicate which
of the units are to be split out. The difference is in how the result is returned.
As with most of the templates in core.time and std.datetime which take strings
to represent units, $(CXREF time, Duration.split) accepts $(D "weeks"), $(D "days"),
$(D "hours"), $(D "minutes"), $(D "seconds"), $(D "msecs"), $(D "usecs"),
$(D "hnsecs"), and $(D "nsecs").
The first overload returns the split out units as $(D out) parameters.
---------
auto d = weeks(5) + days(4) + hours(17) + seconds(2) + hnsecs(12_007);
short days;
long seconds;
int msecs;
d.split!("days", "seconds", "msecs")(days, seconds, msecs);
assert(days == 39);
assert(seconds == 61_202);
assert(msecs == 1);
---------
The arguments can be any integral type (though no protection is given against integer
overflow, so unless it's known that the values are going to be small, it's unwise to
use a small integral type for any of the arguments).
The second overload returns a struct with the unit names as its fields. Only the
requested units are present as fields. All of the struct's fields are $(D long)s.
---------
auto d = weeks(5) + days(4) + hours(17) + seconds(2) + hnsecs(12_007);
auto result = d.split!("days", "seconds", "msecs")();
assert(result.days == 39);
assert(result.seconds == 61_202);
assert(result.msecs == 1);
---------
Or if no units are given to the second overload, then it will return a struct with
all of the units save for $(D nsecs) (since $(D nsecs) would always be $(D 0) when
$(D hnsecs) is one of the units as $(CXREF time, Duration) has hnsec precision).
---------
auto d = weeks(5) + days(4) + hours(17) + seconds(2) + hnsecs(12_007);
auto result = d.split();
assert(result.weeks == 5);
assert(result.days == 4);
assert(result.hours == 17);
assert(result.minutes == 0);
assert(result.seconds == 2);
assert(result.msecs == 1);
assert(result.usecs == 200);
assert(result.hnsecs == 7);
---------
Calling $(CXREF time, Duration.get) or its wrappers for each of the units would be
equivalent to that example, only less efficient when more than one unit is
requested, as the calculations would have to be done more than once. The exception
is $(CXREF time, Duration.fracSec) which would have given the total of the
fractional seconds as the requested units rather than splitting them out.
---------
// Equivalent to previous example
auto d = weeks(5) + days(4) + hours(17) + seconds(2) + hnsecs(12_007);
assert(d.weeks == 5);
assert(d.days == 4);
assert(d.hours == 17);
assert(d.minutes == 0);
assert(d.seconds == 2);
assert(d.fracSec.msecs == 1);
assert(d.fracSec.usecs == 1200);
assert(d.fracSec.hnsecs == 12_007);
---------
It is hoped that $(CXREF time, Duration.split) will be less confusing and thus
result in fewer bugs, but it's definitely the case that it's more powerful. It's
also a great example of D's metaprogramming capabilities given how it splits out
only the requested units and even is able to return a struct with fields with the
same names as the requested units. This on top of being able to handle a variety
of integral types as arguments. And its implemenation isn't even very complicated.
)
)
$(LI $(LEGACY_LNAME2 array_and_aa_changes, array-and-aa-changes, Some built-in type properties have been replaced with library functions:)
$(P Built-in array properties $(D dup) and $(D idup) were replaced with
(module-scoped) free functions in the $(D object) module, thanks to D's support of
$(LINK2 function.html#pseudo-member, Uniform Function Call Syntax).
)
$(P Built-in associative array properties $(D rehash), $(D dup), $(D byKey),
$(D byValue), $(D keys), $(D values), and $(D get) were also replaced with free
functions in the $(D object) module.
)
)
$(LI $(LEGACY_LNAME2 aa_key_requirement, aa-key-requirement, Associative array keys now require equality rather than ordering:)
$(P Until 2.065, opCmp was used to customize the comparison of AA struct keys.
---------
void main()
{
int[MyKey] aa;
}
struct MyKey
{
int x;
int y; // want to be ignored for AA key comparison
int opCmp(ref const MyKey rhs) const
{
if (this.x == rhs.x)
return 0;
// defined order was merely unused for AA keys.
return this.x > rhs.x ? 1 : -1;
}
}
---------
From 2.066, the AA implementation has been changed to use the equality operator ($(D ==))
for the key comparison. So the $(D MyKey) struct should be modified to:
---------
struct MyKey
{
int x;
int y; // want to be ignored for AA key comparison
int opEquals(ref const MyKey rhs) const
{
return this.x == rhs.x;
}
}
---------
)
)
)
$(BR)$(BIG $(LNAME2 list2066, List of all bug fixes and enhancements in D 2.066:))
$(BUGSTITLE DMD Compiler regressions,
$(P
$(LI $(BUGZILLA 5105): Member function template cannot be synchronized)
$(LI $(BUGZILLA 9449): Static arrays of 128bit types segfault on initialization. Incorrect calling of memset128ii.)
$(LI $(BUGZILLA 11777): [ICE] dmd memory corruption as `Scope::pop` `free`s `fieldinit` used also in `enclosing`)
$(LI $(BUGZILLA 12174): Problems caused by enum predicate with std.algorithm.sum)
$(LI $(BUGZILLA 12179): [ICE]$(LPAREN)e2ir.c 1861$(RPAREN) with array operation)
$(LI $(BUGZILLA 12242): conflict error with public imports)
$(LI $(BUGZILLA 12243): [REG 2.065.0] "ICE: cannot append 'char' to 'string'" with -inline)
$(LI $(BUGZILLA 12250): [REG 2.065.0][ICE]$(LPAREN)e2ir.c 2077$(RPAREN) with inout T[] and array operation)
$(LI $(BUGZILLA 12255): Regression: opCmp requirement for AAs breaks code)
$(LI $(BUGZILLA 12262): [REG2.065] A specialized parameter `alias a : B!A` should not match to the non-eponymous instantiated variable)
$(LI $(BUGZILLA 12264): [REG2.066a] A specialized alias parameter conflicts with the unspecialized one.)
$(LI $(BUGZILLA 12266): Regression $(LPAREN)2.065$(RPAREN): Header generation produces uncompilable header)
$(LI $(BUGZILLA 12296): [REG2.066a] const compatible AA pointer conversion is wrongly rejected in CTFE)
$(LI $(BUGZILLA 12312): Regression $(LPAREN)2.064$(RPAREN): Diagnostic for void static arrays has gone bad)
$(LI $(BUGZILLA 12316): GIT HEAD: AA.get broken for Object VAL types)
$(LI $(BUGZILLA 12376): ICE with constarainted template instantiation with error gagging)
$(LI $(BUGZILLA 12382): `opDollar` can't be used at CT)
$(LI $(BUGZILLA 12390): [REG2.066a] "has no effect in expression" diagnostic regression)
$(LI $(BUGZILLA 12396): Regression: major breakage from new import rules)
$(LI $(BUGZILLA 12399): Static and selective import acts like a normal import)
$(LI $(BUGZILLA 12400): Misleading/useless diagnostic on bad fully-qualified symbol name)
$(LI $(BUGZILLA 12403): [AA] Associative array `get` function rejects some cases)
$(LI $(BUGZILLA 12405): Named imports act like regular imports)
$(LI $(BUGZILLA 12413): Infinite recursion of `Package::search`)
$(LI $(BUGZILLA 12467): Regression $(LPAREN)2.066 git-head$(RPAREN): char[] is implicitly convertible to string)
$(LI $(BUGZILLA 12485): [REG2.065] DMD crashes when recursive template expansion)
$(LI $(BUGZILLA 12497): [REG2.064] ICE on string mixin with non-string operand)
$(LI $(BUGZILLA 12501): Assertion `global.gaggedErrors || global.errors` failed.)
$(LI $(BUGZILLA 12509): Compiler performance highly depends on declared array size - for struct with long static array of structs)
$(LI $(BUGZILLA 12554): [ICE]$(LPAREN)struct.c line 898$(RPAREN) with failed delegate purity)
$(LI $(BUGZILLA 12574): [ICE]$(LPAREN)statement.c, line 713$(RPAREN) with reduce with wrong tuple arity)
$(LI $(BUGZILLA 12580): [REG2.066a] dup$(LPAREN)$(RPAREN) won't accept void[])
$(LI $(BUGZILLA 12581): [ICE]$(LPAREN)statement.c, line 713$(RPAREN) with invalid assignment + alias this)
$(LI $(BUGZILLA 12585): Regression$(LPAREN)2.064$(RPAREN): Segfault on lazy/catch/opIndex)
$(LI $(BUGZILLA 12591): [DMD|REG] std/typecons.d$(LPAREN)440$(RPAREN): Error: tuple has no effect in expression)
$(LI $(BUGZILLA 12593): [REG2.065] AA cannot have struct as key)
$(LI $(BUGZILLA 12619): Invalid warning for unused return value of debug memcpy)
$(LI $(BUGZILLA 12649): "discards return value" warning will cause ICE on function pointer call)
$(LI $(BUGZILLA 12650): Invalid codegen on taking lvalue of instance field initializ)
$(LI $(BUGZILLA 12689): [CTFE] assigning via pointer from 'in' expression doesn't work)
$(LI $(BUGZILLA 12703): GIT HEAD : final class rejects members initialization)
$(LI $(BUGZILLA 12719): struct.c:705: virtual void StructDeclaration::semantic$(LPAREN)Scope*$(RPAREN): Assertion `parent && parent == sc->parent` failed.)
$(LI $(BUGZILLA 12727): [REG2.066a] DMD hangs up on recursive alias declaration)
$(LI $(BUGZILLA 12728): [REG2.066a] IFTI should consider instantiated types that has template parameters with default args)
$(LI $(BUGZILLA 12760): Initializing an object that has "this$(LPAREN)Args$(RPAREN) inout" causes "discards return value" warning)
$(LI $(BUGZILLA 12769): ICE returning array)
$(LI $(BUGZILLA 12774): REG$(LPAREN)2.066$(RPAREN) ICE$(LPAREN)optimize.c$(RPAREN) Newing struct containing union causes segfault)
$(LI $(BUGZILLA 12824): REG$(LPAREN)2.066$(RPAREN) ICE$(LPAREN)statement.c$(RPAREN) Segfault with label and static if)
$(LI $(BUGZILLA 12860): REG 2.065: typeid$(LPAREN)_error_$(RPAREN) symbols leaked to backend)
$(LI $(BUGZILLA 12864): can no longer use toLower in string switch case)
$(LI $(BUGZILLA 12880): [REG2.066a] Wrong IFTI for string.init argument)
$(LI $(BUGZILLA 12896): ld.gold complains about bad relocations when building libphobos2.so)
$(LI $(BUGZILLA 12900): REG 2.065: Wrong code in IfStatement condition Expression)
$(LI $(BUGZILLA 12904): Wrong-code for some slice to slice assignments when using `opDollar`)
$(LI $(BUGZILLA 12906): [CTFE] Static array of structs causes postblit call)
$(LI $(BUGZILLA 12910): [AA] `rehash` is incorrectly inferred as strongly pure for some associative arrays)
$(LI $(BUGZILLA 12924): deprecated$(LPAREN)"foo"$(RPAREN); and deprecated; should not compile)
$(LI $(BUGZILLA 12956): [ICE] Assertion in expression.c:432)
$(LI $(BUGZILLA 12981): Can't refer to 'outer' from mixin template)
$(LI $(BUGZILLA 12989): Wrong x86_64 code for delegate return when compiled as lib $(LPAREN)-lib$(RPAREN))
$(LI $(BUGZILLA 13002): DMD 2.066 prep: 32-bit build fails on Ubuntu via create_dmd_release)
$(LI $(BUGZILLA 13008): [REG2.066a] 'deprecated' is not allowed to refer another deprecated when it is a function declaration)
$(LI $(BUGZILLA 13021): Constructing union with floating type and then accessing its field in one expression causes ICE)
$(LI $(BUGZILLA 13024): [ICE]$(LPAREN)expression.c line 1172$(RPAREN) with implicit supertype conversion of different enums in array literal)
$(LI $(BUGZILLA 13025): Tools repository does not build on Ubuntu)
$(LI $(BUGZILLA 13026): object.get cannot be called with [] as "defaultValue" argument)
$(LI $(BUGZILLA 13027): Assertion `ex->op == TOKblit || ex->op == TOKconstruct` failed.)
$(LI $(BUGZILLA 13030): DMD assertion fails at mtype.c:697 if delegate has an argument name)
$(LI $(BUGZILLA 13034): [Reg] core.stdc.stdio - deprecation warning with dmd -inline)
$(LI $(BUGZILLA 13053): Wrong warning on implicitly generated __xtoHash)
$(LI $(BUGZILLA 13056): [2.066.0-b1] Regression: Error: template std.path.baseName cannot deduce function from argument types !$(LPAREN)$(RPAREN)$(LPAREN)DirEntry$(RPAREN))
$(LI $(BUGZILLA 13071): [ICE] dmd 2.066.0-b1 assertion in nogc.c:73)
$(LI $(BUGZILLA 13077): [dmd 2.066-b2] std.range.array with shared InputRangeObject)
$(LI $(BUGZILLA 13081): ICE with alias this and opSlice)
$(LI $(BUGZILLA 13087): Error: no property 'xyz' for type 'Vec!4')
$(LI $(BUGZILLA 13102): Cannot parse 184467440737095516153.6L)
$(LI $(BUGZILLA 13113): cannot build druntime's gc.d with -debug=INVARIANT, bad @nogc inference?)
$(LI $(BUGZILLA 13114): old opCmp requirement for AA keys should be detected for classes)
$(LI $(BUGZILLA 13117): Executable size of hello world explodes from 472K to 2.7M)
$(LI $(BUGZILLA 13127): Cannot deduce function with int[][] argument and "in" parameter)
$(LI $(BUGZILLA 13132): ICE on interface AA key)
$(LI $(BUGZILLA 13141): array cast from string[] to immutable$(LPAREN)char[][]$(RPAREN) is not supported at compile time)
$(LI $(BUGZILLA 13152): [REG2.064.2] Compiler high cpu usage and never ends)
$(LI $(BUGZILLA 13154): Incorrect init of static float array when sliced)
$(LI $(BUGZILLA 13158): "void has no value" in std.variant.Algebraic $(LPAREN)affects D:YAML$(RPAREN))
$(LI $(BUGZILLA 13178): Duplicate symbol of compiler generated symbols)
$(LI $(BUGZILLA 13179): AA key type TagIndex now requires equality rather than comparison)
$(LI $(BUGZILLA 13180): [REG2.066a] AA get returns const$(LPAREN)char[]$(RPAREN) instead of string)
$(LI $(BUGZILLA 13187): Function wrongly deduced as pure)
$(LI $(BUGZILLA 13193): Extreme slowdown in compilation time of OpenSSL in Tango for optimized build)
$(LI $(BUGZILLA 13201): Wrong "Warning: statement is not reachable" error with -w)
$(LI $(BUGZILLA 13208): [ICE]$(LPAREN)e2ir.c 2077$(RPAREN) with array operation)
$(LI $(BUGZILLA 13218): [ICE] s2ir.c 142: Must fully qualify call to ParameterTypeTuple)
$(LI $(BUGZILLA 13219): segmentation fault in FuncDeclaration::getLevel)
$(LI $(BUGZILLA 13220): [ICE] 'global.gaggedErrors || global.errors' on line 750 in file 'statement.c')
$(LI $(BUGZILLA 13221): [ICE] '0' on line 318 in file 'interpret.c')
$(LI $(BUGZILLA 13223): Cannot deduce argument for array template parameters)
$(LI $(BUGZILLA 13232): dmd compile times increased by 10-20%)
$(LI $(BUGZILLA 13237): Wrong code with "-inline -O")
$(LI $(BUGZILLA 13245): segfault when instantiating template with non-compiling function literal)
$(LI $(BUGZILLA 13252): ParameterDefaultValueTuple affects other instantiations)
$(LI $(BUGZILLA 13259): [ICE] 'v.result' on line 191 in file 'todt.c')
$(LI $(BUGZILLA 13284): [dmd 2.066-rc2] Cannot match shared classes at receive)
)
)
$(BUGSTITLE DMD Compiler bugs,
$(P
$(LI $(BUGZILLA 648): DDoc: unable to document mixin statement)
$(LI $(BUGZILLA 846): Error 42: Symbol Undefined "$(LESS)mangle_of_class_template$(GREATER)__arrayZ")
$(LI $(BUGZILLA 1659): template alias parameters are chosen over all but exact matches.)
$(LI $(BUGZILLA 2427): Function call in struct initializer fails to compile)
$(LI $(BUGZILLA 2438): Cannot get types of delegate properties)
$(LI $(BUGZILLA 2456): "cannot put catch statement inside finally block", missing line number)
$(LI $(BUGZILLA 2711): -H produces bad headers files if function defintion is templated and have auto return value)
$(LI $(BUGZILLA 2791): port.h and port.c are missing licenses)
$(LI $(BUGZILLA 3032): No stack allocation for "scope c = new class Object {};")
$(LI $(BUGZILLA 3109): [meta] Template ordering)
$(LI $(BUGZILLA 3490): DMD Never Inlines Functions that Could Throw)
$(LI $(BUGZILLA 3672): [tdpl] read-modify-write $(LPAREN)rmw$(RPAREN) operators must be disabled for shared)
$(LI $(BUGZILLA 4225): mangle.c:81: char* mangle$(LPAREN)Declaration*$(RPAREN): Assertion `fd && fd->inferRetType` failed.)
$(LI $(BUGZILLA 4423): [tdpl] enums of struct types)
$(LI $(BUGZILLA 4757): A forward reference error with return of inner defined struct)
$(LI $(BUGZILLA 4791): Assigning a static array to itself should be allowed)
$(LI $(BUGZILLA 5030): Operators don't work with AssociativeArray!$(LPAREN)T1,T2$(RPAREN))
$(LI $(BUGZILLA 5095): Error for typesafe variadic functions for structs)
$(LI $(BUGZILLA 5498): wrong common type deduction for array of classes)
$(LI $(BUGZILLA 5635): Code inside 'foreach' using opApply cannot modify variable out of its scope in a template function.)
$(LI $(BUGZILLA 5810): Struct postincrement generates 'no effect' error if used on struct member)
$(LI $(BUGZILLA 5835): `TypeInfo_Array.getHash` creates raw data hash instead using array element hash function)
$(LI $(BUGZILLA 5854): Built-in array sort doesn't sort SysTime correctly)
$(LI $(BUGZILLA 6140): Wrong ambiguity error with overloading)
$(LI $(BUGZILLA 6359): Pure/@safe-inference should not be affected by __traits$(LPAREN)compiles$(RPAREN))
$(LI $(BUGZILLA 6430): Overloaded auto-return functions each with a nested aggregate of the same name are conflated)
$(LI $(BUGZILLA 6677): static this attributes position)
$(LI $(BUGZILLA 6889): "finally" mentioned in a compilation error, instead of "scope$(LPAREN)exit$(RPAREN)" or "scope$(LPAREN)success$(RPAREN)")
$(LI $(BUGZILLA 7019): implicit constructors are inconsistently allowed)
$(LI $(BUGZILLA 7209): Stack overflow on explicitly typed enum circular dependency)
$(LI $(BUGZILLA 7469): template mangling depends on instantiation order)
$(LI $(BUGZILLA 7477): Enum structs without specified values)
$(LI $(BUGZILLA 7870): Shared library support for Linux is missing)
$(LI $(BUGZILLA 7887): [CTFE] can't assign to returned reference)
$(LI $(BUGZILLA 8100): [ICE] with templated subclassing)
$(LI $(BUGZILLA 8236): Wrong error message in creating struct from vector operation)
$(LI $(BUGZILLA 8254): nested struct cannot access the types of the parent's fields)
$(LI $(BUGZILLA 8269): The 'with statement' does not observe temporary object lifetime)
$(LI $(BUGZILLA 8296): @disable this propagates through reference)
$(LI $(BUGZILLA 8309): ICE in typeMerge on 'void main$(LPAREN)$(RPAREN){auto x = [$(LPAREN)$(RPAREN)=>1.0, $(LPAREN)$(RPAREN)=>1];}')
$(LI $(BUGZILLA 8370): invalid deprecation error with -release -inline -noboundscheck)
$(LI $(BUGZILLA 8373): IFTI fails on overloading of function vs non function template)
$(LI $(BUGZILLA 8392): DMD sometime fail when using a non static function template within a function template)
$(LI $(BUGZILLA 8499): ICE on undefined identifier)
$(LI $(BUGZILLA 8596): Indeterministic assertion failure in rehash)
$(LI $(BUGZILLA 8704): Invalid nested struct constructions should be detected)
$(LI $(BUGZILLA 8738): Struct literal breaks assigment ordering)
$(LI $(BUGZILLA 9245): [CTFE] postblit not called on static array initialization)
$(LI $(BUGZILLA 9596): Ambiguous match is incorrectly hidden by additional lesser match)
$(LI $(BUGZILLA 9708): inout breaks zero parameter IFTI)
$(LI $(BUGZILLA 9931): Mac OS X ABI not followed when returning structs for extern $(LPAREN)C$(RPAREN))
$(LI $(BUGZILLA 10054): x86_64 valgrind reports unrecognised instruction $(LPAREN)DMD 2.062$(RPAREN))
$(LI $(BUGZILLA 10071): 'real' alignment wrong on several platforms)
$(LI $(BUGZILLA 10112): Mangle, which defined by pragma$(LPAREN)mangle$(RPAREN) should not be mangled by backend.)
$(LI $(BUGZILLA 10133): ICE for templated static conditional lambda)
$(LI $(BUGZILLA 10169): duplicate error message: member is not accessible)
$(LI $(BUGZILLA 10219): Implicit conversion between delegates returning a class and an interface)
$(LI $(BUGZILLA 10366): Ddoc: Symbols in template classes don't get fully qualified anchors)
$(LI $(BUGZILLA 10629): [ICE]$(LPAREN)dt.c 106$(RPAREN) with void array)
$(LI $(BUGZILLA 10658): Cannot merge template overload set by using alias declaration)
$(LI $(BUGZILLA 10703): Front-end code removal "optimisation" with try/catch blocks produces wrong codegen)
$(LI $(BUGZILLA 10908): Links in d.chm file are broken)
$(LI $(BUGZILLA 10928): Fails to create closures that reference structs with dtor)
$(LI $(BUGZILLA 10985): Compiler doesn't attempt to inline non-templated functions from libraries $(LPAREN)even having the full source$(RPAREN))
$(LI $(BUGZILLA 11066): Spurious warning 'statement is not reachable' with -profile)
$(LI $(BUGZILLA 11177): parameterized enum can't be typed)
$(LI $(BUGZILLA 11181): Missing compile-time error for wrong array literal)
$(LI $(BUGZILLA 11201): ICE: $(LPAREN)symbol.c$(RPAREN) -inline stops compilation)
$(LI $(BUGZILLA 11333): ICE: Cannot subtype 0-tuple with "alias this")
$(LI $(BUGZILLA 11421): Dynamic array of associative array literal type inference)
$(LI $(BUGZILLA 11448): `dup` calls @system impure code from @safe pure function)
$(LI $(BUGZILLA 11453): Compiling packages has a dependency on order of modules passed to the compiler.)
$(LI $(BUGZILLA 11511): DDoc - C variadic parameters cannot be properly documented)
$(LI $(BUGZILLA 11535): CTFE ICE on reassigning a static array initialized with block assignment)
$(LI $(BUGZILLA 11542): scope$(LPAREN)failure$(RPAREN) messes up nothrow checking)
$(LI $(BUGZILLA 11543): multiple definition of std.regex with shared library)
$(LI $(BUGZILLA 11545): Aggregate function literal member should not have access to enclosing scope)
$(LI $(BUGZILLA 11550): [ICE] Checking if std.conv.to compiles with an array of non-builtins results in an ICE in s2ir.c.)
$(LI $(BUGZILLA 11622): Assertion failure in totym$(LPAREN)$(RPAREN), glue.c, line 1288)
$(LI $(BUGZILLA 11672): default initialization of static array of structs with a single value fails)
$(LI $(BUGZILLA 11677): user defined attributes must be first)
$(LI $(BUGZILLA 11678): user defined attributes cannot appear as postfixes)
$(LI $(BUGZILLA 11679): user defined attributes not allowed for local auto declarations)
$(LI $(BUGZILLA 11680): user defined attributes for type inference)
$(LI $(BUGZILLA 11735): pragma$(LPAREN)msg, ...$(RPAREN) fails to print wstring, dstring)
$(LI $(BUGZILLA 11740): [64-bit] Struct with constructor incorrectly passed on stack to extern$(LPAREN)C++$(RPAREN) function)
$(LI $(BUGZILLA 11752): Make issues.dlang.org work)
$(LI $(BUGZILLA 11774): Lambda argument to templated function changes its signature forever)
$(LI $(BUGZILLA 11783): Make std.datetime unittesting faster)
$(LI $(BUGZILLA 11788): [x86] Valgrind unhandled instruction bytes: 0xC8 0x8 0x0 0x0)
$(LI $(BUGZILLA 11832): std.datetime: ddoc warnings)
$(LI $(BUGZILLA 11872): Support for overloaded template functions in with block)
$(LI $(BUGZILLA 11885): ICE$(LPAREN)s2ir.c 359$(RPAREN) with continuing a labeled ByLine $(LPAREN)range struct w/ dtor$(RPAREN) loop)
$(LI $(BUGZILLA 11889): std.container.Array.opIndex returns by value, resulting in perfect storm)
$(LI $(BUGZILLA 11901): real win64)
$(LI $(BUGZILLA 11906): Compiler assertion when comparing function pointers)
$(LI $(BUGZILLA 12009): local import and "unable to resolve forward reference" error)
$(LI $(BUGZILLA 12011): "Internal Compiler Error: Null field" on CTFE method call on .init)
$(LI $(BUGZILLA 12042): "CTFE internal error: Dotvar assignment" with template method and "with")
$(LI $(BUGZILLA 12057): [ICE], backend/cg87.c 925)
$(LI $(BUGZILLA 12063): No line number error on uninitialized enum member if base type is not incrementable)
$(LI $(BUGZILLA 12077): Instantiated type does not match to the specialized alias parameter)
$(LI $(BUGZILLA 12078): forward reference issue with is$(LPAREN)$(RPAREN) and curiously recurring template pattern)
$(LI $(BUGZILLA 12110): [CTFE] Error: CTFE internal error: Dotvar assignment)
$(LI $(BUGZILLA 12138): Label statement creates an unexpected scope block)
$(LI $(BUGZILLA 12143): Base class is forward referenced)
$(LI $(BUGZILLA 12164): Function returning ptrdiff_t.min in 64-bit returning 0 when -O is set.)
$(LI $(BUGZILLA 12212): Static array assignment makes slice implicitly)
$(LI $(BUGZILLA 12231): ICE on the class declaration within lambda inside template constraint)
$(LI $(BUGZILLA 12235): ICE on printing mangled name of forward reference lambda by pragma$(LPAREN)msg$(RPAREN))
$(LI $(BUGZILLA 12236): Inconsistent mangleof result)
$(LI $(BUGZILLA 12237): Inconsistent behavior of the instantiating enclosing template function)
$(LI $(BUGZILLA 12263): Specialized template parameter incorrectly fail to match to the same name template.)
$(LI $(BUGZILLA 12278): __traits$(LPAREN)classInstanceSize$(RPAREN) returns wrong value if used before class is declared)
$(LI $(BUGZILLA 12287): infinite loop on std.traits.moduleName on templated struct member)
$(LI $(BUGZILLA 12292): Template specialization ": string" passes for static arrays of other types)
$(LI $(BUGZILLA 12302): Assertion failure in expression.c $(LPAREN)line 432$(RPAREN) when using template isCallable)
$(LI $(BUGZILLA 12306): Struct Enums cannot be read at compile time)
$(LI $(BUGZILLA 12307): Contextfull error diagnostic about AA key type)
$(LI $(BUGZILLA 12313): Unneeded stack temporaries created by tuple foreach)
$(LI $(BUGZILLA 12334): Cannot access frame pointer of nested class from inside lambda)
$(LI $(BUGZILLA 12350): Assigning __traits$(LPAREN)getAttributes$(RPAREN) to variable crashes DMD)
$(LI $(BUGZILLA 12362): dmd hangs when attempting to use undefined enum)
$(LI $(BUGZILLA 12378): Compiler accepts any syntactically-valid code inside double-nested map predicate)
$(LI $(BUGZILLA 12392): No attribute inference if first template instantiation uses `alias`)
$(LI $(BUGZILLA 12397): CTFE ICE CompiledCtfeFunction::walkAllVars with 2.065)
$(LI $(BUGZILLA 12432): Diagnostic on argument count mismatch for ranges and opApply should improve)
$(LI $(BUGZILLA 12436): Opaque struct parameter type should not be allowed)
$(LI $(BUGZILLA 12460): Crash with goto and static if)
$(LI $(BUGZILLA 12476): Assert error in interpret.c:3204)
$(LI $(BUGZILLA 12480): static assert should print out the string representation of a value it can interpret)
$(LI $(BUGZILLA 12498): ICE: while$(LPAREN)string$(RPAREN) causes compiler to crash during CTFE)
$(LI $(BUGZILLA 12499): tuple/TypeTuple 1-Arg initialization fails during CTFE.)
$(LI $(BUGZILLA 12503): Bad optimization with scope$(LPAREN)success$(RPAREN) and return statement)
$(LI $(BUGZILLA 12506): Wrongly private lambda to define global immutable array)
$(LI $(BUGZILLA 12508): Codegen bug for interface type covariant return with lambda type inference)
$(LI $(BUGZILLA 12523): wrong foreach argument type with ref and inout)
$(LI $(BUGZILLA 12524): wrong type with inout const arg and inout return)
$(LI $(BUGZILLA 12528): [CTFE] cannot append elements from one inout array to another inout array)
$(LI $(BUGZILLA 12534): ICE on using expression tuple as type tuple)
$(LI $(BUGZILLA 12539): Compiler crash when looking up a nonexistent tuple element in an associative array)
$(LI $(BUGZILLA 12542): No function attribute inference for recursive functions)
$(LI $(BUGZILLA 12543): Class.sizeof requires the Class' definition)
$(LI $(BUGZILLA 12555): Incorrect error ungagging for speculatively instantiated class)