Website message overhaul

Timon Gehr timon.gehr at gmx.ch
Mon Nov 14 13:39:45 PST 2011


On 11/14/2011 09:51 PM, Brad Anderson wrote:
> On Mon, Nov 14, 2011 at 1:29 PM, Timon Gehr <timon.gehr at gmx.ch
> <mailto:timon.gehr at gmx.ch>> wrote:
>
>     On 11/14/2011 08:47 PM, Andrei Alexandrescu wrote:
>
>         On 11/14/11 1:15 AM, Timon Gehr wrote:
>
>             Looks good, I think this is the right direction.
>
>             Nitpicks:
>
>             1.
>
>             // Type deduction works for function results. This is
>             important for
>             generic
>             // functions, such as min below, which works correctly for
>             all comparable
>             // types.
>             auto min(T1, T2)(T1 lhs, T2 rhs) {
>             return rhs < lhs ? rhs : lhs;
>             }
>
>             It does not. The two types need to have a common type as well.
>
>
>         It's difficult to be concise and complete simultaneously. The
>         underlying
>         assumption is that if two types are comparable, they also have a
>         common
>         type.
>
>
>     hm, maybe call the them 'compatible comparable types'?
>
>
>
>             2.
>
>             The scope statement example should actually show
>             transactional code.
>             Otherwise the poor reader feels fooled into clicking "See
>             example".
>             Using scope(exit) to write something at function exit is
>             useful for
>             debugging, but scope(failure) is the real thing that is
>             important to
>             show.
>
>
>         Good point.
>
>             3.
>
>             If contract inheritance is to be promoted on the front page
>             (and it is
>             certainly something that may attract developers), it should
>             actually
>             work.
>
>
>         Absolutely.
>
>
>     There has been disagreement on whether or not my bug report on the
>     matter was valid.
>
>     What it means for your example:
>
>     // Interfaces and classe
>     interface Printable {
>         void print(uint level)
>         in { assert(level > 0); } // contract is part of the interface
>     }
>
>     // Interface implementation
>     class Widget : Printable {
>         void print(uint level) { ... }
>     }
>
>     void main(){
>         Widget w = new Widget();
>         w.print(0); // passes through, but should not
>     }
>
>     Can you state in the issue tracker that the bug report is valid?
>     http://d.puremagic.com/issues/__show_bug.cgi?id=6856
>     <http://d.puremagic.com/issues/show_bug.cgi?id=6856>
>
>
>
>
>             4.
>
>             If we can find a less buzzy word than 'Multi-paradigm power'
>             to describe
>             D's multi-paradigm power, that would be nice, but I am also
>             fine with
>             the current state of affairs.
>
>             5.
>
>             The most important language features are not displayed at
>             all. Where are
>             Metaprogramming, CTFE and code generation? It sure is hard
>             to come up
>             with a short but convincing example, but I think we should
>             try to.
>
>
>         Those would be under the multi-paradigm thingie.
>
>
>     Ok. Maybe there could be a few LOC demonstrating the 'recurrence'
>     function generating a few fibonacci numbers. I think it is a nice
>     showcase, although I have never needed that particular function in
>     real code :o). It has also the potential of showing Phobos' lazy
>     functional style features. But unfortunately, most functional
>     programmers will shriek for a moment when they see the argument
>     order of 'take'.
>
>
>
> I think that's a good idea.  While learning D I became impressed with it
> when I solved Project Euler problem 2 ("By considering the terms in the
> Fibonacci sequence whose values do not exceed four million, find the sum
> of the even-valued terms.") with:
>
> auto answer = reduce!"a + b"(filter!"a % 2 == 0"(until!"a >
> 4_000_000"(recurrence!"a[n-1] + a[n-2]"(1, 1))));
>
> It'd look better with UFCS but it's still rather neat I think.

You can also use stride(..., 3) instead of filtering.



More information about the Digitalmars-d mailing list