On Saturday, 30 August 2025 at 11:43:27 UTC, Brother Bill wrote:

I tried various code changes, none of which worked.
Kindly provide code changes to fix warnings that reflect modern D programming.

This worked for me:

```d
import std.stdio;
import std.concurrency;
import std.conv;

struct CalculationFailure
{
    string reason;
}

struct Exit
{
}

void calculate()
{
    bool isDone = false;

    while (!isDone)
    {
        receive((string message) {
            try
            {
                ownerTid.send(to!double(message) + 0.5);
            }
            catch (Exception exc)
            {
ownerTid.send(cast(shared)exc); // cast to shared to get it into the message queue.
            }
        },
            (Exit message) { isDone = true; });
    }
}

void main()
{
    Tid calculator = spawn(&calculate);
    calculator.send("1.2");
    calculator.send("hello"); // ← incorrect input
    calculator.send("3.4");
    calculator.send(Exit());

    foreach (i; 0 .. 3)
    {
        writef("result %s: ", i);
        receive(
            (double message) { writeln(message); },

            (shared Exception message) {
throw cast()message; // cast away from shared to actually throw it.
        });
    }
}
```

Reply via email to