On 8/13/17 11:44 PM, Adam D. Ruppe wrote:
On Monday, 14 August 2017 at 01:52:16 UTC, Johnson Jones wrote:
pretty simply, trying to convert a floating point to a string in a
ctfe function and it thinks that it is too complex to do in a ctfe,
really?
It uses a C function to do the conversion, which is not available at
compile time since CTFE can't run extern functions.
And it is a LOT harder to do than you might think which is why it still
uses the C function - implementing one in D is legit pretty complex.
When I first saw this too, I figured it must be simple to slap something
together, even if it is horribly inefficient and doesn't work
everywhere... and I ended up giving up after spending a few hours on it
too. If you search the web, you get academic papers describing it, eeek.
Of course, it might be reasonable to port one of the C implementations
directly... but even that is a fairly big job (and you might as well
just call the C function itself for all but CTFE cases) - the GNU one is
1,300 lines, for example. And that has an incompatible license with the
rest of druntime!
Another reasonable idea is to have the compiler call the function for
you. Since the compiler only ever exists on platforms with libc
available, the libc function is available to the compiler too. having
some special intrinsic to format floating points wouldn't be out of the
question.
It is quite limiting to have floating point string conversions not
available.
-Steve