D for project in computational chemistry

Chris via Digitalmars-d digitalmars-d at puremagic.com
Tue Aug 4 02:48:05 PDT 2015

On Sunday, 2 August 2015 at 16:25:18 UTC, Yura wrote:
> Dear D coders/developers,
> I am just thinking on one project in computational chemistry, 
> and it is sort of difficult for me to pick up the right 
> language this project to be written. The project is going to 
> deal with the generation of the molecular structures and will 
> resemble to some extent some bio-informatic stuff. Personally I 
> code in two languages - Python, and a little bit in C (just 
> started to learn this language).
> While it is easy to code in Python there are two things I do 
> not like:
> 1) Python is slow for nested loops (much slower comparing to C)
> 2) Python is not compiled. However, I want to work with a code 
> which can be compiled and distributed as binaries (at least at 
> the beginning).
> When it comes to C, it is very difficult to code (I am a 
> chemist rather than computer scientist). The pointers, memory 
> allocation, absence of the truly dynamically allocated arrays, 
> etc, etc make the coding very long. C is too low level I 
> believe.
> I just wander how D would be suitable for my purpose? Please, 
> correct me if I am wrong, but in D the need of pointers is 
> minimal, there is a garbage collector, the arrays can be 
> dynamically allocated, the arrays can be sliced, ~=, etc which 
> makes it similar to python at some extent. I tried to write a 
> little code in D and it was very much intuitive and similar to 
> what I did both in Python and C.
> Any hints/thoughts/advises?
> With kind regards,
> Yury

I agree with bachmeier. You cannot go wrong. You mentioned nested 
loops. D allows you to concatenate (or "pipe") loops. So instead 


you have something like

int[] numbers = [-2, 1, 6, -3, 10];
foreach (ref n; numbers
   .map!(a => a * 5)  // multiply each value by 5
   .filter!(a => a > 0))  // filter values that are 0 or less
   //  Do something

or just write

auto result = numbers.map!(a => a * 5).filter!(a => a > 0);
// ==> result = [5, 30, 50]

You'd probably want to have a look at:


and ranges (a very important concept in D):


Excessive use of nested loops is not necessary in D nor is it 
very common. This makes the code easier to maintain and less 
buggy in the end.

More information about the Digitalmars-d mailing list