On Saturday, 11 July 2026 at 08:33:13 UTC, Damian McGuckin wrote:
On Friday, 10 July 2026 at 15:21:08 UTC, Nick Treleaven wrote:
Also Don made an argument why imaginary types are not needed
in D:
https://forum.dlang.org/post/[email protected]
Interesting arguments. Not sure I agree with all of it. What is
done in C99 (and even C23) reflects the mathematics, so it is
not a hack.
While 2D CFD (computational fluid dynamics) uses complex
arithmetic, 3D CFD does not (it needs quaternions which are way
too specialised). But structural dynamics uses complex and
imaginary numbers extensively in both 2D and 3D, to handle the
phase of a dynamic load. Also, the field of engineering uses
complex numbers even more extensively but as I am not an
electrical engineer, I will leave niche alone.
Don said:
Complex numbers are fundamental to mathematics in a way that
quaternions are not.
Though however important something is, it doesn't automatically
justify having a language feature if a library solution is good
enough. I'm not saying there isn't a justification for complex
numbers in the language, but the technical case needs to be made.
When I used D well over 15 years ago, all our work was done
with reals. But I have been using the complex arithmetic of
Chapel for nearly a decade and its imaginary and complex types
made life a dream for dealing with this task. It is also so
much easier to explain the complex arithmetic in the program
logic if one can talk about real and imaginary numbers when
discussing complex numbers. Trying to explain complex numbers
in terms of a complex number with a real component of zero is
recursive and I find recursive explanations very difficult to
write.
Would it help to use UFCS?
```d
import std;
auto i(T)(T im) => complex(0, im);
void main()
{
auto c = 4 + 2.i;
c.writeln;
}
```
I will look through those old discussions although they all
seem to deal with the removal of an imaginary type. I was
actually looking for the justification for their original
inclusion in D which would be very much earlier.
A justification is in the D vs C++ article link I sent you
earlier.
There is a Phobos issue for imaginary support:
https://github.com/dlang/phobos/issues/10022