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