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 failing logic.
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.
6. Cleanup.

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 first :P

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.

Reply via email to