...for arbitrary values of stable. Actually it's been a little more than a year since I've first shared JSINQ with the world and so today I feel confident enough to present you with version 1.0. There's quite a lot of new stuff in this release including support for .NET 4.0's new query operator "zip". Zip lets you combine two Enumerables into one, sort of like a join but without the complexity. What's frankly more notable though is the inclusion of two new types, a list type that is a complete implementation of System.Collections.Generic.List and a dictionary type that is (you guessed it) an implementation of System.Collections.Generic.Dictionary. The reason why these were included is because a) JSINQ already had a private dictionary type that it used for certain set operations and b) both the list and the dictionary implementation are enumerables making the framework even more useful. It's also worth mentioning that JavaScript's expando objects which are commonly (ab-)used as dictionaries only support primitive types as keys. JSINQ's dictionary implementation on the other hand (like its .NET counterpart) supports both primitive types and complex types out of the box. If you're interested in how this works, go check out the source code.

Just like the previous release, JSINQ 1.0 comes with a comprehensive suite of tests which is in part to blame for why this release took so long to complete. Nonetheless, I'm still a strong supporter of this approach (writing unit tests in general, not TDD which I don't practice), not just because it helps to find bugs - something that is invaluable when programming in a weakly typed language with whacky semantics, but also because it takes a lot of the uncertainty out of when you have to change something.

So there you have it. Grab your copy of JSINQ today and let me know what you think. Oh, and should you come across any bugs, let me know. Gotta catch 'em all.