After an initial welcome (and purchase!) I find myself having to curb my initial enthusiasm. Most of the omissions from the Starter Edition, as compared to the Professional and higher editions, make perfect sense and are in fact pretty much what I myself described as appropriate for a “Community Edition” some time ago (tho I still think that the attitude toward database access is from a bygone age – DBExpress should be included). Other omissions were a little questionable, and others downright bizarre.
But I have now learned of a single, crucial omission (not advertised) that renders the entire “Starter” moniker meaningless: No RTL/VCL Source Code!
There are a number of problems with not including the RTL/VCL source code, allow me to enumerate:
1. (ARGUABLY) FALSE ADVERTISING
The fact that it is not included is NOT mentioned on the feature matrix. In previous incarnations of a Personal or Standard Edition, this difference WAS called out on the relevant feature matrix at the time.
2. NOT FIT FOR PURPOSE (Not as Advertised)
The feature matrix does claim that the VCL is “fully extensible”. I dispute this in the absence of source code. The VCL cannot be safely and reliably extended in many cases without first inspecting the source of the classes you intend to extend (and in many cases, deducing the correct way to extend is only possible by inspecting the source).
3. NOT FIT FOR PURPOSE (Not for “Starters”)
However, in the absence of adequate documentation (something others have lamented – I haven’t seen the documentation myself so can only go on the comments of others) the source code IS the documentation. Even with full and adequate documentation, source code is a crucial learning tool for a “Starter”.
4. NOT FIT FOR PURPOSE (Un-debuggable)
I recently fell foul of a bug in the TInterfacedObject destructor implementation (something I shall cover in a separate blog post soon). The bug was something that would not and should not be mentioned in documentation because a) it was an omission – you don’t generally remember to document what you forgot to implement! and b) it was what should have been part of a private implementation detail, something you shouldn’t need to think or know about to safely use (i.e. extend) the class.
The bug manifests as apparent errors in application code when a derived interfaced object class triggers an invalid behaviour in the base class.
A behaviour that can only be understood by inspecting the source of the base class. Without that source, the bug appears to be in the application code.
Snatching Defeat from the Jaws of Victory
Embarcadero have two ways open to them to resolve this situation as I see it:
- Update the feature matrix and make it clear exactly how Starter differs from the other editions so that customers are not misled.
- Rethink this decision and issue an update to Delphi XE Starter Edition to include the RTL/VCL source code
I fervently hope that they take option 2.
I firmly believe that to be the right way forward.
I said at the beginning that I had purchased Delphi XE Starter, and I did. Fortunately I had not got as far as actually installing it before learning how I had been misled by the advertising for the product. Sadly however, this means that I have had to cancel my order.