On Friday, 9 February 2018 at 13:53:51 UTC, Seb wrote:
On Friday, 9 February 2018 at 13:10:16 UTC, rumbu wrote:
On Friday, 9 February 2018 at 08:27:21 UTC, Nick Sabalausky (Abscissa) wrote:


Defining input ranges (one of my biggest pet peeves):

C# knocked it out of the park ages ago with its design for a stackless!!! (ie no-fibers) coroutine syntax. There's no reason the same approach couldn't be used in D for creating input ranges.

I'm missing too the yield return and await syntax in D every time.

What's wrong with the library solution from std.concurrency?


let's take the D's example from std.concurrency:

static void spawnedFunc(Tid ownerTid)
{
    receive((int i){
        received = text("Received the number ", i);

        // Send a message back to the owner thread
        // indicating success.
        send(ownerTid, true);
    });
}

rough C# translation:

async void spawnedFunc()
{
    int i = await receive();
}


All good point. A few questions:

- alias this;

Do you mean no multiple alias this or the problem with overloading?

When I learnt D first time, it was a very difficult concept for me. Personally I don't find any use of it today.


- everything is a range. If not, we will rangify it.

Autodecoded eventually.

No one likes it, but you can opt-out with byCodeUnit - that doesn't work for you?

This topic was about how difficult is D to learn. Due to the obsessive "range them all" politics, you cannot really use most of the D library functions if you don't understand very well range concepts. And after you learn them, you'll have autodecoding surprises.


- no dedicated syntax sugar for ranges;

What do you expect here?
(also it's not entirely true - foreach already supports ranges)

- no dedicated syntax sugar for coroutines;

What syntax sugar that can't be done by a library do you expect?

Let's take a classic range in D:

struct FibonacciRange(int limit)
{
    int a = 1, b = 1;

    bool empty() const @property
    {
       return a > limit;
    }

    int front() const @property
    {
        return a;
    }

    void popFront()
    {
        auto t = a;
        a = b;
        b = t + b;
    }
}

C#:

IEnumerable<int> Fibonacci(int limit)
{
   int a = 1, b = 1;
   while (a < limit)
   {
     yield return a;  //syntactic sugar
     var t = a;
     a = b;
     b = t + b;
   }
}


- no dedicated syntax sugar for events;

What syntax sugar that can't be done by a library do you expect?
await?

D library is using signals instead of events. Personally I find events easier to learn.

Reply via email to