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
of
foreach
{
foreach
{
foreach
{
}
}
}
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:
http://dlang.org/phobos/std_algorithm.html
and ranges (a very important concept in D):
http://ddili.org/ders/d.en/ranges.html
http://wiki.dlang.org/Component_programming_with_ranges
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