@property

Brad Anderson eco at gnuk.net
Mon Aug 6 23:31:33 PDT 2012


On Mon, Aug 6, 2012 at 11:59 PM, José Armando García Sancio <
jsancio at gmail.com> wrote:

> On Sun, Aug 5, 2012 at 2:32 PM, Kapps <opantm2+spam at gmail.com> wrote:
> > On Sunday, 5 August 2012 at 14:32:50 UTC, Adam D. Ruppe wrote:
> >>
> >> On Sunday, 5 August 2012 at 04:12:23 UTC, Jonathan M Davis wrote:
> >>>
> >>> I'd be very surprised if all that many people compile with -property.
> >>
> >>
> >> Indeed. Sometimes I try it just to see what happens, and always the same
> >> results: it doesn't solve problems and complains about code.
> >>
> >> Some examples of things that break:
> >>
> >> import std.algorithm;
> >> foreach(i; [1,2,3].map!"a+1") {
> >>
> >> }
> >> prophate.d(5): Error: not a property [1,2,3].map!("a+1")
> >>
> >>
> >> Of course, this is relatively new, using ufcs in 2.059, so the breakage
> >> probably isn't too bad, but I'm not the only one who writes it this way
> -
> >> I've seen a number of reddit and newsgroup comments do this too,
> especially
> >> when chaining it.
> >> [snip]
> >
> >
> > I completely agree, particularl with the UFCS part. UFCS is designed to
> get
> > rid of the horrible mess of (), and now we want to arbitrarily force a ()
> > anyways? Seems like it defeats the purpose. To me, when comparing
> > range.filter!"a > 2".map!"a*a".countUntil(3)
> > to
> > range.filter!"a > 2"().map!"a*a"().countUntil(3)
> > Those extra paranthesis just don't do anything, they don't give extra
> > meaning, they don't accomplish anything useful but distract from the
> actual
> > expression.
> >
>
> Just a small comment. I have been following this thread a little and
> was somewhat surprise that the argument against enforcing parenthesis
> on non-properties is that a call like [1,2,3].map!"a+1" would look
> ugly as [1,2,3].map!"a+1"(). To me that is a issue of the
> std.algorithm module and not so much of the language.
>
> Personally I am not a huge fan of using strings as a way to pass a
> function into a high-order function. I suspect that this string stuff
> became popular because D didn't have lambda declarations and type
> inference when the module was designed and implemented. I wonder if
> the module signatures would look different if you designed it to use
> the current features of D.
>
> To be honest, when first saw 'some_array.map!"a+1"()' a few years back
> when I first learned about D my knee jerk reaction was: "from where in
> the world is 'a' coming from?". I remember I had to read
> std/algorithm.d and whatever module implements unary "string"
> functions to figure out what was going on. Anyways, I digress.
>
> Part of me looks forward to the day that I can use D reliably another
> part of my wants to just wait for Rust to hopefully get it "right".
>
> Thanks,
> -Jose
>

There was a pull to switch std.algorithm over to the new lambda syntax (by
me).  It caused the dmd unit tests to fail though.  There is also an issue
with intermodule visibility of nested structs that popped up and prevented
the every function from being switched over.  I should probably recreate
the pull request so one of the compiler guys can take a look.

BA
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20120807/65139ae4/attachment.html>


More information about the Digitalmars-d mailing list