Home SubSonic MVC-Storefront

SubSonic: Update on 3.0 Plans

We haven’t even pushed 2.1 yet and people are on me about plans for 3.0, suggesting that SubSonic must be dying :) . I’m happy to say that RC1 of 2.1 is coming up very, very soon – 3.0, however, is still on the floor in pieces. “Not dead yet!” is the only thing I can offer at this point…

IQueryable Is a Monster
Ayende warned me of this as we rapped at the MVP Summit a few months back. I believed him, but was not expecting it to be THIS hard. It’s tempting to say “dude what’s so hard about it – it’s all Expression Trees” and you’d be right. The problem is what to do with them there trees.

For instance, if you pass in code that looks like this:

from p in Products
where p.ProductID==1
select p;

The “where” statement is boiled (ultimately) down into a BinaryExpression – an expression with a Left and Right that evaluates to true/false. This is simple to parse out, but the problem comes in when you start nesting things.

The Right and Left of a BinaryExpression can themselves be BinaryExpressions, ad infinitum. What comes of this is that you need to properly group these expressions to make the query meaningful (think nested ANDs and ORs).

We have a way to do this in SubSonic, but I have to improve it a bit – and that’s what I’ve been doing. A branching recursive routine is not exactly simple, and it makes my head hurt a lot.

The Good News
Most of the queries are running, and rather quickly. I’m stoked that the 90% is working nicely – but it’s the outliers that are going to clog the forums so I want to take extra time to get it right.

I’ve got the generation approach laid out nicely – and Eric had a brainstorm the other day that quite frankly blew my mind. I’m hoping all of this can come together in good order.

When?
Someday. I need to get IQueryable working reasonably (which is 95%), and from there I am going to “work it” and hopefully add a ton of extensions to help LINQ out in a SubSonic way.

I’ve already converted over all of the Sugar classes to be Extension methods (yes, with explicit namespacing), and I’ve reworked and trimmed out all the Providers.

All of the Code Gen bits are going to get launched into a separate assembly/program, and removed from the core, making it a lot lighter.

I’ve refactored, completely, the core schema bits and removed tons of code – mostly due to language enhancements.

Once I get all of the core bits inline, then I can start building on top. This includes adding to Migrations, and throwing some love at MVC – which is one of my main jobs anyway. Which brings me to another point…

My Day Job
I got called out the other day on the “Technology Roundtable” – a podcast with Jon Galloway, K Scott Allen, Scott Koon, and Kevin Dente. At about 3 minutes in, the question was raised by Scott Koon (LazyCoder):

When Rob Conery was hired by Microsoft… he kind of said ‘they’re hiring me to maintain SubSonic’. And then they come out with Dynamic Data which sounds like it does exactly the same thing as SubSonic does. So… what’s Rob doing?

It’s a fair question – one that Scott later amended as he felt he called me out some. I appreciate the followup post, and there is no denying that I’m working on a ton of things. In terms of what I’m doing, all I can say is “a lot”. SubSonic is indeed one of the things.

I got this comment on my blog the other day too from Elni:

Although MVC is the greatest thing since sliced bread, Microsoft Inc. is now your official master, it would be great to see some progress with v3, LINQ to SubSonic and the lot.

Sure nuff. I’ll be a little more “posty” about my experiences. From Robin and Alex Simkin:

Somewhat off topic here, but what is happening with Subsonic 3?

I see Subsonic 2.1 is now RC1, but there’s been no news on Subsonic 3 for, well, a long time. I don’t mean in terms of a release date just in terms of progress and what we can expect, especially as 2.1 appears to be nearing completion.

Hopefully the blurb above will answer more of this. And finally, from John:

Where the HELL is the SubSonic release?

Fair question. First and foremost, Eric has been patching and testing like a freak. We’re both pretty happy with where it’s at right now and within the next few days we’re going to pop out RC1. It might seem like a long time, but you have to consider that this is our 12th release (counting betas) and Eric and I are very, very keen on keeping  the bugs out.

I don’t want to issue buggy data access software – I want the solidity of SubSonic (due mostly to Eric’s work) to be one of the main things its known for.

So we’re taking our time with the betas, tweaking bugs here and there. If you want to help the process – help us patch!

You can go here:

http://www.codeplex.com/subsonic/WorkItem/List.aspx

And see what problems people are having. You can download the source from here:

http://code.google.com/p/subsonicproject/source/checkout

And fix the bugs you’re interested in helping with. You can then create a patch, using Scott Hanselman’s brilliant writeup.

If you don’t feel like coding – help another dev out by helping us document. This part’s easy – write a blog post! I’d be happy to load it into our current site.

Bottom Line: This is Open Source folks. It moves at the speed of people.

Patience
Regarding my job at Microsoft and Dynamic Data – they aren’t the same thing at all – although we did make a pretty cool scaffold tool :) . SubSonic’s a lot more than that.

A common thing you hear in Redmond is that “magic doesn’t belong in a platform” – and I completely understand and see why they feel that way. Magic isn’t always predictable, and sometimes it’s flat out weird and scary.

I tend to think you have to just be good at making magic – as that’s the core of what I’ve tried to do with SubSonic. Philosophical arguments aside – I have to play a waiting game right now as all the new bits with MVC and other things come out. It’s all good stuff, but it won’t come with Magic pre-assembled.

That’s where SubSonic comes in. So I ask you to be patient – 3.5 is brand new and MVC isn’t even to beta yet. Time will come and it will be good.

Technorati Tags:
Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • DotNetKicks
  • del.icio.us
  • Technorati
  • TwitThis
  • Reddit
  • Slashdot