On Friday, 12 December 2014 at 16:51:43 UTC, Jake wrote:
I'm not sure if anyone has noticed, but the D wrapper for C's
ICU library is far from working it seems. mango.icu is its
technical name. I've read articles on the forum about how
excited people were to get ICU usable in D, but whoever made
mango.icu hasn't made any updates on it or even documented it
online.
I'm just letting you all know about this. D seems to already
have a bunch of ICU's functionality though, so maybe the
wrapper died on purpose. I really just wanted to use its time
zone and date features since std.datetime doesn't make it very
easy to use the TZ database on Windows.
I've looked into writing a binding for ICU recently, but
ultimately decided to abandon that idea in favor of writing a
replacement for it in D.
The reasons for this are:
* ICU breaks its ABI with every release, meaning a D binding
would only work for one version of ICU, and need pragma(mangle)
to have a hope of easy updating. Alternatively, what mango.icu
seems to have done is load ICU at runtime in order to figure out
what library to bind
* ICU's data and APIs use UTF-16. I'd rather everything be UTF-8.
* ICU's API is incredibly inconvenient for (if not impossible to
access from) D. For example, some of the functionality requires
binding C++ classes that use multiple inheritance
* A decent chunk (though not all) of ICU is actually generated
from CLDR, meaning I can do the same
It looks to me like mango.icu hasn't updated since ICU v38 (it is
up to v54 now), and made extensive use of wrappers in order to
hide the C-API nastiness. It also doesn't support any of the
functionality that requires C++. Binding ICU would be very nice,
but this is one of the few cases I actually think we'd be better
off rolling our own.
I'm still a little ways off from having my work ready for public
release, but I've been making good progress recently.
If you can point out what ICU API you need, I'll make sure to
included equivalent API in my library.
- Trent