Here's my list of the awesome things I love about 2008r1, in no particular order:
- Introspection is rather neat. It's not the coolest thing ever, but it certainly has some nice functionality to it. For instance, I can now create COM interface producers with a little more ease by introspecting an object in order to do the vtable hookups. There are some other awesome things you can do with introspection as well, such as serializing an object in an automated fashion. However, until you're able to create an object by name, unserializing is still kind of painful.
- The ability to put anything into a variant, including arrays. Variants used to be handy, but now they down-right rock! This means you can store an array into a dictionary, for instance. So I can finally polish up a really nice preferences class interface!
- This is a little feature, but one I still really enjoy. I have a mouse with extra buttons on it for performing common actions like back and forward. I use these buttons constantly while browsing the web, as well as within Windows Explorer. The IDE used to ignore these buttons, but no longer! I can also use some of the extended keyboard buttons for functionality like search, cut/copy/paste, etc. Very minor, but still a really nice thing.
- A whole bunch of work was done to make Win32 functionality more Unicode-savvy, which is always great. Since RB only supports Win2k and higher, it's about time to see the last vestiges of ANSI support go away and be replaced with Unicode.
- Deprecations and removals! I know that may seem odd to be part of my "awesome stuff" list, but I strongly approve of deprecating functionality which would otherwise be ignored. This opens up the market to 3rd party developers who want to take over and provide that functionality, if it's necessary. It also removes cruft from the RB framework, which is always great.
- There's a new compiler feature that allows you to specify that a method implements a particular interface method explicitly. This is useful if you don't care for a particular interface's nomenclature. For instance, let's say an interface exposes a method called WriteError, but you really don't like that as it doesn't fit with your class' API. You can have the class implement a method called SpiffyError which Implements SomeInterface.WriteError instead. This may not seem too useful now, but it has connotations for the future that are very exciting.
What things do you really like about 2008r1? Any particular feature you absolutely adore? Any bug fix you were excited to see taken care of?
I'm also a fan of deprecations. There's always lots of complaining when something is deprecated, but in the end it's a healthy thing.
I like the "Implements" keyword. I just wrote some code that could have used that keyword in a very nice way. Hmm, perhaps I'll go back and modify it.
Hmm... Dictionaries of Arrays.
*smacks head*
How did I not connect the fact that Variants can now be Arrays with the dictionary? This will help clean up two projects I can think of right off the bat.
I am also actually a fan of deprecating functionality that isn't core to the product. I think it helps clear the way for basic framework functionality and other compiler optimizations. Declares etc have also come a long way, so it is much easier to extend RB now from a user perspective than it once was. Now once RB can build libs/dlls I have some Grand Schemes to implement. Hey we can dream right?
Thanks for the continuing progress, as always! :)
Variants - finally :)
Introspection (although I still haven't sorted out writing a generic serializer yet)
Deprecations - getting "cruft" out is good
"However, until you're able to create an object by name, unserializing is still kind of painful."
That's a shame. I just looked through the user guide and language reference hoping to find out how to create an object by name, but found nothing. At least now I know this feature really doesn't exist, and I'm not just failing to spot it.
Unserializing, which is what I hoped to do, will indeed still be kind of painful.
Still, the introspection features 2008R1 does have are a big step forwards :)
Anybody care to give a super simple example of serializing/unserializing?
I'm sure the new version could be nice, if it actually would compile my major project.
@Beatrix -- can you be more specific? I know there are some new reserved words, and the compiler is more strict about certain errors. Is that what you're running into, or something totally different?
@Brandon -- I may be able to whip something up. Send me an email to remind me, and I'll shoot something back your way that gets you going.
The error I meant is http://www.realsoftware.com/feedback/viewreport.php?reportid=ubxyxtga, but the status now says "Fixed/Implemented". Hooray! Just give me a beta for testing...
This isn't really a bug, well, I guess it feels like a bug to me...
I would really, desperately like to see these two things in the RB code editor:
A full source view with all code for a form / class / module in one scrollable text edit.
A simple strip across the top of the code edit window with two combo boxes: object (lists all controls on the form, bold for ones with events defined), event (lists all events for the selected method, defined events are also bold). Picking a previously undefined combination of object / event creates the event handler function in the code view grouped together with the other event handlers for that object. Yes this sounds like the way VB 6 did it.
I know the internal structure of RB code doesn't work like this - there's all those crazy # tags. To be honest I'd rather just see *those* than have the view separated artificially. I'd love to embrace those additions are part of RB's actual language.
I ask for this because I can't stand tree views for navigating code and I've decided to switch stick with RB for all my primary work. I'm debating renewing my Pro subscription, but the debate would be over if you could just do these two things for me.
Well, and fix tab panels loosing their children.
@Isaac -- the full source view would take a whole mess-load of work. There's a *reason* it's not done like that (at least as an option). Our source viewer is a custom editor, and it's not meant to handle massive amounts of text. When you have gigantic methods, you start to run into some pretty painful slow downs because of it. We'd have to do a whole lot of optimizing to get to a plain source viewer. But I want one. ;-) It may become an option some day, but that's not a quick thing to throw in there.
As for tab panels losing their children -- we're working towards a fix.