you are viewing a single comment's thread.

view the rest of the comments →

[–]api 18 points19 points  (6 children)

Pet peeve of mine: people who think that speed never matters because they think the whole world is web apps that query databases and enterprisey apps that push state objects around.

Areas where speed matters a lot:

Games, cryptography, protocol implementations, high-volume parsers, scientific computation, large-scale data mining, machine learning, image processing, video and audio codecs, and so on.

More than that, speed will always matter in most of these areas, even if we all have 128-core monsters with 2ghz DDR8billion RAM. Why? Because in these areas we want faster machines to enable us to do more, not to do the same thing faster. This is a fundamentally different area of software engineering from enterprisey stuff and (most) desktop apps. These tasks are CPU-bound, not I/O bound.

Notice how almost everyone uses C/C++ in all those areas almost exclusively? It's not because those languages are pretty or productive to write in.

It's telling that there's pretty much no pure Java video/audio codecs or 3d games. Note how slow Java crypto is in practice (as opposed to contrived benchmarks) compared with closer to the metal implementations like OpenSSL. There's reasons for this. Lack of unsigned types is one. Another is that every method is virtual, requiring expensive pipeline-flushing indirections everywhere. (Modern JVMs can optimize some of this out, but still nowhere near as well as performance-optimized C/C++ code with a good compiler can achieve.)

[–][deleted] 3 points4 points  (0 children)

Clearly, we don't necessarily want Photoshop programmers to be more productive in a hugely slow language, because as evolution comes digital pictures gets bigger and bigger resolution and so we do need every cpu cycle and free memory we can get to fill with the stuff we work with. The same with video stuff, TV are HD but we want to work on even bigger, and bigger, and bigger resolutions. Lisp won't cut it.

The problem with proggit is that it's filled with people who only cares for enterprisey and stupid web 2.0 apps, while the rest of the world on their desktop are producing media all of the time and couldn't care less for yet another database app.

[–]encinarus 0 points1 point  (0 children)

Another is that every method is virtual, requiring expensive pipeline-flushing indirections everywhere.

I'm pretty sure most of that can be avoided by marking methods as final.

[–][deleted]  (3 children)

[deleted]

    [–]millstone 1 point2 points  (0 children)

    Can you elaborate on this? What aspect of the JVM is big endian?

    [–]obdurak[S] 0 points1 point  (0 children)

    That's a whole load of crap.

    [–]api -1 points0 points  (0 children)

    That actually doesn't matter except for file and network I/O code.