Few recent dmd pull requests
H. S. Teoh via Digitalmars-d
digitalmars-d at puremagic.com
Thu Jun 26 07:37:38 PDT 2014
On Thu, Jun 26, 2014 at 10:38:53AM +0000, bearophile via Digitalmars-d wrote:
[...]
> --------------------
>
> 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.<
This is probably because without -D, the entire ddoc code doesn't even
run (which probably saves on compilation time), and comments are not
kept by the parser/lexer, so by the time the compiler evaluates
__traits(comment...), it doesn't know how to retrieve the comments
anymore.
[...]
> --------------------
>
> 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]
I like this very much. I hope it will get merged in one form or another
eventually.
> A comment by Walter:
>
> >My reservation on this is I keep thinking there must be a better way
> >than [$].<
Is the only objection one about syntax? Surely professional bikeshedders
like us can easily come up with more palatable syntaxes? ;-)
> --------------------
>
> 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;
> }
[...]
What's wrong with just writing auto?
auto sqr = a => a^^2;
auto r = [1,2,3].map!sqr;
T
--
The peace of mind---from knowing that viruses which exploit Microsoft system vulnerabilities cannot touch Linux---is priceless. -- Frustrated system administrator.
More information about the Digitalmars-d
mailing list