S2Geometry Library Release v0.2
madric at gmail.com
Sat May 25 20:50:34 UTC 2019
On Saturday, 25 May 2019 at 19:34:50 UTC, Sebastiaan Koppe wrote:
> On Saturday, 25 May 2019 at 11:48:12 UTC, Vijay Nayar wrote:
>> D's philosophy of having a large tool-box makes this work
>> doable by a single person while other languages have spent
>> many years with many contributors.
> Great work! Can you tell something about how you converted the
> code and how you plan to stay up-to-date?
I would say that this library is a bit of a special case in most
regards. The code base is quite complicated not only in subject
matter and mathematics, but also in the actual dependencies
between modules as well. The code itself has numerous circular
dependencies, but when you factor in the unit-tests as well, the
case becomes much more severe. The original code also passes
around references to stack objects frequently, and manual changes
had to be made to replace that logic. This will give C++ a slight
edge in performance, but I think the gain in safety is worth it.
The actual conversion was entirely by hand, making appropriate
replacements for many parts of the algorithms. Where the original
logic became nearly impossibly complex to understand, debugging
was mostly done by following this procedure:
1. Find a failing test.
2. Instrument the D code with print statements leading up to the
3. Instrument the C++ code with the equivalent print statements.
4. Run both tests and compare the output.
5. Add more print statements if there are no differences or if
the code is not yet identified.
If that approach sounds kinda silly, it's because it is. However,
what it means is that the library is actually capable of being
converted into D without me having to get a PhD in mathematics
On the question of keeping the library up to date, this is also a
bit of a special case. Previously I've used the Java version of
this library which is already 8 years old, and it is extremely
useful even today. The actual library itself is fairly complete,
and even if it were to never get another update, it would
continue to be very useful for a long time.
More information about the Digitalmars-d-announce