{"id":872,"date":"2012-05-29T10:22:35","date_gmt":"2012-05-28T22:22:35","guid":{"rendered":"https:\/\/www.deltics.co.nz\/blog\/?p=872"},"modified":"2012-05-29T10:22:35","modified_gmt":"2012-05-28T22:22:35","slug":"the-emperors-new-native-pt-2","status":"publish","type":"post","link":"https:\/\/www.deltics.co.nz\/blog\/posts\/872\/","title":{"rendered":"The Emperors New Native &#8211; pt. 2"},"content":{"rendered":"<span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">[Estimated Reading Time: <\/span> <span class=\"rt-time\">3<\/span> <span class=\"rt-label rt-postfix\">minutes]<\/span><\/span><p>Marc Hoffman kindly took the time to respond to my previous post and prompted me to re-formulate and expand my observations on <a href=\"http:\/\/blogs.remobjects.com\/blogs\/jim\/2012\/05\/15\/p4268#comment-10186\">Jim McKeeths post<\/a> (which never made it to the comments thread on the RO blog for reasons best known to The Cloud).<br \/>\n<!--more--><br \/>\nThe biggest issue I had with Jim&#8217;s post in particular was that he conflated JIT technology with managed runtimes.<\/p>\n<p>Whilst it may be true that JIT is something that is currently only found together with managed runtimes, there is no technical reason why JIT should and could not be incorporated into un-managed frameworks if there were genuine benefits to be gained.  It would however complicate the distribution of applications produced by with unmanaged code.<\/p>\n<p>Managed frameworks simplify the distribution of code that incorporates JIT in the bootstrap because the requirement to have the managed runtime environment pre-installed (or distributed with the app) comes as a necessary and unavoidable overhead (some might say &#8220;complication&#8221; &#8211; a significant, recurring support issue for a .NET application that I am familiar with comes from variations in the .NET framework environment on which it relies at the various sites on which it is used).<\/p>\n<p>With an unmanaged application it would be an additional runtime\/distribution complication, regarded by and large as a negative quality.<\/p>\n<p>I&#8217;ve said it before, and I&#8217;ll say it again now:  .NET is basically the 21st Century VBRUNx00.DLL (on steroids and huge amounts of growth hormone).  \ud83d\ude09<\/p>\n<p>But if a managed runtime is not a pre-requisite for JIT, an obvious question is why is it that only managed runtimes incorporate it (apart from the runtime\/distribution wrinkle mentioned above) ?<\/p>\n<p>It&#8217;s almost as if managed runtimes are trying to compensate for something&#8230;  \ud83d\ude09  <\/p>\n<p>Also, the benefits of JIT are largely &#8211; afaik &#8211; theoretical.  Yes, Microsoft (to take .NET as an example) could invest the time and effort to create the JIT compilers necessary to target every new evolution of the latest and greatest Intel and AMD silicon, but in practice I don&#8217;t believe they do.<\/p>\n<p>And why should they ?<\/p>\n<p>As Jim himself points out in his response to some comments, if you need performance, managed frameworks would not be your first choice (an observation somewhat at odds with the position taken in his post itself).  He (or perhaps the comment he responded to &#8211; I don&#8217;t recall) isolates games as an example of where managed frameworks are not the best fit, but &#8220;game&#8221; is simple a very specific example of &#8220;demanding application&#8221;, not the ONLY example.<\/p>\n<p>The real point is that not all applications <strong>need<\/strong> that best performance and that there is therefore a trade-off to be struck with productivity and <strong>that<\/strong> is the true advantage of frameworks in general, but again, not an exclusive advantage of <strong>managed<\/strong> frameworks.<\/p>\n<p>Delphi&#8217;s biggest selling point is the VCL and the way that it makes developing native code Windows applications massively productive <strong>compared to other native code development tools<\/strong>.<\/p>\n<p>With FireMonkey you still get the native code but you lose the competitive edge against the other native code tool set for the platform(s) it targets because you are no longer comparing like with like.  Those other native code tools produce truly native applications.<\/p>\n<p>Delphi with FireMonkey delivers native <strong>code<\/strong>, but not native <strong>applications<\/strong>.<\/p>\n<p>I should also stress that this distinction is not confined to the UI toolkits but the wider native capabilities of the platforms, much of which &#8211; in the case of OS X \/ iOS are difficult if not impossible to access.<\/p>\n<p>Which is why I am currently teaching myself Xcode, Objective-C and Cocoa, for it is increasingly obvious to me that <strong>that<\/strong> is easiest and most reliable path to creating native applications for OS X and iOS.<\/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\">3<\/span> <span class=\"rt-label rt-postfix\">minutes]<\/span><\/span> Marc Hoffman kindly took the time to respond to my previous post and prompted me to re-formulate and expand my observations on Jim McKeeths post (which never made it to the comments thread on the RO blog for reasons best known to The Cloud).<\/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":[148,135],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1TKYv-e4","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":868,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/868\/","url_meta":{"origin":872,"position":0},"title":"The Emperors New Native","date":"28 May 2012","format":false,"excerpt":"Perhaps this post should be sub-titled: Say a Lie Often Enough and You'll Start Believing it Yourself Apparently some product called ERPLY (yeah, me neither) now has a \"great new FireMonkey native UI\". \u00a0FireMonkey ? \u00a0Native UI ? \u00a0Unless there has been a radical rewrite of FireMonkey in XE3 and\u2026","rel":"","context":"In &quot;Delphi&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2137,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/2137\/","url_meta":{"origin":872,"position":1},"title":"A True Work of ART","date":"08 Nov 2013","format":false,"excerpt":"For the past two years Google have been working on something for Android that could herald a sea change on the platform. ART. Essentially, ART is a new runtime which incorporates AOT (Ahead Of Time) compilation, essentially taking JIT to the next level by compiling an application in full at\u2026","rel":"","context":"In &quot;Android&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1525,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/1525\/","url_meta":{"origin":872,"position":2},"title":"RAD Studio in Auckland \/ Android in a VM \/ Touchy Feely","date":"30 Aug 2013","format":false,"excerpt":"Well, not really RAD Studio as such, more like Mobile Studio (whether as part of RAD Studio Ent+ or the Mobile Add-On) since everything shown was oriented around the Android support and emphasising the fact that an application written for iOS can simply be recompiled and will run on Android.\u2026","rel":"","context":"In &quot;Delphi&quot;","img":{"alt_text":"Androidx86","src":"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/Androidx86-1024x608.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":895,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/895\/","url_meta":{"origin":872,"position":3},"title":"Using History to Make Sense of the Present","date":"21 Jun 2012","format":false,"excerpt":"In a recent post on interop in .NET framework, Jeroen Pluimers wrote \"I don\u2019t see COM as the first class citizen it was in the VB6 era.\" I always find it funny when the .NET camp start poo-pooing COM and dismissing it as yesterdays technology that some people just can't\u2026","rel":"","context":"In &quot;Delphi&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3019,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/3019\/","url_meta":{"origin":872,"position":4},"title":"What&#8217;s in a Name[space] ?","date":"29 Oct 2019","format":false,"excerpt":"A recap of unit aliases and how they relate to namespace prefixes as a prelude to a more interesting examination of Scope Elevation.","rel":"","context":"In &quot;Delphi&quot;","img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/niklaus-wirth-edit.jpg?fit=934%2C362&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":3024,"url":"https:\/\/www.deltics.co.nz\/blog\/posts\/3024\/","url_meta":{"origin":872,"position":5},"title":"Scope Elevation: Creating A &#8216;Pseudo-Namespace&#8217;","date":"31 Oct 2019","format":false,"excerpt":"In my previous post I talked about how \"namespaces\" in Delphi really don't exist for any practical purposes normally associated with the concept. Having become familiar with the concept in other languages I found I was missing them, so I devised a way to obtain some of the benefits, despite\u2026","rel":"","context":"In &quot;Delphi&quot;","img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.deltics.co.nz\/blog\/wp-content\/uploads\/niklaus-wirth-edit.jpg?fit=934%2C362&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts\/872"}],"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=872"}],"version-history":[{"count":3,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts\/872\/revisions"}],"predecessor-version":[{"id":875,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/posts\/872\/revisions\/875"}],"wp:attachment":[{"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/media?parent=872"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/categories?post=872"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.deltics.co.nz\/blog\/wp-json\/wp\/v2\/tags?post=872"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}