I second @ckneale’s suggestion broadcasting. One simple
. lifts functions into a different realm, invoking an elaborate, customizable framework that can yield huge optimizations.
Also, it is simply the right answer to the question every numerically oriented language faced at some point so far, ie which operations should “vectorize”. The Julian answer is none of them, because
f. will “vectorize” every possible function and fuse loops.
Other than that, I think that compared to some languages, Julia has been quite parsimonious with syntactic sugar, and it (again) is the right decision (at this point, astute readers can tell that I happen to like the language). You need a bit of sugar for the important things, otherwise you just want composable zero-cost abstractions.