raganwald
(This is a snapshot of my old weblog. New posts and selected republished essays can be found at raganwald.com.)

Friday, August 31, 2007
  Off Topic: Blaming the Victims


Frankly, the world wasn’t 100 percent ready for Windows Vista.
Microsoft Corporate Vice President Mike Sievert, quoted by C|Net


Why no, we weren’t ready. We were “ready” for a rock-solid, innovative operating system with 50% or more managed code, the transactional WinFS file system, and other compelling features. And we were ready for it sometime around when you told us to expect it, not two years later. What were we thinking?

The lukewarm, apathetic response to the Vista you actually shipped is clearly our fault. We were not ready. Thanks for reminding us.
 

Comments on “Off Topic: Blaming the Victims:
Hey, whatever.. I'm happy running linux with vmware of winxp for my development environment.

..and if I want a 3D desktop, I can run Compiz or Beryl; not vista.
 
As an aside, WinFS wasn't ever "transactional": it is/was essentially a metadata layer *on top* of NTFS, not a replacement for NTFS. The transactional FS features are implemented as an enhancement to NTFS ("TxF"), and were delivered as part of Vista.
 
Sounds like you're confusing Vista with the brochure Microsoft released 4 years ago. The world will never be ready for actual Vista. Microsoft better go back to the drawing board.
 
Sounds like you're confusing Vista with the brochure Microsoft released 4 years ago. The world will never be ready for actual Vista. Microsoft better go back to the drawing board.

I am definitely (and defiantly) confused. It is my fault that I am not ready for Vista.
 
I'm ready for Mac OS X Leopard which will come next month. Until then, I'm happily working with Tiger.
 
I am definitely not ready for that much managed code -- at least not the way MS implements .net's CLR.

I'll start with some performance results for a problem domain of significant meaning to me -- floating point computation (heavily used in graphics). Managed Fp intensive code runs between 2 to 3 times slower than good native code. (and by "good" I don't mean the smelly turds squeezed out of the back end of the MS compiler -- I mean what comes out of a recent version of the Intel compiler.)

Don't get me wrong -- I think C# is a good language -- I even think that, despite their tendency to have a ridiculous number of classes, MS has done a decent job with the .net class libraries -- no, the problem I have is with jitted code in general (I can already hear the cries of "HERETIC" echoing down the tubes of the internet).

A jit compiler has to be fast -- really fast. And in the short time it has, it can't do a very sophisticated job of generating code. And even if it is blindingly fast, for large apps, (think millions of lines of code -- apps that take many hours to compile conventionally) the startup overhead is fatal (It's already bad enough to wait half a minute for photoshop to start up -- imagine it as 10 minutes)
So for an app like this, you need to pre-compile anyways.

"But Wait!", I hear you say -- "what about the potential for dynamically recognizing hot spots and re-optimizing them -- wouldn't that give the potential of making the code even faster than statically compiled code?"

"You said 'potential' twice" I reply.

In fact, the MS CLR does not fulfill this potential and do this. It happens to be an area of active research (that's a polite way of saying that no one really understands how to make it work in the real world yet).

Firstly, on the small scale, a good OOO processor (like the Core 2) already plucks the low hanging fruit in this area -- and does it dynamically in hardware to boot. So to make a difference, you need to do it on a larger scale. And many algorithms for this sort of optimization have n-squared or worse performance characteristics -- so things get slow to compile very soon.

The problem is that every cycle you spend re-optimizing is a cycle that's not doing real work. If you optimize too early, it might not have been as hot as you thought. If you wait too long, and you're sure the spot is really hot, most of the work at that spot might already be finished -- and again, the reoptimization was just so much masturbation.

What about doing this on spare processor cores, you ask... That can reduce the impact, but not eliminate it, as that work on the other core will pollute the shared cache, steal memory cycles etc. And if the spot is that hot, there may not be any spare cores -- you might have hired someone like me to parallelize that code.

(Lets not even talk about eating power and shortening battery life on laptops -- Vista does enough of that already)

Another problem I have with the MS CLR is the inability to temporarily suspend garbage collection -- that makes it useless for hard real-time.

No, .net CLR is great for UI code where heavy computational performance does not matter -- and there's lots of code that falls under this category -- but it's no good for system level stuff or performance critical things. So I'm just as happy that Vista does not have 50% managed code.

But I'm even happier to be working on OSX :-)

-- Ian Ameline.
 




<< Home
Reg Braithwaite


Recent Writing
Homoiconic Technical Writing / raganwald.posterous.com

Books
What I‘ve Learned From Failure / Kestrels, Quirky Birds, and Hopeless Egocentricity

Share
rewrite_rails / andand / unfold.rb / string_to_proc.rb / dsl_and_let.rb / comprehension.rb / lazy_lists.rb

Beauty
IS-STRICTLY-EQUIVALENT-TO-A / Spaghetti-Western Coding / Golf is a good program spoiled / Programming conventions as signals / Not all functions should be object methods

The Not So Big Software Design / Writing programs for people to read / Why Why Functional Programming Matters Matters / But Y would I want to do a thing like this?

Work
The single most important thing you must do to improve your programming career / The Naïve Approach to Hiring People / No Disrespect / Take control of your interview / Three tips for getting a job through a recruiter / My favourite interview question

Management
Exception Handling in Software Development / What if powerful languages and idioms only work for small teams? / Bricks / Which theory fits the evidence? / Still failing, still learning / What I’ve learned from failure

Notation
The unary ampersand in Ruby / (1..100).inject(&:+) / The challenge of teaching yourself a programming language / The significance of the meta-circular interpreter / Block-Structured Javascript / Haskell, Ruby and Infinity / Closures and Higher-Order Functions

Opinion
Why Apple is more expensive than Amazon / Why we are the biggest obstacles to our own growth / Is software the documentation of business process mistakes? / We have lost control of the apparatus / What I’ve Learned From Sales I, II, III

Whimsey
The Narcissism of Small Code Differences / Billy Martin’s Technique for Managing his Manager / Three stories about The Tao / Programming Language Stories / Why You Need a Degree to Work For BigCo

History
06/04 / 07/04 / 08/04 / 09/04 / 10/04 / 11/04 / 12/04 / 01/05 / 02/05 / 03/05 / 04/05 / 06/05 / 07/05 / 08/05 / 09/05 / 10/05 / 11/05 / 01/06 / 02/06 / 03/06 / 04/06 / 05/06 / 06/06 / 07/06 / 08/06 / 09/06 / 10/06 / 11/06 / 12/06 / 01/07 / 02/07 / 03/07 / 04/07 / 05/07 / 06/07 / 07/07 / 08/07 / 09/07 / 10/07 / 11/07 / 12/07 / 01/08 / 02/08 / 03/08 / 04/08 / 05/08 / 06/08 / 07/08 /