Tuesday, 24 March 2009

Misunderstood. Who me?

My last post generated exactly the type of comments I expected it to. In fact I could have written them myself as I knew what was coming. Here’s a sample, and my reaction to them.

The US are only 5% of the world population. That means that 95% of all Delphi users need Unicode.

I never said I didn’t want unicode. In fact our application is already Unicode compatible, but I still wanted reference counted unicode strings. I just didn’t want my existing code to break. I would have preferred the choice of when I decide to move to UnicodeStrings to be in my hands, and not forced upon me. (well not forced, I could always stick with D2007, but you know what I mean)


I adapted my app within 2 or 3 hours.

Great, you now have a unicode version of the Hello World application. In the real world, applications are a little more complicated, and take a little longer. If you managed to upgrade your application in 2 or 3 hours, your application is either very small, or you’re a genius!


...why should I write new code with special TEditW lines - who needs pure ANSI code today?

Ok, why should the quality of my code suddenly take a nose dive, just because of a compiler upgrade? And again, I’m not arguing against Unicode and in favour of Ansi. I’m just questioning how the move was made.


You don't think this (Delphi 2007 compatibility switches) has been considered, do you?

I’m pretty sure it was, or at least I hope it was. Was the right decision made? I don’t know, but I’m pretty certain from a technical point of view, the right decision would have been the least number of breaking changes as possible. On the other hand, this would definitely have pushed the release date back quite a bit, so you also have commercial considerations. I’m a technical person, not a salesman, so I ignore the commercial considerations. I’m sure Codegear can’t afford to.


Apart from all the above comments, I got quite a few agreeing with my point of view. These actually surprised me more than the ones above. I originally thought perhaps I was being a little harsh, but it seems I’m not the only one slightly annoyed.

 

Anyway, the actual conversion is going pretty well. Biggest problems have been third party components. I now have an application that compiles, but ironically, while it handled Unicode with no problems in Delphi 2007, the Delphi 2009 version is struggling. We need to do a lot more work to get to the same quality point we were before. We will have touched probably 70-80% of the units. That’s a major test burden in of itself.

And the thing is, in the eyes of our users, our application hasn’t gained a thing.

8 comments:

Dels said...

I could argue with you with that Unicode in 3rd party stuff, i still use several classic (not updated anymore) component that works without Unicode (sadly). There's no reason for me to upgrade into Unicode (D2009) right now (use Delphi 7 currently), since i only make local language application (which fortunately Indonesian is US/English or UK/English compatible).

Maybe i'll upgrade when Commodore released into the wild :D

Anonymous said...

As I understand it, Windows API parameters are Unicode since XP (or was it NT?).

To make a compiler switch solution, the CodeGear guys would have had to have made two sets of VCL and runtime libraries: one that communicates over the ASCII interface (which Windows does offer for legacy support) and one that is Unicode direct.

I hope it's understandable that Delphi is expensive enough without having to pay for CodeGear to maintain two sets of code.

Robin said...

First, Babnik - your article was spot on: thanks. It is true that there were hard decisions to take by Codegear, in this and other matters. In my opinion this issue is representative of the Codegear mindset, which seems increasingly out of touch - at least with the needs of the small business developer. The effort I've put in to this migration has almost broken my business.

Dels, I'm starting to look around now for the programming environment that I will be using in 1-2 years time. That gives me time to get some practice and experience (probably including migrating some existing projects) in before I start new projects for real money. It almost certainly won't be Delphi. Changing horses will cost me time and worry (and money) but I'd rather put the effort into something that I can be confident is a long-term investment.

Anonymous said...

@Robin: You would have been no better off than with, say, Visual Basic (please forgive me...).

When you asked Microsoft how to port from VB to VB.Net, you got the answer: Rewrite your application.

Robin said...

I don't even have VB on the long list, never mind the short list ...

C# and Java are on the list, the former with a heavy heart.

fabricioaraujo_rj said...

@Robin
It almost certainly won't be Delphi.

What would be, VB or C#? Hahahaha Delphi is the most backwards compatible IDE on the market.

Microsoft had no mercy with their loyal "VB classic" user base when they created .NET and VB.NET - they have done ALL migrations on one: Unicode, Object orientation, garbage collection, .NET libraries, ASP.NET.
All this on the transition from "VB Classic" to VB.NET. All code needed to thrown at the garbage can and started from scratch over again.

CodeGear done D2009 that way because it was the only path to get a Unicode-enabled VCL - and Unicode was the most wanted unique feature on great part of Internet when they started. It was #1 on the annual survey. It was between the top priority items on most other wish lists around the world.

Andreas Hausladen already showed how a Unicode compiler switch would be MUCH more dangerous - as he implemented the switch himself. All results leaded to havoc or very subtle and hard to diagnose errors.

Anonymous said...

@Robin

Don't dismiss VB so quickly; it has a long and venerable history going all the way back to GW-Basic.

There was a set of interviews Bill Gates had with kids. When they asked which language they should learn, he said "Visual Basic".

Do not assume Microsoft will treat C# users, or indeed .NET targeted code in general, with any greater respect.

The change to Unicode was sorely needed and carefully considered, read Alan Bauer's blogs. And you can be sure a Windows version will come one day with no Ansi support at all, kinda like Win7 dropping 16-bit support (a problem for my old company that does batch-driven stuff).

Anonymous said...

oops...that should have been Allen Bauer (spelling)