Productivity vs. Performance


Software developers usually struggle between productivity and performance, in another word: the algorithm representation and implementation. The most efficient high-level language to express ideas is pseudo code, you never need to worry about the outbound access or resource leak, you say “sort it”, the job is done regardless the implementation, just like God. In the business world, this alternative is usually Microsoft PowerPoint.

On the other end, low level languages, they are so close to the hardware, that the developers can take full advantage of the architecture, but usually it prevents the developers to express ideas more succinctly. For example, all Assembles and C. In between, we have all other “high-level” languages, they are most likely the trade-off between the two extremes, like Java, C++, Python etc.

This challenge is also posed in the parallel computing: there are different levels of parallelism: grid, node, SMP, symmetric multi-core, heterogeneous multi-core, co-processor, ILP. It is tremendous burden for the developers to handle the complexity, no wonder that two HPCS language, Fortress and X10 choose Java as the foundation.

But hold on, do we really need a new language? Human being are not hard-wired, we intend to think things sequentially. Unless the new languages are designed with built-in parallelism as HDL, the developers may still program in sequential manner, with vector unit for SIMD parallelism and thread support for SPMD. Library may achieve the same goal. X10’s GALS(globally asynchronous, locally synchronous) is possible implemented by the asynchronous framework, for example asio in boost. IMHO, it is not wise to offload so much burden to the language itself, the computing environment are changing and people are lazy and reluctant to learn yet another new language.