{"id":716,"date":"2011-02-03T09:20:31","date_gmt":"2011-02-02T21:20:31","guid":{"rendered":"https:\/\/www.deltics.co.nz\/blog\/?p=716"},"modified":"2011-02-03T09:20:31","modified_gmt":"2011-02-02T21:20:31","slug":"delphi-nonstarter-edition-no-vcl-source","status":"publish","type":"post","link":"https:\/\/www.deltics.co.nz\/blog\/posts\/716\/","title":{"rendered":"Delphi [Non]Starter Edition: No VCL Source!"},"content":{"rendered":"<span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">[Estimated Reading Time: <\/span> <span class=\"rt-time\">2<\/span> <span class=\"rt-label rt-postfix\">minutes]<\/span><\/span><p>After an initial welcome (and purchase!) I find myself having to curb my initial enthusiasm. \u00a0Most 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 <a href=\"https:\/\/www.deltics.co.nz\/blog\/?p=533\">&#8220;Community Edition&#8221;<\/a> some time ago (tho I still think that the attitude toward database access is from a bygone age &#8211; DBExpress <span style=\"text-decoration: underline;\">should<\/span> be included). \u00a0Other omissions were a little questionable, and others downright bizarre.<\/p>\n<p>But I have now learned of a single, crucial omission (not advertised) that renders the entire &#8220;Starter&#8221; moniker meaningless: <a href=\"http:\/\/delphihaven.wordpress.com\/2011\/02\/01\/starting-starter\/\">No RTL\/VCL Source Code!<\/a><\/p>\n<p><!--more--><\/p>\n<p>There are a number of problems with not including the RTL\/VCL source code, allow me to enumerate:<\/p>\n<p><strong><span style=\"color: #ff0000;\">1. (ARGUABLY) FALSE ADVERTISING<\/span><\/strong><\/p>\n<p>The fact that it is not included is <a href=\"http:\/\/www.embarcadero.com\/products\/delphi\/Delphi-Feature-Matrix.pdf\">NOT mentioned on the feature matrix<\/a>. \u00a0In previous incarnations of a Personal or Standard Edition, this difference WAS <a href=\"http:\/\/web.archive.org\/web\/20040720170742\/http:\/\/borland.co.uk\/delphi\/pdf\/del7_feamatrix.pdf\">called out on the relevant feature matrix at the time.<\/a><\/p>\n<p><strong><span style=\"color: #ff0000;\">2. NOT FIT FOR PURPOSE (Not as Advertised)<\/span><\/strong><\/p>\n<p>The feature matrix does claim that the VCL is &#8220;fully extensible&#8221;. \u00a0I dispute this in the absence of source code. \u00a0The 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).<\/p>\n<p><strong><span style=\"color: #ff0000;\">3. NOT FIT FOR PURPOSE (Not for &#8220;Starters&#8221;)<\/span><\/strong><\/p>\n<div>This is a &#8220;Starter Edition&#8221;, correct? \u00a0It says so, right there on the tin!<\/div>\n<p>However, in the absence of adequate documentation (something <a href=\"http:\/\/delphihaven.wordpress.com\/2011\/02\/01\/starting-starter\/\">others have lamented<\/a> &#8211; I haven&#8217;t seen the documentation myself so can only go on the comments of others) the source code IS the documentation. \u00a0Even with full and adequate documentation, source code is a crucial learning tool for a &#8220;Starter&#8221;.<\/p>\n<p><strong><span style=\"color: #ff0000;\">4. NOT FIT FOR PURPOSE (Un-debuggable)<\/span><\/strong><\/p>\n<div>Also even with full and adequate separate documentation, some things could only be discerned from the source as they would still not be present in that documentation.<\/div>\n<p>I recently fell foul of a bug in the<strong> TInterfacedObject<\/strong> destructor implementation (something I shall cover in a separate blog post soon). \u00a0The bug was something that would not and should not be mentioned in documentation because a) it was an omission &#8211; you don&#8217;t generally remember to document what you <em>forgot to implement<\/em>! and b) it was what should have been part of a private implementation detail, something you shouldn&#8217;t need to think or know about to safely use (i.e. extend) the class.<\/p>\n<p>The bug manifests as apparent errors in application code when a derived interfaced object class triggers an invalid behaviour in the base class.<\/p>\n<p>A behaviour that can only be understood by inspecting the source of the base class. \u00a0Without that source, the bug appears to be in the application code.<\/p>\n<h2>Snatching Defeat from the Jaws of Victory<\/h2>\n<p>Embarcadero have two ways open to them to resolve this situation as I see it:<\/p>\n<ol>\n<li>Update the feature matrix and make it clear exactly how Starter differs from the other editions so that customers are not misled.<\/li>\n<li>Rethink this decision and issue an update to Delphi XE Starter Edition to include the RTL\/VCL source code<\/li>\n<\/ol>\n<p>I fervently hope that they take option 2.<\/p>\n<p>I firmly believe that to be the right way forward.<\/p>\n<p>I said at the beginning that I had purchased Delphi XE Starter, and I did. \u00a0Fortunately I had not got as far as actually installing it before learning how I had been misled by the advertising for the product. \u00a0Sadly however, this means that I have had to cancel my order.<\/p>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">[Estimated Reading Time: <\/span> <span class=\"rt-time\">2<\/span> <span class=\"rt-label rt-postfix\">minutes]<\/span><\/span> After an initial welcome (and purchase!) I find myself having to curb my initial enthusiasm. \u00a0Most 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 &#8220;Community Edition&#8221; some time ago (tho I [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":[]},"categories":[4],"tags":[90,292,131,132],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1TKYv-by","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":426,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/426\/","url_meta":{"origin":716,"position":0},"title":"The &#8220;Big Switch&#8221;","date":"28 Apr 2009","format":false,"excerpt":"Much has been made in the past and again more recently, about the lack of a compiler switch in Delph 2009 to govern the behaviour of the String type. CodeGear have repeatedly said that it was not possible\/practical to provide such a switch, but their advice to anyone concerned about\u2026","rel":"","context":"In &quot;Delphi&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1508,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/1508\/","url_meta":{"origin":716,"position":1},"title":"An Exclusive Club and Reassuringly Expensive","date":"22 Aug 2013","format":false,"excerpt":"In the comments to a previous post there cropped up the complaint that people asking for a realistic Starter Edition are just looking for a cheaper edition of Delphi for themselves. Maybe some of us are, but even so we are - or at least I am - not primarily\u2026","rel":"","context":"In &quot;Delphi&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":924,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/924\/","url_meta":{"origin":716,"position":2},"title":"CFStringRef and TCFString(s)","date":"05 Jul 2012","format":false,"excerpt":"In the comments on yesterdays initial post in a series following the experiences of porting an Objective-C sample to XE2, a number of people have asked why I didn't use the TCFString record type in System.Mac.CFUtils to get the CFStringRef references that I required. The reason is embarrassingly simple. I\u2026","rel":"","context":"In &quot;Delphi&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1492,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/1492\/","url_meta":{"origin":716,"position":3},"title":"Are Embarcadero Really Interested in New Users ?","date":"21 Aug 2013","format":false,"excerpt":"In replying to a comment on his blog post about the pricing of the mobile add-on pack (XE4 - no news on XE5 as yet that I am aware of), Larry Hengen appears to be one of those people still under the belief that there are any \"new buyer\" type\u2026","rel":"","context":"In &quot;Delphi&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":180,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/180\/","url_meta":{"origin":716,"position":4},"title":"Latest Tibur\u00f3n Preview","date":"14 Aug 2008","format":false,"excerpt":"I was a little disappointed that the preview webinar this morning was little more than a re-run of the same content from a little over a week ago, albeit with some downloadable PowerPoint slides this time. It was at least an opportunity for some more Q&A and a couple of\u2026","rel":"","context":"In &quot;Delphi&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":735,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/735\/","url_meta":{"origin":716,"position":5},"title":"RAD STUDIO XE2: Launch Event Report","date":"04 Aug 2011","format":false,"excerpt":"Today I was fortunate to be present in Auckland at the World Premier of the launch event for RAD Studio XE2. \u00a0There is so much good to report that I really don't know where to begin, so apologies if this post is a bit of a disorganised ramble. \u00a0But here\u2026","rel":"","context":"In &quot;Delphi&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts\/716"}],"collection":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/comments?post=716"}],"version-history":[{"count":2,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts\/716\/revisions"}],"predecessor-version":[{"id":718,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts\/716\/revisions\/718"}],"wp:attachment":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/media?parent=716"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/categories?post=716"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/tags?post=716"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}