Back from PDC 2008

It was a good PDC.  I have to admit, even though Ray Ozzie is a very capable speaker, there was something missing in keynotes without BillG being there.  Plus he was usually good for one really funny, self-deprecating video.  Personally I found the Rick Rashid talk about Microsoft Research and the work they’re doing to have been the most interesting keynote surpassing Sinofsky’s Win7 intro slightly and far surpassing the Windows Azure unveiling.  Then again, I’m not in a sector that will immediately benefit from cloud services – perhaps not for a long while.  OTOH I can certainly appreciate how this could help lots of folks.  But Rashid’s stuff was just downright inspiring IMO.  *This* is the stuff I think Microsoft should be advertising on TV from their work on HIV research, to helping scientists and kids explore our galaxy with WorldWide Telescope (there’s a cool update made available this week) to Boku, a really immersive environment that teaches kids basic programming skills.  BTW, I didn’t know this but Rashid says he coined the term NUMA and also worked on the Mach microkernel in use by Mac OS X and iPhone.

Overall I liked what I see coming in the form of Windows 7, CLR/BCL 4.0, Oslo and some of these Live Services.  Even though I won’t be writing much cloud code I do want to see more of the apps I use stash data in the cloud so no matter which machine I use to access the app, it will know my preferences and the current state of any data used by the app.  I’m thinking a newsreader that knows what I’m subscribed to and what posts I have already read.  Not so sure about the features being added to C# 4 (dynamic programming support with new “dynamic” keyword and optional as well as named variables).  There is one area where I think having named variables will help. Remember this bit of string comparison code:

if (String.Compare(strA, strB, true) {
    ...
}

I think the following code using a named variable is clearer:

if (String.Compare(strA, strB, ignoreCase: true) {
    ...
}

Optional variables – hmm, I don’t know, I’m so used to using overloads but perhaps this won’t be so bad.  I just hope the implementation doesn’t embed the default value in the caller (I doubt that is the case).

Oslo looks interesting but I need more time to digest the usefulness of Oslo for what I do.  I do like MGrammar though.  I’ve been thinking that .NET needs some parser tools like lex/flex/yacc/bison/Antlr for a while.  Perhaps this will fit the bill.

.NET 4 GC will get two improvements. On server you can be notified before a gen2/LOH GC is to take place.  On client, gen0/1 can be collected while longer gen2 collections are happening – resulting in fewer GC induced program pauses.  .NET will also not allow you to catch certain, bad exceptions like AV, illegal instruction, etc.  If you want to catch them in a top level catch handler you can’t decorate the Main method with the HandleProcessCorruptedStateException attribute.  There is also a switch to revert to the old behavior of allowing you to catch those exceptions.  They also added tail recursion support to the CLR.  Oh yeah, last but not least, .NET 4 CLR will run side-by-side within the same process as the .NET 2 CLR.  This will enable various plugin scenarios (pluginA built against .NET 2 and pluginB built against .NET 4) to work within the same process space without having to take your chances with redirects or publisher policy.  This is one of the reasons the effort to convert the Longhorn shell to managed code was abandoned.

BCL will get a Tuple class as well as BigInteger (they’ve worked a lot on getting the performance good on this) as well as a Complex type. The SpecSharp CodeContract support is going into the .NET 4 BCL giving us methods like:

  • CodeContract.Requires
  • CodeContract.Ensures
  • CodeContract.ForAll
  • CodeContract.Exists
  • CodeContract.OldValue
  • CodeContract.EnsureOnThrow

These are kind of like the Debug.Assert stuff – there in Debug but not there in Release config – however there is a static verifier that can use this information that can statically find bugs before you run your code.  If you have played with the Parallel Extensions, most of that code is going into the BCL for .NET 4.  I like it!  One last tidbit, there’s a small team working on a “No PIA” mission.  That is, remove the need for PIAs.  Their approach is to embed *just* the metadata for the COM surface you actually use in your app.  However the other problem is type identity based on fully qualified assembly/type names.  This is being relaxed with a new TypeIdentity attribute where you tell the type loader that you want type identity to be based just on a string that you provide (typically a guid but perhaps a combo on typename and guid).  Note that a type member’s name and signature are still verified – so we still have type safety.

Visual Studio 2010 will get the ability to debug managed minidumps – cool.  Apparently you can do this today with WinDbg but I thought you couldn’t without full heap info.  I guess I was wrong.  They’re also rewriting the text editors in VS 2010 to use WPF.

Lots of updates to VC++ 10: can now xcopy runtime DLLs (side-by-side stuff doesn’t prevent this in this version), support for lambda expressions, for_each and parallel_for_each, intrinsic regex support and the project files are MSBuild.  But best of all, a lot of work is being done to improve C++ Intellisense!!

Windows 7 new taskbar looks interesting.  Wonder if this will get the same reaction as the Ribbon UI – some love it and some hate it with not too many in between.  Windows 7 also has RDP multi-monitor support, scales up to 256 processors and has “Homegroup” networking support (easier setup/sharing of home network resources).

As far as PowerShell goes, there’s a new CTP of PowerShell and WSMAN coming in December.  Jeffrey announced the inclusion of PowerShell into both Windows 7 client and Windows Server 2008 R2.  It was also announced that PowerShell will be an optional component within server core as well as .NET 2/3/3.5 subsets (not full frameworks – don’t need WinForms/WPF in a GUI-less environment).

This entry was posted in PDC. Bookmark the permalink.

Leave a comment