On Thursday, 5 September 2013 at 13:50:59 UTC, Timon Gehr wrote:
Why? I cannot spot any syntax I wouldn't get used to quickly in this example. (AFAIK the @ are going away in favour of a library solution with more verbose syntax though.)

In D something similar would look like this:

struct BodyWorld(N, LV, AV, M, II, CM){
World!(N, Body!(N, LV, AV, M, II), Constraint!(N, LV, AV, M, II)) world;
    BodyForceGenerator!(N, LV, AV, M, II)* forces;
    BodySmpEulerIntegrator!(N, LV, AV, M, II)* integrator;
BodiesBodies!(N, LV, AV, M, II, BF!(N, LV, AV, M, II))* detector;
    IslandActivationManager!(N, LV, AV, M, II)* sleep;
SweptBallMotionClamping!(N, LV, AV, M, II, BF!(N, LV, AV, M, II))* ccd;
    JointManager!(N, LV, AV, M, II)* joints;
    AccumulatedImpulseSolver!(N, LV, AV, M, II, CM)* solver;
}

Afaics there is not much of a difference. Arguably, having the identifiers conveniently aligned to the left is actually a slight advantage of rust's syntax.

Of course, the code contains a certain amount of duplication I wouldn't really want to write down, and this could be improved in D:

struct BodyWorld(N, LV, AV, M, II, CM){
    private alias Args = Seq!(N, LV, AV, M, II);

    World!(N, Body!Args, Constraint!Args)    world;
    BodyForceGenerator!Args*                 forces;
    BodySmpEulerIntegrator!Args*             integrator;
    BodiesBodies!(Args, BF!Args)*            detector;
    IslandActivationManager!Args*            sleep;
    SweptBallMotionClamping!(Args, BF!Args)* ccd;
    JointManager!Args*                       joints;
    AccumulatedImpulseSolver!(Args, CM)*     solver;
}

Just looking at the code, it looks very dense. The multiple nested <> brackets (D was right to get rid of these) and the @mut really bog down the code (I am aware that @mut has been moved to a library solution now). Like I said, Rust coders no doubt get used to parsing and understanding the different symbols, but to an outsider it's a lot to take in. Note that this is only one example. I found several other instances such as this in the codebase that were difficult to make sense of at first. The thing that trips me up the most, I think, are the lifetimes.

Reply via email to