Wolf Rentzsch’s talk about the need for better software engineering tools is fascinating to me due to the two different worlds I have lived in.
I grew my programming arts in the world of web programming. While you are limited in the techniques you can use in the user’s browser, you can do whatever you want on a server. If you want to build the backend in Haskell or PHP, that’s your choice, it is wonderfully free.
But now I’ve moved into a world where Apple’s Section 3.3.1 is just the norm. In scientific HPC, you quickly run into a problem. Almost any major supercomputing cluster you want to use only supports three languages, Fortran, C, and C++. Sure, you can create your own servers in Amazon’s EC2 or something if you’re at a company, but in academia where you are looking to use the resources provided for free by your institution or in your grants, you are majorly restricted. We once thought about moving our library from C to Objective C, but it just was not an option because there are no Objective C compilers for the systems I work on.
Today, rentzsch posted a clarification for what he means by software development innovation. Among those, I see:
- It’s about less code.
- It’s about faster development time.
- It’s about distributed computing.
- It’s about pervasive multicore.
Apple’s clang has provided me the first two of these. You can have side effects in C that are unclear. Deleting C code I believe is useless, but I didn’t write makes me nervous. The static analyzer within clang is excellent. Clang allows me to delete useless code with confidence. A surprising amount of time, I have to look at programs written by other labs with no contact to the author. People often leave in lines of code that are related to old versions of algorithms and ill fated branches. This may not seem to matter, but frequently older compilers can’t figure out that these things can be optimized out and run useless operations millions of times in inner loops. It also makes my development faster because I don’t have to dive into as much stuff to figure out what the algorithm is doing. In the end, I never compile the code on supercomputers using clang, but it is of extreme importance in development.
The last two components of disctributed computing and pervasive multicore are very much the world I live in. In April of 2010, I used 34,702 hours of supercomputer time. This in a month where there were only 720 hours, so on average, I was using 48 cpus constantly. This is on a mix of Blue Gene supercomputers (purely distributed) and dual quad core intel machines (shared memory). That means lots of MPI and OpenMP. Sure, Apple’s operating system comes with these, but Apple’s recent addition of blocks is an awesome proposal at a language level where it could be adopted by the compilers on future systems. While it may be years before I see the impact, blocks make it possible for simplifying a lot of future scientific code. That said, this is a world where C99 is only now starting to come into wide acceptance, so it may be a while.
In summary:
- I totally agree with rentzsch that what Apple is doing with Section 3.3.1 probably hurts innovation around software development tools for the iPhone OS
- I disagree that Apple has not been innovating in these areas, particularly in recent times
