On Sunday, 13 March 2016 at 18:42:59 UTC, Bastien wrote:
The sticking point is unless I commit the rest of my life to maintaining this software, I can't write it all in D. The algorithms change/are improved yearly; the output format from the instrument changes once in a while and therefore these need to be easily scripted/modified by other (non-programming) scientists and the community that only really know python and octave.

It's pretty easy to use D from python and python from D. The documentation for PyD isn't so great, but once you have figured it out, it's easy. Start with something very small (the examples and tests in the PyD repo are the best documentation) and work up from there.

You can even embed D in a Jupyter/iPython notebook, and write some cells in D and some in python and have them call each other. See PydMagic by John Colvin.
https://github.com/DlangScience/PydMagic

D can talk to Julia via C linkage already. Just extern(C) when you declare your D function, and I guess use C style arrays.

I started porting julia.h to D, but didn't get have time to finish. Ilya Yaroshenko, who created the ndslice library in std.experimental, will be working on julia integration in coming months.

By the way, you can also embed R in D and call D from R - see work by bachmeier on bitbucket. That's very important because of the huge numbers of R libraries. Although R is slow, there apparently shouldn't be so much overhead in calling a C library written for R from D.
I guess my resilience to using D for the algorithms is because with python, I have access to numpy and matplotlib. There do seem to be some ongoing developments though:
http://forum.dlang.org/post/mailman.4923.1434903477.7663.digitalmar...@puremagic.com

You already have access to matplotlib from D - see here (and scroll down or search for matplotlib):
https://d.readthedocs.org/en/latest/examples.html


And you can call numpy from D, but there is some overhead, and I wouldn't want to do it inside a tight loop.

From PyD unit tests:

InterpContext context = new InterpContext();

    context.py_stmts(outdent("
        import numpy
        a = numpy.eye(2, dtype='complex128')
    "));

    context.a.to_d!(Complex!double[][] )();



Reply via email to