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.