Few recent dmd pull requests
Shammah Chancellor via Digitalmars-d
digitalmars-d at puremagic.com
Thu Jun 26 03:54:05 PDT 2014
On 2014-06-26 10:38:53 +0000, bearophile said:
> For people that are not following closely what's happening in GitHub,
> there are some nice or very nice patches waiting to be fixed and/or
> accepted, among the last ones:
>
> --------------------
>
> This proposes a __traits(documentation, expr):
> https://github.com/D-Programming-Language/dmd/pull/3531
>
> Something similar is used in Python and Lisp, it allows to introspect
> the comments. It's useful for various generative purposes.
>
> One quirk of this implementation, that I am not sure about:
>
>> Comments will only be available if DMD is invoked with the "-D" flag.
>> If no comment is available for expr, __traits(comment, expr) evaluates
>> to the empty string.<
>
> --------------------
>
> Optional monitors for class instances, including a fallback:
> https://github.com/D-Programming-Language/dmd/pull/3547
>
> It was discussed in this newsgroup too. Beside the little save in
> memory (probably small), monitors today are not much appreciated.
> Andrei seemed to agree with this idea.
>
> --------------------
>
> https://github.com/D-Programming-Language/dmd/pull/3615
>
> Will allow very handy, more DRY and less bug-prone like this:
>
> // static array type
> int[$] a1 = [1,2]; // int[2]
> auto[$] a2 = [3,4,5]; // int[3]
> const[$] a3 = [6,7,8]; // const(int[3])
>
> // dynamic array type
> immutable[] a4 = [1,2]; // immutable(int)[]
> shared[] a5 = [3,4,5]; // shared(int)[]
> // partially specified part is unqualified.
>
> // pointer type
> auto* p1 = new int(3); // int*
> const* p2 = new int(3); // const(int)*
>
> // mixing
> auto[][$] x1 = [[1,2,3],[4,5]]; // int[][2]
> shared*[$] x2 = [new int(1), new int(2)]; // shared(int)*[2]
>
>
> A comment by Walter:
>
>> My reservation on this is I keep thinking there must be a better way than [$].<
>
> --------------------
>
> https://github.com/D-Programming-Language/dmd/pull/3638
>
> Allows to write code like:
>
>
> void main() {
> import std.algorithm;
> alias sqr = a => a ^^ 2;
> auto r = [1, 2, 3].map!sqr;
> }
>
>
> Currently you need to write:
>
> alias F(alias f) = f;
> void main() {
> import std.algorithm;
> alias sqr = F!(a => a ^^ 2);
> auto r = [1, 2, 3].map!sqr;
> }
>
> --------------------
>
> https://github.com/D-Programming-Language/dmd/pull/3679
>
> This introduces __traits(valueRange, expr), and I think it introduces
> range values to the ?: expressions too.
>
> The __traits(valueRange, expr) is meant to be useful for debugging
> range values, that is meant to be improved in future. Currently this
> patch seems stalled because Lionello seems to not provide few small
> things Walter has asked.
>
> --------------------
>
> https://github.com/D-Programming-Language/dmd/pull/3680
>
>
> It should fix this bug:
>
> void main() {
> int[int][int] a1 = cast()[1: [2: 3]]; // workaround
> int[int][int] a2 = [1: [2: 3]]; // error
> }
>
>
> And will allow you to write:
>
> void main() {
> import std.bigint;
> BigInt[] data = [-5, 6, 9];
> }
>
>
> Currently in D you have write this:
>
> void main() {
> import std.bigint;
> auto data = [BigInt(-5), BigInt(6), BigInt(9)];
> }
>
>
> Or this (writing -5.BigInt is generally not a good idea):
>
> void main() {
> import std.bigint;
> auto data = [BigInt(-5), 6.BigInt, 9.BigInt];
> }
>
> --------------------
>
> Bye,
> bearophile
Some of those fix some very annoying and long standing bugs. Whoot.
-Shammah
More information about the Digitalmars-d
mailing list