Given the apparent interest in the topic and the decisions that people seem to be making, it seems worth pointing out that folks are still using apples-to- oranges comparisons on this benchmark.
There are at least two important differences: - in the other languages, `linspace` allocates a vector, but in Julia it (currently) creates a compact object from which values are computed on-the-fly. That computation involves a division, and division is slow. - The languages like C aren't doing bounds-checking. You might imagine adding `@inbounds` to the Julia version. But `@inbounds` has no impact on LinSpace objects in julia 0.4. In julia 0.5, it does work like you'd expect (thanks, Blake Johnson). Combining these observations, we can `collect` the values into a `Vector` and then use `@inbounds`. For me the version below is nearly twice as fast as the original: function benchmark() nsamples = 1000000 x = collect(linspace(0, 5, nsamples)) y = zeros(nsamples) # attempt to trigger JIT to compile all functions needed in the loops # before profiling a = cos(0.0); a = 1.5*2.5; a = 1.5+2.5; println("\nBrutal-force loops, 100 times:") @time begin for m = 1:100 @inbounds for n = 1:nsamples y[n] = cos(2*x[n]+5); end end end end benchmark(); Best, --Tim On Monday, July 25, 2016 2:02:41 PM CDT Zhong Pan wrote: > Agree that while raw speed is important, in most situations it wouldn't be > the most important reason to choose one programming language over another. > > I came from the angle of an engineer in a small company. For myself, the > main attraction of Julia was the easiness to achieve decent speed without > making much explicit effort: that means what feels more natural vectorized > will be vectorized, while what feels more natural in a loop will be in a > loop; that means I don't need to resort to another language or a library > only for improving speed; and that means apart from sticking to a couple > good habits, I can use objects, functions etc. the same way inside a loop > vs. outside. None of these is critical by itself, but they add up to an > uninterrupted flow of thoughts while writing code to explore, try, fail, > and retry, for many iterations. > > During this "less careful" prototyping, 1-2x slow down is fine, but with > Julia I know I won't sit there for tens of minutes waiting for a result > while debating myself whether I should rewrite it in C++ or rehaul the code > with Cython etc.; instead I can rest assured that as long as my algo and > coding have no mistakes or major flaws, the speed is close to what I will > get even if I make several times more effort to rewrite it in C++. > > Another big deal for me is the resulted removal of the barrier between > prototype and production code. For production I can review and improve my > code carefully, but rewriting it in a less expressive language is too much. > > I was a huge fan of Python (heck I even persuaded my previous boss, a VP, > to pick up Python - though I don't know if he really had time to finish it. > > :-)). However, the slow raw speed and the over-freedom to change class > > definition anywhere always gave me the itch to find something better. My > brother at JPL who worked on Python projects also complained about having > to think really hard to vectorize almost everything and then couldn't > easily understand what he was doing a few months later because the code was > too unnatural for the problem; the indentation was also a big headache as > collaborators use different editors with different tab definitions. > > So I'm really happy to have found Julia, which gave me the same joy as > coding in Python and removed the main itches. > > -Zhong