

Complex networks in D - WalterBright
http://braingam.es/2013/07/complex-networks-in-d/

======
sixbrx
The "static if (directed) { <code> }" part threw me for a loop. The comment
says it's evaluated at compile time to control whether the methods are
included. That's pretty neat!

~~~
jeremiep
You can also call pure D functions at compile-time, along with mixins this
gives you something close to the power of Lisp macros.

------
swah
It could be cool if Google had just pushed D instead of creating Go...

~~~
bsaul
I told myself a similar thing : why did they create a new language instead of
picking that one ?

But then i saw the list of features that D has, and remembered the reason why
Rob Pike said he wanted to stop using C++ when he saw the new C++ version :
"so they thought C++ needs MORE ?".

~~~
qznc
Yes, D is not a small and simple language. The goal as stated at DConf was to
be "comprehensive". D shall include the right tool for any job in system
programming. That necessary includes that the programmer has lots of options.

You can use threads or fibers. You can meta-program with various degrees of
freedom (and danger) up to generating arbitrary code strings during
compilation. You can use high-level parallelism tools like parallel map and
thread pools. You can explicitly use SIMD operation for instruction level
parallelism. You can have a garbage collector or you can disable it.

On the other hand, D fixes a few problems of C++ (which mostly come from C
source code compatability) like ambiguous syntax for templates (Is ">>" a
shift-right token or two closing "parens"?).

~~~
WalterBright
C++'s template syntax is not a result of C source code compatibility.

~~~
qznc
So why did they not pick something better like foo!(a,b) instead of foo<a,b>?
Because parsing was not as well understood as it is today?

------
shoo
interesting network representation! after being confused for a little, it just
looks like a pair of compressed-row sparse matrices - one matrix for the
forward edges, and the other for the reverse edges. which then seems like a
pretty sensible thing to do, if you care about directionality.

(e.g.
[http://web.eecs.utk.edu/~dongarra/etemplates/node373.html](http://web.eecs.utk.edu/~dongarra/etemplates/node373.html))
(edit: without the coefficients, of course, unless you want edge weights)

